[Freeswitch-users] Re4: Lua "two steps" bridging

Michael Collins msc at freeswitch.org
Wed Sep 14 03:35:18 MSD 2011


Well, I didn't say you *couldn't* do it, just that it isn't the best option.
For posterity's sake here is a sample of a Lua script that does basically
what you want.

--


-- cc.lua


--


-- call control lua script - can it be done?


--





dialA = "sofia/gateway/fs1/9903"


dialB = "user/1001"





legA = freeswitch.Session(dialA)


dispoA = "None"





while(legA:ready() and dispoA ~= "ANSWER") do


  dispoA = legA:getVariable("endpoint_disposition")


  freeswitch.consoleLog("INFO","Leg A disposition is '" .. dispoA .. "'\n")


  os.execute("sleep 1")


end -- legA while





if( not legA:ready() ) then


  -- oops, lost leg A handle this case


  freeswitch.consoleLog("NOTICE","It appears that " .. dialA .. "
disconnected...\n")

else


  legB = freeswitch.Session(dialB)


  dispoB = "None"


  while(legA:ready() and legB:ready() and dispoB ~= "ANSWER") do


    if ( not legA:ready() ) then


      -- oops, leg A hung up or got disconnected, handle this case


      freeswitch.consoleLog("NOTICE","It appears that " .. dialA .. "
disconnected...\n")

    else


      os.execute("sleep 1")


      dispoB = legB:getVariable("endpoint_disposition")


      freeswitch.consoleLog("NOTICE","Leg B disposition is '" .. dispoB ..
"'\n")

    end -- inner if legA ready


  end -- legB while





  if ( legA:ready() and legB:ready() ) then


    freeswitch.bridge(legA,legB)


  else


    -- oops, one of the above legs hung up, handle this case


   freeswitch.consoleLog("NOTICE","It appears that " .. dialA .. " or " ..
dialB .. " disconnected...\n")

  end





end -- outter if legA ready




-MC

On Tue, Sep 13, 2011 at 2:52 PM, Chrisbware <chrisbware at interfree.it> wrote:

> **
> Thank you for your answer: I'll follow your advice.
>
> Anyway, IMHO, Lua must be able to manage situations like this. Languages
> strong integration is a plus
> of FS that helps programmers to invent new services. Telling them they
> still have to play with events
> sounds a bit "old school". Again: it's only my opinon. Keep up the good
> work!
>
> Il 13/09/2011 23:27, Michael Collins ha scritto:
>
> Chris,
>
>  We're glad you like FS - we like it as well.
>
>  What you're trying to do is completely possible, but the way you're trying
> to do it is probably not the best choice. Instead of a local Lua script to
> control both calls, you are better off using either one of two options:
> event socket entirely or event socket + dialplan. It depends on the level of
> control that you need. If you want ultimate control then just use ESL right
> from PHP (or whichever scripting language you are comfortable with) and
> create your call legs, watching for the requisite CHANNEL_XXX events. (See
> http://wiki.freeswitch.org/wiki/Event_List for a nice list.)
>
>  I suppose you could do it all in Lua but you'd have to keep polling legA
> channel for the endpoint_disposition variable in a while loop and then break
> out on various conditions. I'm not at all a fan of that method. With the
> event socket you listen for the events that are of interest to you and then
> act on them. Very elegant.
>
>  -MC
>
> On Tue, Sep 13, 2011 at 1:59 PM, Chrisbware <chrisbware at interfree.it>wrote:
>
>>  Hi Michael,
>>
>> a PHP script connect to Event socket and launch "luarun  call.lua <legA
>> number> <legB number> <sip account number>
>>
>> Script call.lua, upload sip account password from a DB and then call A
>> number and B number using the same SIP account, bridging them.
>> What I'd like to do is:
>>
>> - place call to legB number only after legA has answered the call
>> - detect hangupCause on both legs to check if something goes wrong
>> - return SUCCESS or hangup cause to the PHP script
>>
>> Is it science fiction? With Asterisk isn't so hard to do and, since I'm in
>> love with FS, please don't disappoint me :-)
>>
>> Chris B.
>>
>>
>> Il 13/09/2011 18:44, Michael Collins ha scritto:
>>
>> How are you calling this Lua script to begin with? What is the big
>> picture, that is, what is the problem you're solving? Some context might
>> help us give you a better answer.
>>
>>  -MC
>>
>>  On Tue, Sep 13, 2011 at 5:21 AM, <chrisbware at interfree.it> wrote:
>>
>>> Hi,
>>>
>>> thank you for your help, but doesn't work.
>>> legA:ready() is true when the first session start and not when the call
>>> is answered.
>>> So legB is called at the same time.
>>>
>>> Any other suggestion?
>>>
>>>
>>>
>>>
>>> -----Messaggio originale-----
>>> Da: Sergey Scheglov <sid at eltc.ru>
>>> Inviato il: 13 Set 2011 - 17:15
>>> A: freeswitch-users at lists.freeswitch.org
>>>
>>>
>>>
>>> ? 13 Sep 2011 09:39:33 -0000
>>> chrisbware at interfree.it wrote:
>>>
>>> >
>>> > Hi guys,
>>> >
>>> > I've read anything on this argument on Wiki but I can't find a
>>> > complete answer.
>>> >
>>> > I need to bridge two calls in Lua, waiting the first to be answered.
>>> > My basic script is:
>>> >
>>> > local GwParams =
>>> >
>>> "origination_caller_id_number="..gateway..",sip_auth_username="..gateway..",sip_auth_password="..sip_passwd
>>> > local slegA =
>>> >
>>> "[ignore_early_media=false,"..GwParams.."]sofia/external/"..callee.."@"..sip_domain
>>> > local slegB =
>>> >
>>> "[ignore_early_media=true,"..GwParams.."]sofia/external/"..called.."@"..sip_domain
>>> >
>>> > legA = freeswitch.Session(slegA);
>>> > legB = freeswitch.Session(slegB);
>>> > freeswitch.bridge(legA, legB);
>>> >
>>> >
>>> > It works but legA and legB are called at the same time. Using:
>>> >
>>> > while (legA:answered()== false) do end;
>>> >
>>> > between the two session do the job but called parties can't hear
>>> > audio.
>>> >
>>> > I promise to add a script on wiki if you help me ! :)
>>> >
>>> > Thanks in advance.
>>> >
>>> >
>>> >
>>> -------------------------------------------------------------------------------
>>> > Valore legale alle tue mail
>>> > InterfreePEC - la tua Posta Elettronica Certificata
>>> > http://pec.interfree.it
>>> >
>>> -------------------------------------------------------------------------------
>>> >
>>> >
>>> >
>>> > FreeSWITCH-users mailing list
>>> > FreeSWITCH-users at lists.freeswitch.org
>>> > http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>>> > UNSUBSCRIBE:
>>> http://lists.freeswitch.org/mailman/options/freeswitch-users
>>> > http://www.freeswitch.org
>>> >
>>>
>>> Try:
>>>
>>> legA = freeswitch.Session(slegA);
>>> if (legA:ready()) then
>>> legB = freeswitch.Session(slegB, legA);
>>> freeswitch.bridge(legA, legB);
>>> end
>>>
>>> ----
>>>
>>> Scheglov Sergey
>>>
>>>
>>> FreeSWITCH-users mailing list
>>> FreeSWITCH-users at lists.freeswitch.org
>>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
>>> http://www.freeswitch.org
>>>
>>>
>>> -------------------------------------------------------------------------------
>>> Valore legale alle tue mail
>>> InterfreePEC - la tua Posta Elettronica Certificata
>>> http://pec.interfree.it
>>>
>>> -------------------------------------------------------------------------------
>>>
>>>
>>> FreeSWITCH-users mailing list
>>> FreeSWITCH-users at lists.freeswitch.org
>>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
>>> http://www.freeswitch.org
>>>
>>>
>>
>>
>> FreeSWITCH-users mailing listFreeSWITCH-users at lists.freeswitch.orghttp://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-usershttp://www.freeswitch.org
>>
>>
>>
>>
>> FreeSWITCH-users mailing list
>> FreeSWITCH-users at lists.freeswitch.org
>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
>> http://www.freeswitch.org
>>
>>
>
>
> FreeSWITCH-users mailing listFreeSWITCH-users at lists.freeswitch.orghttp://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-usershttp://www.freeswitch.org
>
>
>
>
> FreeSWITCH-users mailing list
> FreeSWITCH-users at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20110913/f2fadccb/attachment-0001.html 


Join us at ClueCon 2011 Aug 9-11, 2011
More information about the FreeSWITCH-users mailing list