

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 連線至 Twilio
<a name="connecting-to-data-twilio"></a>

Twilio 提供可程式設計的通訊工具，用於撥打和接聽電話、傳送和接收簡訊，以及使用 Web 服務 API 執行其他通訊功能。Twilio 的 API 為其通訊平台提供支援。這些 API 背後是一個軟體層，其連接並最佳化世界各地的通訊網路，可讓您的使用者呼叫和傳送訊息給全球的任何人。身為 Twilio 使用者，您可以 AWS Glue 連線至您的 Twilio 帳戶。然後，您可以在 ETL 任務中使用 Twilio 作為資料來源。執行這些任務以在 Twilio AWS 和服務或其他支援的應用程式之間傳輸資料。

**Topics**
+ [AWS Glue 支援 Twilio](twilio-support.md)
+ [包含用於建立和使用連線的 API 操作的政策](twilio-configuring-iam-permissions.md)
+ [設定 Twilio](twilio-configuring.md)
+ [設定 Twilio 連線](twilio-configuring-connections.md)
+ [從 Twilio 實體中讀取](twilio-reading-from-entities.md)
+ [Twilio 連線選項](twilio-connection-options.md)
+ [Twilio 連接器的限制和備註](twilio-connector-limitations.md)

# AWS Glue 支援 Twilio
<a name="twilio-support"></a>

AWS Glue 支援 Twilio，如下所示：

**支援作為來源？**  
是。您可以使用 AWS Glue ETL 任務從 Twilio 查詢資料。

**支援作為目標？**  
否。

**支援的 Twilio API 版本**  
支援以下 Twilio API 版本：
+ v1
+ 2010-04-01

# 包含用於建立和使用連線的 API 操作的政策
<a name="twilio-configuring-iam-permissions"></a>

下列範例政策說明建立和使用 連線所需的 AWS IAM 許可。如果您要建立新角色，請建立包含下列項目的政策：

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

****  

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

------

如果不想使用上述方法，可選擇使用下列受管 IAM 政策：
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – 准許存取各種 AWS Glue 程序代表您執行所需的資源。這些資源包括 AWS Glue Amazon S3、IAM、CloudWatch Logs 和 Amazon EC2。如果您遵循此政策中指定資源的命名慣例，則 AWS Glue 程序具有必要的許可。此政策通常會連接至定義編目程式、工作和開發端點時所指定的角色。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) – 當政策連接至 的身分使用 AWS 管理主控台時，授予 AWS Glue 資源的完整存取權。如果您依照此政策中指定的資源命名慣例，使用者就能擁有完整的主控台功能。此政策通常連接到 AWS Glue 主控台的使用者。

# 設定 Twilio
<a name="twilio-configuring"></a>

您必須先符合下列要求，才能使用 從 Twilio AWS Glue 傳輸資料：

## 最低需求
<a name="twilio-configuring-min-requirements"></a>

以下是最低要求：
+ 您擁有一個帶有使用者名稱和密碼的 Twilio 帳戶。
+ 您的 Twilio 帳戶已啟用 API 存取。

如果您符合這些要求，就可以 AWS Glue 連線到您的 Twilio 帳戶。對於一般連線，您不需要在 Twilio 中執行任何其他操作。

# 設定 Twilio 連線
<a name="twilio-configuring-connections"></a>

Twilio 支援基本身分驗證的使用者名稱和密碼。基本身分驗證是一種簡單的身分驗證方法，其中用戶端會直接提供登入資料來存取受保護的資源。 AWS Glue 能夠使用使用者名稱 （帳戶 SID) 和密碼 （身分驗證字符） 來驗證 Twilio APIs。

如需基本身分驗證流程的公有 Twilio 文件，請參閱[基本身分驗證 \$1 Twilio](https://www.twilio.com/docs/glossary/what-is-basic-authentication)。

若要設定 Twilio 連線：

1. 在 AWS Secrets Manager 中，使用下列詳細資訊建立秘密：
   + 對於基本身分驗證：機密應包含具有**帳戶 SID** (使用者名稱) 和**身分驗證字符** (密碼) 的已連線應用程式消費者機密。
**注意**  
您必須為 中的連線建立秘密 AWS Glue。

1. 在 AWS Glue Glue Studio 中，依照下列步驟在**資料連線下建立連線**：

   1. 選取**連線類型**時，選取 Twilio。

   1. 提供您要連線的 Twilio 執行個體的 `[Edge\$1Location](https://www.twilio.com/docs/global-infrastructure/edge-locations)`。

   1. 選取 AWS Glue 可以擔任並具有下列動作許可的 AWS IAM 角色：

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

****  

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

------

   1. 選取您要用於此連線`secretName`的 AWS Glue ，以放置字符。

   1. 如果想要使用您的網路，請選取網路選項。

1. 授予與您的 AWS Glue 任務相關聯的 IAM 角色讀取 的許可`secretName`。

# 從 Twilio 實體中讀取
<a name="twilio-reading-from-entities"></a>

**必要條件**

您要從中讀取的 Twilio 物件。您將需要物件名稱，例如 `SMS-Message` 或 `SMS-CountryPricing`。

**來源的支援實體**：


| 實體 | 介面 | 可以篩選 | 支援限制 | 支援排序依據 | 支援選取 \$1 | 支援分區 | 
| --- | --- | --- | --- | --- | --- | --- | 
| SMS-Message | REST | 是 | 是 | 否 | 是 | 是 | 
| SMS-CountryPricing | REST | 否 | 否 | 否 | 是 | 否 | 
| Voice-Call | REST | 是 | 是 | 否 | 是 | 否 | 
| Voice-Application | REST | 是 | 是 | 否 | 是 | 否 | 
| Voice-OutgoingCallerID | REST | 是 | 是 | 否 | 是 | 否 | 
| Voice-Queue | REST | 是 | 是 | 否 | 是 | 否 | 
| Conversations-Conversation | REST | 是 | 是 | 否 | 是 | 否 | 
| Conversations-User | REST | 否 | 是 | 否 | 是 | 否 | 
| Conversations-Role | REST | 否 | 是 | 否 | 是 | 否 | 
| Conversations-Configuration | REST | 否 | 否 | 否 | 是 | 否 | 
| Conversations-AddressConfiguration | REST | 是 | 是 | 否 | 是 | 否 | 
| Conversations-WebhookConfiguration | REST | 否 | 否 | 否 | 是 | 否 | 
| Conversations-ParticipantConversation | REST | 否 | 否 | 否 | 是 | 否 | 
| Conversations-Credential | REST | 否 | 是 | 否 | 是 | 否 | 
| Conversations-ConversationService | REST | 否 | 是 | 否 | 是 | 否 | 

**範例**：

```
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"
    }
```

**Twilio 實體和欄位詳細資訊**：

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

## 分區查詢
<a name="twilio-reading-partitioning-queries"></a>

**支援分區的欄位**：

在 Twilio 中，DateTime 資料類型欄位支援欄位型分區。

如果想要在 Spark 中使用並行，可以提供其他 Spark 選項 `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND` 和 `NUM_PARTITIONS`。使用這些參數，原始查詢會分區為可由 Spark 任務並行執行的子查詢的 `NUM_PARTITIONS` 數目。
+ `PARTITION_FIELD`：用來分區查詢的欄位名稱。
+ `LOWER_BOUND`：所選分區欄位的**包含**下限值。

  對於 Datetime 欄位，我們接受 Spark SQL 查詢中使用的 Spark 時間戳記格式。

  有效值的範例：

  ```
  "2024-05-01T20:55:02.000Z"
  ```
+ `UPPER_BOUND`：所選分區欄位的**唯一**上限值。
+ `NUM_PARTITIONS`：分區數目。

範例：

```
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"
    }
```

# Twilio 連線選項
<a name="twilio-connection-options"></a>

以下是 Twilio 的連線選項：
+ `ENTITY_NAME`(String) - (必要) 用於讀取。Twilio 中的物件名稱。
+ `EDGE_LOCATION`(字串) - (必要) 有效的 Twilio 邊緣節點。
+ `API_VERSION`(String) - (必要) 用於讀取。您要使用的 Twilio Rest API 版本。Twilio 支援兩個 API 版本：「v1」和「2010-04-01」。
+ `SELECTED_FIELDS`(List<String>) - 預設：empty(SELECT \$1)。用於讀取。您要為物件選取的資料欄。
+ `FILTER_PREDICATE`(String) - 預設：空白。用於讀取。其應該為 Spark SQL 格式。
+ `QUERY`(String) - 預設：空白。用於讀取。完整的 Spark SQL 查詢。
+ `PARTITION_FIELD`(String) - 用於讀取。用於分區查詢的欄位。
+ `LOWER_BOUND`(String) - 用於讀取。所選分區欄位的包含下限值。
+ `UPPER_BOUND`(String) - 用於讀取。所選分區欄位的唯一上限值。
+ `NUM_PARTITIONS`(Integer) - 預設：1。用於讀取。要讀取的分區數目。
+ `INSTANCE_URL`(String) - (必要) 用於讀取。有效的 Twilio 執行個體 URL。

# Twilio 連接器的限制和備註
<a name="twilio-connector-limitations"></a>

以下是 Twilio 連接器的限制或備註：
+ 不支援記錄型分區，因為沒有從 Twilio 擷取記錄總數的佈建。
+ 欄位 `date_sent`、`start_time` 和 `end_time` 屬於 Datetime 資料類型，但在篩選時，其僅支援日期值 (不考慮時間元件)。
+ 只有在值不包含任何字首 (例如通訊協定或標籤) 時，篩選 "from" 或 "to" 欄位才有效。如果有字首，則無法篩選相應欄位。例如，如果傳遞 "to": "whatsapp:\$114xxxxxxxxxx" 作為篩選條件，則 Twilio 不會傳回一個回應。需要將其傳遞為 "to": "\$114xxxxxxxx"，如果記錄存在的話，則會傳回記錄。
+ 查詢 `conversation-participant-conversation` 實體時，"identity" 欄位篩選條件為必要項目。