

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

# 設定 Amazon Chime SDK 訊息的頻道處理器
<a name="processor-setup"></a>

若要開始使用頻道流程，請先建立處理器 Lambda 函數來處理使用案例的預先處理。例如，您可以更新訊息內容或中繼資料、拒絕訊息並防止傳送，或讓原始訊息通過。

**先決條件**
+ Lambda 函數必須位於與 AppInstance 相同的 AWS 帳戶和相同 AWS 區域。

**授予調用許可**  
您必須授予 Amazon Chime SDK 訊息服務調用 Lambda 資源的許可。如需許可的詳細資訊，請參閱[使用 的資源型政策 AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html)。例如：

  
**委託人**：「messaging.chime.amazonaws.com」  
**動作**：lambda：InvokeFunction  
**Effect (效果)**：允許  
**AWS：SourceAccount**：*您的 AWS AccountId*。  
**AWS：SourceArn**： `"arn:aws:chime:region:AWS AccountId: appInstance/"`

**注意**  
您可以提供特定的應用程式執行個體 ID 來叫用您的處理器，或使用萬用字元來允許帳戶中的所有 Amazon Chime SDK 應用程式執行個體叫用您的處理器。

**授予回呼許可**  
您也需要允許處理器 Lambda 函數呼叫 `ChannelFlowCallback` API。如需有關這樣做的資訊，請參閱 *AWS Lambda 開發人員指南*中的[AWS Lambda 執行角色](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)。

您可以將內嵌政策新增至 Lambda 函數的執行角色。此範例允許處理器叫用 `ChannelFlowCallback API`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "chime:ChannelFlowCallback"
            ],
            "Resource": [
            "arn:aws:chime:us-east-1:111122223333:appInstance/*"
            ]
        }
    ]
}
```

------

**注意**  
遵循 Lambda 函數的最佳實務。如需詳細資訊，請參閱下列主題：  
[ 效能效率最佳實務](https://docs.aws.amazon.com/whitepapers/latest/serverless-architectures-lambda/performance-efficiency-best-practices.html) 
[使用 的最佳實務 AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html)
[設定預留並行](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html#configuration-concurrency-reserved)
[非同步叫用](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html)

**叫用處理器 Lambda 函數**  
當使用者傳送訊息時，下列輸入請求會叫用處理器 Lambda 函數。

```
{
    "EventType": "string"
    "CallbackId": "string"
    "ChannelMessage": {
        "MessageId": "string",
        "ChannelArn": "string",
        "Content": "string",
        "Metadata": "string",
        "Sender":{
            "Arn": "string", 
            "Name": "string"
        },
        "Persistence": "string",
        "LastEditedTimestamp": "string", 
        "Type": "string",
        "CreatedTimestamp": "string", 
    }
}
```

EventType  
正在傳送至處理器的事件。此值為`CHANNEL_MESSAGE_EVENT`常數。

CallbackId  
從處理器呼叫 `ChannelFlowCallback` API 時所使用的字符。

ChannelMessage  
*ChannelArn*   頻道的 ARN  
要處理*的內容* 訊息內容  
*CreatedTimestamp*   訊息建立的時間  
*LastEditedTimestamp* 訊息編輯 的時間  
*MessageId*   訊息識別符  
要處理的*中繼資料* 訊息中繼資料  
*持續性* 布林值，可控制訊息是否保留在後端。有效值:`PERSISTENT | NON_PERSISTENT`  
*寄件者*   訊息寄件者。類型： [identity 物件](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_Identity.html)。  
*類型* 訊息類型。   ChannelFlow僅支援 `STANDARD` 訊息類型。有效值： `STANDARD`

處理器函數會決定每個訊息的下列項目。
+ 是否更新訊息內容、中繼資料或兩者
+ 是否拒絕訊息 
+ 是否保持不變訊息

處理完成時，處理器 Lambda 函數會將結果傳回 Amazon Chime SDK Messaging 服務，以便將訊息傳送給所有收件人。訊息狀態會標示，`PENDING`直到處理器 Lambda 函數傳回結果為止。處理器 Lambda 函數有 48 小時可傳回結果。在此之後，我們無法保證訊息交付，且 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ChannelFlowCallback.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ChannelFlowCallback.html) API 會擲回禁止的例外狀況錯誤訊息。若要傳回結果，請叫用 `ChannelFlowCallback` API。