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