Перейти к содержимому
Калькуляторы

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)
 
итд

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Можно наверное 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, чотбы в ней был нормализованый номер отправителя для сравнения и не пришлось городить в условии лишнего.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если 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!

 

Изменено пользователем lipunis

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

16 часов назад, lipunis сказал:

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

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

Изменено пользователем lipunis

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.