﻿---
title: "FreeSWITCH talks to MS Teams"
date: 2023-11-20T13:13:16-05:00
draft: false
---

Voy explicar como logre conectar FreeSWITCH con MS Team.

Para configurar MS TEAMS ver [Kamailio SBC MS Teams](/post/kamailio_sbc_msteams/)

Escenario confirmado.
```mermaid
flowchart LR
	MSTeams["MS Teams
	v.2023.6.21.5
	"]
	
	PBX["FreeSWITCH
	v1.10.10
	"]

	MSTeams ---|TLS/PUBLIC IP| PBX
```

Funcionalidades confirmadas:


* [X] Llamadas MSTeams a PBX 
* [X] Llamadas PBX a MSTeams
* [X] MSTeams Hold
* [X] MSTeams Park
* [X] MSTeams Unpark


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

en este profile habilitar:

```xml
  <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:

```xml
  <!-- 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.

```xml
<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.

```xml
<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.

```xml
<!-- 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"/>
...
```
