Данный автодозвон работает по следующему алгоритму:
- Набираем на своем айпи-телефоне *20номертелефона
- Elastix автоматически сбрасывает
- Запускается сценарий формирования .call-файла во временной директории
- .call-файл копируется из временной директории в каталог обработки .call-файлов через 15 секунд (sleep 15)
- Идёт вызов необходимого абонента, чей номер телефона был указан после *20 до тех пор пока абонент не возьмет трубку (повторяется 10 раз — MaxRetries: 10)
- Если абонент взял трубку, то он слышит в трубке гудки, и звонок поступает вам на айпи-телефон, связывая вас с абонентом.
Для реализации этого алгоритма нужно отредактировать файл через встроенный в 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.