I webhook Zendesk sono uno strumento potente per mantenere aggiornati gli altri sistemi in base alle modifiche apportate all’account Zendesk. L’uso dei webhook per l’integrazione con Amazon EventBridge offre l’opportunità di workflow più sofisticati con elaborazione dei dati in tempo reale. Questo articolo descrive come usare i webhook per inviare eventi Zendesk ad Amazon EventBridge.
Requisiti per l’invio di eventi ad Amazon EventBridge con webhook
- Devi essere un amministratore nel tuo account Zendesk.
- Devi disporre di un account AWS con EventBridge configurato.
Inoltre, dovresti avere una conoscenza di base dei servizi AWS, incluso EventBridge.
Creazione del bus eventi EventBridge
Prima di creare il webhook, devi creare un bus di eventi EventBridge.
arn:aws:events:{REGION}:{AWS_ID}:event-bus/{EVENT_BUS_ID}
Creazione di una funzione Lambda per ricevere il payload del webhook
Per ricevere il webhook, confermare la firma del webhook e trasmettere il payload del webhook al bus di eventi EventBridge creato, è necessaria una funzione Lambda.
- Usa la console AWS Lambda per creare una nuova funzione Lambda. Completa i campi secondo necessità. In Impostazioni avanzate, seleziona Abilita URL funzione , quindi NESSUNA come metodo di autenticazione.
Prendi nota dell’URL della funzione. Questo è l’URL pubblico a cui collegherai il webhook.
- Aggiungi il codice seguente alla finestra Origine codice , quindi fai clic su Distribuisci.
import json import hashlib import hmac import os import base64 import logging import boto3 LOGGER = logging.getLogger() LOGGER.setLevel('INFO') EVENTBRIDGE = boto3.client('events') # Set these values in your Lambda function environment variables. EVENT_BUS_ARN = os.environ['EVENT_BUS_ARN'] WEBHOOK_SECRET = os.environ['WEBHOOK_SECRET'].encode('utf-8') def verify_signature(payload, signature, timestamp): '''Verify the provided webhook signature was created by Zendesk's Webhook feature.''' combined = timestamp + payload combined_bytes = combined.encode('utf-8') computed_hmac = hmac.new(WEBHOOK_SECRET, combined_bytes, hashlib.sha256) computed_signature = base64.b64encode(computed_hmac.digest()).decode('utf-8') return hmac.compare_digest(computed_signature, signature) def webhook_to_eventbridge(event): '''Forward the webhook body to AWS EventBridge.''' payload = event['body'] signature = event['headers'].get('x-zendesk-webhook-signature', '') timestamp = event['headers'].get('x-zendesk-webhook-signature-timestamp', '') if not verify_signature(payload, signature, timestamp): LOGGER.warning('Received webhook with invalid signature') return { 'statusCode': 403, 'body': json.dumps({'message': 'Forbidden'}), } payload_dict = json.loads(payload) if isinstance(payload, str) else payload event_source = payload_dict.get('source', 'webhook.custom') detail_type = payload_dict.get('type', 'defaultDetailType') put_events_response = EVENTBRIDGE.put_events( Entries=[ { 'Source': event_source, 'DetailType': detail_type, 'Detail': json.dumps(payload_dict), 'EventBusName': EVENT_BUS_ARN, } ] ) response_entries = put_events_response.get('Entries', []) if len(response_entries) == 0 or 'ErrorCode' in response_entries[0]: LOGGER.error(f'Push to event bridge failed: {response_entries}') return { 'statusCode': 500, 'body': json.dumps( { 'message': 'Failed to send event to EventBridge', 'response': put_events_response, } ), } return { 'statusCode': 200, 'body': json.dumps( { 'message': 'Event successfully sent to EventBridge', 'response': put_events_response, } ), } def lambda_handler(event, context): try: return webhook_to_eventbridge(event) except Exception as e: LOGGER.exception('Error handling webhook') return { 'statusCode': 500, 'body': json.dumps({'message': 'Error handling webhook', 'error': str(e)}), }
- Aggiungi due variabili ambientali alla funzione Lambda:
-
EVENT_BUS_ARN
: Impostalo sul valore ARN ottenuto durante la creazione del bus eventi EventBridge. Questa è la posizione del bus degli eventi. -
WEBHOOK_SECRET
: Dopo aver creato il webhook, dovrai impostarlo sul segreto webhook.
-
- Usa la console AWS IAM per creare un ruolo per il servizio AWS Lambda.
Prendi nota del nome del ruolo. Queste informazioni sono necessarie per assegnare il ruolo alla funzione Lambda.
- Dopo aver creato il ruolo, modificalo per aggiungere l’ ARNdel bus eventi EventBridge .
- Apri il ruolo.
- Sotto Passaggio 2: Aggiungi autorizzazioni fai clic su Modifica e seleziona Crea policy incorporata.
- Cerca i servizi EventBridge e seleziona il metodo PutEvents .
- In Risorse, fai clic su Aggiungi ARN.
- Inserisci l’ARN del bus eventi EventBridge e fai clic su Avanti.
- Inserisci un nome per la policy e fai clic su Crea policy.
- Usa la console AWS Lambda per aprire la funzione Lambda creata e assegnarle il ruolo IAM. Nella scheda Configurazione , seleziona Autorizzazioni e fai clic su Modifica. Nella parte inferiore della pagina, seleziona il nome del ruolo e fai clic su Salva.
Creazione di un webhook Zendesk per la connessione ad Amazon EventBridge
Dopo aver creato il bus eventi EventBridge e aver configurato la funzione Lambda, devi creare il webhook stesso.
- Nel Centro amministrativo, fai clic su App e integrazioni nella barra laterale, quindi seleziona Azioni e webhook > Webhook.
-
Crea il webhook, assicurandoti di specificare i valori seguenti:
- Imposta l’ URL dell’endpoint sull’URL della funzione che hai ottenuto quando hai creato la funzione Lambda.
- Imposta Autenticazione su Nessuna.
- Fai clic su Crea webhook.
WEBHOOK_SECRET
variabile ambientale. Consulta Creazione di una funzione Lambda per ricevere il payload del webhook.Avvertenza sulla traduzione: questo articolo è stato tradotto usando un software di traduzione automatizzata per fornire una comprensione di base del contenuto. È stato fatto tutto il possibile per fornire una traduzione accurata, tuttavia Zendesk non garantisce l'accuratezza della traduzione.
Per qualsiasi dubbio sull'accuratezza delle informazioni contenute nell'articolo tradotto, fai riferimento alla versione inglese dell'articolo come versione ufficiale.