

# Conexión a Twilio
<a name="connecting-to-data-twilio"></a>

Twilio proporciona herramientas de comunicación programables para realizar y recibir llamadas telefónicas, enviar y recibir mensajes de texto y llevar a cabo otras funciones de comunicación mediante las API de sus servicios web. Las API de Twilio son la base tecnológica de la plataforma de comunicaciones. Estas API están respaldadas por una capa de software que conecta y optimiza las redes de comunicación globales, lo que permite a los usuarios realizar llamadas y enviar mensajes a cualquier persona, en cualquier lugar del mundo. Como usuario de Twilio, puede conectar AWS Glue a la cuenta de Twilio. A continuación, podrá utilizar Twilio como origen de datos en los trabajos de ETL. Ejecute estos trabajos para transferir datos entre Twilio y los servicios de AWS u otras aplicaciones compatibles.

**Topics**
+ [Compatibilidad de AWS Glue con Twilio](twilio-support.md)
+ [Políticas que contienen las operaciones de la API para crear y usar conexiones](twilio-configuring-iam-permissions.md)
+ [Configuración de Twilio](twilio-configuring.md)
+ [Configuración de conexiones a Twilio](twilio-configuring-connections.md)
+ [Cómo leer de entidades de Twilio](twilio-reading-from-entities.md)
+ [Opciones de conexión a Twilio](twilio-connection-options.md)
+ [Limitaciones y notas del conector de Twilio](twilio-connector-limitations.md)

# Compatibilidad de AWS Glue con Twilio
<a name="twilio-support"></a>

AWS Glue admite Twilio de la siguiente manera:

**¿Es compatible como origen?**  
Sí. Puede usar los trabajos de ETL de AWS Glue para consultar datos de Twilio.

**¿Es compatible como destino?**  
No.

**Versiones de la API de Twilio compatibles**  
Las siguientes versiones de la API de Twilio son compatibles:
+ v1
+ 2010-04-01

# Políticas que contienen las operaciones de la API para crear y usar conexiones
<a name="twilio-configuring-iam-permissions"></a>

En el siguiente ejemplo de política se describen los permisos de AWS IAM necesarios para crear y utilizar conexiones. Si va a crear un nuevo rol, cree una política que contenga lo siguiente:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

Si no desea utilizar el método anterior, puede utilizar las siguientes políticas de IAM administradas:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole): da acceso a recursos que precisan diversos procesos de AWS Glue para ejecutarse en su nombre. Entre estos recursos se incluyen AWS Glue, Amazon S3, IAM, CloudWatch Logs y Amazon EC2. Si aplica la convención de nomenclatura en los recursos especificados en esta política, los procesos de AWS Glue tienen los permisos necesarios. Normalmente, esta política se asocia a los roles que se especifican a la hora de definir rastreadores, trabajos y puntos de conexión de desarrollo.
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess): otorga acceso total a los recursos de AWS Glue cuando una identidad a la que está asociada la política utiliza la Consola de administración de AWS. Si sigue la convención de nomenclatura para los recursos especificados en esta política, los usuarios dispondrán de todas las funciones de la consola. Esta política se suele adjuntar a los usuarios de la consola AWS Glue.

# Configuración de Twilio
<a name="twilio-configuring"></a>

Antes de poder utilizar AWS Glue para transferir datos desde Twilio, debe cumplir estos requisitos:

## Requisitos mínimos
<a name="twilio-configuring-min-requirements"></a>

Los requisitos mínimos son los siguientes:
+ Tener una cuenta de Twilio con nombre de usuario y contraseña.
+ La cuenta de Twilio debe estar habilitada para el acceso a la API.

Si cumple estos requisitos, estará listo para conectar AWS Glue a la cuenta de Twilio. Para conexiones típicas, no necesita hacer nada más en Twilio.

# Configuración de conexiones a Twilio
<a name="twilio-configuring-connections"></a>

Twilio admite el nombre de usuario y la contraseña para la autenticación básica. La autenticación básica es un método de autenticación simple en el que los clientes proporcionan credenciales directamente para acceder a los recursos protegidos. AWS Glue puede utilizar el nombre de usuario (SID de la cuenta) y la contraseña (token de autenticación) para autenticar las API de Twilio.

Para consultar la documentación pública de Twilio sobre el flujo de autenticación básica, consulte [Autenticación básica \$1 Twilio](https://www.twilio.com/docs/glossary/what-is-basic-authentication).

Para configurar una conexión a Twilio:

1. En AWS Secrets Manager, cree un secreto con los siguientes detalles:
   + En la autenticación básica: el secreto debe contener el secreto del consumidor de la aplicación conectada junto con el **SID de la cuenta** (nombre de usuario) y el **token de autenticación** (contraseña).
**nota**  
Debe crear un secreto para las conexiones en AWS Glue.

1. En AWS Glue Glue Studio, cree una conexión en **Conexiones de datos** según los pasos que se indican a continuación:

   1. Al seleccionar un **Tipo de conexión**, elija Twilio.

   1. Proporcione la `[Edge\$1Location](https://www.twilio.com/docs/global-infrastructure/edge-locations)` de la instancia de Twilio a la que se quiere conectar.

   1. Seleccione el rol de AWS IAM que AWS Glue pueda asumir y que tenga permisos para las siguientes acciones:

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. Seleccione el `secretName` que desee usar para esta conexión en AWS Glue para colocar los tokens.

   1. Seleccione las opciones de red si quiere usar su red.

1. Conceda el rol de IAM asociado a su permiso de trabajo de AWS Glue para leer `secretName`.

# Cómo leer de entidades de Twilio
<a name="twilio-reading-from-entities"></a>

**Requisito previo**

Un objeto de Twilio desde el que desea leer. Necesitará el nombre del objeto, como `SMS-Message` o `SMS-CountryPricing`.

**Entidades compatibles como origen:**


| Entidad | Interfaz | Se puede filtrar | Admite límite | Admite Ordenar por | Admite Seleccionar \$1 | Admite partición | 
| --- | --- | --- | --- | --- | --- | --- | 
| SMS-Message | REST | Sí | Sí | No | Sí | Sí | 
| SMS-CountryPricing | REST | No | No | No | Sí | No | 
| Voice-Call | REST | Sí | Sí | No | Sí | No | 
| Voice-Application | REST | Sí | Sí | No | Sí | No | 
| Voice-OutgoingCallerID | REST | Sí | Sí | No | Sí | No | 
| Voice-Queue | REST | Sí | Sí | No | Sí | No | 
| Conversations-Conversation | REST | Sí | Sí | No | Sí | No | 
| Conversations-User | REST | No | Sí | No | Sí | No | 
| Conversations-Role | REST | No | Sí | No | Sí | No | 
| Conversations-Configuration | REST | No | No | No | Sí | No | 
| Conversations-AddressConfiguration | REST | Sí | Sí | No | Sí | No | 
| Conversations-WebhookConfiguration | REST | No | No | No | Sí | No | 
| Conversations-ParticipantConversation | REST | No | No | No | Sí | No | 
| Conversations-Credential | REST | No | Sí | No | Sí | No | 
| Conversations-ConversationService | REST | No | Sí | No | Sí | No | 

**Ejemplo:**

```
twilio_read = glueContext.create_dynamic_frame.from_options(
    connection_type="twilio",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "sms-message",
        "API_VERSION": "2010-04-01",
        "Edge_Location": "sydney.us1"
    }
```

**Detalles de entidades y campos de Twilio**:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/twilio-reading-from-entities.html)

## Consultas de partición
<a name="twilio-reading-partitioning-queries"></a>

**Campos que admiten la partición**:

En Twilio, los campos de tipo de datos DateTime admiten la partición basada en campos.

Puede proporcionar las opciones adicionales de Spark `PARTITION_FIELD`, `LOWER_BOUND`, `UPPER_BOUND` y `NUM_PARTITIONS` si quiere utilizar la simultaneidad en Spark. Con estos parámetros, la consulta original se dividiría en un número `NUM_PARTITIONS` de subconsultas que las tareas de Spark pueden ejecutar simultáneamente.
+ `PARTITION_FIELD`: el nombre del campo que se utilizará para particionar la consulta.
+ `LOWER_BOUND`: un valor de límite inferior **inclusivo** del campo de partición elegido.

  En el campo Datetime, aceptamos el formato de marca de tiempo de Spark que se utiliza en las consultas SQL de Spark.

  Ejemplos de valor válido:

  ```
  "2024-05-01T20:55:02.000Z"
  ```
+ `UPPER_BOUND`: un valor límite superior **exclusivo** del campo de partición elegido.
+ `NUM_PARTITIONS`: el número de particiones.

Ejemplo:

```
twilio_read = glueContext.create_dynamic_frame.from_options(
    connection_type="twilio",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "sms-message",
        "API_VERSION": "2010-04-01",
        "PARTITION_FIELD": "date_sent"
        "LOWER_BOUND": "2024-05-01T20:55:02.000Z"
        "UPPER_BOUND": "2024-06-01T20:55:02.000Z"
        "NUM_PARTITIONS": "10"
    }
```

# Opciones de conexión a Twilio
<a name="twilio-connection-options"></a>

Las siguientes son opciones de conexión para Twilio:
+ `ENTITY_NAME`(cadena): (obligatorio) se usa para lectura. El nombre del objeto en Twilio.
+ `EDGE_LOCATION`(Cadena): (obligatorio) Una ubicación periférica de Twilio válida.
+ `API_VERSION`(cadena): (obligatorio) se usa para lectura. Versión de la API de Rest de Twilio que desea usar. Twilio admite dos versiones de la API: “v1” y “01/04/2010”.
+ `SELECTED_FIELDS`(lista<Cadena>): predeterminado: empty(SELECT \$1). Se usa para leer. Columnas que desee seleccionar para el objeto.
+ `FILTER_PREDICATE`(cadena): predeterminado: vacío. Se usa para leer. Debe estar en el formato de Spark SQL.
+ `QUERY`(cadena): predeterminado: vacío. Se usa para leer. Consulta completa de Spark SQL.
+ `PARTITION_FIELD`(cadena): se usa para leer. Campo que se utilizará para particionar la consulta.
+ `LOWER_BOUND`(cadena): se usa para leer. Un valor de límite inferior inclusivo del campo de partición elegido.
+ `UPPER_BOUND`(cadena): se usa para leer. Un valor límite superior exclusivo del campo de partición elegido.
+ `NUM_PARTITIONS`(entero): predeterminado: 1. Se usa para leer. Número de particiones de lectura.
+ `INSTANCE_URL`(cadena): (obligatorio) se usa para lectura. Una URL de instancia de Twilio válida.

# Limitaciones y notas del conector de Twilio
<a name="twilio-connector-limitations"></a>

Las siguientes son limitaciones o notas para el conector de Twilio:
+ No se admite la partición basada en registros, ya que no hay ninguna provisión para recuperar el recuento total de registros de Twilio.
+ Los campos `date_sent`, `start_time` y `end_time` son del tipo de datos Datetime, pero al filtrarlos, solo admiten valores de fecha (no se tienen en cuenta los componentes de hora).
+ El filtrado de los campos “de” o “a” solo funciona si los valores no incluyen ningún prefijo (por ejemplo, un protocolo o una etiqueta). Si hay un prefijo, no funcionará el filtrado para el campo correspondiente. Por ejemplo, si transmite “a”: “whatsapp:\$114xxxxxxxxxx” como filtro, Twilio no devolverá ninguna respuesta. Tiene que transmitirlo como “a”: “\$114xxxxxxxx”, y devolverá los registros si existen.
+ El filtro del campo “identidad” es obligatorio al consultar la entidad `conversation-participant-conversation`.