Gragas Posted December 29, 2018 · Report post Всем привет. Юзаю стандартный 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) итд Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Dagobert Posted January 5, 2019 · Report post Ого! Отозвался астерискер-модемщик! А то все шлюзы шлюзы. Можно наверное 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, чотбы в ней был нормализованый номер отправителя для сравнения и не пришлось городить в условии лишнего. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
lipunis Posted May 7, 2020 · Report post Если 999 это PJSIP экстеншен, будет работать? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
lipunis Posted May 7, 2020 (edited) · Report post Если 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 May 8, 2020 by lipunis Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
lipunis Posted May 8, 2020 (edited) · Report post 16 часов назад, lipunis сказал: exten => sms,n,MessageSend(sip:116,${MESSAGE(from)}) изменил на: exten => sms,n,MessageSend(pjsip:116,${MESSAGE(from)}), входящие заработали. ПОдскажите куда дальше копать, чтобы заработали исходящие? Edited May 8, 2020 by lipunis Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...