Pull to refresh

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

Reading time 3 min
Views 39K


Здравствуйте уважаемые хабровчане и любители решений на основе Asterisk. В этой статье хочу поделиться опытом решения интересной задачи. Требовалось сделать так, чтобы при переадресации звонков с одного мобильного/городского номера на другой мобильный мы видели номер звонящего, а не наш городской номер. Но дело в том, что операторы связи не дадут нам так просто подставлять свои номера при звонке через их сети (И правда, это был бы настоящий бардак). Но решить проблему можно передачей его через СМС сообщение через GSM-модем.


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

Для начала установим модем, переведем его в нужный режим. Важно перевести модем в режим «только модем»:
HUAWEII http://huawei.mobzon.ru/instruktsii/25-instruktsiya-po-nastrojke-modem
ZTE http://www.yccy.ru/category/raznoe/346.html

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

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

yum install usbutils libusb1-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


Можно скачать пакетом: http://rpm.pbone.net/index.php3/stat/4/idpl/27788385/dir/redhat_el_6/com/gnokii-0.6.30-2.el6.i686.rpm.html
и зависимость http://rpm.pbone.net/index.php3/stat/4/idpl/16859934/dir/redhat_el_6/com/libpcsclite1-1.4.0-9.el6.i686.rpm.html

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) прямо на мобильный телефон.

В следующей статье хочу рассказать о настройке связки Asterisk и SugarCRM для отображения номера звонящего на экране монитора оператора CRM, для последующего заноса в базу клиентов. (готово)

Pls, подкиньте кармы если кому-то пригодилась статья.
Tags:
Hubs:
+17
Comments 17
Comments Comments 17

Articles