Данный автодозвон работает по следующему алгоритму:

  1. Набираем на своем айпи-телефоне *20номертелефона
  2. Elastix автоматически сбрасывает
  3. Запускается сценарий формирования .call-файла во временной директории
  4. .call-файл копируется из временной директории в каталог обработки .call-файлов через 15 секунд (sleep 15)
  5. Идёт вызов необходимого абонента, чей номер телефона был указан после *20 до тех пор пока абонент не возьмет трубку (повторяется 10 раз — MaxRetries: 10)
  6. Если абонент взял трубку, то он слышит в трубке гудки, и звонок поступает вам на айпи-телефон, связывая вас с абонентом.

Для реализации этого алгоритма нужно отредактировать файл через встроенный в Elastix редактор файлов:PBX->Tools->Asterisk File Editor->Show Filter->пишем в поле поиска extensions_custom.conf и нажимаем кнопку «Фильтр». Затем переходим к редактированию файла.

В конце контекста [from-internal-custom] нужно добавить следующий код:

; *20<номер> автодозваниваемся на <номер>
exten => _*20X.,1,Macro(autodial,${EXTEN:3},${CALLERID(number)})
exten => _*20X.,2,Hangup()

и в конец самого файла extensions_custom.conf добавляем код:

[macro-autodial]
;проверим длину внутреннего номера (у меня 4), на всякий случай
exten => s,1,ExecIf($["${ARG1:0:1}" = "*" | ${LEN(${ARG2})} != 4 ],Hangup)
;формируем .call-файл во временной директории
exten => s,n,System(echo "Channel: Local/${ARG1}@from-internal" > /tmp/${ARG2}${UNIQUEID}.call)
;количество повторений звонка
exten => s,n,System(echo "MaxRetries: 10" >> /tmp/${ARG2}${UNIQUEID}.call)
;время, через которое будет произведен повтор звонка
exten => s,n,System(echo "RetryTime: 20" >> /tmp/${ARG2}${UNIQUEID}.call)
;время, которое будет производиться звонок
exten => s,n,System(echo "WaitTime: 40" >> /tmp/${ARG2}${UNIQUEID}.call)
;телефонный номер, на который будем дозваниваться
exten => s,n,System(echo -e "Callerid: \\x22CallBack ${ARG1}\\x22 \\x3C${ARG2}\\x3E" >> /tmp/${ARG2}${UNIQUEID}.call)
;звонить будем в контексте, который ниже
exten => s,n,System(echo "Context: autodial-internal" >> /tmp/${ARG2}${UNIQUEID}.call)
;куда будет возвращаться звонок, в переменной ваш extension
exten => s,n,System(echo "Extension: ${ARG2}" >> /tmp/${ARG2}${UNIQUEID}.call)
exten => s,n,System(echo "Priority: 1" >> /tmp/${ARG2}${UNIQUEID}.call)
;кладем .call-файл в директорию для обработки .call-файлов астериска
exten => s,n,System(sleep 15 && mv -f /tmp/${ARG2}${UNIQUEID}.call /var/spool/asterisk/outgoing/ &)
;говорим пользователю что-нибудь типа "Пожалуйста, ожидайте соединения", либо комментируем следующую строчку, чтобы абонент до которого дозваниваемся после поднятия трубки услышал, просто, гудок вызова (в это время Elastix будет соединять его с вами)
;exten => s,n,Playback(ozhidajte-soedinenija)

[autodial-internal]
;здесь XXXX это количество цифр в вашей внутренней нумерации - у меня 4.
exten => _XXXX,1,Dial(SIP/${EXTEN})
exten => _XXXX,2,Hangup()

нажимаем сохранить и reload asterisk.