Tamkovich.com: Телеком/VoIP блог
Телеком, ИТ и все все все
Asterisk и текстовые сообщения: JABBER_RECEIVE
Январь 21st, 2009 by sergee
Современные телекоммуникационные протоколы поддерживают не только передачу аудио данных – текстовыми сообщениями или видео звонками сегодня уже никого не удивить. Создатели протокола SIP вообще не стали привязываться к типу медиа данных передаваемых в установленном сеансе связи. Вот, например, цитата из RFC3261:
13.1 Overview
When a user agent client desires to initiate a session (for example,
audio, video, or a game), it formulates an INVITE request. The
INVITE request asks a server to establish a session.
То есть, протокол позволяет установить сеанс связи, а что будет передано в этом сеансе – видео, аудио или даже игры – забота UA. SIP не единственный протокол управляющий соединениями абстрактно от медиа данных, подобный уровень абстракции поддерживается и другими, например jabber/xmpp протоколом.
На сегодняшний день, Asterisk используется, в основном, для обработки и передачи аудио данных. Работа с текстовыми сообщениями, до недавнего времени, ограничивалась приложением SendText. Приложение SendText позволяет, используя ограниченный набор каналов, отправлять вызывающему абоненту текстовое сообщение. Приложения, которое бы принимало текст от вызывающего пользователя в диалплане – не существовало. Это очень сильно ограничивало сферу применения текстовых сообщений в Asterisk.
В ближайшем будущем, в Asterisk появится новая функция для диалплана – JABBER_RECEIVE. На данный момент, код этой функции находится в частной ветке Philippe Sultan и уже более месяца помечен в багтракере как ready for review/ready for testing, что говорит о его отлаженности. Синтаксис новой функции таков:
Set(VALUE=${JABBER_RECEIVE(xmpp-account,bob@jabber.org,30)})
В этом примере, функция диалплана будет ожидать 30 секунд (timeout) сообщения от пользователя someone@jabber.ru (jid) на аккаунт xmpp-account (account). Аккаунты настраиваются в файле jabber.conf. Параметры jid и account – обязательны. Параметр timeout – опционален, если он отсутствует, то используется таймаут по умолчанию – 20 секунд. Как следует из примера, ответ пользователя сохраняется в переменную диалплана с именем VALUE. Это открывает фантастические возможности по интерактивному управлению звонками / диалпланом. Пара примеров проиллюстрирует новые возможности лучше всяких слов.
context from-ext { 1234 => { Answer(); JabberSend(axmpp,bob@jabber.org,Call from $CALLERID(num) - choose an option to process the call); JabberSend(axmpp,bob@jabber.org,1 : forward to cellphone); JabberSend(axmpp,bob@jabber.org,2 : forward to work phone); JabberSend(axmpp,bob@jabber.org,Default action : forward to your voicemail); Set(OPTION=${JABBER_RECEIVE(axmpp,bob@jabber.org,20)}); switch (${OPTION}) { case 1: JabberSend(axmpp,bob@jabber.org,(Calling cellphone...); Dial(SIP/987654321); break; case 2: JabberSend(axmpp,bob@jabber.org,(Calling workphone...); Dial(SIP/${EXTEN}); break; default: Voicemail(${EXTEN}|u) } } }
В этом примере, при поступлении звонка на номер 1234 контекста from-ext, Asterisk запрашивает пользователя bob@jabber.org по протоколу xmpp, и, в зависимости от ответа, посылает звонок на мобильный телефон (1), посылает звонок на SIP аккаунт 1234 или переводит звонок в голосовую почту (по таймауту в 20 секунд).
context gtalk-in { s => { NoOp(Caller id : ${CALLERID(all)}); Answer(); SendText(Please enter the number you wish to call); Set(NEWEXTEN=${JABBER_RECEIVE(axmpp,${CALLERID(name)})}); SendText(Calling ${NEWEXTEN} ...); Dial(SIP/${NEWEXTEN); Hangup(); } }
Этот пример контекста для xmpp клиента умеющего работать с аудиоданными (например, gtalk). При звонке с такого клиента, CALLERID(name) устанавливается в JID вызывающего пользователя. В последствии вы можете использовать CALLERID(name) для отправки и приема сообщений с помощью JabberSend и JABBER_RECEIVE соответственно. Данный пример реализует DISA с помощью текстовых сообщений (отвечает на входящий звонок и спрашивает, какой номер набрать далее).
Как я уже писал – JABBER_RECEIVE открывает фантастические возможности по интеграции управления звонками с системами Интернет пейджеров. Текстовые сообщения давно стали важной частью коммуникаций. Полноценная обработка текстовых сообщений – это большой шаг вперед для Asterisk как для современной коммуникационной платформы.
