電訊茶室's Archiver

mcdull 發表於 2017-8-18 02:03

Chan_Dongle 收SMS亂碼

有兩種情況, 有一種直情整死個process, quit左, 連有SMS都唔知.
第二種係出怪碼, SMS forward去email會變成一個垃圾 noname attachment. 會知道收左個SMS但係內容唔知.
有冇解決方法呢?

用既係華為 E180.

mcdull 發表於 2017-8-24 18:19

[i=s] 本帖最後由 mcdull 於 2017-8-24 18:21 編輯 [/i]

留返第時recover 用.

dongle.conf

[dongle0]
;audio=/dev/            ; tty port for audio connection;        no default value
;data=/dev/             ; tty port for AT commands;             no default value
imei=XXXXXXXXXXXXXX

[dongle1]
;audio=/dev/           ; tty port for audio connection;        no default value
;data=/dev/             ; tty port for AT commands;             no default value
imei=XXXXXXXXXXXXXX

[dongle2]
;audio=/dev/           ; tty port for audio connection;        no default value
;data=/dev/             ; tty port for AT commands;             no default value
imei=XXXXXXXXXXXXXX

extensions_custom.conf

[from-pstn-custom]
include => dongle-incoming-sms
include => dongle-incoming-ussd

[dongle-incoming-sms]
exten => sms,1,Noop(Incoming SMS from ${CALLERID(num)} ${BASE64_DECODE(${SMS_BASE64})})
exten => sms,2,System(echo "Subject: SMS received from ${CALLERID(num)}" > /var/log/asterisk/smsmail${DONGLENAME})
exten => sms,3,System(echo " " >> /var/log/asterisk/smsmail${DONGLENAME})
exten => sms,4,System(echo '${STRFTIME(${EPOCH},Hongkong,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME}' >> /var/log/asterisk/smsmail${DONGLENAME})
exten => sms,5,System(echo " " >> /var/log/asterisk/smsmail${DONGLENAME})
exten => sms,6,System(echo "${BASE64_DECODE(${SMS_BASE64})}" >> /var/log/asterisk/smsmail${DONGLENAME})
exten => sms,7,System(cat /var/log/asterisk/smsmail${DONGLENAME} | tr -d '\r' | mailx -s "SMS Recevied from ${CALLERID(num)} by ${DONGLENUMBER} " -r "fromemail@gmail.com" -S smtp="XXX.XXX.XXX.XXX" [email]toemail@gmail.com[/email])
exten => sms,n,System(echo '${STRFTIME(${EPOCH},Hongkong,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${CALLERID(num)} - ${CALLERID(dnid)}: ${BASE64_DECODE(${SMS_BASE64})}  /////  ${CMGR}' >> /var/log/asterisk/sms${DONGLENAME}.txt)
exten => sms,n,Hangup()

[dongle-incoming-ussd]
exten => ussd,1,Noop(Incoming USSD: ${BASE64_DECODE(${USSD_BASE64})})
exten => ussd,n,System(echo '${STRFTIME(${EPOCH},Hongkong,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME}: ${BASE64_DECODE(${USSD_BASE64})}' >> /var/log/asterisk/ussd${DONGLENAME}.txt)
exten => ussd,n,System(cat /var/log/asterisk/ussd${DONGLENAME}.txt | tr -d '\r' | mailx -s "USSD Recevied from ${CALLERID(num)} by ${CALLERID(dnid)}" -r "fromemail@gmail.com" -S smtp="xxx.xxx.xxx.xxx" [email]toemail@gmail.com[/email])
exten => ussd,n,Hangup()

mcdull 發表於 2017-8-24 22:04

Known issue.

Cannot identify concated messages.  It will generate multiple emails in random orders.
Please let me know on how I can fix it. Thanks.

mcdull 發表於 2017-8-25 09:18

The most current development of chan_dongle.
[url]https://github.com/wdoekes/asterisk-chan-dongle/issues/40[/url]

mcdull 發表於 2017-9-9 19:58

update:

all " should be replaced by '

mcdull 發表於 2017-9-11 01:32

if your sim has an unknown number, you can store it with the following command.

dongle cmd dongle0 AT+CPBS=\"ON\"
dongle cmd dongle0 AT+CPBW=1,\"+556191000000\",145

mcdull 發表於 2017-9-13 16:28

有冇人知道點樣可以將幾個SMS 砌返埋一齊?
分析CMGR係可以知佢係咪split左, 但係 CMGR好似唔係fixed length.

mcdull 發表於 2017-9-26 18:27

[code][from-pstn-custom]
include => dongle-incoming-sms
include => dongle-incoming-ussd

[dongle-incoming-sms]
exten => sms,1,Noop(Incoming SMS from ${CALLERID(num)} ${BASE64_DECODE(${SMS_BASE64})})
exten => sms,2,System(echo '${BASE64_DECODE(${SMS_BASE64})}' >> /var/log/asterisk/smscontent${DONGLENAME})
exten => sms,3,System(echo '${STRFTIME(${EPOCH},Hongkong,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${CALLERID(num)} - ${CALLERID(dnid)}: ${BASE64_DECODE(${SMS_BASE64})}  /////  ${CMGR}' >> /var/log/asterisk/sms${DONGLENAME}.txt)
exten => sms,4,System(echo "INSERT INTO sms (DONGLENAME,CALLERID,EPOCH,SMS_BASE64,DONGLENUMBER,CMGR) values ('${DONGLENAME}','${CALLERID(num)}','${STRFTIME(${EPOCH},Hongkong,%Y-%m-%d %H:%M:%S)}','${BASE64_DECODE(${SMS_BASE64})}','${DONGLENUMBER}','${CMGR}')\;" > /var/log/asterisk/smssql${DONGLENAME}.txt)
exten => sms,5,System(mysql -uuser -ppassword -h192.168.0.1 -P3307 smslog < /var/log/asterisk/smssql${DONGLENAME}.txt)
exten => sms,6,Set(channelID=${CHANNEL:-10:8})
exten => sms,7,System(echo '${CMGR}' > /var/log/asterisk/smsCMGRraw${DONGLENAME}_${channelID})
exten => sms,8,System(awk '{if ( NR == "2" ) print}' /var/log/asterisk/smsCMGRraw${DONGLENAME}_${channelID} | tee -a /var/log/asterisk/smsPDUraw${DONGLENAME}_${channelID})
exten => sms,9,NoOp(cmdstr = /usr/bin/python /etc/asterisk/pdudecode.py $(cat /var/log/asterisk/smsPDUraw${DONGLENAME}_${channelID})))
exten => sms,10,Set(completeSMS=${SHELL(/usr/bin/python /etc/asterisk/pdudecode.py $(cat /var/log/asterisk/smsPDUraw${DONGLENAME}_${channelID}))})
exten => sms,n,NoOp(result is ${completeSMS})
exten => sms,n,Set(completeSMS=${completeSMS:0:1})
;exten => sms,9,Set(completeSMS=${SYSTEMSTATUS})
;exten => sms,n,System(echo ${completeSMS})
exten => sms,n,System(rm -f /var/log/asterisk/smsPDUraw${DONGLENAME}_${channelID})
exten => sms,n,System(rm -f /var/log/asterisk/smsCMGRraw${DONGLENAME}_${channelID})
exten => sms,n,ExecIf($[ ${completeSMS}!=1 ]?wait(10))
exten => sms,n,ExecIf($[ ${completeSMS}!=1 ]?System(echo 'Subject: SMS received from ${CALLERID(num)}' > /var/log/asterisk/smsmail${DONGLENAME})
exten => sms,n,ExecIf($[ ${completeSMS}!=1 ]?System(echo ' ' >> /var/log/asterisk/smsmail${DONGLENAME})
exten => sms,n,ExecIf($[ ${completeSMS}!=1 ]?System(echo '${STRFTIME(${EPOCH},Hongkong,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME}' >> /var/log/asterisk/smsmail${DONGLENAME})
exten => sms,n,ExecIf($[ ${completeSMS}!=1 ]?System(echo ' ' >> /var/log/asterisk/smsmail${DONGLENAME})
exten => sms,n,ExecIf($[ ${completeSMS}!=1 ]?System(cat '/var/log/asterisk/smscontent${DONGLENAME}' >> /var/log/asterisk/smsmail${DONGLENAME})
exten => sms,n,ExecIf($[ ${completeSMS}!=1 ]?System(cat '/var/log/asterisk/smsmail${DONGLENAME}' | tr -d '\r' | mailx -s 'SMS Recevied from ${CALLERID(num)} by ${DONGLENUMBER} ' -r 'xxxxx@myemail.com' -S smtp='192.168.0.1' xxxxx@gmail.com)
exten => sms,n,ExecIf($[ ${completeSMS}!=1 ]?System(rm -f /var/log/asterisk/smscontent${DONGLENAME})
exten => sms,n,ExecIf($[ ${completeSMS}!=1 ]?System(echo 'I am DONE' >> /var/log/asterisk/test${DONGLENAME})
exten => sms,n,ExecIf($[ ${completeSMS}!=1 ]?System(echo '${STRFTIME(${EPOCH},Hongkong,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${completeSMS}' >> /var/log/asterisk/test${DONGLENAME})
exten => sms,n,System(asterisk -rx 'dongle cmd ${DONGLENAME} AT+CMGD=1,4')
exten => sms,n,Hangup()
[/code]

mcdull 發表於 2017-9-26 18:29

經幾星期發癲, 暫時做到我想佢做既野... asterisk dialplan function 好鬼煩, 尤其係啲 variable.

ttmuskie 發表於 2017-9-26 19:51

[code]
exten => sms,10,Set(completeSMS=${SHELL(/usr/bin/python /etc/asterisk/pdudecode.py $(cat /var/log/asterisk/smsPDUraw${DONGLENAME}_${channelID}))})
[/code]What is the logic behind in your python to check if all SMS received?

mcdull 發表於 2017-9-26 21:35

[quote]What is the logic behind in your python to check if all SMS received?
[size=2][color=#999999]ttmuskie 發表於 2017-9-26 19:51[/color] [url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&pid=43791&ptid=7036][img]http://www.telecom-cafe.com/forum/images/common/back.gif[/img][/url][/size][/quote]


the python will return 0 if the SMS is single or the last part of the concat message.
and 1 if the SMS is incomplete.. yet.

Originally I intended to use exit code but I cannot capture the return result properly. So I changed it to use the print out.

ttmuskie 發表於 2017-9-26 22:22

How to check if that's a single SMS or last part of the concat msg?

mcdull 發表於 2017-9-27 10:00

That was the tricky part.  I initially want to decode the pdu just for the concat msg information.  And it was found too complicated and I had to decode much variation of UDH. A lot of tools were available online only. And local library will NOT decode concat message correctly.  So I have to make reference to [url]http://smspdu.benjaminerhart.com/[/url]
I have much hesitation to post my sms online as it may contain verification from online banking, so I pulled the javascript (source provided in the site).  With the same reason, I given up to port the javascript to python, so I have to set up a webserver (luckily I already got my own) and use beautifulsoup to capture the output for return.

mcdull 發表於 2017-9-27 10:25

[code]
#!/usr/bin/env python
#coding:utf-8
import sys
import unittest2
from selenium import webdriver
from bs4 import BeautifulSoup

driver = webdriver.PhantomJS()
pdu = str(sys.argv[1])
concatpart = '1'
concattotal = '1'
url = 'http://xxx.xxx.xxx.xxx/jsPduDecoder-master/index.html?pdu='
driver.get(url+pdu)
soup = BeautifulSoup(driver.page_source, 'html.parser')
udhs = soup.findAll('td', text = 'User Data Header')
for i in udhs:
    if i.next_sibling.get_text().find('Concatenated message') != -1:
        s = i.next_sibling.get_text()
        concatpart = s[s.find("part")+5:s.find("part")+6]
        concattotal = s[s.find("parts")-2:s.find("parts")-1]
        if concatpart == concattotal:
            print '0 Message Completed'
            sys.exit(0)
        else:
            print '1 Message Incomplete. ' + s
            sys.exit(1)
print '0 Single Message'
sys.exit(0)
[/code]I will use only the first return character as specified in the dialplan rule.

mcdull 發表於 2017-9-27 10:42

These should work with multiple dongles.  I have 5 installed currently but it is not stable.  I guess the hub cannot power 5 dongles so I removed one and left 4.

ttmuskie 發表於 2017-9-27 11:13

wow... you are amazing.

mcdull 發表於 2017-9-27 14:23

I am now still facing some issues.
If different message part come together, the python may finish in different time in reserve order and the sms will be displayed and sent in wrong order, and may receive multiple email or incomplete message email.

mcdull 發表於 2017-9-27 16:46

This is the bug results....

券(可兑换等额 “沃尔玛、京东、天猫、唯品会、百果园”等30多家电子消费券),充值本金分5/5/10/10个月到账。办理步骤:1、微信
关注“广东联通”公众号—服务—话费充值相应金额;2、请按短信提示拨打10010135按3登记参与活动,电子券于3个工作日内下发;3、通
【红包任性派、惊喜享不停】即日起至10月8日期间,单笔充值100/200/300/500元送50/100/150/250元“红包”电子
过“广东联通”微信公众号—发现—电子券红包,查询并兑换电子券。多充多送,叠加生效,重复参与需重复登记,申请成功后不可取消。【深圳联通】

mcdull 發表於 2017-9-27 18:09

[i=s] 本帖最後由 mcdull 於 2017-10-5 18:36 編輯 [/i]

I have revised my work to potentially fix the problem.[code]
#!/usr/bin/env python
#coding:utf-8
import sys
import signal

from selenium import webdriver
from bs4 import BeautifulSoup

driver = webdriver.PhantomJS()
pdu = str(sys.argv[1])
concatpart = '1'
concattotal = '1'
url = 'http://192.168.100.253/pdudecode/jsPduDecoder-master/index.html?pdu='
driver.get(url+pdu)
soup = BeautifulSoup(driver.page_source, 'html.parser')
udhs = soup.findAll('td', text = 'User Data Header')
for i in udhs:
#    print i.get_text()
    if i.next_sibling.get_text().find('Concatenated message') != -1:
        s = i.next_sibling.get_text()
#        print s
        concatpart = s[s.find("part")+5:s.find("part")+6]
        concattotal = s[s.find("parts")-2:s.find("parts")-1]
#        print concatpart
#        print concattotal
        if concatpart == concattotal:
            print concatpart + ',' + concattotal + ' Message Completed'
            driver.service.process.send_signal(signal.SIGKILL)
            driver.quit()
            sys.exit()
        else:
            print concatpart + ',' + concattotal + ' Message Incomplete. ' + s
            driver.service.process.send_signal(signal.SIGKILL)
            driver.quit()
            sys.exit()
print '1,1 Single Message'
driver.service.process.send_signal(signal.SIGKILL)
driver.quit()
sys.exit()
[/code]

mcdull 發表於 2017-9-27 18:16

[i=s] 本帖最後由 mcdull 於 2017-9-27 18:37 編輯 [/i]

[code][from-pstn-custom]
include => dongle-incoming-sms
include => dongle-incoming-ussd

[dongle-incoming-sms]
exten => sms,1,Noop(Incoming SMS from ${CALLERID(num)} ${BASE64_DECODE(${SMS_BASE64})})
exten => sms,3,System(echo '${STRFTIME(${EPOCH},Hongkong,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${CALLERID(num)} - ${CALLERID(dnid)}: ${BASE64_DECODE(${SMS_BASE64})}  /////  ${CMGR}' >> /var/log/asterisk/sms${DONGLENAME}.txt)
exten => sms,4,System(echo "INSERT INTO sms (DONGLENAME,CALLERID,EPOCH,SMS_BASE64,DONGLENUMBER,CMGR) values ('${DONGLENAME}','${CALLERID(num)}','${STRFTIME(${EPOCH},Hongkong,%Y-%m-%d %H:%M:%S)}','${BASE64_DECODE(${SMS_BASE64})}','${DONGLENUMBER}','${CMGR}')\;" > /var/log/asterisk/smssql${DONGLENAME}.txt)
exten => sms,5,System(mysql -uxxxxx -pxxxxx -hxxx.xxx.xxx.xxx -P3307 smslog < /var/log/asterisk/smssql${DONGLENAME}.txt)
exten => sms,6,Set(channelID=${CHANNEL:-10:8})
exten => sms,7,System(echo '${CMGR}' > /var/log/asterisk/smsCMGRraw${DONGLENAME}_${channelID})
exten => sms,8,System(awk '{if ( NR == "2" ) print}' /var/log/asterisk/smsCMGRraw${DONGLENAME}_${channelID} | tee -a /var/log/asterisk/smsPDUraw${DONGLENAME}_${channelID})
exten => sms,9,NoOp(cmdstr = /usr/bin/python /etc/asterisk/pdudecode.py $(cat /var/log/asterisk/smsPDUraw${DONGLENAME}_${channelID})))
exten => sms,n,Set(completeSMS=${SHELL(/usr/bin/python /etc/asterisk/pdudecode.py $(cat /var/log/asterisk/smsPDUraw${DONGLENAME}_${channelID}))})
exten => sms,n,NoOp(result is ${completeSMS})
exten => sms,n,Set(completeSMS=${completeSMS:0:3})
exten => sms,n,Set(smsTotal=${completeSMS:-1:1})
exten => sms,n,Set(smsPart=${completeSMS:0:1})
exten => sms,NoOp(Total ${smsTotal}  Part ${smsPart})
exten => sms,n,System(echo '${BASE64_DECODE(${SMS_BASE64})}' > /var/log/asterisk/smscontent${DONGLENAME}_${smsPart})
exten => sms,n,System(rm -f /var/log/asterisk/smsPDUraw${DONGLENAME}_${channelID})
exten => sms,n,System(rm -f /var/log/asterisk/smsCMGRraw${DONGLENAME}_${channelID})
exten => sms,n,ExecIf($[ ${smsTotal}=${smsPart} ]?wait(1))
exten => sms,n,ExecIf($[ ${smsTotal}=${smsPart} ]?System(echo 'Subject: SMS received from ${CALLERID(num)}' > /var/log/asterisk/smsmail${DONGLENAME})
exten => sms,n,ExecIf($[ ${smsTotal}=${smsPart} ]?System(echo ' ' >> /var/log/asterisk/smsmail${DONGLENAME})
exten => sms,n,ExecIf($[ ${smsTotal}=${smsPart} ]?System(echo '${STRFTIME(${EPOCH},Hongkong,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME}' >> /var/log/asterisk/smsmail${DONGLENAME})
exten => sms,n,ExecIf($[ ${smsTotal}=${smsPart} ]?System(echo ' ' >> /var/log/asterisk/smsmail${DONGLENAME})
exten => sms,n,Set(i=1)
exten => sms,n,While($[${i} <= ${smsTotal}])
exten => sms,n,NoOp(Loop ${i})
exten => sms,n,ExecIf($[ ${smsTotal}=${smsPart} ]?System(cat '/var/log/asterisk/smscontent${DONGLENAME}_${i}' >> /var/log/asterisk/smsmail${DONGLENAME})
exten => sms,n,ExecIf($[ ${SHELL(test -f /etc/asterisk/asterisk.conf && echo -n 1 || echo -n 0)}=1 ]?Set(i=$[${i} + 1]))
exten => sms,n,ExecIf($[ ${SHELL(test -f /etc/asterisk/asterisk.conf && echo -n 1 || echo -n 0)}=0 ]?wait(2))
exten => sms,n,EndWhile
exten => sms,n,ExecIf($[ ${smsTotal}=${smsPart} ]?System(cat '/var/log/asterisk/smsmail${DONGLENAME}' | tr -d '\r' | mailx -s 'SMS Recevied from ${CALLERID(num)} by ${DONGLENUMBER} ' -r 'xxx@xxx.com' -S smtp='xxx.xxx.xxx.xxx' xxx@xxx.com)
exten => sms,n,ExecIf($[ ${smsTotal}=${smsPart} ]?System(rm -f /var/log/asterisk/smscontent${DONGLENAME})
exten => sms,n,ExecIf($[ ${smsTotal}=${smsPart} ]?System(echo 'I am DONE' >> /var/log/asterisk/test${DONGLENAME})
exten => sms,n,ExecIf($[ ${smsTotal}=${smsPart} ]?System(echo '${STRFTIME(${EPOCH},Hongkong,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${completeSMS}' >> /var/log/asterisk/test${DONGLENAME})
exten => sms,n,System(asterisk -rx 'dongle cmd ${DONGLENAME} AT+CMGD=1,4')
exten => sms,n,Hangup()


[dongle-incoming-ussd]
exten => ussd,1,Noop(Incoming USSD: ${BASE64_DECODE(${USSD_BASE64})})
exten => ussd,n,System(echo '${STRFTIME(${EPOCH},Hongkong,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME}: ${BASE64_DECODE(${USSD_BASE64})}' > /var/log/asterisk/ussd${DONGLENAME}.txt)
exten => ussd,n,System(cat '/var/log/asterisk/ussd${DONGLENAME}.txt' | tr -d '\r' | mailx -s 'USSD Recevied from ${CALLERID(num)} by ${DONGLENUMBER}' -r 'xxx@xxx.xxx' -S smtp='xxx.xxx.xxx.xxx' xxx@xxx.com)
exten => ussd,n,Hangup()
[/code]

mcdull 發表於 2017-9-27 21:24

[i=s] 本帖最後由 mcdull 於 2017-9-27 22:41 編輯 [/i]

Some stupid copy&paste issue in the code above..... dont use....

fixed with code below.. it should now be properly formatted.[code][from-pstn-custom]
include => dongle-incoming-sms
include => dongle-incoming-ussd

[dongle-incoming-sms]
exten => sms,1,Noop(Incoming SMS from ${CALLERID(num)} ${BASE64_DECODE(${SMS_BASE64})})
exten => sms,3,System(echo '${STRFTIME(${EPOCH},Hongkong,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${CALLERID(num)} - ${CALLERID(dnid)}: ${BASE64_DECODE(${SMS_BASE64})}  /////  ${CMGR}' >> /var/log/asterisk/sms${DONGLENAME}.txt)
exten => sms,4,System(echo "INSERT INTO sms (DONGLENAME,CALLERID,EPOCH,SMS_BASE64,DONGLENUMBER,CMGR) values ('${DONGLENAME}','${CALLERID(num)}','${STRFTIME(${EPOCH},Hongkong,%Y-%m-%d %H:%M:%S)}','${BASE64_DECODE(${SMS_BASE64})}','${DONGLENUMBER}','${CMGR}')\;" > /var/log/asterisk/smssql${DONGLENAME}.txt)
exten => sms,5,System(mysql -uxxx -pxxx -hxxx.xxx.xxx.xxx -P3307 smslog < /var/log/asterisk/smssql${DONGLENAME}.txt)
exten => sms,6,Set(channelID=${CHANNEL:-10:8})
exten => sms,7,System(echo '${CMGR}' > /var/log/asterisk/smsCMGRraw${DONGLENAME}_${channelID})
exten => sms,8,System(awk '{if ( NR == "2" ) print}' /var/log/asterisk/smsCMGRraw${DONGLENAME}_${channelID} | tee -a /var/log/asterisk/smsPDUraw${DONGLENAME}_${channelID})
exten => sms,9,NoOp(cmdstr = /usr/bin/python /etc/asterisk/pdudecode.py $(cat /var/log/asterisk/smsPDUraw${DONGLENAME}_${channelID})))
exten => sms,n,Set(completeSMS=${SHELL(/usr/bin/python /etc/asterisk/pdudecode.py $(cat /var/log/asterisk/smsPDUraw${DONGLENAME}_${channelID}))})
exten => sms,n,NoOp(result is ${completeSMS})
exten => sms,n,Set(completeSMS=${completeSMS:0:3})
exten => sms,n,Set(smsTotal=${completeSMS:-1:1})
exten => sms,n,Set(smsPart=${completeSMS:0:1})
exten => sms,NoOp(Total ${smsTotal}  Part ${smsPart})
exten => sms,n,System(echo '${BASE64_DECODE(${SMS_BASE64})}' > /var/log/asterisk/smscontent${DONGLENAME}_${smsPart})
exten => sms,n,System(rm -f /var/log/asterisk/smsPDUraw${DONGLENAME}_${channelID})
exten => sms,n,System(rm -f /var/log/asterisk/smsCMGRraw${DONGLENAME}_${channelID})
exten => sms,n,ExecIf($[ ${smsTotal}!=${smsPart} ]?Hangup())
;exten => sms,n,ExecIf($[ ${smsTotal}=${smsPart} ]?wait(1))
exten => sms,n,ExecIf($[ ${smsTotal}=${smsPart} ]?System(echo 'Subject: SMS received from ${CALLERID(num)}' > /var/log/asterisk/smsmail${DONGLENAME})
exten => sms,n,ExecIf($[ ${smsTotal}=${smsPart} ]?System(echo ' ' >> /var/log/asterisk/smsmail${DONGLENAME})
exten => sms,n,ExecIf($[ ${smsTotal}=${smsPart} ]?System(echo '${STRFTIME(${EPOCH},Hongkong,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME}' >> /var/log/asterisk/smsmail${DONGLENAME})
exten => sms,n,ExecIf($[ ${smsTotal}=${smsPart} ]?System(echo ' ' >> /var/log/asterisk/smsmail${DONGLENAME})
exten => sms,n,Set(i=1)
exten => sms,n,Set(errorCount=0)
exten => sms,n,While($[${i} <= ${smsTotal}])
exten => sms,n,NoOp(Loop ${i})
exten => sms,n,Set(fileExist=0)
exten => sms,n,ExecIf($[ ${SHELL(test -f /var/log/asterisk/smscontent${DONGLENAME}_${i} && echo -n 1 || echo -n 0)}=1 ]?Set(fileExist=1))
exten => sms,n,ExecIf($[ ${fileExist}=1 ]?System(head -c -1 -q '/var/log/asterisk/smscontent${DONGLENAME}_${i}' >> /var/log/asterisk/smsmail${DONGLENAME})
exten => sms,n,ExecIf($[ ${fileExist}=1 ]?Set(i=$[${i} + 1]))
exten => sms,n,ExecIf($[ ${fileExist}=0 ]?wait(2))
exten => sms,n,ExecIf($[ ${fileExist}=0 ]?Set(errorCount=$[${errorCount} + 1]))
exten => sms,n,ExecIf($[ ${errorCount} > 5 ]?Set(i=$[${smsTotal} + 1]))
exten => sms,n,EndWhile
exten => sms,n,ExecIf($[ ${smsTotal}=${smsPart} ]?System(cat '/var/log/asterisk/smsmail${DONGLENAME}' | tr -d '\r' | mailx -s 'SMS Recevied from ${CALLERID(num)} by ${DONGLENUMBER} ' -r 'xxx@xxx.com' -S smtp='xxx.xxx.xxx.xxx' xxx@xxx.com)
exten => sms,n,ExecIf($[ ${smsTotal}=${smsPart} ]?System(rm -f /var/log/asterisk/smscontent${DONGLENAME})
exten => sms,n,ExecIf($[ ${smsTotal}=${smsPart} ]?System(echo 'I am DONE' >> /var/log/asterisk/test${DONGLENAME})
exten => sms,n,ExecIf($[ ${smsTotal}=${smsPart} ]?System(echo '${STRFTIME(${EPOCH},Hongkong,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${completeSMS}' >> /var/log/asterisk/test${DONGLENAME})
exten => sms,n,System(asterisk -rx 'dongle cmd ${DONGLENAME} AT+CMGD=1,4')
exten => sms,n,Hangup()


[dongle-incoming-ussd]
exten => ussd,1,Noop(Incoming USSD: ${BASE64_DECODE(${USSD_BASE64})})
exten => ussd,n,System(echo '${STRFTIME(${EPOCH},Hongkong,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME}: ${BASE64_DECODE(${USSD_BASE64})}' > /var/log/asterisk/ussd${DONGLENAME}.txt)
exten => ussd,n,System(cat '/var/log/asterisk/ussd${DONGLENAME}.txt' | tr -d '\r' | mailx -s 'USSD Recevied from ${CALLERID(num)} by ${DONGLENUMBER}' -r 'xxx@xxx.xxx' -S smtp='xxx.xxx.xxx.xxx' xxx@xxx.com)
exten => ussd,n,Hangup()
[/code]

mcdull 發表於 2017-10-4 15:51

[i=s] 本帖最後由 mcdull 於 2017-10-5 18:37 編輯 [/i]

Hit a major issue in python.
when sys.exit after calling webdriver.PhantomJS(), it will not clean up the phantomJS child process.   If I add driver.quit(), the phantomJS will not be closed either and the dialplan will not continue.

After a few tens of SMS, the server will run out of memory.  No fix yet.  Damn this simple things coz hell of troubles.

temp fix by issuing SIGKILL

mcdull 發表於 2017-10-10 12:04

發現同時入兩個sms的話就會亂.. 所以再引入多一個message reference 既variable試fix..
但唔post出來啦... 太亂... lol.

頁: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.