как настроить обмен мгновенными сообщениями астериск

Поддерживает ли asterisk мгновенные сообщения? Я попытался настроить звездочку для обмена мгновенными сообщениями (из этого примера), но когда я пытаюсь отправить мгновенные сообщения на другой sip-аккаунт, asterisk возвращает предупреждение:

WARNING[20128]: chan_sip.c:16379 receive_message: Received message to sip:[email protected] from sip:[email protected]; tag=d9fdcc28313946c5a2a6ae1eae997c62, dropped it... Content-Type:text/plain Message: hahaha Дополнительно SIP-клиент возвращает сообщение "метод не разрешен". Это мой файл sip.conf:

[general]
context=internal
allowguest=no
allowoverlap=no
bindport=5060
bindaddr=0.0.0.0
srvlookup=no
disallow=all
allow=ulaw
alwaysauthreject=yes
canreinvite=no
nat=yes
session-timers=refuse
localnet=192.168.21.153/255.255.255.0
accept_outofcall_message=yes
outofcall_message_context=internal

[test1]
type=friend
host=dynamic
secret=test1
context=internal

[test2]
type=friend
host=dynamic
secret=test2
context=internal

[test3]
type=friend
host=dynamic
secret=test3
context=internal

А это мой файл extensions.conf:

[internal]
exten => test1,1,Answer()
exten => test1,2,Dial(SIP/test1,60)
exten => test1,3,Playback(vm-nobodyavail)
exten => test1,4,VoiceMail(test1@main)
exten => test1,5,Hangup()

exten => test2,1,Answer()
exten => test2,2,Dial(SIP/test2,60)
exten => test2,3,Playback(vm-nobodyavail)
exten => test2,4,VoiceMail(test2@main)
exten => test2,5,Hangup()

exten => test3,1,Answer()
exten => test3,2,Dial(SIP/test3,60)
exten => test3,3,Playback(vm-nobodyavail)
exten => test3,4,VoiceMail(test3@main)
exten => test3,5,Hangup()

exten => 8001,1,VoicemailMain(test1@main)
exten => 8001,2,Hangup()

exten => 8002,1,VoicemailMain(test2@main)
exten => 8002,2,Hangup()

exten => 8003,1,VoicemailMain(test3@main)
exten => 8003,2,Hangup()

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() 
exten => h,1,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 => h,1,Hangup() 

person Dr Glass    schedule 16.04.2014    source источник


Ответы (2)


Да. Asterisk поддерживает мгновенные сообщения. Пожалуйста, используйте Asterisk 11 или более позднюю версию. Я думаю, что вы используете старую версию. У меня была такая же проблема в звездочке-10. Я обновился с Asterisk до Asterisk-11. Пожалуйста, смотрите ниже Подробную инструкцию для Asterisk IM.

Напишите строку ниже в общем разделе файла sip.conf.

[general]

accept_outofcall_message=yes 
outofcall_message_context=dialplan_name
auth_message_requests=yes

Напишите ниже строки в extensions.conf файле. Это диалплан для отправки мгновенных сообщений.

[dialplan_name]
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,AGI(chatplan.php,${MESSAGE(from)})
;exten => _.,n,Set(ACTUALTO=${CUT(MESSAGE(to),@,1)})
;exten => _.,n,ExecIf($["${ACTUALTO}" != "sip:${EXTEN}"]?Set(ACTUALTO=sip:${EXTEN}))
exten => _.,n,MessageSend(${ACTUALTOS},${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),NoOp(Sending error to user)
exten => _.,n,Set(SRC=${MESSAGE(from)})
exten => _.,n,Set(DST=${MESSAGE(to)})
exten => _.,n,Set(MSG=${MESSAGE(body)}) 
exten => _.,n,Set(MESSAGE(body)="[${STRFTIME(${EPOCH},,%d%m%Y-%H:%M:%S)}] Your message to ${EXTEN} has failed. Sending when available")
exten => _.,n,Set(ME_1=${CUT(MESSAGE(from),<,2)})
exten => _.,n,Set(ACTUALFROM=${CUT(ME_1,@,1)})
exten => _.,n,MessageSend(${ACTUALFROM},ServiceCenter)
exten => _.,n,GotoIf($["${INQUEUE}" != "1"]?startq)
exten => _.,n,Hangup()
;
exten => _.,n(startq),NoOp(Queueing messaging for offline)
exten => _.,n,Set(MSGTIME=${STRFTIME(${EPOCH},,%d%m%Y-%H:%M:%S)})
exten => _.,n,SYSTEM(/var/lib/asterisk/agi-bin/astqueue.sh –SRC ‘${SRC}’ –DST ‘${DST}’ –MSG ‘${MSG}’)
exten => _.,n,Hangup()[app-fakeanswer]
exten => _.,1,NoCDR
exten => _.,n,Set(DESTDEV=${EXTEN})
exten => _.,n,Set(THISDEVSTATE=${DEVICE_STATE(SIP/${DESTDEV})})
exten => _.,n,GotoIf($["${THISDEVSTATE}" = "UNAVAILABLE"]?hang)
exten => _.,n,GotoIf($["${THISDEVSTATE}" = "UNKNOWN"]?hang)
exten => _.,n,Answer
exten => _.,n,Hangup()
exten => _.,n(hang),Hangup()

Добавьте вышеуказанные строки в ваши уважаемые файлы. Используйте Asterisk-11 для обмена мгновенными сообщениями. У меня была такая же проблема в более старой версии звездочки. Надеюсь, вы используете Asterisk-11.

person kaushik parmar    schedule 16.04.2014
comment
@kaushik parmar, не могли бы вы сказать нам, где мы можем получить файл chatplan.php? Или вы можете поделиться им, если это ваш личный код? Спасибо! - person longwalker; 08.03.2016
comment
Опечатка в объявлении переменной в ${ACTUALTOS} на самом деле ${ACTUALTO} - person Azhar Nawaz; 14.02.2019

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

Unable to create channel of type 'SIP' (cause 58 - Bearer capability not available)

Но если устройства способны обмениваться сообщениями, вы получите одобрение. Лучший способ проверить это сначала сделать на том же устройстве, что вы можете отправлять и получать сообщения самому себе. Как только вы получите сообщение на том же мобильном устройстве, вы узнаете, что оно работает, по крайней мере, в вашем устройстве, а затем вы можете протестировать его в другом устройстве, используя то же приложение или программу. После того, как вы этого добьетесь, вам нужно попробовать другое приложение или программу и устройство, а затем отладить, если оно не работает.

[MENSAGEIRO]

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,AGI(chatplan.php,${MESSAGE(from)})
exten => _.,n,Set(ACTUALTO=${CUT(MESSAGE(to),@,1)})
exten => _.,n,ExecIf($["${ACTUALTO}" != "sip:${EXTEN}"]?Set(ACTUALTO=sip:${EXTEN}))
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),NoOp(Sending error to user)
exten => _.,n,Set(SRC=${MESSAGE(from)})
exten => _.,n,Set(DST=${MESSAGE(to)})
exten => _.,n,Set(MSG=${MESSAGE(body)})
exten => _.,n,Set(MESSAGE(body)="[${STRFTIME(${EPOCH},,%d%m%Y-%H:%M:%S)}] Sua mensagem para ${EXTEN} falhou. Destinatário não está on-line")
exten => _.,n,Set(ME_1=${CUT(MESSAGE(from),<,2)})
exten => _.,n,Set(ACTUALFROM=${CUT(ME_1,@,1)})
exten => _.,n,MessageSend(${ACTUALFROM},ServiceCenter)
;exten => _.,n,GotoIf($["${INQUEUE}" != "1"]?startq)
exten => _.,n,Hangup()

Вам нужно добавить эти строки в файл extensions.conf и указать ссылку в файле sip.conf или user.conf, используя этот контекст. вызвал MENSAGEIRO в папке /etc/asterisk.

Вы заметите в CLI, как только увидите, что сообщение успешно прошло здесь.

 NoOp("Message/ast_msg_queue", "Send status is SUCCESS") in new stack

Кредиты

person Luis H Cabrejo    schedule 20.02.2020
comment
Просто для безопасного кодирования здесь официальный пример и инструкции с рабочим образцом кода. Asterisk cmd MessageSend ... Обратите внимание В Asterisk 11.1.0 есть ошибка в SIPPEER(ip), которая показывает только первые два октета IP-адреса voip-info.org/asterisk-cmd-messagesend - person Luis H Cabrejo; 12.03.2020