; this is chunks of Asterisk extensions.conf file for show some chan_dongle features [general] [dongle-incoming] ; example of ussd receive exten => ussd,1,Set(type=${USSD_TYPE}) ; values from 0 till 5 ; 0 - 'USSD Notify' ; 1 - 'USSD Request' ; 2 - 'USSD Terminated by network' ; 3 - 'Other local client has responded' ; 4 - 'Operation not supported' ; 5 - 'Network time out' exten => ussd,n,Set(typestr=${USSD_TYPE_STR}) ; type in string, see above exten => ussd,n,Set(ussd=${USSD}) ; USSD text, but may be truncated by first \n exten => ussd,n,Set(ussd_multiline=${BASE64_DECODE(${USSD_BASE64})}) ; USSD text, may be multiline ; Note: this exten run in Local channel not attached to anything, also all CALLERID() is empty exten => ussd,n,Hangup ; example of sms receive exten => sms,1,Set(sms=${SMS}) ; SMS text, but may be truncated by first \n exten => sms,n,Set(sms_multiline=${BASE64_DECODE(${SMS_BASE64})}) ; SMS text, may be multiline exten => sms,n,Set(raw_cmgr_message=${CMGR}) ; raw CMGR message from dongle ; Note: this exten run in Local channel not attached to anything, also CALLERID(num) is address of SMS originator exten => sms,n,Hangup ; example of begining context execution from not default exten exten => +12345678901,1,Verbose(This exten executed if Subscriber Number is available and equal +12345678901 or exten setting value is +12345678901) exten => +12345678901,n,Hangup ; example of channel variables setting by chan_dongle exten => s,1,Set(NAME_OF_DEVICE=${DONGLE0_STATUS}) ; for example 'dongle0' or 'dongle1' see dongle.conf exten => s,n,Set(NAME_OF_PROVIDE=${DONGLEPROVIDER}) ; for example see output of cli 'dongle show devices' column "Provider Name" exten => s,n,Set(IMEI_OF_DEVICE=${DONGLEIMEI}) ; for example see output of cli 'dongle show devices' column "IMEI" exten => s,n,Set(IMSI_OF_SIMCARD=${DONGLEIMSI}) ; for example see output of cli 'dongle show devices' column "IMSI" exten => s,n,Set(SUBSCRIBER_NUMBER=${DONGLENUMBER}) ; Subscriber Number example see output of cli 'dongle show devices' column "Number" ; may be empty, use for save in SIM commands AT+CPBS="ON" and AT+CPBW=1,"+123456789",145 exten => s,n,Set(CNUM_NUMBER=${CALLERID(dnid)}) ; Set to Subscriber Number if available ; applications of chan_dongle exten => s,n,DongleStatus(dongle0,DONGLE0_STATUS) exten => s,n,DongleStatus(g1,DONGLE1_STATUS) exten => s,n,DongleStatus(r1,DONGLE2_STATUS) exten => s,n,DongleStatus(p:PROVIDER NAME,DONGLE3_STATUS) exten => s,n,DongleStatus(i:123456789012345,DONGLE4_STATUS) exten => s,n,DongleStatus(s:25099,DONGLE5_STATUS) ; for first argument see Dial() Resource part of dial string ; get status of device and store result in variable ; possible values of ${DONGLE0_STATUS} ; -1 invalid argument ; 1 device not found ; 2 device connected and free ; 3 device connected and in use exten => s,n,DongleSendSMS(dongle0,+18004005422,"Hello how are you, Danila?",1440,yes,"SomeMagicMessageID") ; send SMS on selected device and to specified number ; device name of Dongle device ; destination number in International format with leading '+' or w/o leading '+' ; message maximum 70 UCS-2 symbols ; validity period in minutes, will be round up to nearest possible value, optional default is 3 days ; report request if true report for this SMS is required, optional default is not ; functions of chan_dongle exten => s,n,GotoIf($["${CHANNEL(callstate)}" = "waiting"]?waiting-call) ; now we provide channel function argument callstate ; possible values ; active ; enjoy and speek ; held ; this call is held ; dialing ; for outgoing calls ; alerting ; for outgoing calls, number dialed and called party ringing ; incoming ; for incoming calls ; waiting ; for incoming waiting calls; ; if callwaiting=no channels for waiting calls never created ; initialize ; never appear ; released ; never appear ; Answer on waiting call activate this call and place any other active calls ; on hold, but execution of dialplan for these calls not break stopped or frozen ; When active call terminated one of held becomes active. exten => s,n,Set(CHANNEL(callstate)=active) ; if callstate is 'held' you can assign new value 'active' ; its mean activate this call and place on hold all other active calls but ; execution of dialplan for these calls not break stopped or frozen exten => s,n,GotoIf($["${CHANNEL(dtmf)}" != "off"]?turn_off_dtmf) ; you can read actual value of DTMF detection settings ; possible values ; off ; DTMF detection is off ; inband ; detect DTMF inband ; relax ; detect DTMF inband with relax option as defined in main asterisk docs exten => s,n,Set(CHANNEL(dtmf)=off) ; example usage of assign to channel local DTMF settings ; this not overwrite global config file settings and apply only for this channel exten => s,n,Dial(Dongle/dongle0/+79139131234) exten => s,n,Dial(Dongle/g1/+79139131234) exten => s,n,Dial(Dongle/r1/879139131234) exten => s,n,Dial(Dongle/p:PROVIDER NAME/+79139131234) exten => s,n,Dial(Dongle/i:123456789012345/+79139131234) exten => s,n,Dial(Dongle/s:25099/+79139131234) ; make outgoing call ; name on device with this name ; g1 on first free device in group 1 ; r1 round robin devices in group 1 ; p: with first free device with Operator name beggining with name ; i: with device exactly matched IMEI ; s: with first free device with IMSI prefix exten => s,n,Dial(Dongle/g1/holdother:+79139131234) exten => s,n,Dial(Dongle/r1/holdother:+79139131234) exten => s,n,Dial(Dongle/p:PROVIDER NAME/holdother:+79139131234) exten => s,n,Dial(Dongle/i:123456789012345/holdother:+79139131234) exten => s,n,Dial(Dongle/s:25099/holdother:+79139131234) ; now we add option 'holdother' for dialing ; this option do ; 1) When looking for available devices by group, provider IMEI, ; IMSI prefix not ignore devices with whose state does not ; prohibit a new outgoing call when other call place on hold ; ; 2) Before actual dialing place active calls on hold ; but execution of dialplan for these calls not break stopped or frozen ; 3) This call will be active if succesfully answered ; BUG !!! ; tested for call waiting and hold features Huawei E1550 has a next bug: ; When local side hangup any call including held call ALL other calls LOST sound ; When remove side hangup active call ALL other calls LOST sound ; Please double check true this for you or not ; If true reduce usage of this useful features exten => s,n,Dial(Dongle/g1/conference:+79139131234) exten => s,n,Dial(Dongle/r1/conference:+79139131234) exten => s,n,Dial(Dongle/p:PROVIDER NAME/conference:+79139131234) exten => s,n,Dial(Dongle/i:123456789012345/conference:+79139131234) exten => s,n,Dial(Dongle/s:25099/conference:+79139131234) ; and also option 'conference' added ; this option do ; 1) When looking for available devices by group, provider IMEI, ; IMSI prefix not ignore devices with whose state does not ; prohibit a new outgoing call when other call place on hold ; ; 2) Before actual dialing place active calls on hold ; but execution of dialplan for these calls not break stopped or frozen ; 3) If answered attach hold calls to conrefence (in term of GSM) ; Also if created outgoing channel place call on same device that incoming channel ; both incoming and outgoing channels become readonly to avoid the voice loop. ; ; see also BUG !!! note above exten => s,n,Hangup