Routing with directory parameters

From FreeSWITCH Wiki
Jump to: navigation, search
Warning

NOTE All the text below was last edited in 2008, it is therefore likely out-of-date, inaccurate and in dire need of a refresh

 


Problem: You need to apply a different set of routing rules to a set of endpoints

Solution: Add a <variables> section to the directory entries. These parameters will be passed into the dialplan, and can be tested against just like other variables.

Note: You must force per-call authentication in your sofia.xml.conf for <variables> to be passed through to the dialplan.

directory.xml:

<domain name="$${domain}">
   <user id="phone1">
      <params>
         <param name="password" value="password1" />
      </params>
      <variables>
         <variable name="ruleset" value="internal" />
         <variable name="arbitrary" value="whatever" />
      </variables>
   </user>
   <user id="NoName2">
      <params>
         <param name="password" value="33451" />
      </params>
      <variables>
         <variable name="ruleset" value="courtesy" />
      </variables>
   </user>
</domain>

default_context.xml:

<context name="default">

   <extension name="internal_phones">
      <condition field="${ruleset}" value="internal" />
      <condition field="destination_number" expression="^(1?\d{10})">  <!-- LD and Local calls allowed -->
         <action application="bridge" data="sofia/gateway/[gateway_name]/$1" />
      </condition>
   </extension>

   <extension name="internal_phones">
      <condition field="${ruleset}" value="courtesy" />
      <condition field="destination_number" expression="^(\d{10})">   <!-- NO LD calls for you! -->
         <action application="bridge" data="sofia/gateway/[gateway_name]/$1" />
      </condition>
   </extension>

</context>