Звонок с помощью SMS в Asterisk

30.09.2015 - 19:15

Все просто, отправляем SMS на укр. номер с телом: номер телефона, в результате получаем обратный звонок от сервера и ждем когда он нас соединит с номером в SMS. Для чего это нужно спросите Вы? Отвечаю.. вы оказались в поле где есть только GSM связь, а позвонить нужно за рубеж через свой сервер телефонии. А как же набор с помощью DTMF? Да dtmf тоже работает, но не всегда корректно.

Убедитесь, что у Вас загружен модуль pbx_spool.so, он необходим для работы с .call файлами.

Синтаксис .call файлов:

Определяем куда и как нужно совершить вызов
Channel: : Канал, который будет использоваться для исходящего вызова.
CallerID: Name CallerID, please note that it may not work if you do not respect the format: CallerID: Some Name <1234>
MaxRetries: Количество попыток перед тем, как вызов будет считаться неудачным (не включая первую попытку, т.е. 0 = означает совершить 1 попытку вызова). Значение по умолчанию: 0.
RetryTime: Количество секунд между попытками вызова, не стоит очень часто ломиться на недоступный телефон. Значение по умолчанию: 300 (5 минут)
WaitTime: Количество секунд для ожидания ответа на вызов. Значение по умолчанию: 45.
Account: Установка поля “account code”для записи в CDR.
Если первый участник вызова ответил, то далее описываем с кем и как его соединить
Context: Контекст в файле extensions.conf.
Extension: Название екстеншена в extensions.conf..
Priority:
Номер приоритета для екстеншена, с которого нужно начать выполнение.
Set: Установка переменных канала для использования их в логике обработки вызова на заданный екстеншен (например: file1=/tmp/to ).
Application: Имя приложения Asterisk, которое необходимо выполнить (используется вместо параметров context, extension и priority).
Data: Параметры для запускаемого приложения.
AlwaysDelete: Yes/No – Если время модификации .call файла больше текущего, то этот файл не будет удален.
Archive: Yes/No – Переносить или нет .call файл в поддиректорию "outgoing_done" с установленным значением поля "Status: значение", где значение может быть: Completed, Expired или Failed.

Пример .call который мы генерируем:

Channel: Dongle/Kyivstar1/<мой номер>
MaxRetries: 2
RetryTime: 60
WaitTime: 30
Context: for-house
Extension: <номер с SMS>
Priority: 1

Обрабатываем SMS только от определенных в списке номеров.

root@raspberrypi:/etc/asterisk# /etc/asterisk/extensions.conf
[ks-in]
exten => sms,1,NoOp(NUM_SOURCE: ${CALLERID(num)})
exten => sms,n,GotoIf($[$["${CALLERID(num)}" = "+38067..."] | $["${CALLERID(num)}" = "+38097..."] | $["${CALLERID(num)}" = "+38096..."]]?y:n)
exten => sms,n(y),Verbose(Incoming SMS from ${CALLERID(num)} ${SMS})
exten => sms,n,System(echo "Channel: Dongle/Kyivstar1/<мой номер>\nMaxRetries: 2\nRetryTime: 60\nWaitTime: 30\nContext: for-house\nExtension: ${SMS}\nPriority: 1" > /var/spool/asterisk/outgoing/to.call)
exten => sms,n,Hangup()
exten => sms,n(n),Hangup()

Ваша оценка: Нет Средняя: 3.6 (5 votes)