[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