Les webhooks Zendesk sont un outil puissant, qui vous permettent de vous assurer que vos autres systèmes sont mis à jour en cas de modifications dans votre compte Zendesk. L’utilisation des webhooks pour l’intégration avec Amazon EventBridge permet des workflows plus sophistiqués, avec traitement des données en temps réel. Cet article explique comment utiliser les webhooks pour envoyer les événements Zendesk à Amazon EventBridge.
Exigences pour l’envoi d’événements à Amazon EventBridge avec les webhooks
- Vous devez être un administrateur de votre compte Zendesk.
- Vous devez avoir un compte AWS avec EventBridge configuré.
Vous devez en outre avoir des connaissances élémentaires des services AWS, notamment d’EventBridge.
Création de votre bus d’événement EventBridge
Avant de créer le webhook, vous devez créer un bus d’événement EventBridge.
arn:aws:events:{REGION}:{AWS_ID}:event-bus/{EVENT_BUS_ID}
Création d’une fonction Lambda pour recevoir la charge des webhooks
Une fonction Lambda est nécessaire pour recevoir le webhook, confirmer sa signature et transférer sa charge au bus d’événement EventBridge que vous avez créé.
- Utilisez la console AWS Lambda pour créer une nouvelle fonction Lambda. Remplissez les champs. Sous Advanced settings, sélectionnez Enable function URL et NONE comme méthode d’authentification.
Notez l’URL de la fonction. Il s’agit de l’URL publique à laquelle vous connecterez votre webhook.
- Ajoutez le code ci-dessous dans la fenêtre Code source, puis cliquez sur Deploy.
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)}), }
- Ajoutez deux variables environnementales à la fonction Lambda :
-
EVENT_BUS_ARN
: configurez-la sur la valeur ARN que vous avez obtenue quand vous avez créé le bus d’événement EventBridge. C’est l’emplacement du bus d’événement. -
WEBHOOK_SECRET
: après avoir créé le webhook, vous devez configurer le secret du webhook.
-
- Utilisez la console AWS IAM pour créer un rôle pour le service AWS Lambda.
Notez le nom du rôle, vous en aurez besoin pour affecter le rôle à votre fonction Lambda.
- Une fois le rôle créé, modifiez-le pour ajouter l’ARN du bus d’événement EventBridge.
- Ouvrez le rôle.
- Sous Step 2 : Add permissions cliquez sur Edit et sélectionnezCreate inline policy.
- Recherchez les servicesEventBridge et sélectionnez la méthode PutEvents.
- Sous Resources, cliquez sur Add ARNs.
- Saisissez l’ARN du bus d’événement EventBridge, puis cliquez sur Next.
- Saisissez un nom pour votre politique et cliquez sur Create policy.
- Utilisez la console AWS Lambda pour ouvrir la fonction Lambda que vous avez créée et lui affecter le rôle IAM. Dans l’onglet Configuration, sélectionnez Permissions et cliquez sur Edit. En bas de la page, sélectionnez le nom du rôle et cliquez sur Save.
Création d’un webhook Zendesk pour la connexion à Amazon EventBridge
Après avoir créé le bus d’événement EventBridge et configuré la fonction Lambda, il est temps de créer le webhook.
- Dans le Centre d’administration, cliquez sur Applications et intégrations dans la barre latérale, puis sélectionnez Actions et webhooks > Webhooks.
-
Créez le webhook, en spécifiant les valeurs suivantes :
- Définissez l’URL du point de terminaison sur l’URL de la fonction que vous avez obtenue lors de la création de la fonction Lambda.
- Définissez Authentification sur Aucune.
- Cliquez sur Créer un webhook.
WEBHOOK_SECRET
de votre fonction Lambda. Consultez Création d’une fonction Lambda pour recevoir la charge des webhooks.