Bug, Feature, or PEBKAC regarding the Directory mod

Asterisk 1.6.2.6
FreePBX 2.8.0.3
Phone Directory module 2.7.0.1

When someone dials “one” for the directory, the directory starts to spell the name the caller is looking for and gets multiple hits, the system prompts to finish the name or press # to list the choices. Well if you hit the # key and the users don’t have a name setup and the system starts to spell their name via txt to speech, well after spelling the names the digit time out (no option in the GUI and defaults to 3) automatically gets “zero” “directory.agi,dir=1: got result: 0” and then starts to repeat the spelling of the names again for the choices and keeps them in a loop! But if you interrupt the spelling of the name and press any number for the choices before the 3 second time out the call will route just fine.

I tried changing the digit time out in “extensions_additional.conf” which the Directory module is pulling the Digit time out from my IVR context. I set it to 10 seconds but what happens is that fixes the timeout issue in the directory, but when pressing 1 for the directory you also get 10 seconds of dead air before the directory module starts. Which is not good. Here is the IVR context that freepbx produces.

Any help would be great,

Cheers,
E

[ivr-2]
include => ivr-2-custom
include => from-did-direct-ivr
exten => h,1,Hangup
exten => s,1,Set(MSG=custom/main-ivr)
exten => s,n,Set(LOOPCOUNT=0)
exten => s,n,Set(__DIR-CONTEXT=)
exten => s,n,Set(IVR_CONTEXT${CONTEXT}=${IVR_CONTEXT})
exten => s,n,Set(_IVR_CONTEXT=${CONTEXT})
exten => s,n,GotoIf($["${CDR(disposition)}" = “ANSWERED”]?begin)
exten => s,n,Answer
exten => s,n,Wait(1)
exten => s,n(begin),Set(TIMEOUT(digit)=3)
exten => s,n,Set(TIMEOUT(response)=10)
exten => s,n,Set(__IVR_RETVM=RETURN)
exten => s,n,ExecIf($["${MSG}" != “”]?Background(${MSG}))
exten => s,n,WaitExten(,)
exten => hang,1,Playback(vm-goodbye)
exten => hang,n,Hangup
exten => 0,1,Noop(Deleting: ${BLKVM_OVERRIDE} ${DB_DELETE(${BLKVM_OVERRIDE})})
exten => 0,n,Set(__NODEST=)
exten => 0,n,Goto(from-did-direct,221,1)
exten => 1,1,Noop(Deleting: ${BLKVM_OVERRIDE} ${DB_DELETE(${BLKVM_OVERRIDE})})
exten => 1,n,Set(__NODEST=)
exten => 1,n,Goto(directory,1,1)
exten => 1001,1,Noop(Deleting: ${BLKVM_OVERRIDE} ${DB_DELETE(${BLKVM_OVERRIDE})})
exten => 1001,n,Set(__NODEST=)
exten => 1001,n,Goto(ext-meetme,1001,1)
exten => 1002,1,Noop(Deleting: ${BLKVM_OVERRIDE} ${DB_DELETE(${BLKVM_OVERRIDE})})
exten => 1002,n,Set(__NODEST=)
exten => 1002,n,Goto(ext-meetme,1002,1)
exten => 2,1,Noop(Deleting: ${BLKVM_OVERRIDE} ${DB_DELETE(${BLKVM_OVERRIDE})})
exten => 2,n,Set(__NODEST=)
exten => 2,n,Goto(disa,1,1)
exten => i,1,Set(LOOPCOUNT=$[${LOOPCOUNT} + 1])
exten => i,n,ExecIf($[${LOOPCOUNT} <= 0]?Playback(invalid))
exten => i,n,GotoIf($[${LOOPCOUNT} <= 0]?s,begin)
exten => i,n,Noop(Deleting: ${BLKVM_OVERRIDE} ${DB_DELETE(${BLKVM_OVERRIDE})})
exten => i,n,Set(__NODEST=)
exten => i,n,Goto(from-did-direct,221,1)
exten => t,1,Set(LOOPCOUNT=$[${LOOPCOUNT} + 1])
exten => t,n,GotoIf($[${LOOPCOUNT} <= 0]?s,begin)
exten => t,n,Noop(Deleting: ${BLKVM_OVERRIDE} ${DB_DELETE(${BLKVM_OVERRIDE})})
exten => t,n,Set(__NODEST=)
exten => t,n,Goto(from-did-direct,221,1)

New VM install same version, and was able to reproduce with the same result, filled a bug 4591

An Asterisk trace would be nice when this is happening.

Have you tested the new Directory module instead of the old PB Directory?

<------------->
— (10 headers 0 lines) —
== Manager ‘admin’ logged on from 127.0.0.1
– Executing [s@ivr-2:8] Wait(“SIP/222-000000e9”, “1”) in new stack
– Executing [s@ivr-2:9] Set(“SIP/222-000000e9”, “TIMEOUT(digit)=3”) in new stack
– Digit timeout set to 3.000
– Executing [s@ivr-2:10] Set(“SIP/222-000000e9”, “TIMEOUT(response)=10”) in new stack
– Response timeout set to 10.000
– Executing [s@ivr-2:11] Set(“SIP/222-000000e9”, “__IVR_RETVM=RETURN”) in new stack
– Executing [s@ivr-2:12] ExecIf(“SIP/222-000000e9”, “1?Background(custom/main-ivr)”) in new stack
– <SIP/222-000000e9> Playing ‘custom/main-ivr.gsm’ (language ‘en’)
== CDR updated on SIP/222-000000e9
– Executing [1@ivr-2:1] NoOp(“SIP/222-000000e9”, "Deleting: ") in new stack
– Executing [1@ivr-2:2] Set(“SIP/222-000000e9”, “__NODEST=”) in new stack
– Executing [1@ivr-2:3] Goto(“SIP/222-000000e9”, “directory,1,1”) in new stack
– Goto (directory,1,1)
– Executing [1@directory:1] Answer(“SIP/222-000000e9”, “”) in new stack
– Executing [1@directory:2] Wait(“SIP/222-000000e9”, “1”) in new stack
– Executing [1@directory:3] AGI(“SIP/222-000000e9”, “directory.agi,dir=1”) in new stack
– Launched AGI Script /var/lib/asterisk/agi-bin/directory.agi
– <SIP/222-000000e9> Playing ‘cdir-welcome.slin’ (language ‘en’)
– <SIP/222-000000e9> Playing ‘cdir-please-enter-first-three.slin’ (language ‘en’)
> directory.agi,dir=1: search string for regex: [pqrsPQRS][abcABC][mnoMNO]
– directory.agi,dir=1: Found 2 possible matches from 726
> directory.agi,dir=1: search string for regex: [pqrsPQRS][abcABC][mnoMNO]
– directory.agi,dir=1: Found 2 possible matches from 726
– Playing ‘silence/1’ (escape_digits=1234567890#) (sample_offset 0)
– Playing ‘cdir-there-are’ (escape_digits=1234567890#) (sample_offset 0)
– <SIP/222-000000e9> Playing ‘digits/2.gsm’ (language ‘en’)
– Playing ‘cdir-matching-entries-or-pound’ (escape_digits=1234567890#) (sample_offset 0)
> directory.agi,dir=1: search string for regex: [pqrsPQRS][abcABC][mnoMNO]
– directory.agi,dir=1: Found 2 possible matches from 726#
– directory.agi,dir=1: valid keys for entries are: 12
> directory.agi,dir=1: search string for regex: [pqrsPQRS][abcABC][mnoMNO]
– directory.agi,dir=1: Found the following matches:
– directory.agi,dir=1: name: Scott Amon, audio: vm, dial: 227
– directory.agi,dir=1: name: Sandra Jermark, audio: vm, dial: 228
– Playing ‘for’ (escape_digits=12) (sample_offset 0)
> directory.agi,dir=1: got directory default for user 227
> directory.agi,dir=1: looking for vm file . using: .
> directory.agi,dir=1: looking for vm file … using: …
> directory.agi,dir=1: looking for vm file INBOX using: INBOX
> directory.agi,dir=1: looking for vm file Old using: Old
> directory.agi,dir=1: looking for vm file tmp using: tmp
– <SIP/222-000000e9> Playing ‘letters/s.gsm’ (language ‘en’)
> directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
– <SIP/222-000000e9> Playing ‘letters/c.gsm’ (language ‘en’)
> directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
– <SIP/222-000000e9> Playing ‘letters/o.gsm’ (language ‘en’)
> directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
– <SIP/222-000000e9> Playing ‘letters/t.gsm’ (language ‘en’)
> directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
– <SIP/222-000000e9> Playing ‘letters/t.gsm’ (language ‘en’)
> directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
– <SIP/222-000000e9> Playing ‘letters/a.gsm’ (language ‘en’)
> directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
– <SIP/222-000000e9> Playing ‘letters/m.gsm’ (language ‘en’)
> directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
– <SIP/222-000000e9> Playing ‘letters/o.gsm’ (language ‘en’)
> directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
– <SIP/222-000000e9> Playing ‘letters/n.gsm’ (language ‘en’)
> directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
– Playing ‘press’ (escape_digits=12) (sample_offset 0)
– <SIP/222-000000e9> Playing ‘digits/1.gsm’ (language ‘en’)
– Playing ‘for’ (escape_digits=12) (sample_offset 0)
> directory.agi,dir=1: got directory default for user 228
– <SIP/222-000000e9> Playing ‘letters/s.gsm’ (language ‘en’)
> directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
– <SIP/222-000000e9> Playing ‘letters/a.gsm’ (language ‘en’)
> directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
– <SIP/222-000000e9> Playing ‘letters/n.gsm’ (language ‘en’)
> directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
– <SIP/222-000000e9> Playing ‘letters/d.gsm’ (language ‘en’)
> directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
– <SIP/222-000000e9> Playing ‘letters/r.gsm’ (language ‘en’)
> directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
– <SIP/222-000000e9> Playing ‘letters/a.gsm’ (language ‘en’)
> directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
– <SIP/222-000000e9> Playing ‘letters/j.gsm’ (language ‘en’)
> directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
– <SIP/222-000000e9> Playing ‘letters/e.gsm’ (language ‘en’)
> directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
– <SIP/222-000000e9> Playing ‘letters/r.gsm’ (language ‘en’)
> directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
– <SIP/222-000000e9> Playing ‘letters/m.gsm’ (language ‘en’)
> directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
– <SIP/222-000000e9> Playing ‘letters/a.gsm’ (language ‘en’)
> directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0=
– <SIP/222-000000e9> Playing ‘letters/r.gsm’ (language ‘en’)
> directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
– <SIP/222-000000e9> Playing ‘letters/k.gsm’ (language ‘en’)
> directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
– Playing ‘press’ (escape_digits=12) (sample_offset 0)
– <SIP/222-000000e9> Playing ‘digits/2.gsm’ (language ‘en’)
– directory.agi,dir=1: got result: 0

Pushed 1 menu started over again and then before it was done spelling the first
name (before 3 seconds had elapse) I pushed 1 again then it routed my call to the ##### extension
   > directory.agi,dir=1: search string for regex: [pqrsPQRS][abcABC][mnoMNO]
-- directory.agi,dir=1: Found 2 possible matches from 726#
-- directory.agi,dir=1: valid keys for entries are: 12
   > directory.agi,dir=1: search string for regex: [pqrsPQRS][abcABC][mnoMNO]
-- directory.agi,dir=1: Found the following matches:
-- directory.agi,dir=1: name: Scott Amon, audio: vm, dial: 227
-- directory.agi,dir=1: name: Sandra Jermark, audio: vm, dial: 228
-- Playing 'for' (escape_digits=12) (sample_offset 0)
   > directory.agi,dir=1: got directory default for user 227
   > directory.agi,dir=1: looking for vm file . using: .
   > directory.agi,dir=1: looking for vm file .. using: ..
   > directory.agi,dir=1: looking for vm file INBOX using: INBOX
   > directory.agi,dir=1: looking for vm file Old using: Old
   > directory.agi,dir=1: looking for vm file tmp using: tmp
-- <SIP/222-000000e9> Playing 'letters/s.gsm' (language 'en')
   > directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
-- <SIP/222-000000e9> Playing 'letters/c.gsm' (language 'en')
   > directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
-- <SIP/222-000000e9> Playing 'letters/o.gsm' (language 'en')
   > directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
-- <SIP/222-000000e9> Playing 'letters/t.gsm' (language 'en')
   > directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
-- <SIP/222-000000e9> Playing 'letters/t.gsm' (language 'en')
   > directory.agi,dir=1: returned from SAY ALPHA with code/result 200/0
-- directory.agi,dir=1: got result: 1
   > directory.agi,dir=1: got directory default for user 227
   > directory.agi,dir=1: looking for vm file . using: .
   > directory.agi,dir=1: looking for vm file .. using: ..
   > directory.agi,dir=1: looking for vm file INBOX using: INBOX
   > directory.agi,dir=1: looking for vm file Old using: Old
   > directory.agi,dir=1: looking for vm file tmp using: tmp

directory.agi,dir=1: Array
directory.agi,dir=1: (
directory.agi,dir=1: [code] => 520
directory.agi,dir=1: [result] =>
directory.agi,dir=1: [data] => Invalid command syntax. Proper usage follows:
directory.agi,dir=1: Usage: SAY ALPHA
directory.agi,dir=1: Say a given character string, returning early if any of the given DTMF digits
directory.agi,dir=1: are received on the channel. Returns 0 if playback completes without a digit
directory.agi,dir=1: being pressed, or the ASCII numerical value of the digit if one was pressed or
directory.agi,dir=1: -1 on error/hangup.
directory.agi,dir=1:
directory.agi,dir=1: )
directory.agi,dir=1:
> directory.agi,dir=1: returned from SAY ALPHA with code/result 520/
directory.agi,dir=1: Array
directory.agi,dir=1: (
directory.agi,dir=1: [code] => 520
directory.agi,dir=1: [result] =>
directory.agi,dir=1: [data] => Invalid command syntax. Proper usage follows:
directory.agi,dir=1: Usage: SAY ALPHA
directory.agi,dir=1: Say a given character string, returning early if any of the given DTMF digits
directory.agi,dir=1: are received on the channel. Returns 0 if playback completes without a digit
directory.agi,dir=1: being pressed, or the ASCII numerical value of the digit if one was pressed or
directory.agi,dir=1: -1 on error/hangup.
directory.agi,dir=1:
directory.agi,dir=1: )
directory.agi,dir=1:
> directory.agi,dir=1: returned from SAY ALPHA with code/result 520/
directory.agi,dir=1: Array
directory.agi,dir=1: (
directory.agi,dir=1: [code] => 520
directory.agi,dir=1: [result] =>
directory.agi,dir=1: [data] => Invalid command syntax. Proper usage follows:
directory.agi,dir=1: Usage: SAY ALPHA
directory.agi,dir=1: Say a given character string, returning early if any of the given DTMF digits
directory.agi,dir=1: are received on the channel. Returns 0 if playback completes without a digit
directory.agi,dir=1: being pressed, or the ASCII numerical value of the digit if one was pressed or
directory.agi,dir=1: -1 on error/hangup.
directory.agi,dir=1:
directory.agi,dir=1: )
directory.agi,dir=1:
> directory.agi,dir=1: returned from SAY ALPHA with code/result 520/
directory.agi,dir=1: Array
directory.agi,dir=1: (
directory.agi,dir=1: [code] => 520
directory.agi,dir=1: [result] =>
directory.agi,dir=1: [data] => Invalid command syntax. Proper usage follows:
directory.agi,dir=1: Usage: SAY ALPHA
directory.agi,dir=1: Say a given character string, returning early if any of the given DTMF digits
directory.agi,dir=1: are received on the channel. Returns 0 if playback completes without a digit
directory.agi,dir=1: being pressed, or the ASCII numerical value of the digit if one was pressed or
directory.agi,dir=1: -1 on error/hangup.
directory.agi,dir=1:
directory.agi,dir=1: )
directory.agi,dir=1:
> directory.agi,dir=1: returned from SAY ALPHA with code/result 520/
directory.agi,dir=1: Array
directory.agi,dir=1: (
directory.agi,dir=1: [code] => 520
directory.agi,dir=1: [result] =>
directory.agi,dir=1: [data] => Invalid command syntax. Proper usage follows:
directory.agi,dir=1: Usage: SAY ALPHA
directory.agi,dir=1: Say a given character string, returning early if any of the given DTMF digits
directory.agi,dir=1: are received on the channel. Returns 0 if playback completes without a digit
directory.agi,dir=1: being pressed, or the ASCII numerical value of the digit if one was pressed or
directory.agi,dir=1: -1 on error/hangup.
directory.agi,dir=1:
directory.agi,dir=1: )
directory.agi,dir=1:
> directory.agi,dir=1: returned from SAY ALPHA with code/result 520/
directory.agi,dir=1: Array
directory.agi,dir=1: (
directory.agi,dir=1: [code] => 520
directory.agi,dir=1: [result] =>
directory.agi,dir=1: [data] => Invalid command syntax. Proper usage follows:
directory.agi,dir=1: Usage: SAY ALPHA
directory.agi,dir=1: Say a given character string, returning early if any of the given DTMF digits
directory.agi,dir=1: are received on the channel. Returns 0 if playback completes without a digit
directory.agi,dir=1: being pressed, or the ASCII numerical value of the digit if one was pressed or
directory.agi,dir=1: -1 on error/hangup.
directory.agi,dir=1:
directory.agi,dir=1: )
directory.agi,dir=1:
> directory.agi,dir=1: returned from SAY ALPHA with code/result 520/
directory.agi,dir=1: Array
directory.agi,dir=1: (
directory.agi,dir=1: [code] => 520
directory.agi,dir=1: [result] =>
directory.agi,dir=1: [data] => Invalid command syntax. Proper usage follows:
directory.agi,dir=1: Usage: SAY ALPHA
directory.agi,dir=1: Say a given character string, returning early if any of the given DTMF digits
directory.agi,dir=1: are received on the channel. Returns 0 if playback completes without a digit
directory.agi,dir=1: being pressed, or the ASCII numerical value of the digit if one was pressed or
directory.agi,dir=1: -1 on error/hangup.
directory.agi,dir=1:
directory.agi,dir=1: )
directory.agi,dir=1:
> directory.agi,dir=1: returned from SAY ALPHA with code/result 520/
directory.agi,dir=1: Array
directory.agi,dir=1: (
directory.agi,dir=1: [code] => 520
directory.agi,dir=1: [result] =>
directory.agi,dir=1: [data] => Invalid command syntax. Proper usage follows:
directory.agi,dir=1: Usage: SAY ALPHA
directory.agi,dir=1: Say a given character string, returning early if any of the given DTMF digits
directory.agi,dir=1: are received on the channel. Returns 0 if playback completes without a digit
directory.agi,dir=1: being pressed, or the ASCII numerical value of the digit if one was pressed or
directory.agi,dir=1: -1 on error/hangup.
directory.agi,dir=1:
directory.agi,dir=1: )
directory.agi,dir=1:
> directory.agi,dir=1: returned from SAY ALPHA with code/result 520/
directory.agi,dir=1: Array
directory.agi,dir=1: (
directory.agi,dir=1: [code] => 520
directory.agi,dir=1: [result] =>
directory.agi,dir=1: [data] => Invalid command syntax. Proper usage follows:
directory.agi,dir=1: Usage: SAY ALPHA
directory.agi,dir=1: Say a given character string, returning early if any of the given DTMF digits
directory.agi,dir=1: are received on the channel. Returns 0 if playback completes without a digit
directory.agi,dir=1: being pressed, or the ASCII numerical value of the digit if one was pressed or
directory.agi,dir=1: -1 on error/hangup.
directory.agi,dir=1:
directory.agi,dir=1: )
directory.agi,dir=1:
> directory.agi,dir=1: returned from SAY ALPHA with code/result 520/
– <SIP/222-000000e9>AGI Script directory.agi completed, returning 0
– Executing [1@directory:4] Playback(“SIP/222-000000e9”, “pls-hold-while-try&to-extension”) in new stack
– <SIP/222-000000e9> Playing ‘pls-hold-while-try.gsm’ (language ‘en’)
== Spawn extension (directory, 1, 4) exited non-zero on ‘SIP/222-000000e9’
– Executing [h@directory:1] Macro(“SIP/222-000000e9”, “hangupcall,”) in new stack
– Executing [s@macro-hangupcall:1] GotoIf(“SIP/222-000000e9”, “1?skiprg”) in new stack
– Goto (macro-hangupcall,s,4)
– Executing [s@macro-hangupcall:4] GotoIf(“SIP/222-000000e9”, “1?skipblkvm”) in new stack
– Goto (macro-hangupcall,s,7)
– Executing [s@macro-hangupcall:7] GotoIf(“SIP/222-000000e9”, “1?theend”) in new stack
– Goto (macro-hangupcall,s,9)
– Executing [s@macro-hangupcall:9] Hangup(“SIP/222-000000e9”, “”) in new stack
== Spawn extension (macro-hangupcall, s, 9) exited non-zero on ‘SIP/222-000000e9’ in macro ‘hangupcall’
== Spawn extension (directory, h, 1) exited non-zero on 'SIP/222-000000e9’
s