Come posso utilizzare webhook per pubblicare messaggi di Amazon SNS su Amazon Chime, Slack o Microsoft Teams?
Desidero inviare notifiche da messaggi di Amazon Simple Notification Service (Amazon SNS) ad Amazon Chime, Slack o Microsoft Teams.
Breve descrizione
Per inviare messaggi di notifica agli endpoint HTTP o HTTPS, ad esempio URL di webhook, puoi utilizzare Amazon SNS. Tuttavia, alcuni webhook si aspettano coppie chiave-valore JSON che Amazon SNS non supporta quando viene confermato l'abbonamento HTTP o HTTPS.
Ad esempio, i webhook Amazon Chime si aspettano una richiesta JSON con una stringa di messaggio corrispondente a una chiave Content. Analogamente, i webhook Slack e Microsoft Teams si aspettano entrambi una richiesta JSON con una stringa di messaggio corrispondente a una chiave text.
Per trasformare il documento JSON del corpo di un messaggio di Amazon SNS in modo che l'endpoint webhook possa elaborarlo, utilizza una funzione AWS Lambda.
Nota: per un elenco delle coppie chiave-valore nel documento JSON del corpo di un messaggio di Amazon SNS, consulta il formato JSON di conferma dell'abbonamento HTTP/HTTPS.
Risoluzione
Crea un argomento SNS
Se non l'hai già fatto, crea un argomento SNS con un nome univoco.
Crea una funzione Lambda
Segui le istruzioni per creare una funzione Lambda. Il codice della funzione Lambda deve includere la logica per trasformare i messaggi di notifica del topic SNS per il tipo di endpoint webhook che stai utilizzando.
Per esempi, consulta i seguenti frammenti di codice Python per i webhook Amazon Chime, Slack e Microsoft Teams.
Esempio di frammento di codice Python per Amazon Chime
I webhook Amazon Chime si aspettano una richiesta JSON con una stringa di messaggio corrispondente a una chiave Content. Per ulteriori informazioni, consulta Creazione di webhook per Amazon Chime.
import urllib3import 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, } )
Nota: sostituisci https://hooks.chime.aws/incomingwebhooks/xxxxxxx con l'URL del tuo webhook.
Esempio di frammento di codice Python per Slack
I webhook Slack si aspettano una richiesta JSON con una stringa di messaggio che corrisponde a una chiave text. Supportano anche la personalizzazione dei messaggi per aggiungere un nome utente e un'icona o sovrascrivere il canale predefinito del webhook. Per ulteriori informazioni, consulta Sending messages using incoming webhooks (Invio di messaggi utilizzando webhook in entrata) sul sito web di Slack.
import urllib3import 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, } )
Nota: sostituisci https://hooks.slack.com/services/xxxxxxx con l'URL del tuo webhook e #CHANNEL_NAME con il nome del canale di destinazione.
Esempio di frammento di codice Python per Microsoft Teams
I webhook Microsoft Teams si aspettano una richiesta JSON con una stringa di messaggio che corrisponde a una chiave text. Per ulteriori informazioni, consulta Create and send messages (Creazione e invio di messaggi) sul sito web di Microsoft Docs.
import urllib3import 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, } )
Nota: sostituisci https://outlook.office.com/webhook/xxxxxxx con l'URL del tuo webhook.
Testa la funzione Lambda
Completa i seguenti passaggi:
- Nella pagina Funzioni della console Lambda, scegli la funzione.
- Apri la scheda Esegui il test. In Nome evento, inserisci un nome.
- Scegli l'elenco a discesa Modello, quindi seleziona SNS Topic Notification (Notifica argomento SNS).
- Scegli Salva, quindi scegli Esegui il test.
Se l'invocazione del test ha esito positivo con codice di stato 200, il messaggio di notifica di Amazon SNS è stato accettato dal webhook e inviato al canale.
Se l'invocazione del test ha esito negativo con codice di stato 4xx, verifica che la coppia chiave-valore dell'URL del webhook sia corretta e accettata dal webhook di destinazione.
Per ulteriori informazioni, consulta Invocare la funzione Lambda tramite l'editor di codice della console.
Aggiungi un topic SNS e abbona al topic la funzione Lambda
Completa i seguenti passaggi:
- Nella pagina Funzioni della console Lambda, scegli la funzione.
- In Panoramica della funzione, scegli Aggiungi trigger.
- Scegli l'elenco a discesa Configurazione del trigger, quindi seleziona SNS.
- Per Argomento SNS, scegli il topic SNS creato in precedenza.
- Scegli Aggiungi.
- Abbona la funzione Lambda al topic SNS.
Ora che la funzione è abbonata al topic SNS, i messaggi pubblicati sul topic vengono inoltrati alla funzione e al webhook.
Informazioni correlate
Monitoring AWS services using Amazon Q Developer in chat applications (Monitoraggio dei servizi AWS utilizzando Amazon Q Developer in applicazioni di chat)
- Argomenti
- Application Integration
- Lingua
- Italiano
Video correlati


Contenuto pertinente
AWS UFFICIALEAggiornata 5 mesi fa
AWS UFFICIALEAggiornata 2 mesi fa