🚀 Presentación 3 (Parte 3) - Mundo Real: Redes, Rendimiento y NAT
Parte 2: El Corazón de la Llamada: Un Deep Dive en SIP y PJSIP
Análisis detallado del flujo SIP y configuración práctica de PJSIP - Parte 2
🚀 Presentación 3 (Parte 2): Fundamentos VoIP para la Era IA
Sección titulada «🚀 Presentación 3 (Parte 2): Fundamentos VoIP para la Era IA»💡 El Corazón de la Llamada: Un Deep Dive en SIP y PJSIP
Sección titulada «💡 El Corazón de la Llamada: Un Deep Dive en SIP y PJSIP»💃 1. El Diálogo de la Llamada: La Danza de SIP
Sección titulada «💃 1. El Diálogo de la Llamada: La Danza de SIP»Paso 1:
INVITE(La Invitación)- El Teléfono A (el que llama) envía un mensaje
INVITEa Asterisk. - ”Hola Asterisk, soy 1001 y quiero hablar con 1002. Aquí está mi SDP: sé usar G.711 y Opus.”
- El Teléfono A (el que llama) envía un mensaje
Paso 2:
100 Trying(Intentando)- Asterisk responde al Teléfono A para indicar que está procesando.
Paso 3:
180 Ringing(Sonando)- Asterisk contacta al Teléfono B; informa al A que está sonando.
Paso 4:
200 OK(Aceptación)- El Teléfono B contesta y envía su SDP.
Paso 5:
ACK(Acuse de recibo)- Confirmación final; se establece la sesión.
Paso 6: Flujo RTP (Conversación)
- Comienza el audio usando el códec negociado.
Paso 7:
BYE(Despedida)- Uno de los extremos solicita cerrar.
Paso 8:
200 OK(Confirmación)- Confirmación de cierre de sesión.
2. Definiendo los Roles: UAC y UAS
Sección titulada «2. Definiendo los Roles: UAC y UAS»En la danza de SIP, cada participante tiene un rol definido en cada momento.
-
UAC (User Agent Client): Es el cliente, el que inicia una solicitud SIP.
- En nuestro ejemplo, el Teléfono A fue el UAC cuando envió el
INVITEinicial.
- En nuestro ejemplo, el Teléfono A fue el UAC cuando envió el
-
UAS (User Agent Server): Es el servidor, el que responde a una solicitud SIP.
- En nuestro ejemplo, Asterisk y luego el Teléfono B actuaron como UAS al responder al
INVITE.
- En nuestro ejemplo, Asterisk y luego el Teléfono B actuaron como UAS al responder al
La Clave: Un dispositivo telefónico no es uno u otro. Es ambos. Cuando llamas, tu teléfono actúa como UAC. Cuando recibes una llamada, el mismo teléfono actúa como UAS. Esta dualidad es fundamental para el funcionamiento de SIP.
3. El Momento Preciso: SIP como Gatillo para la IA
Sección titulada «3. El Momento Preciso: SIP como Gatillo para la IA»Entender el flujo de SIP no es solo teoría académica. Para nosotros, es la clave para ejecutar acciones de IA de manera eficiente y en el momento exacto.
-
¿Cuándo empezamos a transcribir una llamada?
- Respuesta Incorrecta: Al recibir el
INVITE. La llamada podría no ser contestada, y estaríamos gastando recursos de IA innecesariamente. - Respuesta Correcta: Después de que se ha enviado y recibido el
ACK. Este es el punto exacto en que la llamada se establece formalmente y el audio RTP comienza a fluir.
- Respuesta Incorrecta: Al recibir el
-
¿Cuándo ejecutamos un análisis post-llamada (como nuestro proyecto de sentimiento)?
- Respuesta Correcta: Inmediatamente después de recibir el
BYE. Esto nos indica que la conversación ha finalizado y el archivo de grabación de audio está completo y listo para ser procesado.
- Respuesta Correcta: Inmediatamente después de recibir el
Pensar como un experto en VoIP + IA significa usar los estados de señalización de SIP como triggers (disparadores) para nuestras aplicaciones inteligentes.
4. Traduciendo Teoría a Práctica: El Modelo de Objetos de PJSIP
Sección titulada «4. Traduciendo Teoría a Práctica: El Modelo de Objetos de PJSIP»Ahora veamos cómo Asterisk 22 gestiona todo esto internamente. Como vimos en la Parte 1, PJSIP utiliza un modelo de objetos modulares. Así es como se ven en un archivo de configuración real (pjsip.conf).
-
transport- El Muelle de Carga- Único Propósito: Define CÓMO escucha Asterisk las conexiones. Es la puerta de entrada.
- Configuración Típica:
[transport-udp]type=transportprotocol=udp ; El protocolo a usar (UDP es el estándar para SIP)bind=0.0.0.0:5060 ; Escucha en todas las interfaces de red, en el puerto 5060
-
auth- El Guardia de Seguridad- Único Propósito: Define QUIÉN es alguien. Valida el usuario y la contraseña.
- Configuración Típica:
[auth-1001]type=authauth_type=userpass ; Autenticación por usuario y contraseñausername=1001password=unaClaveMUYSegura123!
-
aor(Address of Record) - La Agenda de Contactos- Único Propósito: Define DÓNDE está un usuario. Mantiene un registro de las direcciones IP donde un dispositivo se ha registrado.
- Configuración Típica:
[aor-1001]type=aormax_contacts=2 ; Permite que la extensión 1001 se registre desde 2 dispositivos a la vez
-
endpoint- El Perfil del Usuario- Único Propósito: Define QUÉ puede hacer un usuario. Es el objeto principal que une todo lo demás y define el comportamiento de la llamada.
- Configuración Típica:
[endpoint-1001]type=endpointcontext=internal ; ¿A qué parte del dialplan va esta llamada?disallow=all ; Prohíbe todos los códecs primeroallow=ulaw ; Y luego permite solo los que queremosallow=opusauth=auth-1001 ; ¿Qué credenciales de 'auth' debe usar?aors=aor-1001 ; ¿A qué 'aor' pertenece para ser localizado?
5. La Magia de la Vinculación: Cómo se Conectan los Objetos
Sección titulada «5. La Magia de la Vinculación: Cómo se Conectan los Objetos»La brillantez de PJSIP es cómo estos objetos, que son independientes, se vinculan para formar un “teléfono” completo.
Cuando una llamada llega desde 192.168.1.50 queriendo ser 1001:
- El
transport-udprecibe el paquete en el puerto5060. - Asterisk busca un
endpointque coincida. Encuentraendpoint-1001. - El
endpoint-1001dice: “Para hablar conmigo, debes autenticarte usandoauth-1001”. - Asterisk usa las credenciales de
auth-1001para validar al dispositivo. - Una vez validado, el
endpoint-1001dice: “Pertenezco alaor-1001”. - Asterisk registra la IP
192.168.1.50en elaor-1001. - Finalmente, el
endpoint-1001dice: “Las llamadas desde aquí deben ir al contextointernaldel dialplan”.
Esta separación nos da un control granular que era imposible con
chan_sip.
6. Un Vistazo al Protocolo Nativo: IAX2
Sección titulada «6. Un Vistazo al Protocolo Nativo: IAX2»Aunque SIP es el estándar de la industria, es importante conocer IAX2 (Inter-Asterisk eXchange protocol), el protocolo nativo de Asterisk.
- Diseñado por: Mark Spencer, el creador de Asterisk.
- Principales Ventajas:
- Amigable con NAT: Usa un solo puerto (UDP 4569) tanto para la señalización como para el audio, lo que simplifica enormemente las configuraciones de firewall.
- Eficiencia en Trunks: Puede agrupar múltiples llamadas dentro de un solo “trunk”, reduciendo el overhead de ancho de banda.
- Principal Desventaja:
- Menor Adopción: Es un estándar de facto solo en el mundo Asterisk. La gran mayoría de teléfonos, proveedores y sistemas de terceros hablan SIP.
¿Cuándo usarlo? IAX2 es una excelente opción para interconectar dos servidores Asterisk entre sí a través de internet. Para registrar teléfonos y conectarse con el mundo exterior, SIP/PJSIP sigue siendo el rey.
Resumen de la Parte 2 y Próximos Pasos
Sección titulada «Resumen de la Parte 2 y Próximos Pasos»- Hemos desglosado la danza de una llamada SIP y entendido los roles de UAC y UAS.
- Vimos cómo los estados de SIP son los disparadores perfectos para nuestras aplicaciones de IA.
- Profundizamos en el modelo de objetos PJSIP, entendiendo el rol de
transport,auth,aoryendpoint. - Comprendimos la lógica de vinculación que hace a PJSIP tan potente y flexible.
En la Parte 3, nos enfrentaremos al mundo real: Hablaremos de los problemas que degradan la calidad del audio (latencia, jitter), cómo calcular el ancho de banda real que necesitamos y cómo superar los desafíos de los firewalls y NAT.