Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam,
Próbuję wdrożyć w firmie budżetowego VoIPa. Linie PSTN realizowane są przez modemy GSM z kartami SIM oraz moduł chan_dongle. Generalnie wszystko działa, ale... no właśnie ale....
Nie mogę dojść do ładu z wybieraniem numeru wewnętrznego. Fragment logu asteriska po połączeniu:
-- Executing [+48XXXXXXXXX@from-dongle:1] NoOp("Dongle/linia0-0100000001", "Catch-All DID Match - Found +48XXXXXXXXX- You probably want a DID for this.") in new stack -- Executing [+48XXXXXXXXX@from-dongle:2] Goto("Dongle/linia0-0100000001", "ext-did,s,1") in new stack -- Goto (ext-did,s,1) -- Executing [s@ext-did:1] ExecIf("Dongle/linia0-0100000001", "1?Set(__FROM_DID=s)") in new stack -- Executing [s@ext-did:2] Gosub("Dongle/linia0-0100000001", "app-blacklist-check,s,1()") in new stack -- Executing [s@app-blacklist-check:1] GotoIf("Dongle/linia0-0100000001", "0?blacklisted") in new stack -- Executing [s@app-blacklist-check:2] Set("Dongle/linia0-0100000001", "CALLED_BLACKLIST=1") in new stack -- Executing [s@app-blacklist-check:3] Return("Dongle/linia0-0100000001", "") in new stack -- Executing [s@ext-did:3] Set("Dongle/linia0-0100000001", "CDR(did)=s") in new stack -- Executing [s@ext-did:4] ExecIf("Dongle/linia0-0100000001", "0 ?Set(CALLERID(name)=+48XXXXXXXXX)") in new stack -- Executing [s@ext-did:5] Set("Dongle/linia0-0100000001", "__CALLINGPRES_SV=allowed_not_screened") in new stack -- Executing [s@ext-did:6] Set("Dongle/linia0-0100000001", "CALLERPRES()=allowed_not_screened") in new stack -- Executing [s@ext-did:7] Goto("Dongle/linia0-0100000001", "ivr-1,s,1") in new stack -- Goto (ivr-1,s,1) -- Executing [s@ivr-1:1] Set("Dongle/linia0-0100000001", "TIMEOUT_LOOPCOUNT=0") in new stack -- Executing [s@ivr-1:2] Set("Dongle/linia0-0100000001", "INVALID_LOOPCOUNT=0") in new stack -- Executing [s@ivr-1:3] Set("Dongle/linia0-0100000001", "_IVR_CONTEXT_ivr-1=") in new stack -- Executing [s@ivr-1:4] Set("Dongle/linia0-0100000001", "_IVR_CONTEXT=ivr-1") in new stack -- Executing [s@ivr-1:5] Set("Dongle/linia0-0100000001", "__IVR_RETVM=") in new stack -- Executing [s@ivr-1:6] GotoIf("Dongle/linia0-0100000001", "0?skip") in new stack -- Executing [s@ivr-1:7] Answer("Dongle/linia0-0100000001", "") in new stack -- Executing [s@ivr-1:8] Wait("Dongle/linia0-0100000001", "1") in new stack -- Executing [s@ivr-1:9] Set("Dongle/linia0-0100000001", "IVR_MSG=custom/ivr_glowny") in new stack -- Executing [s@ivr-1:10] Set("Dongle/linia0-0100000001", "TIMEOUT(digit)=3") in new stack -- Digit timeout set to 3.000 -- Executing [s@ivr-1:11] ExecIf("Dongle/linia0-0100000001", "1?Background(custom/ivr_glowny)") in new stack -- <Dongle/linia0-0100000001> Playing 'custom/ivr_glowny.slin' (language 'en') -- Executing [s@ivr-1:12] WaitExten("Dongle/linia0-0100000001", "10,") in new stack [2013-01-11 13:08:45] DTMF[4239]: channel.c:4139 __ast_read: DTMF begin '1' received on Dongle/linia0-0100000001 [2013-01-11 13:08:45] DTMF[4239]: channel.c:4143 __ast_read: DTMF begin ignored '1' on Dongle/linia0-0100000001 [2013-01-11 13:08:46] DTMF[4239]: channel.c:4139 __ast_read: DTMF begin '0' received on Dongle/linia0-0100000001 [2013-01-11 13:08:46] DTMF[4239]: channel.c:4143 __ast_read: DTMF begin ignored '0' on Dongle/linia0-0100000001 [2013-01-11 13:08:47] DTMF[4239]: channel.c:4139 __ast_read: DTMF begin '0' received on Dongle/linia0-0100000001 [2013-01-11 13:08:47] DTMF[4239]: channel.c:4143 __ast_read: DTMF begin ignored '0' on Dongle/linia0-0100000001 -- Timeout on Dongle/linia0-0100000001, going to 't' -- Executing [t@ivr-1:1] Set("Dongle/linia0-0100000001", "TIMEOUT_LOOPCOUNT=1") in new stack -- Executing [t@ivr-1:2] GotoIf("Dongle/linia0-0100000001", "0?final") in new stack -- Executing [t@ivr-1:3] Set("Dongle/linia0-0100000001", "IVR_MSG=no-valid-responce-pls-try-again&custom/ivr_glowny") in new stack -- Executing [t@ivr-1:4] Goto("Dongle/linia0-0100000001", "s,start") in new stack -- Goto (ivr-1,s,10) -- Executing [s@ivr-1:10] Set("Dongle/linia0-0100000001", "TIMEOUT(digit)=3") in new stack -- Digit timeout set to 3.000 -- Executing [s@ivr-1:11] ExecIf("Dongle/linia0-0100000001", "1?Background(no-valid-responce-pls-try-again&custom/ivr_glowny)") in new stack -- <Dongle/linia0-0100000001> Playing 'no-valid-responce-pls-try-again.slin' (language 'en') == Spawn extension (ivr-1, s, 11) exited non-zero on 'Dongle/linia0-0100000001' -- Executing [h@ivr-1:1] Hangup("Dongle/linia0-0100000001", "") in new stack == Spawn extension (ivr-1, h, 1) exited non-zero on 'Dongle/linia0-0100000001'
Jak widać próbowałem wybrać wewn. 100.
Konfiguracja chan_dongle:
[general] interval=5 ; Number of seconds between trying to connect to devices ;------------------------------ JITTER BUFFER CONFIGURATION -------------------------- ;jbenable = yes ; Enables the use of a jitterbuffer on the receiving side of a ; Dongle channel. Defaults to "no". An enabled jitterbuffer will ; be used only if the sending side can create and the receiving ; side can not accept jitter. The Dongle channel can't accept jitter, ; thus an enabled jitterbuffer on the receive Dongle side will always ; be used if the sending side can create jitter. ;jbforce = no ; Forces the use of a jitterbuffer on the receive side of a Dongle ; channel. Defaults to "no". ;jbmaxsize = 200 ; Max length of the jitterbuffer in milliseconds. ;jbresyncthreshold = 1000 ; Jump in the frame timestamps over which the jitterbuffer is ; resynchronized. Useful to improve the quality of the voice, with ; big jumps in/broken timestamps, usually sent from exotic devices ; and programs. Defaults to 1000. ;jbimpl = fixed ; Jitterbuffer implementation, used on the receiving side of a Dongle ; channel. Two implementations are currently available - "fixed" ; (with size always equals to jbmaxsize) and "adaptive" (with ; variable size, actually the new jb of IAX2). Defaults to fixed. ;jbtargetextra = 40 ; This option only affects the jb when 'jbimpl = adaptive' is set. ; The option represents the number of milliseconds by which the new jitter buffer ; will pad its size. the default is 40, so without modification, the new ; jitter buffer will set its size to the jitter value plus 40 milliseconds. ; increasing this value may help if your network normally has low jitter, ; but occasionally has spikes. ;jblog = no ; Enables jitterbuffer frame logging. Defaults to "no". ;----------------------------------------------------------------------------------- [defaults] ; now you can set here any not required device settings as template ; sure you can overwrite in any [device] section this default values context=from-dongle ; context for incoming calls group=0 ; calling group rxgain=0 ; increase the incoming volume; may be negative txgain=0 ; increase the outgoint volume; may be negative autodeletesms=yes ; auto delete incoming sms resetdongle=yes ; reset dongle during initialization with ATZ command u2diag=-1 ; set ^U2DIAG parameter on device (0 = disable everything except modem function) ; -1 not use ^U2DIAG command usecallingpres=yes ; use the caller ID presentation or not callingpres=allowed_passed_screen ; set caller ID presentation by default use default network settings disablesms=no ; disable of SMS reading from device when received ; chan_dongle has currently a bug with SMS reception. When a SMS gets in during a ; call chan_dongle might crash. Enable this option to disable sms reception. ; default = no language=en ; set channel default language smsaspdu=yes ; if 'yes' send SMS in PDU mode, feature implementation incomplete and we strongly recommend say 'yes' mindtmfgap=45 ; minimal interval from end of previews DTMF from begining of next in ms mindtmfduration=80 ; minimal DTMF tone duration in ms mindtmfinterval=200 ; minimal interval between ends of DTMF of same digits in ms callwaiting=auto ; if 'yes' allow incoming calls waiting; by default use network settings ; if 'no' waiting calls just ignored disable=no ; OBSOLETED by initstate: if 'yes' no load this device and just ignore this section initstate=start ; specified initial state of device, must be one of 'stop' 'start' 'remote' ; 'remove' same as 'disable=yes' exten=+1234567890 ; exten for start incoming calls, only in case of Subscriber Number not available!, also set to CALLERID(ndid) dtmf=inband ; control of incoming DTMF detection, possible values: ; off - off DTMF tones detection, voice data passed to asterisk unaltered ; use this value for gateways or if not use DTMF for AVR or inside dialplan ; inband - do DTMF tones detection ; relax - like inband but with relaxdtmf option ; default is 'relax' by compatibility reason ; dongle required settings [linia0] audio=/dev/hw-audio-0 data=/dev/hw-data-0 [linia1] audio=/dev/hw-audio-1 data=/dev/hw-data-1 [linia2] audio=/dev/hw-audio-2 data=/dev/hw-data-2
Próbowałem eksperymentować z opcjami: mindtmfgap, mindtmfduration, mindtmfinterval ale nic mi to nie dało.
Macie jakieś pomysły (poza tym żeby nie korzystać z chan_dongle ;))
Online
Ja robiłem coś podobnego na Freeswitchu, z modułem gsmopen, nie musiałem używać asteriskowego chan_dongle. :D
We Freeswitchowym dialplanie:
... <extension name="mobilne"> <condition field="destination_number" expression="^(\+48?|0?|0048?|\+0?)?((5[0137]|6[069]|7[2389]|88)\d{7})$"> <action application="bridge" data="gsmopen/RR/$4"/> </condition> </extension> ...
Pozdrawiam
;-)
Ostatnio edytowany przez Jacekalex (2013-01-11 13:39:01)
Offline
Ok, sam sobie odpowiem.
mindtmfgap=0 mindtmfduration=0 mindtmfinterval=0
I po wstępnych testach wszystko jest OK. Nie mam pojęcia czemu jak dam tam normalne wartości (powyżej 0) nie działa....
Online