Wie verwende ich Webhooks, um Amazon-SNS-Nachrichten in Amazon Chime, Slack oder Microsoft Teams zu veröffentlichen?

Lesedauer: 5 Minute
0

Ich möchte Webhooks verwenden, um meine AWS-Umgebung mit meinem Amazon-Chime-Chatroom oder mit meinem Slack- oder Microsoft-Teams-Kanal zu verbinden. Wie sende ich Benachrichtigungen von Amazon Simple Notification Service (Amazon SNS) an einen Webhook?

Kurzbeschreibung

Sie können Amazon SNS verwenden, um Benachrichtigungen an HTTP- oder HTTPS-Endpunkte zu senden, z. B. Webhook-URLs. Einige Webhooks erwarten jedoch JSON-Schlüssel-Wert-Paare, die Amazon SNS bei der Bestätigung des HTTP- oder HTTPS-Abonnements nicht unterstützt.

Amazon-Chime-Webhooks erwarten beispielsweise eine JSON-Anfrage mit einer Nachrichtenzeichenfolge, die einem „Content“-Schlüssel entspricht. In ähnlicher Weise erwarten Slack- und Microsoft-Teams-Webhooks beide eine JSON-Anfrage mit einer Nachrichtenzeichenfolge, die einem „Text“-Schlüssel entspricht.

Verwenden Sie eine AWS-Lambda-Funktion, um das JSON-Dokument des Amazon-SNS-Nachrichtentexts für die Verarbeitung durch den Webhook-Endpunkt umzuwandeln.

**Hinweis:**Eine Liste der Schlüssel-Wert-Paare im JSON-Dokument mit dem Amazon SNS-Nachrichtentext finden Sie unter JSON-Format für HTTP- und HTTPS-Benachrichtigungen.

Behebung

SNS-Thema erstellen

Wenn Sie dies noch nicht getan haben, erstellen Sie ein SNS-Thema mit einem eindeutigen Namen.

Lambda-Funktion erstellen

Anweisungen zum Erstellen einer Lambda-Funktion finden Sie unter Erste Schritte mit AWS Lambda. Weitere Informationen finden Sie unter Verwenden von AWS Lambda mit Amazon SNS.

Ihr Lambda-Funktionscode muss eine Logik enthalten, um die Benachrichtigungen Ihres SNS-Themas an den Typ des Webhook-Endpunkts anzupassen, den Sie verwenden. Beispiele finden Sie in den folgenden Python-Codefragmenten für Amazon Chime-, Slack- und Microsoft-Teams-Webhooks. Diese Codebeispiele werden unverändert bereitgestellt. Sie sind mit der Python 3.7-Laufzeit kompatibel.

Beispiel für einen Python-Codeausschnitt für Amazon Chime

Amazon-Chime-Webhooks erwarten eine JSON-Anfrage mit einer Nachrichtenzeichenfolge, die einem Inhaltsschlüssel entspricht. Weitere Informationen finden Sie unter Webhooks für Amazon Chime.

**Hinweis:**Ersetzen Sie in diesem Beispielfunktionscode für Amazon-Chime-Webhooks https://hooks.chime.aws/incomingwebhooks/xxxxxxx durch die Webhook-URL.

import urllib3
import json

http = urllib3.PoolManager()


def lambda_handler(event, context):
    url = "https://hooks.chime.aws/incomingwebhooks/xxxxxxx"
    msg = {"Content": event["Records"][0]["Sns"]["Message"]}
    encoded_msg = json.dumps(msg).encode("utf-8")
    resp = http.request("POST", url, body=encoded_msg)
    print(
        {
            "message": event["Records"][0]["Sns"]["Message"],
            "status_code": resp.status,
            "response": resp.data,
        }
    )

Beispiel für einen Python-Codeausschnitt für Slack

Slack Incoming Webhooks erwarten eine JSON-Anfrage mit einer Nachrichtenzeichenfolge, die einem „Text“ -Schlüssel entspricht. Sie unterstützen auch die Anpassung von Nachrichten, z. B. das Hinzufügen eines Benutzernamens und eines Symbols oder das Überschreiben des Standardkanals des Webhooks. Weitere Informationen findest du auf der Slack-Website unter Senden von Nachrichten mithilfe eingehender Webhooks.

**Hinweis:**Ersetzen Sie in diesem Beispiel für den Funktionscode für Slack Incoming Webhooks https://hooks.slack.com/services/xxxxxxx durch die Incoming Webhook URL. Ersetzen Sie auch #CHANNEL_NAME durch den Namen des Zielkanals.

import urllib3
import json

http = urllib3.PoolManager()


def lambda_handler(event, context):
    url = "https://hooks.slack.com/services/xxxxxxx"
    msg = {
        "channel": "#CHANNEL_NAME",
        "username": "WEBHOOK_USERNAME",
        "text": event["Records"][0]["Sns"]["Message"],
        "icon_emoji": "",
    }

    encoded_msg = json.dumps(msg).encode("utf-8")
    resp = http.request("POST", url, body=encoded_msg)
    print(
        {
            "message": event["Records"][0]["Sns"]["Message"],
            "status_code": resp.status,
            "response": resp.data,
        }
    )

Beispiel für einen Python-Codeausschnitt für Microsoft Teams

Eingehende Webhooks von Microsoft Teams erwarten außerdem eine JSON-Anfrage mit einer Nachrichtenzeichenfolge, die einem „Text“ -Schlüssel entspricht. Weitere Informationen finden Sie unter Erstellen und Senden von Nachrichten auf der Microsoft Docs-Website.

**Hinweis:**Ersetzen Sie in diesem Beispiel für den Funktionscode für eingehende Microsoft Teams-Webhooks https://outlook.office.com/webhook/xxxxxxx durch die Webhook-URL.

import urllib3
import json

http = urllib3.PoolManager()


def lambda_handler(event, context):
    url = "https://outlook.office.com/webhook/xxxxxxx"
    msg = {"text": event["Records"][0]["Sns"]["Message"]}
    encoded_msg = json.dumps(msg).encode("utf-8")
    resp = http.request("POST", url, body=encoded_msg)
    print(
        {
            "message": event["Records"][0]["Sns"]["Message"],
            "status_code": resp.status,
            "response": resp.data,
        }
    )

Lambda-Funktion testen

  1. Wählen Sie auf der Seite Funktionen der Lambda-Konsole Ihre Funktion aus.
  2. Wählen Sie die Dropdownliste Test aus. Wählen Sie dann Testereignis konfigurieren aus.
  3. Wählen Sie im Dialogfeld Testereignis konfigurieren die Option Neues Ereignis erstellen aus.
  4. Wählen Sie als Ereignisvorlage die Option SNS Topic Notification aus.
  5. Geben Sie unter Ereignisname einen Namen für das Testereignis ein.
  6. Wählen Sie Speichern aus.
  7. Nachdem es gespeichert wurde, wählen Sie Test. Überprüfen Sie dann das Ausführungsergebnis.
  • Wenn der Testaufruf mit einem 200-Statuscode erfolgreich ist:
    Die Amazon-SNS-Benachrichtigung wird von Ihrem Webhook akzeptiert und an den entsprechenden Kanal weitergeleitet.
  • Wenn der Aufruf mit einem 4xx-Statuscode fehlschlägt:
    Überprüfen Sie die Webhook-URL, um zu bestätigen, dass das Schlüssel-Wert-Paar korrekt ist und von Ihrem Ziel-Webhook akzeptiert wird.

Weitere Informationen zum Testen von Funktionen in der Lambda-Konsole finden Sie unter Aufrufen der Lambda-Funktion.

Ihrer Lambda-Funktion einen SNS-Thema-Trigger hinzufügen

Nachdem Sie als Test in der Lambda-Konsole eine SNS-Nachricht an Ihren Webhook gesendet haben, abonnieren Sie Ihre Funktion für Ihr SNS-Thema. Um dies von der Lambda-Konsole aus zu konfigurieren, fügen Sie einen SNS-Thema-Trigger hinzu:

  1. Wählen Sie auf der Seite Funktionen der Lambda-Konsole Ihre Funktion aus.
  2. Wählen Sie unter Funktionsübersicht die Option Trigger hinzufügen aus. Weitere Informationen finden Sie unter Lambda-Funktionen aufrufen.
  3. Wählen Sie unter Triggerkonfiguration die Option **Trigger auswählen aus.**Wählen Sie dann SNS.
  4. Wählen Sie als SNS-Thema das SNS-Thema aus, das Sie zuvor erstellt haben.
  5. Wählen Sie Hinzufügen aus.

Weitere Informationen finden Sie unter Funktionen konfigurieren (Konsole).

Wenn Ihre Funktion Ihr SNS-Thema abonniert hat, werden zu dem Thema veröffentlichte Nachrichten an die Funktion und dann an Ihren Webhook weitergeleitet.

**Hinweis:**Informationen dazu, wie Sie Amazon-SNS-Benachrichtigungen über andere AWS-Services erhalten, finden Sie unter Überwachung der AWS-Services mithilfe von AWS Chatbot.


Ähnliche Informationen

Hinzufügen von Webhooks zu Chatrooms

Zustellung von Nachrichten im Rohformat

Wie abonniere ich eine Lambda-Funktion für ein Amazon-SNS-Thema im selben Konto?

Wie kann ich den Fehler beheben, den ich erhalte, wenn ich eine Push-basierte Ereignisquelle in AWS CloudFormation für eine Lambda-Funktion abonniere?