¿Qué plan tengo?
Suite Cualquier plan
Support Cualquier plan
Acceso rápido: Centro de administración > Aplicaciones e integraciones > Acciones y webhooks > Webhooks

Los webhooks de Zendesk son una herramienta potente para mantener sus otros sistemas actualizados con los cambios en su cuenta de Zendesk. El uso de webhooks para la integración con Amazon EventBridge crea la oportunidad de contar con flujos de trabajo más sofisticados gracias al procesamiento de datos en tiempo real. Este artículo describe cómo usar webhooks para enviar eventos de Zendesk a Amazon EventBridge.

En este artículo se tratan los siguientes temas:
  • Requisitos para enviar eventos a Amazon EventBridge a través de webhooks
  • Crear un bus de eventos de EventBridge
  • Crear una función Lambda para recibir la carga de webhook
  • Crear un webhook de Zendesk para conectarlo con Amazon EventBridge

Requisitos para enviar eventos a Amazon EventBridge a través de webhooks

Para usar webhooks para conectarlos con Amazon EventBridge se deben cumplir los siguientes requisitos:
  • Debe ser un administrador en su cuenta de Zendesk.
  • Debe tener una cuenta de AWS con EventBridge configurado.

    Además, debe tener una comprensión básica de los servicios AWS, incluido EventBridge.

Crear un bus de eventos de EventBridge

Antes de crear el webhook, debe crear un bus de eventos de EventBridge.

Tome nota del ARN porque se requiere en un paso posterior. El ARN debe seguir el siguiente formato:
arn:aws:events:{REGION}:{AWS_ID}:event-bus/{EVENT_BUS_ID}

Crear una función Lambda para recibir la carga de webhook

Se requiere una función Lambda para recibir el webhook, confirmar la firma del webhook y pasar la carga del webhook al bus de eventos de EventBridge que se creó.

Para crear una función Lambda
  1. Use la consola Lambda de AWS para crear una nueva función Lambda. Complete los campos según se necesite. Bajo Advanced settings (Configuración avanzada), seleccione Enable function URL (Activar URL de función) y luego seleccione NONE (NINGUNO) como método de autenticación.

    Tome nota del Function URL (URL de función). Este es el URL público al que va a conectar su webhook.

  2. Agregue el siguiente código a la ventana de Code source (Código fuente) y luego haga clic en Deploy (Desplegar).
    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. Agregue dos variables de entorno a la función Lambda:
    • EVENT_BUS_ARN: establezca esto en el valor ARN que obtuvo cuando creó el bus de eventos de EventBridge. Esta es la ubicación del bus de eventos.
    • WEBHOOK_SECRET: después de crear el webhook, tendrá que establecer esto en el secreto de webhook.
  4. Use la consola AWS IAM para crear un rol para el servicio AWS Lambda.

    Tome nota del nombre del rol ya que lo necesitará para asignar el rol a la función Lambda.

  5. Después de crear el rol, edítelo para agregar el ARN del bus de eventos de EventBridge.
    1. Abra el rol.
    2. Bajo Step 2: Add permissions (Paso 2: Agregar permisos), haga clic en Edit (Editar) y seleccione Create inline policy (Crear política insertada).
    3. Busque los servicios de EventBridge y seleccione el método PutEvents.
    4. Bajo Resources (Recursos), haga clic en Add ARNs (Agregar ARN).
    5. Ingrese el ARN del bus de eventos de EventBridge y haga clic en Next (Siguiente).
    6. En Name (Nombre), ingrese un nombre para su política y haga clic en Create policy (Crear política).
  6. Use la consola AWS Lambda para abrir la función Lambda que creó y asígnele el rol de IAM. En la pestaña Configuration (Configuración), seleccione Permissions (Permisos) y haga clic en Edit (Editar). En la parte inferior de la página, seleccione el nombre del rol y haga clic en Save (Guardar).

Crear un webhook de Zendesk para conectarlo con Amazon EventBridge

Después de crear el bus de eventos de EventBridge y configurar la función Lambda, debe crear el propio webhook.

Para crear un webhook para integrar con Amazon EventBridge
  1. En el Centro de administración, haga clic en Aplicaciones e integraciones en la barra lateral y luego seleccione Acciones y webhooks > Webhooks.
  2. Cree el webhook, asegurándose de especificar los siguientes valores:
    • Defina el URL de extremo usando el URL de función que obtuvo cuando creó la función Lambda.
    • Establezca la Autenticación en Ninguna.
  3. Haga clic en Crear webhook.
Nota: Zendesk genera una clave secreta durante el proceso de creación para cada webhook. Para conectar correctamente el webhook con Amazon EventBridge, debe copiar y pegar esta clave secreta a la variable de entorno WEBHOOK_SECRET de la función Lambda. Consulte Crear una función Lambda para recibir la carga de webhook.
Nota: Este artículo, incluido el código de integración, tiene el propósito de ser informativo únicamente. Zendesk no ofrece soporte para el código ni lo garantiza. Zendesk tampoco puede ofrecer soporte para tecnologías de terceros, como Amazon EventBridge. Publique cualquier problema que tenga en la sección de comentarios o intente buscar una solución en Internet.
Tecnología de Zendesk