[Freeswitch-users] call somebody into conference after conferenceestablished

Michael Collins msc at freeswitch.org
Fri May 20 07:24:21 MSD 2011


Okay, I did something 100% in dialplan with some conference.conf.xml
additions. It's an example of how crazy powerful the dialplan really is.
First, you need to add these to your conference.conf.xml:

<caller-controls>
...
    <group name="plain">
      <control action="mute" digits="0"/>
      <control action="energy up" digits="9"/>
      <control action="energy equ" digits="8"/>
      <control action="energy dn" digits="7"/>
      <control action="vol talk up" digits="3"/>
      <control action="vol talk zero" digits="2"/>
      <control action="vol talk dn" digits="1"/>
      <control action="vol listen up" digits="6"/>
      <control action="vol listen zero" digits="5"/>
      <control action="vol listen dn" digits="4"/>
    </group>
...
</caller-controls>

And add a new conference profile:

<profiles>
...
    <profile name="simple">
      <param name="domain" value="$${domain}"/>
      <param name="rate" value="16000"/>
      <param name="interval" value="10"/>
      <param name="energy-level" value="300"/>
      <param name="sound-prefix" value="$${sounds_dir}/en/us/callie"/>
      <param name="muted-sound" value="conference/conf-muted.wav"/>
      <param name="unmuted-sound" value="conference/conf-unmuted.wav"/>
      <param name="alone-sound" value="conference/conf-alone.wav"/>
      <param name="moh-sound" value="$${hold_music}"/>
      <param name="enter-sound" value="tone_stream://%(200,0,500,600,700)"/>
      <param name="exit-sound"
value="tone_stream://%(500,0,300,200,100,50,25)"/>
      <param name="kicked-sound" value="conference/conf-kicked.wav"/>
      <param name="locked-sound" value="conference/conf-locked.wav"/>
      <param name="is-locked-sound" value="conference/conf-is-locked.wav"/>
      <param name="is-unlocked-sound"
value="conference/conf-is-unlocked.wav"/>
      <param name="pin-sound" value="conference/conf-pin.wav"/>
      <param name="bad-pin-sound" value="conference/conf-bad-pin.wav"/>
      <param name="caller-id-name" value="$${outbound_caller_name}"/>
      <param name="caller-id-number" value="$${outbound_caller_id}"/>
      <param name="caller-controls" value="plain"/>
      <param name="comfort-noise" value="true"/>
    </profile>
...
</profiles>

Add these extensions to your dialplan. I just put them in
conf/dialplan/default/01_Conf_Add_Caller.xml:

<include>
  <!-- Sample dialplan for sending member or moderator to a conference where
he/she can add/remove calls -->
  <!-- Dial 46xx for member, *46xx for moderator -->
    <extension name="Simple add-caller conf: member">
      <condition field="destination_number" expression="^(46\d{2})$">
<action application="answer"/>
<action application="conference" data="$1 at simple"/>
     </condition>
    </extension>

    <extension name="Simple add-caller conf: moderator">
      <condition field="destination_number" expression="^\*(46\d{2}$)">
<!-- set up a few bind_digit_action (BDA) bindings for the moderator -->
        <action application="bind_digit_action"
data="moderator,*1,exec:execute_extension,ASK_FOR_NUMBER__$1 XML default"/>
<action application="bind_digit_action"
data="moderator,*2,exec:execute_extension,CANCEL_LAST_CALL__$1 XML
default"/>
<action application="digit_action_set_realm" data="moderator"/>
<action application="conference" data="$1 at simple"/>
      </condition>
    </extension>

    <extension name="Add new OB call to conference">
      <condition field="destination_number"
expression="^ASK_FOR_NUMBER__(\d+)$">
<!-- ask caller for a number + #, collect into ${target_num} variable -->
<action application="play_and_get_digits" data="4 11 1 5000 #
ivr/ivr-enter_destination_telephone_number.wav
ivr/ivr-that_was_an_invalid_entry.wav target_num \d+"/>
<!-- add this call to the conference -->
<action application="execute_extension"
data="ADD_CALL_TO_CONF__${target_num}"/>
      </condition>
    </extension>

    <extension name="Remove last OB call added to conference">
      <condition field="destination_number"
expression="^CANCEL_LAST_CALL__(\d+)$">
<!-- remove this call from the conference -->
<action application="set" data="res=${uuid_kill ${new_uuid}}"/>
      </condition>
    </extension>

<extension name="add that call">
<!-- if we have a four-digit number then attempt to dial it as a user ...
-->
<condition field="destination_number"
expression="^ADD_CALL_TO_CONF__(\d\d\d\d)$" break="on-true">
<action application="set" data="new_uuid=${create_uuid foo}" inline="true"/>
<action application="set" data="res=${bgapi originate
{origination_uuid=${new_uuid}}user/$1 &conference(${conference_name})}"/>
</condition>
<!-- if we have a five+ digit number then attempt to dial it as a gw
connection ... -->
<condition field="destination_number"
expression="^ADD_CALL_TO_CONF__(\d\d\d\d)$" break="on-true">
<action application="set" data="new_uuid=${create_uuid foo}" inline="true"/>
<action application="set" data="res=${bgapi originate
{origination_uuid=${new_uuid}}sofia/gateway/mygw/$1
&conference(${conference_name})}"/>
<!-- Alternatively, you can just use loopback, but that creates three call
legs instead of one, so be warned -->
<!--
<action application="set" data="res=${bgapi originate
{origination_uuid=${new_uuid}}loopback/$1
&conference(${conference_name})}"/>
-->
</condition>
<!-- ... otherwise inform moderator that the operation was not exactly
successful -->
<condition field="destination_number" expression="^ADD_CALL_TO_CONF__$">
<action application="playback" data="ivr/ivr-dude_you_suck.wav"/>
</condition>
</extension>
</include>

How it works:
Moderator dials *46xx to go into a conference. ("Normal" users dial 46xx and
they cannot add a new call.) Moderator dials *1 and gets a dialog asking to
enter the destination number and # key. Moderator keys in a phone number (or
extension number) and presses #. System makes call and drops it into the
conference. As a bonus feature I added *2 which will disconnect the most
recently added phone call.

I did this mostly as a proof of concept, but there's no reason you can't
take this code and put it into production. In fact, you could add a PIN or
user id (or both) checker so that just anyone can't add a call to a
conference. If you guys actually like this then I'll add it to the wiki or
something so everyone else can reference it.

Enjoy,
MC


2011/5/16 fieldpeak <fieldpeak at gmail.com>

> Hi Gurus,
>
> Is there anybody can help this issue? thanks!
>
> Regards,
> Charles
>
> 在 2011年5月14日 下午3:54,fieldpeak <fieldpeak at gmail.com>写道:
>
> Hi Michael,
>>
>> Thanks for your detailed suggestion.
>>
>> i test it as below steps, it works fine, however, there is a limiation
>> that i have to fill fixed callee number in conference.conf.xml
>> (data="execute_extension 5001"), while actually i what to dial arbitrary
>> number after "*" dynamically(e.g *1234, *2345), i can think out it could
>> realize by a IVR script like "data="execute_extension IVR_scripts" and after
>> IVR give some voice prompt (pls input the callee number) then ... however,
>> considering simplicity, can i convey the DTMF into the dialplan (just
>> directly press *1234, and then 1234 ring...)? could you please provide any
>> hints or any suggestion... Thanks a lot!
>>
>> 1. in conference.conf.xml, set as below,
>> <control action="execute_application" digits="*" data="execute_extension
>> 5001"/>
>>
>> 2. in dial plan,
>>
>> <!-- for confernce named conf100 -->
>> <extension name="conf100" >
>>    <condition field="destination_number" expression="^666$">
>>        <action application="answer"/>
>>        <action application="set" data="conference_user_list=|"/>
>>        <action application="conference" data="conf100 at default"/>
>>    </condition>
>> </extension>
>>
>> and
>>
>> <!-- for dial out 5001 from the conference conf100 -->
>>
>> <extension name="5_to_conf_out" >
>>    <condition field="destination_number" expression="^(5\d+)$">
>>        <!-- <action application="conference" data="conf100 dial
>> sofia/internal/5001 at 192.168.200.201 100 Conference_Caller_Name"/> -->
>>      <!-- <action application="bridge" data="sofia/internal/$
>> 1 at 192.168.200.201"/> -->
>>      <action application="set" data="api_result=${conference(conf100 dial
>> sofia/internal/$1 at 192.168.200.201 100 Conference_Caller_Name)}"/>
>>    </condition>
>> </extension>
>>
>> 3. register a extension 3001, call 666 and join a conference, and then
>> press "*", the FS will call 5001 on a IAD.
>> then 5001 and 3001 join the same conference.
>>
>>
>>  2011/5/12 liuyp2 <liuyp2 at asiainfo-linkage.com>
>>
>>>   conference Your-Conf-Name dial user/1002
>>>
>>>  ------------------------------
>>>  liuyp2
>>> 2011-05-12
>>>  ------------------------------
>>>  *发件人:* fieldpeak
>>> *发送时间:* 2011-05-12 11:11:41
>>> *收件人:* FreeSWITCH-users
>>> *抄送:*
>>> *主题:* [Freeswitch-users] call somebody into conference after
>>> conferenceestablished
>>>
>>> Hi Gurus,
>>>
>>> i dial 666 and enter a conference, then i need call some body's phone
>>> number to join him into this conference...
>>> is there anyone can advise how can realize this scenario?
>>>
>>> thanks.
>>>
>>> Regards,
>>> Charles
>>>
>>> _______________________________________________
>>> 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 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/20110519/5e50e6c8/attachment-0001.html 


More information about the FreeSWITCH-users mailing list