Mon édition
Suite Toutes les éditions
Support Toutes les éditions
Accès rapide : Centre d’administration > Applications et intégrations > Actions et webhooks > Webhooks

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.

Cet article aborde les sujets suivants :
  • Exigences pour l’envoi d’événements à Amazon EventBridge avec les webhooks
  • Création de votre bus d’événement EventBridge
  • Création d’une fonction Lambda pour recevoir la charge des webhooks
  • Création d’un webhook Zendesk pour la connexion à Amazon EventBridge

Exigences pour l’envoi d’événements à Amazon EventBridge avec les webhooks

Les exigences suivantes doivent être satisfaites pour utiliser les webhooks pour la connexion avec Amazon EventBridge :
  • 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.

Notez le nom de ressource Amazon (ARN), vous en aurez besoin plus tard. L’ARN doit être formaté comme suit :
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éé.

Pour créer une fonction Lambda
  1. 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.

  2. 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)}),
            }
    
  3. 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.
  4. 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.

  5. Une fois le rôle créé, modifiez-le pour ajouter l’ARN du bus d’événement EventBridge.
    1. Ouvrez le rôle.
    2. Sous Step 2 : Add permissions cliquez sur Edit et sélectionnezCreate inline policy.
    3. Recherchez les servicesEventBridge et sélectionnez la méthode PutEvents.
    4. Sous Resources, cliquez sur Add ARNs.
    5. Saisissez l’ARN du bus d’événement EventBridge, puis cliquez sur Next.
    6. Saisissez un nom pour votre politique et cliquez sur Create policy.
  6. 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.

Pour créer un webhook pour l’intégration avec Amazon EventBright
  1. Dans le Centre d’administration, cliquez sur Applications et intégrations dans la barre latérale, puis sélectionnez Actions et webhooks > Webhooks.
  2. 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.
  3. Cliquez sur Créer un webhook.
Remarque – Pour chaque webhook, Zendesk génère une clé secrète pendant le processus de création. Pour que la connexion de votre webhook à Amazon EventBridge réussisse, vous devez copier et coller cette clé secrète dans la variable environnementale WEBHOOK_SECRET de votre fonction Lambda. Consultez Création d’une fonction Lambda pour recevoir la charge des webhooks.
Remarque – Cet article (y compris le code d’intégration) est fourni à titre d’information générale uniquement. Zendesk ne fournit pas l’assistance pour le code et ne le garantit pas. Zendesk ne fournit pas non plus l’assistance pour les technologies tierces comme Amazon EventBridge. Si vous rencontrez des problèmes, publiez-en la description dans la section des commentaires ou essayez de trouver une solution en ligne.
Réalisé par Zendesk