[Freeswitch-users] Question about Lua script: How do I detect when someone picks up the phone?

Michael Collins msc at freeswitch.org
Thu Jan 21 14:12:23 PST 2010


On Thu, Jan 21, 2010 at 3:35 AM, Nicolas Brenner <nicolas at medularis.com>wrote:

>
> On Wed, Jan 20, 2010 at 7:06 PM, Mike van Lammeren <mike at van.lammeren.net>wrote:
>
>> So, I've been reading about early media in the wiki, and have made a
>> little progress, which leads to more questions.
>>
>> I understand now why a call is considered connected before one person has
>> picked up the phone. I am also able to get my script to wait for the phone
>> to be picked up, by setting the ignore_early_media variable when starting a
>> new session, like this:
>>
>> customerSession =
>> freeswitch.Session("{ignore_early_media=true}sofia/gateway/example.com/"
>> .. customerPhoneNumber)
>>
>>
>> After that line, the script waits for the other phone to be picked up.
>>
>> However, now I wonder what to do with calls that don't complete, get busy
>> signals, etc.
>>
>> What do people do in this case? The only related example I can find on the
>> web is for a javascript dialer, which doesn't address any of these cases.
>>
>
>
> I guess it depends on what you want to do. For example I have a lua script
> very similar to what you describe, although there is no confirmation
> involved. Depending on the hangup cause the session gets, it might try
> redialing with a different gateway, try again or just hangup.
>
> Take a look here http://wiki.freeswitch.org/wiki/Hangup_causes to see what
> each hangup cause means. You don't need to have a special case for all of
> them, only the ones you are interested in.
>
> Here's an example in code which retries a call depending on the hangup
> cause. It retries max_retries1 times and alternates between 2 different
> gateways:
>
> session1 = null;
> max_retries1 = 3;
> retries = 0;
> ostr = "";
> repeat
>         retries = retries + 1;
>         if (retries % 2) then ostr = originate_str1;
>         else ostr = originate_str12; end
>         freeswitch.consoleLog("notice", "*********** Dialing Leg1: " ..
> ostr .. " - Try: "..retries.." ***********\n");
>         session1 = freeswitch.Session(ostr);
>         local hcause = session1:hangupCause();
>         freeswitch.consoleLog("notice", "*********** Leg1: " .. hcause .. "
> - Try: "..retries.." ***********\n");
> until not ((hcause == 'NO_ROUTE_DESTINATION' or hcause ==
> 'RECOVERY_ON_TIMER_EXPIRE' or hcause == 'INCOMPATIBLE_DESTINATION' or hcause
> == 'CALL_REJECTED' or hcause == 'NORMAL_TEMPORARY_FAILURE') and (retries <
> max_retriesl1))
>
>
> Note: originate_str1 and originate_str2 are two different dial strings for
> 2 different gateways.
>
>
Nicolas,

This is really nice. Would you be willing to add this script and a brief
explanation to the wiki? You could create a whole new page and just link to
it from here: http://wiki.freeswitch.org/wiki/Mod_lua#More_Samples

If you have any questions please let me know!
-MC
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20100121/e409c6bf/attachment-0002.html 


More information about the FreeSWITCH-users mailing list