Передаем номер звонящего при переадресации на мобильный с помощью СМС.


Что имеем:
Сервер с FreePBX Distro FreePBX 2.11.0.0beta2.5 (Астериск 1.8), модем Huawei E171, несколько подключенных городских линий, диалплан с переадресацией.

Для начала установим модем, переведем его в нужный режим, настроим программу для отправки СМС — Gnokii. Здесь и далее описываю действия для CentOS.

1. Обязательно ставим зависимости:

yum install usbutils libusb-devel tcl

2. Вставляем модем и смотрим, как он определился:

lsusb
Bus 002 Device 007: ID 12d1:14fe Huawei Technologies Co., Ltd.

Так в начале выглядит строка.

3. В моем дистрибутиве не было пакета для сборки программ из исходников. Ставим Development Tools.

yum groupinstall "Development Tools"

4. Качаем программу для переключения режимов модема. Пакеты usb-modeswitch usb-modeswitch-data берем отсюда.

5. Распаковываем оба архива и устанавливаем по-очереди:

tar xvjf ...
make install

6. Передергиваем модем и проверяем:

lsusb
Bus 002 Device 008: ID 12d1:1506 Huawei Technologies Co., Ltd. E398 LTE/UMTS/GSM Modem/Networkcard

Значит все ОК и модем будет определяться каждый раз как надо. Если строка та же, что и вначале, то идем сюда.

Команда dmesg покажет нам:

option 2-1.4:1.0: GSM modem (1-port) converter detected
usb 2-1.4: GSM modem (1-port) converter now attached to ttyUSB0
option 2-1.4:1.1: GSM modem (1-port) converter detected
usb 2-1.4: GSM modem (1-port) converter now attached to ttyUSB1
option 2-1.4:1.2: GSM modem (1-port) converter detected
usb 2-1.4: GSM modem (1-port) converter now attached to ttyUSB2

7. Устанавливаем репозитарий для EPEL CentOS вот так.

8. Устанавливаем gnokii

yum --enablerepo=epel install gnokii gnokii-smsd

9. Правим конфиг /etc/gnokiirc

[global]
port = /dev/ttyUSB0
model = AT
initlength = default
connection = serial
use_locking = no
serial_baudrate = 115200

10. Проверяем отправку СМС:

echo 'Bingo!' | gnokii --sendsms +79060000000

Теперь нужно разрешить пользователю asterisk запускать gnokii из диалплана. Так как установлена gnokii была под учеткой root, то пользователь asterisk не сможет ее запустить. Правим файл /etc/sudoers с помощью команды visudo (настоятельно рекомендуется использовать только visudo для правки файла sudoers):

добавим строку для пользователя asterisk:

asterisk ALL=NOPASSWD:/usr/bin/gnokii 

Сохраняем файл и выходим.

Далее нам нужно внедрить в наш диалплан команду System() для отправки CID в СМС. FreePBX, конечно, не даст нам править extensions.conf и extensions_additional.conf, так как он сам их все время перезаписывает. Но можно вставлять свои правки в план с помощью файла extensions_override_freepbx.conf, что мы и сделаем. Можно просто найти в файле extensions_additional.conf нужный контекст, скопировать его фрагмент в extensions_override_freepbx.conf и внести свои изменения. У меня есть внутренний номер 203 который переадресуется на номер мобильника по SIP/trunk/номер_телефона. Эту часть диалплана мы и будем править:

[ext-local]
exten => 203,1,Set(__RINGTIMER=${IF($[${DB(AMPUSER/203/ringtimer)} > 0]?${DB(AMPUSER/203/ringtimer)}:${RINGTIMER_DEFAULT})})
exten => 203,n,System(echo '8${CALLERID(num)}' | sudo gnokii --sendsms +79061234567) ; отправка номера
exten => 203,n,Macro(exten-vm,novm,203,0,0,0)
exten => 203,n(dest),Set(__PICKUPMARK=)
exten => 203,n,Goto(${IVR_CONTEXT},return,1)
exten => 203,hint,SIP/10000/778899
exten => Narva778899,1,Goto(from-internal,203,1)

Теперь при звонке или переадресации на 203 будет отправляться СМС с номером звонившего, взятая из переменной CALLERID(num) прямо на мобильный телефон.