Learn FreeSWITCH part 7 How to add SIP Trunk ( Gateway) - Omid-Mohajerani/freeswitch GitHub Wiki

PowerPoint: https://github.com/Omid-Mohajerani/freeswitch/blob/main/Slides/Freeswitch_training_part7_gateways.pptx

Video on Youtube: https://www.youtube.com/watch?v=JaLZQy-r5SE

Add gateway and ACL tags in SIP profile

vim /etc/freeswitch/sip_profiles/omid.xml

<profile name="omid">
        <aliases></aliases>
        <gateways>
                 <X-PRE-PROCESS cmd="include" data="gateways/*.xml"/>
        </gateways>
        <domains>
                <domain name="all" alias="true" parse="false"/>
        </domains>
        <settings>
                <param name="sip-ip" value="139.59.210.202"/>
                <param name="rtp-ip" value="139.59.210.202"/>
                <param name="sip-port" value="5070"/>
                <param name="context" value="public"/>
                <param name="auth-calls" value="true"/>
                <param name="apply-inbound-acl" value="domains"/>
        </settings>
</profile>

Note: Change 139.59.210.202 to your freeSWITCH Server IP Address.

Add Gateway

mkdir /etc/freeswitch/sip_profiles/gateways

vim /etc/freeswitch/sip_profiles/gateways/signalwire.xml
<gateway name="SignalWire">
          <param name="username" value="freeswitch"/>
          <param name="password" value="mypasshere"/>
          <param name="sip-port" value="5070"/>
          <param name="proxy" value="omid-3b54775746f0.sip.signalwire.com"/>
          <param name="realm" value="omid-3b54775746f0.sip.signalwire.com"/>
          <param name="register" value="true"/>
          <param name="context" value="SignalWire-Inbound"/>
          <param name="extension" value="1000"/>
</gateway>

Allow SignalWire IPs in ACL

vim /etc/freeswitch/autoload_configs/acl.conf.xml

<configuration name="acl.conf" description="Network Lists">
  <network-lists>
    <list name="lan" default="allow">
      <node type="deny" cidr="192.168.42.0/24"/>
      <node type="allow" cidr="192.168.42.42/32"/>
    </list>

    <list name="domains" default="deny">
      <node type="allow" cidr="23.146.240.70/32"/>
      <node type="allow" cidr="188.166.126.7/32"/>
      <node type="allow" cidr="167.99.198.84/32"/>
      <node type="allow" domain="$${domain}"/>
    </list>

  </network-lists>
</configuration>

Dialplan for incoming and outgoing calls

vim /etc/freeswitch/dialplan/company-a.xml

<?xml version="1.0" encoding="utf-8"?>
<include>
  <context name="company-a">

   <extension name="hello_world">
    <condition field ="destination_number" expression "^(123456)$">
     <action application="log" data="- ${caller_id_number} from Comapny A called  ${destination_number} -"/>
     <action application="playback" data="misc/misc-fss_contact_us.wav"/>
    </condition>
   </extension>

   <extension name="Internal Call">
    <condition field="destination_number" expression="^(100[0-9])$">
     <action application="set" data="dialed_extension=$1"/>
     <action application="bridge" data="user/${dialed_extension}@${domain_name}"/>
    </condition>
   </extension>

   <!-- Dial to pstn starting with 9-->
   <extension name="pstn">
    <condition field="destination_number" expression="^(60175649736)$">
     <action application="bridge" data="sofia/gateway/SignalWire/+$1"/>
    </condition>
   </extension>

   </context>


  <context name="SignalWire-Inbound">
    <extension name="FromSignalWire1000">
     <condition field="${destination_number}" expression="^1000$">
       <action application="log" data="- ${caller_id_number} called  ${destination_number} -"/>
       <action application="answer"/>
       <action application="sleep" data="1000"/>
       <action application="playback" data="misc/misc-fss_contact_us.wav"/>
      </condition>
    </extension>

   </context>



</include>

Reload SIP Profile and XML

fs_cli

reloadxml

sofia profile omid start

To verify of the trunk is registered use "sofia status" command in freeswitch console

⚠️ **GitHub.com Fallback** ⚠️