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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2013-01-11 13:12:04

  milyges - inż.

milyges
inż.
Skąd: Gorlice/Kraków
Zarejestrowany: 2006-04-09
Serwis

[SOLVED] Asterisk - Nie działa DTMF w IVR

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:

Kod:

    -- 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:

Kod:

[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 ;))

Offline

 

#2  2013-01-11 13:31:32

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: [SOLVED] Asterisk - Nie działa DTMF w IVR

Ja robiłem coś podobnego na Freeswitchu, z modułem gsmopen, nie musiałem używać asteriskowego chan_dongle. :D

We Freeswitchowym dialplanie:
       

Kod:

...
 <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)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#3  2013-01-16 22:06:44

  milyges - inż.

milyges
inż.
Skąd: Gorlice/Kraków
Zarejestrowany: 2006-04-09
Serwis

Re: [SOLVED] Asterisk - Nie działa DTMF w IVR

Ok, sam sobie odpowiem.

Kod:

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....

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)