Мобильный телефон как GSM шлюз для Asterisk + chan_mobile

Asterisk + chan_mobileМоя задача — подключить мобильный телефон как GSM шлюз к Asterisk с помощью chan_mobile. В случае, если я буду недоступен по мобильному, люди смогут оставить мне сообщение на голосовую почту. SMS сообщения доставляются в мой почтовый ящик в виде писем, а мои ответы отсылаются в виде SMS.
Я использовал мой старый телефон Sony Ericsson k530i в связке с  Asterisk подключившись через bluetooth адаптер ID 1131:1001 Integrated System Solution Corp. KY-BT100 Bluetooth Adapter.

Asterisk поддерживает подключения телефонов и гарнитур по bluetooth посредством модуля chan_mobile. Не все модели телефонов поддерживаются, я рекомендую проверить вашу модель на  voip-info.org. В моём случае bluetooth адаптер KY-BT100 и телефоны Sony Ericsson k530i и Samsung Galaxy S4 работали прекрасно.

Как подключить мобильный телефон к Asterisk через chan_mobile читаем далее…

Подключаем мобильный телефон к Asterisk по bluetooth через chan_mobile

chan_mobile — это дополнение и его необходимо включить до компиляции Asterisk. Для Debian:

после этого, перейдите в папку с исходниками Asterisk и выполните make menuselect . Включите дополнение в Add-ons -> chan_mobile:

Несмотря на то что модуль успешно скомпилировался и установился, мне потребовалось внести небольшое изменение в исходный код chan_mobile, прежде чем он распознал мой телефон:

Теперь можно скомпилировать и установить chan_mobile и  Asterisk:

Чтобы использовать подлючённый по bluetooth телефон как GSM шлюз, необходимо создать bluetooth пару с сервером Asterisk. В Debian мы можем сделать это из командной строки. Сделайте телефон доступным для обнаружения и затем запустите его поиск:

MAC понадобиться на следующих шагах. Для создания пары потребуется PIN код. Запустите следующую команду в фоновом режиме для начала процесса создания пары:

После успешного завершения процесса создания пары убедитесь, что телефон настроен на автоматический приём запросов подключения. Проверить это можно следующей командой:

Теперь необходимо настроить Asterisk на работу с подключенным телефоном. Необходимо знать какой rfcomm канал предоставляет голосовой канал. Самый простой способ — использовать chan_mobile:

Не волнуйтесь по поводу возможных сообщений об ошибках. Выполните:

В нашем случае это rfcomm канал 2.кроме этого, нам нужно знать MAC адрес bluetooth адаптера, подключенного к серверу Asterisk. Выйдите из консоли Asterisk и используйте hcitool:

Теперь у нас есть вся необходимая информация. В файле chan_mobile.conf (создайте его, если его нет):

Пример директив номерного плана для входящих/исходящих звонков:

Когда на телефон поступит входящий звонок, он будет переадресован на SIP номер 100. Набор комбинации *12  запустит набор последовательности 5433 (абонентская поддержка lifecell). Я уверен, вы поняли идею.

Отсылаем SMS через Asterisk и chan_mobile

Если верить официальной the chan_mobile wiki page, только 3 модели поддерживают SMS:  Nokia моделей E51, 6021 и 6230i.

Если телефон находитсяв связке с вервером, он будет доставлять SMS на сервер Asterisk через bluetooth соединение. Asterisk ищет ‘sms’ номер в контексте, указанном в chan_mobile.conf. Вариант номерного плана для обработки входящих SMS:

В предыдущих версиях существовал баг, из-за которого переменная ${SMSSRC} была пуста. Необходим был патч и рекомпиляция:

В последней версии chan_mobile это уже исправлено!

Теперь входящие сообщения доставляются на мою почту от адресата +MOBILENUMBER@itgala.xyz. Конечно, на сервере Asterisk должен быть работающий МТА, например postfix.

Для исходящих SMS необходимо распарсить тело письма. Питон уже содержит необходимую библиотеку для этого.

Сохраните код выше в файл /usr/sbin/email2sms.py и сделайте его выполняемым:

Скрипт использует Asterisk Manager Interface, поэтому необходимо добавить AMI пользователя. Добавьте в  manager.conf:

и проверьте, что AMI включен:

В питон-скрипте используется контекст ‘mobiles’. Добавьте в  extensions.conf:

Также нам необходим контекст-«заглушка» для приложения originate:

Перезапустите Asterisk для применения изменений.

Таким образом, вызов скрипта email2sms.py с аргументом ‘itg’ запустит использоваине мобильного телефона k530i.

Необходимо убедиться что почта для домена, в моём случае sms.itgala.xyz — направляется на сервер Asterisk. Для этого обычно нужно создать MX запись или транспорт на вашем почтовом сервере. Это выходит за рамки статьи, здесь я лишь покажу как направить сообщения в питон-скрипт.

Предположим, вы используете postfix:

указываем, что необходимо использовать эти транспорты для SMS домена:

Если настройки transport_maps нет, создайте её:

Перезвпустите postfix.

В случае, если что-то не работает отследить события можно через лог:

Также можно провести перехват пакетов на Asterisk Manager Interface:

Попробуйте отправить пакет напрямую в AMI:

Будьте внимательны с пробелами, номер ‘itg’ != ‘itg ‘.

Удачи!