Tobias Ahlander
2008-Mar-17 07:14 UTC
[asterisk-users] Handling 3 different call ending causes
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? Thanks, Best regards, Tobias -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.digium.com/pipermail/asterisk-users/attachments/20080317/b7139c69/attachment.htm
Alex Balashov
2008-Mar-17 07:31 UTC
[asterisk-users] Handling 3 different call ending causes
Tobias Ahlander 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. -- Alex Balashov Evariste Systems Web : http://www.evaristesys.com/ Tel : (+1) (678) 954-0670 Direct : (+1) (678) 954-0671 Mobile : (+1) (706) 338-8599
Tobias Ahlander
2008-Mar-17 14:35 UTC
[asterisk-users] Handling 3 different call ending causes
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 instructionsto 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 => h,1,NoOp(Channel hungup is ${CHANNEL}) Have I missed something basic here or what? Thanks again, Best regards, Tobias -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.digium.com/pipermail/asterisk-users/attachments/20080317/5eb245b9/attachment.htm
Tobias Ahlander
2008-Mar-17 15:46 UTC
[asterisk-users] Handling 3 different call ending causes
Hello, Tried that too, but it reports cause 16 in all 3 cases, which means "normal clearing". Thanks, Best regards, Tobias Date: Mon, 17 Mar 2008 15:54:47 +0100 From: "Arjan Kroon | Mobillion" <Arjan.Kroon at mobillion.nl> 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: < 5E4CB0091A9AC94C92E74371A9C5022A01856277 at ED-COPERNICUS01.mobillion.local> Content-Type: text/plain; charset="us-ascii" http://www.voip-info.org/tiki-index.php?page=Asterisk+variable+hangupcau se ________________________________ From: asterisk-users-bounces at lists.digium.com [mailto:asterisk-users-bounces at lists.digium.com] On Behalf Of Tobias Ahlander Sent: maandag 17 maart 2008 15:35 To: asterisk-users at lists.digium.com Subject: Re: [asterisk-users] Handling 3 different call ending causes 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 supplythe ${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 theinstructions 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 => h,1,NoOp(Channel hungup is ${CHANNEL}) Have I missed something basic here or what? Thanks again, Best regards, Tobias -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.digium.com/pipermail/asterisk-users/attachments/20080317/6fe18050/attachment.htm
Tobias Ahlander
2008-Mar-19 08:27 UTC
[asterisk-users] Handling 3 different call ending causes
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 still haven't gotten this to work... I'm thinking that perhaps this could be solve with a macro? I haven't worked much with macros tho, anyone of you think it might be possible? Thanks, Best regards, Tobias -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.digium.com/pipermail/asterisk-users/attachments/20080319/fa23dea1/attachment.htm
Tobias Ahlander
2008-Mar-19 15:29 UTC
[asterisk-users] Handling 3 different call ending causes
>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 nothappen.>> >> 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 luckwith it.>> >> For this test I have a Sipura phone with number 1003 and a X-lite with1203.>> 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 supposedial 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 7502835Atis, It's always the simplest answers that are the best, this seems to work indeed (thinking about putting a goto instead of NoOp). Will try this out during the day tomorrow and I will let you guys know the results :) Thank you very much, Best regards, Tobias -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.digium.com/pipermail/asterisk-users/attachments/20080319/907998c9/attachment.htm
Tobias Ahlander
2008-Mar-20 07:49 UTC
[asterisk-users] Handling 3 different call ending causes
>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 nothappen.>> >> 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 luckwith it.>> >> For this test I have a Sipura phone with number 1003 and a X-lite with1203.>> 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 supposedial 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 7502835Hello 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