官术网_书友最值得收藏!

Outgoing calls

In order to make your system useful, you need a way to dial out to the "real world". This recipe will cover dialing out to the PSTN and allow you to connect to landlines, cellular phones, and so on. In this recipe, we'll make an extension that will allow an outbound call to any valid US number. We'll attempt to complete the call using the gateway named our_sip_provider (see the Configuring an SIP Gateway section in Chapter 2, Connecting Telephones and Service Providers).

Getting ready

Making outbound calls requires you to know the numbering format that your provider requires. For example, do they require all 11 digits for US dialing? Or will they accept 10? In our example, we're going to assume that our provider will accept a 10-digit format for US dialing (for example, without the international prefix "1").

How to do it...

Routing outbound calls is simply a matter of creating a dialplan entry:

  1. Create a new file in conf/dialplan/default/ named outbound_calls.xml. then add the following text:
    <include>
    <extension name="outbound_calls">
    <condition field="destination_number" expression="^1?([2-9]\d{2}[2-9]\d{6})$">
    <action application="bridge" data="sofia/gateway/our_sip_provider/$1"/>
    </condition>
    </extension>
    </include>
  2. Save your XML file and issue the reloadxml command at fs_cli.

How it works...

Assuming you have a phone set up on the default context, your regular expression will match any destination_number that follows the US dialing format (10 or 11 digits), and send the call to our_sip_provider in a 10-digit format. The format in regexp is as follows: optional "1", then one digit between 2 and 9, then two digits, then one digit between 2 and 9, and finally six digits. Only the part after the optional digit "1" is captured by the parentheses and passed down in the $1 variable.

There's more...

The regular expression matching in FreeSWITCH allows the privilege of having very powerful conditions. You can also match caller_id_number to route calls from a user calling from extension 1011 out to the second gateway called our_second_sip_provider, while everyone else will be sent through our_sip_provider. Consider the following alternative outbound_calls.xml file:

<include>
<extension name="outbound_calls_from_1011">
<condition field="caller_id_number" expression="^1011$"/>
<condition field="destination_number"
   expression="^1?([2-9]\d{2}[2-9]\d{6})$">
<action application="bridge" data="sofia/gateway/our_second_sip_provider/$1"/>
</condition>
</extension>
<extension name="outbound_calls">
<condition field="destination_number"
    expression="^1?([2-9]\d{2}[2-9]\d{6})$">
<action application="bridge" data="sofia/gateway/our_sip_provider/$1"/>
</condition>
</extension>
</include>

Note that we have two extensions. The first one tries to match the caller_id_number field to the value 1011. If it matches 1011, then the call gets sent to the our_second_sip_provider gateway. Otherwise, the next extension is matched and the call goes to the our_sip_provider gateway. Note that we use $1 to capture the matching value in the conditions' expressions. In each case, we capture exactly 10 digits, which correspond to the area code (three digits), exchange (three digits), and phone number (four digits). These are North American Numbering Plan (NANP) numbers. The regular expressions used to capture the format of dialed digits vary, depending upon the country.

Note

Regular expressions can be a challenge. There are a number of examples with explanations on the FreeSWITCH wiki. See http://freeswitch.org/confluence/display/FREESWITCH/Regular+Expression for further details.

See also

  • The Configuring an SIP phone to register with FreeSWITCH and Configuring an SIP gateway sections in Chapter 2, Connecting Telephones and Service Providers
主站蜘蛛池模板: 康定县| 罗平县| 泾源县| 八宿县| 江都市| 肥乡县| 邹平县| 贵港市| 图木舒克市| 皋兰县| 铁岭市| 南漳县| 中超| 中阳县| 高州市| 改则县| 镇宁| 滦平县| 买车| 观塘区| 九龙县| 陆川县| 武冈市| 钟山县| 安岳县| 陇川县| 南充市| 安西县| 泸水县| 潞西市| 寿宁县| 丰镇市| 勃利县| 定西市| 临江市| 汽车| 恩施市| 克东县| 陇西县| 衡山县| 曲麻莱县|