Текстовые сообщения SIP/SIMPLE в Asterisk

Во время очередной телефонизации очередного офиса я обратил внимание на то, что в выбранном нами софтфоне MicroSIP имеется некий встроенный «чат», который однако же не работает «из коробки».

image

Для пересылки сообщений эта программа использует метод SIP MESSAGE (RFC 3428), известный также как протокол SIMPLE.

В Asterisk его поддержка появилась в версии 10, но документация тут, как это часто бывает, сильно отстала от прогресса. Пришлось сначала долго искать по форумам различные варианты конфигурации, а потом методом проб и ошибок их испытывать.

В результате была выработана такая работающая конфигурация (верна для Asterisk 11.6.0).
В секцию [general] файла sip.conf (для владельцев систем на базе FreePBX — в файл sip_general_custom.conf) добавляются строки:

accept_outofcall_message = yes
outofcall_message_context = messages
auth_message_requests = no


А в dialplan (для FreePBX — в файл extensions_custom.conf) добавляется такой контекст:

[messages]
exten => _XXX,1,MessageSend(sip:${EXTEN},"${CALLERID(name)}"${MESSAGE(from)})


Количество X проставьте в соответствии с количеством цифр в ваших внутренних номерах.

Ура, всё работает!

image

можно посылать сообщения на аппаратные телефоны:

image

Ну а умельцы могут доработать диалплан для разных целей, например для посылки SMS или электронной почты. Содержимое сообщения находится в переменных ${MESSAGE(from)} ${MESSAGE(to)} и ${MESSAGE(body)}

Также есть смысл попробовать выставить auth_message_requests = yes — но тут могут возникнуть проблемы с совместимостью.

Также важно не спутать то, о чём идёт речь в статье, с настройкой textsupport — эта настройка в Asterisk отвечает за совсем другой протокол, ITU-T T.140 realtime text.
Share post

Similar posts

Comments 11

    0
    ${CALLERID(name)} получается всегда пустой.

    Смотрите в настройках EXTENSIONS, там какое то поле за это отвечает.

    Я по FreePBX не спец, но в голом asterisk если нужно подставить ${CALLERID(name)} то мы так подставляем:

    exten=>_X.,1,Set(CALLERID(name)=Vasya Pupkin)

    И все замечательно работает.

    А за статью спасибо. Как раз хотел подразобраться с текстовыми сообщениями. Очень вовремя.
      0
      Нужно было всего лишь прописать имя в настройках аккаунта в MicroSIP.
      0
      А на LinkSys-х такое работает? Какие вы успели посмотреть аппараты?
        0
        Это которые SPA и теперь уже Cisco называются?
        В спеках не указано, так что надо пробовать.
          0
          я их всё равно называю Linksys-ами, по сути только шильдик поменялся )
            +2
            Тогда уж правильнее звать их Sipura.
              0
              Они вродебы досихпор и сами себя так называют, если набрать ****
        0
        Почему «Уда» переведено, а «Пер» — нет?
          0
          Китайцы…
          0
          Мало ли кому пригодится. У меня Asterisk 11.16 + FreePBX 2.11, завелось так:
          # В sip.conf
          textsupport=yes

          # В sip_general_custom.conf
          accept_outofcall_message=yes
          outofcall_message_context=messages
          auth_message_requests=no

          # В extensions_custom.conf
          [messages]
          exten => _.,1,NoOp(SMS receiving dialplan invoked)
          exten => _.,n,NoOp(To ${MESSAGE(to)})
          exten => _.,n,NoOp(From ${MESSAGE(from)})
          exten => _.,n,NoOp(Body ${MESSAGE(body)})
          exten => _.,n,Set(ACTUALTO=${CUT(MESSAGE(to),@,1)})
          exten => _.,n,MessageSend(${ACTUALTO},${MESSAGE(from)})
          exten => _.,n,NoOp(Send status is ${MESSAGE_SEND_STATUS})
          exten => _.,n,GotoIf($["${MESSAGE_SEND_STATUS}" != «SUCCESS»]?sendfailedmsg)
          exten => _.,n,Hangup()
          ;
          ; Handle failed messaging
          exten => _.,n(sendfailedmsg),Set(MESSAGE(body)="[${STRFTIME(${EPOCH},,%d%m%Y-%H:%M:%S)}] Your message to ${EXTEN} has failed. Retry later.")
          exten => _.,n,Set(ME_1=${CUT(MESSAGE(from),<,2)})
          exten => _.,n,Set(ACTUALFROM=${CUT(ME_1,@,1)})
          exten => _.,n,MessageSend(${ACTUALFROM},ServiceCenter)
          exten => _.,n,Hangup()
          exten => _.,n,Hangup()
            0
            textsupport=yes вам точно не нужен, он отвечает за другое

          Only users with full accounts can post comments. Log in, please.