Requisitos de conectividad de red de los SDK de Voice
El SDK de Twilio Client para JavaScript ahora se llama SDK de Twilio Voice para JavaScript.
En el siguiente artículo se describen los requisitos de conectividad de red de los SDK de Voice de Twilio. Se muestra una lista de los puertos y direcciones IP de los servidores de Twilio a los que los SDK deben poder conectarse y el ancho de banda requerido para obtener audio de calidad.
Lista de comprobación de conectividad
- Elige la edge (ubicación periférica) a la que te conectarás y habilita los servidores de medios y servidores de señalización.
- Si utilizas una ubicación periférica de baja latencia global, comprueba los requisitos.
- Si tienes acceso a ubicaciones periféricas de interconexión privada, deberás permitir estos destinos
- Asegúrate de cumplir los requisitos de ancho de banda.
- Revisa las sugerencias y las prácticas recomendadas.
- Prueba la conectividad con esta herramienta de comprobación de red.
Descripción general de la conectividad
Las aplicaciones que utilizan los SDK de Voice de Twilio deben conectarse a la infraestructura de Twilio para poder realizar y recibir llamadas. Como se muestra en el siguiente diagrama, se necesitan dos tipos de conexiones: de señalización y multimedia.
La conexión de señalización es una conexión TLS segura que se utiliza para enviar y recibir información de control a fin de configurar las llamadas.
La conexión multimedia es una conexión SRTP (Secure Real-Time Transport Protocol) segura que se utiliza para enviar y recibir audio.
La infraestructura de Programmable Voice de Twilio está implementada en edges (ubicaciones periféricas) de todo el mundo. De forma predeterminada, los SDK utilizan baja latencia global (GLL) a fin de determinar la ubicación periférica de Twilio que sea óptima para conectarse.
Configuración del firewall
En la configuración de red típica de una organización, se utiliza un firewall para proteger los hosts de la red privada de Internet. Los firewalls están configurados con reglas para bloquear o permitir el tráfico hacia y desde los destinos de Internet según la dirección, el protocolo y la dirección IP.
Para acceder a Twilio, tu firewall debería permitir el tráfico TCP y UDP saliente desde tus aplicaciones hacia la infraestructura de Twilio, así como permitir el tráfico de retorno como respuesta. Twilio nunca iniciará una conexión con las aplicaciones que utilizan el SDK. Por lo tanto, el firewall no debe permitir conexiones iniciadas externamente de vuelta en la red.
En las secciones de Requisitos de conectividad que aparecen a continuación, se muestra una lista de las direcciones IP y los puertos de destino necesarios. El firewall debe estar configurado para permitir la conectividad con los servidores multimedia y las puertas de enlace de señalización correspondientes al SDK que estás utilizando.
Requisitos de conectividad de los servidores multimedia de Voice
Your Intranet |
Allowed destinations |
||||
Secure Media (ICE/STUN/SRTP) Edge Locations |
Protocol |
Source IP |
Source Port † |
Destination IP Ranges |
Destination Port Range |
|
UDP |
ANY |
ANY |
and
|
10,000 - 20,000 |
|
UDP |
ANY |
ANY |
and
|
10,000 - 20,000 |
|
UDP |
ANY |
ANY |
and
|
10,000 - 20,000 |
|
UDP |
ANY |
ANY |
and
|
10,000 - 20,000 |
|
UDP |
ANY |
ANY |
and
|
10,000 - 20,000 |
|
UDP |
ANY |
ANY |
and
|
10,000 - 20,000 |
|
UDP |
ANY |
ANY |
and
|
10,000 - 20,000 |
|
UDP |
ANY |
ANY |
All IP addresses listed above |
10,000 - 20,000 |
† The SDK will select any available port from the ephemeral range. On most machines, this means the port range 1,024 to 65,535.
Requisitos de conectividad de señalización
Los requisitos de señalización difieren entre el SDK de Voice para JavaScript y los SDK para dispositivos móviles. En la siguiente sección se proporcionan los requisitos de conectividad para cada uno de estos SDK.
Tu Intranet |
Destinos permitidos |
||||
|
Protocolo |
IP de origen |
Puerto de origen † |
Destino |
Puerto de destino |
SDK de Voice para JavaScript |
|||||
Conexión TLS segura a la puerta de enlace de señalización de Twilio |
TCP |
CUALQUIERA |
CUALQUIERA |
|
443 |
Conexión TLS segura a la puerta de enlace de señalización de Twilio |
TCP |
CUALQUIERA |
CUALQUIERA |
|
443 |
Conexión TLS segura a las puertas de enlace de señalización regionales de Twilio |
TCP |
CUALQUIERA |
CUALQUIERA |
{La region es una de las siguientes opciones: au1, br1, de1, ie1, jp1, sg1, us1} |
443 |
Conexión TLS segura a la puerta de enlace de registro de Insights |
TCP |
CUALQUIERA |
CUALQUIERA |
|
443 |
SDK de Voice para dispositivos móviles |
|||||
Conexión TLS segura a la puerta de enlace de señalización de GLL de Twilio |
TCP |
CUALQUIERA |
CUALQUIERA |
|
443 (10194 §) |
Conexión TLS segura a las puertas de enlace de señalización regionales de Twilio |
TCP |
CUALQUIERA |
CUALQUIERA |
{La region es una de las siguientes opciones: au1, br1, de1, ie1, jp1, sg1, us1} |
443 (10194 §) |
Conexión TLS segura a la puerta de enlace de Insights |
TCP |
CUALQUIERA |
CUALQUIERA |
|
443 |
Conexión TLS segura al servidor de registro |
TCP |
CUALQUIERA |
CUALQUIERA |
|
443 |
† El cliente seleccionará cualquier puerto disponible del rango efímero. En la mayoría de los equipos, esto significa que el rango de puertos va desde 1024 hasta 65 535.
§ Las versiones de los SDK móviles anteriores a la 3.x requieren el puerto 10194, en lugar del 443. Si aún utilizas una versión anterior a la 3.x, te recomendamos que la actualices a la versión más reciente
Ubicaciones periféricas de interconexión privada
Si tienes acceso a las conexiones privadas de interconexión, también podrás utilizar uno de los siguientes valores:
Tu Intranet |
Destinos permitidos |
||||
|
Protocolo |
IP de origen |
Puerto de origen † |
Destino |
Puerto de destino |
us1-ix
|
TCP | CUALQUIERA | CUALQUIERA | 208.78.112.64 - 208.78.112.127 |
443 |
UDP | CUALQUIERA | CUALQUIERA | 208.78.112.64 - 208.78.112.127 |
10000-20000 | |
us2-ix |
TCP |
CUALQUIERA |
CUALQUIERA |
|
443 |
UDP |
CUALQUIERA |
CUALQUIERA |
|
10000-20000 |
|
ie1-ix |
TCP |
CUALQUIERA |
CUALQUIERA |
|
443 |
UDP | CUALQUIERA |
CUALQUIERA |
|
10000-20000 | |
de1-ix
|
TCP |
CUALQUIERA |
CUALQUIERA |
|
443 |
UDP | CUALQUIERA |
CUALQUIERA |
|
10000-20000 | |
sg1-ix** |
TCP |
CUALQUIERA |
CUALQUIERA |
|
443 |
UDP | CUALQUIERA |
CUALQUIERA |
|
10000-20000 | |
jp1-ix** |
TCP | CUALQUIERA | CUALQUIERA | 103.144.142.68 - 103.144.142.69 - 103.144.142.70 |
443 |
UDP | CUALQUIERA |
CUALQUIERA |
|
10000-20000 | |
au1-ix** |
TCP |
CUALQUIERA |
CUALQUIERA |
|
443 |
UDP | CUALQUIERA |
CUALQUIERA |
|
10000-20000 |
† El cliente seleccionará cualquier puerto disponible del rango efímero. En la mayoría de los equipos, esto significa que el rango de puertos va desde 1024 hasta 65 535.
** Requiere el SDK 1.9.5+ de Voice para JavaScript
Requisitos de ancho de banda de red
En la siguiente tabla se muestra una lista de los requisitos de red para ofrecer audio de una calidad razonable.
Ancho de banda (conexión de subida/conexión de bajada) |
Opus*: 40 kbps/40 kbps PCMU: 100 kbps/100 kbps |
Latencia (RTT) |
< 200 ms |
Fluctuación |
< 30 ms |
Pérdida de paquetes |
< 3 % |
* El códec Opus está disponible en la versión 1.7 del SDK de Voice para JavasScript y en la versión 3.x de los SDK de Voice para dispositivos móviles
Ten en cuenta que los requisitos de ancho de banda de Opus mencionados anteriormente son los valores predeterminados de Opus. Para admitir el control de ancho de banda, el códec Opus te permite especificar cuánto ancho de banda debe usar. Consulta la sección Sugerencias y prácticas recomendadas que aparece a continuación para saber cómo configurar los requisitos de ancho de banda de Opus.
Requisitos de baja latencia global
GLL es una característica de AWS Route53 que resuelve un nombre de host en la ubicación periférica con menor latencia. De esta forma, se elimina la necesidad de que el desarrollador de la aplicación determine desde dónde se conecta el usuario final o elija manualmente a qué ubicación periférica conectarse.
Sin embargo, para que GLL proporcione resultados precisos, el DNS intermedio debe cumplir con esto:
- Debe ser compatible con RFC 7871: Subred de client (cliente) en consultas de DNS.
- Debe estar en la misma edge (ubicación periférica) que el punto final del SDK. Por ejemplo, un host en los EE. UU. configurado con una VPN en Europa o configurado con un servidor DNS que está en Europa se conectará a una ubicación periférica de Twilio en Europa.
Si el DNS intermedio no es compatible con RFC 7871 y la dirección IP del DNS ascendente es una dirección Anycast, por ejemplo, 8.8.8.8, no hay garantía de que Route53 determine con precisión la mejor ubicación periférica a la que conectarse.
Cómo determinar si GLL funcionará
Para determinar si tu DNS es compatible con GLL, utiliza los comandos dig o nslookup de la siguiente manera:
dig edns-client-sub.net TXT
O mediante nslookup
nslookup -type=txt edns-client-sub.net
Un servidor DNS compatible con esta RFC tendrá ecs establecido en True y contendrá un objeto ecs_payload:
;; ANSWER SECTION:
edns-client-sub.net. 30 IN TXT "{'ecs_payload':{'family':'1','optcode':'0x08','cc':'US','ip':'34.225.44.0','mask':'24','scope':'0'},'ecs':'True','ts':'1588973397.05','recursive':{'cc':'US','srcip':'208.69.32.67','sport':'11807'}}"
Un servidor que no sea compatible con esta RFC tendrá ecs establecido en False:
;; ANSWER SECTION:
edns-client-sub.net. 0 IN TXT "{'ecs':'False','ts':'1588973475.23','recursive':{'cc':'US','srcip':'76.96.15.65','sport':'54989'}}"
Sugerencias y prácticas recomendadas
Utiliza una ubicación periférica específica
Si tienes una red restrictiva y especificas GLL al momento de conectarte con Twilio, deben permitirse todas las direcciones IP del servidor multimedia en todas las ubicaciones periféricas. Si no estás operando en todas las ubicaciones periféricas, te recomendamos que especifiques la ubicación periférica más cercana a la implementación. Con este enfoque, solo tendrás que permitir las direcciones del servidor multimedia de la ubicación que especifiques.
Para seleccionar la ubicación periférica, utiliza el siguiente fragmento de código:
const device = new Twilio.Device(token, { edge: 'ashburn'});
//o
const device = new Twilio.Device(token);
device.updateOptions({ edge: 'ashburn' });
// En versiones anteriores a v2.0, device.setup(token, { edge: 'ashburn' })
// era lo que se usaba. A partir de v2.0, device.setup() está obsoleto.
// Antes de la versión v1.11 se utilizaba el parámetro region.
// Ahora region está obsoleto, utiliza edge
Twilio.Device.setup(token, { region: 'us1'});
// Configura la ubicación periférica
Voice.setEdge("ashburn");
// Luego, puedes conectar o gestionar las notificaciones de llamadas entrantes
// Antes del SDK 5.3 para Android, se utilizaba region
// region ahora está obsoleto y se debe usar edge
Voice.setRegion("us1");
// Configura la ubicación periférica
TwilioVoice.edge = "ashburn"
// Luego, puedes conectar o gestionar las notificaciones de llamadas entrantes
// Antes del SDK 5.4 para iOS, se utilizaba region
// region ahora está obsoleto y se debe usar edge
TwilioVoice.region = "us1"
Consulta la documentación de la API para iOS a fin de obtener más información.
Utiliza el servicio de recorrido transversal de red (NTS) de Twilio cuando no se puedan permitir los puertos UDP
Para obtener la mejor calidad de audio, el firewall debe permitir a los hosts locales iniciar la conexión con Twilio y enviar tráfico UDP (DTLS/SRTP) a los servidores multimedia de Twilio.
Sin embargo, si tu política de red prohíbe la conectividad UDP, puedes utilizar el servicio de recorrido transversal de red (NTS) global de Twilio para establecer la conectividad multimedia a través de TCP o TLS. Consulta la documentación del NTS para obtener una lista de servidores y puertos TURN que también se deben permitir.
Ten en cuenta que el uso de TURN conlleva cargos adicionales según el precio del NTS. Consulta el servicio de recorrido transversal de red global para obtener más información.
Utiliza el códec Opus para controlar los requisitos de ancho de banda
El códec Opus tiene muchas ventajas en comparación con PCMU y tus aplicaciones deben utilizarlo. Opus es el códec predeterminado de los SDK móviles.
Para utilizar Opus en la aplicación web, utiliza el siguiente fragmento de código a la hora de crear una instancia de Twilio.Device
o a la hora de actualizar las opciones de Twilio.Device
con updateOptions(options)
.
const device = new Twilio.Device(token, { codecPreferences: ['opus', 'pcmu']});
//o
const device = new Twilio.Device(token);
device.updateOptions({ codecPreferences: ['opus', 'pcmu']});
Para establecer un ancho de banda personalizado (16 kbps), utiliza el siguiente fragmento de código:
const device = new Twilio.Device(token, { codecPreferences: ['opus', 'pcmu'], maxAverageBitrate: 16000} );
// o
const device = new Twilio.Device(token);
device.updateOptions({ codecPreferences: ['opus', 'pcmu'], maxAverageBitrate: 16000});
Utiliza la interconexión privada de Twilio para mejorar la seguridad y el control del ancho de banda
Twilio ofrece varias soluciones para la conectividad privada y segura con Twilio. Consulta https://www.twilio.com/interconnect para obtener más información.
Temas relacionados
¿Primeros pasos? Consulta todas nuestras guías introductorias.
Consulta más sobre nuestras prácticas recomendadas.
Lee más sobre las Edge Locations (ubicaciones periféricas) de Twilio.
Comprueba la conectividad con Twilio mediante esta herramienta de evaluación de red.
¿Necesitas ayuda?
Todos la necesitamos a veces; la programación es difícil. Obtén ayuda ahora de nuestro equipo de soporte, o recurre a la sabiduría de la multitud visitando Stack Overflow Collective de Twilio o navegando por la etiqueta de Twilio en Stack Overflow.