Jump to content
Калькуляторы

Asterisk chan_dongle E1750 sms to sip, sip to sms

Всем привет.

Юзаю стандартный 3g модем Huawei E1550/E1750. Это больше МАНУАЛ, но так же прошу помочь расширить функционал! 2 человека очень обрадовались когда я им скинул рабочий когфиг, решил поделиться миром!

И так, у меня стоит 13 Asterisk, FreePBX 13,Chan_dongle. Встала задача получать и отправлять смс прямо из сипфона.

Получалка и отправлялка смс через Chan_dongle в Sip клиент.

Работает в Zoiper, Microsip, PortGo. Больше не проверял... Когда смс приходит на донгл, ее перекидывает на сип сразу под номером с которого она пришла. Соответственно можно на нее ответить или написать новую.

999 это номер sip который может получать и слать SMS с модема.

dongle0 - имя модема с которого получать и слать смс если модемов много, то получать со всех, а отправлять только с одного (dongle0)

#нет отложенной отправки смс (если сип 999 в сети, смс получит, а если нет - то нет, нооооо в лог пишет при любом раскладе)

 

если используется FREEPBX - в админке:Settings>>>Asterisk SIP Settings, вкладка Chan SIP settings, внизу есть поля для заполнения (Other SIP Settings). А если чистый астериск, то пихать сюда /etc/asterisk/sip.conf

вот параметры:


accept_outofcall_message=yes
outofcall_message_context=messages
auth_message_requests=no
textsupport=yes

/etc/asterisk/extensions_custom.conf

[from-trunk-dongle]
exten => sms,1,Set(MESSAGE(body)=${BASE64_DECODE(${SMS_BASE64})})
exten => sms,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${CALLERID(num)}: ${BASE64_DECODE(${SMS_BASE64})})' >> /var/log/asterisk/sms.txt)
exten => sms,n,Set(MESSAGE(from)="${CALLERID(num)}" <${CALLERID(num)}>)
exten => sms,n,Set(CALLERID(name)=${CALLERID(num)})
exten => sms,n,Verbose(1,${MESSAGE(from)})
exten => sms,n,MessageSend(sip:999,${MESSAGE(from)})
exten => sms,n,Hangup()

exten => _.,1,Set(CALLERID(name)=${CALLERID(num)})
exten => _.,n,Goto(from-trunk,${DONGLEIMEI},1)

exten => ussd,1,Verbose(Incoming USSD: ${BASE64_DECODE(${USSD_BASE64})})
exten => ussd,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME}: ${BASE64_DECODE(${USSD_BASE64})}' >> /var/log/asterisk/ussd.txt)
exten => ussd,n,Hangup()

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

[send-sms]
exten => _.,1,NoOp(SMS send to dongle)
same => n,NoOp(To ${MESSAGE(to)})
same => n,NoOp(From ${MESSAGE(from)})
same => n,NoOp(Body ${MESSAGE(body)})
same => n,Set(SMSTO=${EXTEN})
same => n,DongleSendSMS(dongle0,${SMSTO},"${MESSAGE(body)}",1440,yes)
same => n,Hangup()

 

 

Вопрос, а что делать если модемов 5, юзеров 15 и только 5 из них должны отправлять смс с конкретного транка, а остальные должны общаться междус обой по [messages]?

 

Как сделать проверку в стиле:
 

if extension = 999 and numberTO-not(555,444,6666666,999999,777777,999999,77774,44,44444)goto [send-sms]

А в [send-sms] проверку:

if extension = 999 goto same => n,DongleSendSMS(dongle0,${SMSTO},"${MESSAGE(body)}",1440,yes)
elseif extension = 444 goto same => n,DongleSendSMS(dongle1,${SMSTO},"${MESSAGE(body)}",1440,yes)
 
итд

Share this post


Link to post
Share on other sites

Ого! Отозвался астерискер-модемщик! А то все шлюзы шлюзы.

Можно наверное AEL применить, но если в текущем варианте, то могу предложить что-то вроде этого

[send-sms]
exten => _.,1,NoOp(SMS send to dongle)
same => n,Set(SMSFROM=${MESSAGE(from)})
same => n,Set(SMSTO=${EXTEN})
same => n,GotoIf($["${SMSFROM})"="555"]?realsend)
same => n,NoOp(No SMS)
same =>,n,Hangup()

exten =>realsend,1,NoOp(Sending sms)
same => n,NoOp(To ${MESSAGE(to)})
same => n,NoOp(From ${MESSAGE(from)})
same => n,NoOp(Body ${MESSAGE(body)})
same => n,Set(SMSTO=${EXTEN})
same => n,DongleSendSMS(dongle0,${SMSTO},"${MESSAGE(body)}",1440,yes)
same => n,Hangup()

Ввел отдельую переменную SMSFROM, чотбы в ней был нормализованый номер отправителя для сравнения и не пришлось городить в условии лишнего.

Share this post


Link to post
Share on other sites

Если 999 это PJSIP экстеншен, будет работать?

Share this post


Link to post
Share on other sites

Если 999 это PJSIP экстеншен, будет работать?

как мне модифицировать мой конфиг?:

[from-gsm]
exten => s,1,Set(CALLERID(all)=${CALLERID(num)})
exten => s,n,Set(CALLERID(num)=${CALLERID(num)})
exten => s,n,goto(from-trunk,${DONGLEIMEI},1)
 
exten => sms,1,Verbose(Incoming SMS from ${CALLERID(num)} ${SMS})
exten => sms,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${CALLERID(num)}: ${SMS}' >> /var/log/asterisk/sms.txt)
exten => sms,n,Hangup()
 
exten => ussd,1,Verbose(Incoming USSD: ${USSD})
exten => ussd,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME}: ${USSD}' >> /var/log/asterisk/ussd.txt)
exten => ussd,n,Hangup()
 

 

сейчас сделал так:

 

[from-gsm]
exten => s,1,Set(CALLERID(all)=${CALLERID(num)})
exten => s,n,Set(CALLERID(num)=${CALLERID(num)})
exten => s,n,goto(from-trunk,${DONGLEIMEI},1)
 
exten => sms,1,Set(MESSAGE(body)=${BASE64_DECODE(${SMS_BASE64})})
exten => sms,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${CALLERID(num)}: ${BASE64_DECODE(${SMS_BASE64})})' >> /var/log/asterisk/sms.txt)
exten => sms,n,Set(MESSAGE(from)="${CALLERID(num)}" <${CALLERID(num)}>)
exten => sms,n,Set(CALLERID(name)=${CALLERID(num)})
exten => sms,n,Verbose(1,${MESSAGE(from)})
exten => sms,n,MessageSend(sip:116,${MESSAGE(from)})
exten => sms,n,Hangup()

 
exten => ussd,1,Verbose(Incoming USSD: ${USSD})
exten => ussd,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME}: ${USSD}' >> /var/log/asterisk/ussd.txt)
exten => ussd,n,Hangup()


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

[send-sms]
exten => s,1,NoOp(SMS send to dongle)
same => n,NoOp(To ${MESSAGE(to)})
same => n,NoOp(From ${MESSAGE(from)})
same => n,NoOp(Body ${MESSAGE(body)})
same => n,Set(SMSTO=${EXTEN})
same => n,DongleSendSMS(79287771111,${SMSTO},"${MESSAGE(body)}",1440,yes)
same => n,Hangup()

 и сыпет ошибки:

 

[2020-05-08 08:46:26] WARNING[9116][C-00000004]: chan_sip.c:6283 create_addr: Purely numeric hostname (116), and not a peer--rejectin
g!

 

Edited by lipunis

Share this post


Link to post
Share on other sites
16 часов назад, lipunis сказал:

exten => sms,n,MessageSend(sip:116,${MESSAGE(from)})

изменил на: exten => sms,n,MessageSend(pjsip:116,${MESSAGE(from)}), входящие заработали. ПОдскажите куда дальше копать, чтобы заработали исходящие?

Edited by lipunis

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now