[asterisk-users] Handling 3 different call ending causes

Tobias Ahlander plyschen at gmail.com
Thu Mar 20 02:49:32 CDT 2008


>Date: Wed, 19 Mar 2008 11:31:57 +0200
>From: "Atis Lezdins" <atis at iq-labs.net>
>Subject: Re: [asterisk-users] Handling 3 different call ending causes
>To: "Asterisk Users Mailing List - Non-Commercial Discussion"
>    <asterisk-users at lists.digium.com>
>Message-ID:
>    <670f60170803190231l7d92c26fg697baf635788e6c0 at mail.gmail.com>
>Content-Type: text/plain; charset=ISO-8859-1
>
>On 3/17/08, Tobias Ahlander <plyschen at gmail.com> wrote:
>> Alex Balashov wrote:
>> >> Hello List,
>> >>
>> >> I'm using a dialstring like the one below. I want to have three
>> >> different things happening depending on exit cause.
>> >>
>> >> Dial(SIP/${phonenumber},20,gL(20000[:5000][:5000]))
>>  >>
>> >> These 3 things could happen:
>> >> 1, Caller hangs up
>> >> 2, Callee hangs up
>> >> 3, The 20 seconds is up and call is terminated from Asterisk.
>> >>
>> >> Is there a way to separate these 3?
>>  >
>> >You can handle the 'h' extension in the dial plan, which will supply
>> >the
>> ${CHANNEL} that was hung up, and possibly some additional dial plan
>> variables as well:
>> >
>> >http://www.voip-info.org/wiki/index.php?page=Asterisk+h+extension
>>  >
>> >Using these, you can piece together who hung up on whom, etc.
>> >
>> >#2 is handled by fallthrough in the dial plan that causes the
>> >instructions
>> to continue executing to the next priority for that extension, whereas
>> if the call completes (Dial() is successfully connected), this does not
happen.
>>
>> I''ve tried to use the h extension in combination with the ${CHANNEL}
>> in the dialplan as suggested on the wiki page, but I haven't had any luck
with it.
>>
>> For this test I have a Sipura phone with number 1003 and a X-lite with
1203.
>> If I let the time go by (the 20 seconds defined in the Dial Command) I
>> get the following:
>>  -- Executing [h at hangupcause:1] NoOp("SIP/1003-08a491b8", "Channel
>> hungup is
>> SIP/1003-08a491b8") in new stack
>>
>> If I let the Sipura hang up I get:
>> -- Executing [h at hangupcause:1] NoOp("SIP/1003-08a491b8", "Channel
>> hungup is
>> SIP/1003-08a491b8") in new stack
>>
>> Lastly if I let the X-lite hang up I get:
>> -- Executing [h at hangupcause:1] NoOp("SIP/1003-08a491b8", "Channel
>> hungup is
>> SIP/1003-08a491b8") in new stack
>>
>> Yes they are all the same :(
>>
>>  Perhaps there's something wrong with my code? Its just a small
>> context with the following for this test:
>
>> [hangupcause]
>> exten => s,1,Dial(SIP/1203,30,gL(10000[:5000][:5000]))
>
>exten => s,2,NoOp(Callee hangup)
>
>> exten => h,1,NoOp(Channel hungup is ${CHANNEL})
>>
>> Have I missed something basic here or what?
>
>
>This should allow you to distinguish caller and callee hangups. I suppose
dial time limit will match Callee hangup, but you can check that by
>${ANSWEREDTIME} or some sort of timestamp checking before and after Dial
(altough that would include ringing time)
>
>Regards,
>Atis
>
>--
>Atis Lezdins,
>VoIP Project Manager / Developer,
>atis at iq-labs.net
>Skype: atis.lezdins
>Cell Phone: +371 28806004
>Cell Phone: +1 800 7300689
>Work phone: +1 800 7502835



Hello List,

Ok, I solved it by using this code. This will work for me since the variable
${timeleft} is always in complete seconds. Thank you all for the ideas and
pointers :)

context hangupcause {

  s => {
    Set(timeleft=7000);
    Dial(SIP/1203,30,gL(${timeleft}[:4000][:4000]));
    if(${timeleft} = (${ANSWEREDTIME}*1000)) {
      jump s at notimeleft;
    } else {
      jump s at hangupcause2;
    }
  }

  h => {
    NoOp(Caller Hangup);
  }

}

context hangupcause2 {

  s => {
    NoOp(Callee Hangup);
  }

}

context notimeleft {

  s => {
    NoOp(Time's up!);
  }

}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.digium.com/pipermail/asterisk-users/attachments/20080320/7d4c4f7e/attachment.htm 


More information about the asterisk-users mailing list