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

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
Sign in to follow this