[asterisk-users] Handling 3 different call ending causes

Atis Lezdins atis at iq-labs.net
Wed Mar 19 04:31:57 CDT 2008


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



More information about the asterisk-users mailing list