[asterisk-users] Handling 3 different call ending causes

Atis Lezdins atis at iq-labs.net
Thu Mar 20 05:32:40 CDT 2008


On 3/20/08, Tobias Ahlander <plyschen at gmail.com> wrote:
> >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!);
>   }
>
> }
>
>

I would change that to >= just for reliability - you never know :)

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



More information about the asterisk-users mailing list