Saltearse al contenido

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 INVITE a Asterisk.
    • ”Hola Asterisk, soy 1001 y quiero hablar con 1002. Aquí está mi SDP: sé usar G.711 y Opus.”
  • 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.

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 INVITE inicial.
  • 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.

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.
  • ¿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.

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=transport
      protocol=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=auth
      auth_type=userpass ; Autenticación por usuario y contraseña
      username=1001
      password=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=aor
      max_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=endpoint
      context=internal ; ¿A qué parte del dialplan va esta llamada?
      disallow=all ; Prohíbe todos los códecs primero
      allow=ulaw ; Y luego permite solo los que queremos
      allow=opus
      auth=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:

  1. El transport-udp recibe el paquete en el puerto 5060.
  2. Asterisk busca un endpoint que coincida. Encuentra endpoint-1001.
  3. El endpoint-1001 dice: “Para hablar conmigo, debes autenticarte usando auth-1001”.
  4. Asterisk usa las credenciales de auth-1001 para validar al dispositivo.
  5. Una vez validado, el endpoint-1001 dice: “Pertenezco al aor-1001”.
  6. Asterisk registra la IP 192.168.1.50 en el aor-1001.
  7. Finalmente, el endpoint-1001 dice: “Las llamadas desde aquí deben ir al contexto internal del dialplan”.

Esta separación nos da un control granular que era imposible con chan_sip.


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:
    1. 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.
    2. Eficiencia en Trunks: Puede agrupar múltiples llamadas dentro de un solo “trunk”, reduciendo el overhead de ancho de banda.
  • Principal Desventaja:
    1. 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.


  • 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, aor y endpoint.
  • 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.