FreeSWITCH talks to MS Teams

Voy explicar como logre conectar FreeSWITCH con MS Team.

Para configurar MS TEAMS ver Kamailio SBC MS Teams

Escenario confirmado.

flowchart LR MSTeams["MS Teams v.2023.6.21.5 "] PBX["FreeSWITCH v1.10.10 "] MSTeams ---|TLS/PUBLIC IP| PBX

Funcionalidades confirmadas:

  • Llamadas MSTeams a PBX
  • Llamadas PBX a MSTeams
  • MSTeams Hold
  • MSTeams Park
  • MSTeams Unpark

Crear sofia profile para ser usado en las conexiones a MS Teams,

en este profile habilitar:

  <param name="tls-only" value="true"/>
  <param name="full-id-in-dialplan" value="true"/>
  <param name="inbound-use-callid-as-uuid" value="true"/>
  <param name="outbound-use-uuid-as-callid" value="true"/>

crear pasarela a MS Teams:

  <!-- sustituir mysbc.bit4bit.in por el nombre registrado en MS Teams -->
  <gateway name="mysbc.bit4bit.in">
    <param name="realm" value="mysbc.bit4bit.in"/>
    <param name="register" value="false"/>
    <param name="caller-id-in-from" value="true"/>
    <param name="contact-in-ping" value="true"/>
    <param name="contact-host" value="mysbc.bit4bit.in"/>
    <param name="extension-in-contact" value="true"/>
    <param name="ping" value="30"/>
    <param name="register-transport" value="tls"/>
    <param name="cid-type" value="pid"/>
  </gateway>

al refrescar los perfiles y pasarelas en FreeSWITCH, ya podríamos ver que tenemos conexiones en ambos sentidos.

Ahora para lanzar llamadas al MS Teams desde FreeSWITCH.

<condition...>
  <action application="export" data="nolocal:sip_secure_media=true"/>
  <action application="export" data="nolocal:rtp_secure_media=true"/>
  <action application="bridge" data="{absolute_codec_string=G722}sofia/gateway/mysbc.bit4bit.in/+NUMERO"/>
</condition>

Y para gestionar Hold y Transferencias desde MS Teams.

<extension name="refer-msteams extract referred_by" continue="true">
  <condition field="${sip_refer_to}" expression="microsoft\.com"/>
  <condition field="${sip_h_Referred-By}" expression="^<(.+)>$">
    <action application="set" data="sip_referrer_by_extracted=$1"/>
  </condition>
</extension>

<extension name="refer-msteam">
  <condition field="${sip_refer_to}" expression="microsoft\.com"/>
  <condition field="${sip_referrer_by_extracted}" expresion="(.+)">
    <action application="export" data="nolocal:sip_invite_to_uri=$1"/>
    <action application="export" data="nolocal:sip_invite_req_uri=$1"/>
    <action application="export" data="nolocal:sip_secure_media=true"/>
    <action application="export" data="nolocal:rtp_secure_media=true"/>
    <action application="bridge" data="{absolute_codec_string=G722}sofia/gateway/mysbc.bit4bit.in"/>
  </condition>
</extension>

Para recibir llamadas desde MS Teams, debemos ajustar los planes de la siguiente manera.

<!-- las llamadas desde MS Teams llegarian como 31000@mysbc.bit4bit.in -->
<condition field="destination_number" expresion="^3(\d{9})@.+$">

...
<action application="set" data="sip_secure_media=true"/>
<action application="set" data="disable_q850_reason=true"/>
...