Call Does Not Go Voicemail

Home » Asterisk Users » Call Does Not Go Voicemail
Asterisk Users 3 Comments

Call is not forwarded to voicemail in below dial plan, why?

exten => 4,1,Dial(${FD_L1},25,trw)
exten => 4,n,GotoIf($[“${DIALSTATUS}”=”BUSY”]?line2)
exten => 4,n(line2),Dial(${FD_L2},20,trw)
exten => 4,n,Voicemail(4)
exten => 4,n,Hangup()

— Called SIP/4
— SIP/4-00000288 is ringing
— Nobody picked up in 25000 ms
— Executing [4@extensions:2] GotoIf(“IAX2/home_server-6364”, “0?line2”) in new stack
— Executing [4@extensions:3] Dial(“IAX2/home_server-6364”, “SIP/54,20,trw”) in new stack
== Using SIP RTP CoS mark 5
— Called SIP/54
— SIP/54-00000289 is ringing
== Spawn extension (extensions, 4, 3) exited non-zero on ‘IAX2/home_server-6364’
— Hungup ‘IAX2/home_server-6364’

Extension 4 is not BUSY (just nobody pickup the call) so why isn’t call going to “Voicemail” it shouldn’t ring FD_L2 (SIP/54)
Why isn’t it going to “Voicemail”?

3 thoughts on - Call Does Not Go Voicemail

  • The way you have the GotoIf is making it so that no matter what the busy condition of the line, it will execute the next line in the dial plan. What you’d need is an “if” or “then” which goes to a tagged line in the dial plan. How it reads now is: “If [busy] then line2, else execute next line”. Also you are saying “extension 4 is not busy”, but extension 4 is a dialplan extension – while physical extensions “FD_L1” and “FD_L2” appear to be the devices which are not busy, you need to be clear and keep it straight in your head and text to get the best help…

    According to your log, nobody picked up after the 25 second timeout on FD_L1, so the dial status would have been NOANSWER, which would result in your gotoif test having a FALSE. Since you didn’t specify what the gotoif should do if the busy test failed, it just executes the next line which is to call the second line (FD_L2), which it does. Then it looks like you have an error with the second line which causes the call to terminate, at which case it terminates the channel and never gets to voicemail.

    So it looks like two problems, 1) your FD_L2 physical extension is buggy, and 2) you need to label the voicemail entry point and jump to it if the FD_L1 was any other state but BUSY.

    “… exten => 4,1,Dial(${FD_L1},25,trw)
    exten => 4,n,GotoIf($[“${DIALSTATUS}”=”BUSY”]?line2:vmail)
    exten => 4,n(line2),Dial(${FD_L2},20,trw); <--- fix me!! exten => 4,n(vmail),Voicemail(4)
    exten => 4,n,Hangup()
    …”

    -Tim

  • Thank you for the input Tim. Yes, that worked.

    exten => 4,n,GotoIf($[“${DIALSTATUS}”=”BUSY”]?line2:vmail)
    exten => 4,n(vmail),Voicemail(4)

    Though, I’m not sure why are you saying line 2 is FD_L2 needs to be fixed. Do I need to removde “t”, the call can not be transferred?

    Even when I put:
    exten => 4,n,GotoIf($[“${DIALSTATUS}”=”BUSY”]?line2)
    exten => 4,n(line2),Dial(${FD_L2},20,trw)
    exten => 4,n(line2),Voicemail(4)

    The call (line2) would dial “FD_L2” but would not jump to next line
    “Voicemail”

  • The “error” I was talking about was in your log:

    “…== Spawn extension (extensions, 4, 3) exited non-zero on
    ‘IAX2/home_server-6364’…”

    The call terminated here in a error which prevented the dialplan from continuing. Something there is broken, my recommendation is to check you registrations first inside asterisk:

    Something wasn’t “happy” about SIP/54 in your system when Asterisk tried talking to it.

    So you tried this:

    “… Even when I put:
    exten => 4,n,GotoIf($[“${DIALSTATUS}”=”BUSY”]?line2)
    exten => 4,n(line2),Dial(${FD_L2},20,trw)
    exten => 4,n(line2),Voicemail(4)
    …”

    What that will do is go to the first instance of “4,n(line2)”, which is the line that seems to be triggering the channel failure. If you have the Asterisk console open, I’ll bet you see it spew some errors when you try that extension routine.

    Asterisk dial plans are a serial processes, the first line that Asterisk comes across that meets the matching for a given extension and label is what it will run first. What you have is two lines that will match both extension and label – that’s not really good form.

    My dial plan suggestion from last night would result in the functionality:

    Ring extension 4/Line_1, timeout 25 seconds –> if not busy then voicemail, else ring extension 4/Line_2, timeout 20 seconds –> voicemail.

    Again, I think you have two problems, and the bigger one is causing the annoying unexpected behavior in your dial plan

    Try doing the extension 4 without the Line_1 and see what happens:

    “… exten => 4,1,Dial(${FD_L2},20,trw)
    exten => 4,n(vmail),Voicemail(4)
    exten => 4,n,Hangup()
    …”

    I’ll bet Line_2 never rings (which is indicative of the problem).

    -Tim