為什麼我的 AWS Chatbot 未接收來自 Amazon SNS 的訊息?

上次更新日期:2021 年 9 月 20 日

我為 AWS Chatbot 訂閱了 Amazon Simple Notification Service (Amazon SNS) 主題。但是,Amazon SNS 主題的通知沒有到達 AWS Chatbot。我該如何對此問題進行疑難排解?

簡短描述

如果 Amazon SNS 主題的通知沒有到達 AWS Chatbot,則以下其中一項的設定錯誤:

  • (僅適用於 Slack) AWS Chatbot 與 Slack 通道之間的通訊通道。
  • (適用於 Slack 和 Amazon Chime) Amazon SNS 主題與 AWS Chatbot 之間的通訊通道。

若要對問題進行疑難排解,請執行以下操作:

解決方案

為您的 AWS Chatbot 開啟 CloudWatch Logs

(僅適用於 Slack) 驗證 AWS Chatbot 與 Slack 通道之間的通訊通道是否正確設定。

確保 Slack 通道未封存或刪除

已封存或刪除的 Slack 通道無法接收訊息。已封存或刪除的 Slack 通道中的所有應用程式都會停用。

若要取消封存通道,請參閱 Slack 說明中心中的封存或取消封存通道

注意:您無法取消刪除 Slack 通道。如果訂閱的 Slack 通道已刪除,您必須建立新的 Slack 通道,並設定新通道以接收主題的通知

確保 AWS Chatbot 應用程式已安裝在 Slack 工作空間上

檢閱 AWS Chatbot CloudWatch Logs 中是否有以下錯誤訊息:account_inactive。如果您看到 account_inactive 錯誤訊息,則表示 AWS Chatbot 應用程式未安裝在 Slack 工作空間上。

若要在 Slack 工作空間上安裝 AWS Chatbot 應用程式,請按照為 AWS Chatbot 設定聊天用戶端中的指示操作。

(僅適用於私有 Slack 通道) 確保 AWS Chatbot 應用程式已新增至 Slack 通道

檢閱 AWS Chatbot CloudWatch Logs 中是否有以下錯誤訊息:channel_not_found。如果您看到 channel_not_found 錯誤訊息,則表示 AWS Chatbot 應用程式尚未新增至私有通道。

若要將 AWS Chatbot 新增至私有 Slack 通道,請在私有通道中執行 /invite @AWS 命令。

(適用於 Slack 和 Amazon Chime) 驗證 Amazon SNS 主題與 AWS Chatbot 之間的通訊通道是否正確設定。

確保 AWS Chatbot 已訂閱 Amazon SNS 主題

1.    開啟 AWS Chatbot 主控台

2.    在 Configured clients (設定的用戶端) 下,根據您的使用案例選擇 SlackAmazon Chime

3.    在 Slack workspace configuration (Slack 工作空間組態) 中選擇您的 Slack 通道,或者在 Amazon Chime webhooks (Amazon Chime Webhook) 清單中選擇您的 Webhook。

4.    選擇 Edit (編輯)。

5.    在 Details (詳細資訊) 窗格的 Topics (主題) 下,驗證已列出您的 Amazon SNS 主題。如果未列出您的 Amazon SNS 主題,您必須為 AWS Chatbot 訂閱您的 Amazon SNS 主題

確保 AWS Chatbot 端點列為您的 Amazon SNS 主題的主題訂閱

1.    開啟 Amazon SNS 主控台

2.    在左側導覽窗格中,選擇 Topics (主題)。然後,選擇您的 Amazon SNS 主題的名稱。

3.    在 Topic subscriptions (主題訂閱) 下,確保已列出以下 AWS Chatbot 端點:https://global.sns-api-chatbot.amazonaws.com。如果 AWS Chatbot 端點未列為主題訂閱,則您必須為 AWS Chatbot 訂閱您的 Amazon SNS 主題

注意:若要測試設定,請使用 AWS Chatbot 組態傳送測試通知

確保您沒有手動將訊息發佈至您的 Amazon SNS 主題

AWS Chatbot 不支援手動發佈至 Amazon SNS 主題的訊息。請確保您僅透過 AWS Chatbot 支援的其中一項服務將 Amazon SNS 通知傳送給 AWS Chatbot。

確保 AWS Chatbot 支援將訊息發佈至您的 Amazon SNS 主題的 AWS 服務

檢閱 AWS Chatbot CloudWatch Logs 中是否有以下錯誤訊息:收到的事件不受支援。如果您看到收到的事件不受支援錯誤訊息,則表示 AWS Chatbot 不支援將訊息發佈至您主題的服務。

如需 AWS Chatbot 支援的完整服務清單,請參閱將 AWS Chatbot 與其他 AWS 服務搭配使用

確保您的 Amazon SNS 主題的存取政策授與其他 AWS 服務所需的許可,以將訊息發佈至主題

1.    開啟 Amazon SNS 主控台

2.    在左側導覽窗格中,選擇 Topics (主題)。

3.    選擇您為 AWS Chatbot 訂閱的主題。然後,選擇 Edit (編輯)。

4.    選擇 Access policy (存取政策) 標籤。然後,檢閱存取政策的 Statement (陳述式) 區段。請確保政策允許正確的 AWS 服務執行 SNS:Publish API 動作。

5.    如果 Amazon SNS 存取政策不允許正確的服務將事件發佈至您的主題,請執行以下操作來更新政策:
在主題頁面的 Details (詳細資訊) 區段中,選擇 Edit (編輯)。
展開 Access policy (存取政策) 區段,然後新增所需的許可

注意:例如 Amazon SNS 存取政策,請參閱開發人員工具主控台使用者指南中的設定通知的 Amazon SNS 主題。此外,在 AWS Billing and Cost Management 使用者指南中建立預算通知的 Amazon SNS 主題

確保未在您的 Amazon SNS 主題上啟用原始訊息交付

AWS Chatbot 不接受原始訊息交付。若要驗證在 Amazon SNS 主題上是否啟用原始訊息交付,請執行以下操作:

1.    開啟 Amazon SNS 主控台

2.    在左側導覽窗格中,選擇 Topics (主題)。然後,選擇您的 Amazon SNS 主題的名稱。

3.    在 Details (詳細資訊) 窗格中,針對 Raw message delivery (原始訊息交付),驗證狀態是列為 enabled (已啟用) 還是 disabled (已停用)。

4.    如果狀態列為 enabled (已啟用),請執行以下操作來關閉 Amazon SNS 主題上的原始訊息交付:
選擇 Edit (編輯)。
選擇 Enable raw message delivery (啟用原始訊息交付) 以取消選取原始訊息交付選項。
選擇 Save Changes (儲存變更)。

確保您的 Amazon SNS 主題尚未啟用伺服器端加密 (SSE)

AWS Chatbot 不支援 SSE。若要驗證在 Amazon SNS 主題上是否啟用 SSE,請執行以下操作:

1.    開啟 Amazon SNS 主控台

2.    在左側導覽窗格中,選擇 Topics (主題)。然後,選擇您的 Amazon SNS 主題的名稱。

3.    在 Details (詳細資訊) 窗格中,針對 Encryption (加密),驗證狀態是列為 Configured (已設定) 還是 Disabled (已停用)。

4.    如果狀態列為 Configured (已設定),則請執行以下操作來關閉 Amazon SNS 主題上的 SSE:
選擇 Edit (編輯)。
展開 Encryption (加密)。
選擇 Disable encryption (停用加密)。
選擇 Save Changes (儲存變更)。

確保您沒有以每秒超過 10 個通知的速率將訊息發佈至您的 Amazon SNS 主題

AWS Chatbot 每秒允許 10 個事件。如果每秒收到超過 10 個事件,則會調節其他訊息。

若要驗證您的事件是否正在調節,請檢閱適用於 AWS Chatbot 的 Amazon CloudWatch Logs 中的 EventsThrottled 指標。

(如果您使用的是 Amazon EventBridge) 確保 EventBridge 事件未使用輸入轉換器

AWS Chatbot 無法辨識 EventBridge 輸入轉換器。若要驗證 Amazon EventBridge 事件是否未使用輸入轉換器,請執行以下操作:

1.    開啟 EventBridge 主控台

2.    在左側導覽窗格中,選擇 Rules (規則)。然後,選擇已設定事件規則的名稱。

3.    選取您已設定為規則目標的 Amazon SNS 主題旁邊的核取方塊。然後,選擇 View details (檢視詳細資訊)。

4.    驗證輸入轉換器是否列在詳細資訊頁面上的 Input (輸入) 區段下。如果列出輸入轉換器,請從規則中移除輸入轉換器。

注意:如需詳細資訊,請參閱轉換 Amazon EventBridge 目標輸入

(如果您使用的是 EventBridge) 確保您不會透過 EventBridge 從 AWS 服務傳送 AWS Chatbot 不支援的事件通知

AWS Chatbot 不支援透過 Amazon EventBridge 從以下 AWS 服務傳送的事件通知:

  • Amazon CloudWatch
  • AWS CodeBuild
  • AWS CodeCommit
  • AWS CodeDeploy
  • AWS CodePipeline