Qual é o meu plano?
Suite Qualquer plano
Support Qualquer plano
Caminho rápido: Central de administração > Aplicativos e integrações > Ações e webhooks > Webhooks

Os webhooks do Zendesk são uma ferramenta robusta para manter seus outros sistemas atualizados com alterações na sua conta do Zendesk. O uso de webhooks para integrar com o Amazon EventBridge cria a oportunidade para fluxos de trabalho mais sofisticados com processamento de dados em tempo real. Este artigo descreve como usar webhooks para enviar eventos do Zendesk para o Amazon EventBridge.

Este artigo contém os seguintes tópicos:
  • Requisitos para enviar eventos ao Amazon EventBridge com webhooks
  • Criação do barramento de eventos do EventBridge
  • Criação da função Lambda para receber a carga do webhook
  • Criação de um webhook do Zendesk para conectar ao Amazon EventBridge

Requisitos para enviar eventos ao Amazon EventBridge com webhooks

Os requisitos a seguir precisam ser atendidos para usar webhooks para se conectar ao Amazon EventBridge:
  • Você deve ser um administrador da conta do Zendesk.
  • Você precisa ter uma conta da AWS com uma configuração do EventBridge.

    Além disso, você deve ter uma noção básica dos serviços da AWS, incluindo o EventBridge.

Criação do barramento de eventos do EventBridge

Antes de criar o webhook, você precisa criar um barramento de eventos do EventBridge.

Anote o ARN, que será necessário em uma etapa posterior. O ARN deve ser formatado da seguinte maneira:
arn:aws:events:{REGION}:{AWS_ID}:event-bus/{EVENT_BUS_ID}

Criação da função Lambda para receber a carga do webhook

Uma função Lambda é necessária para receber o webhook, confirmar a assinatura do webhook e passar a carga do webhook para o barramento de eventos do EventBridge criado por você.

Como criar uma função Lambda
  1. Use o console AWS Lambda para criar uma nova função Lambda. Preencha os campos conforme necessário. Em Advanced settings, selecione Enable function URL e, em seguida, NONE no método de autenticação.

    Anote a Function URL. Essa é a URL pública à qual você conectará o webhook.

  2. Adicione o seguinte código na janela Code source e clique em 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. Adicione duas variáveis de ambiente à função Lambda:
    • EVENT_BUS_ARN: defina como o valor ARN que você recebeu quando criou o barramento de eventos do EventBridge. Esse é o local do barramento de eventos.
    • WEBHOOK_SECRET: depois de criar o webhook, você precisa defini-lo como o segredo do webhook.
  4. Use o console AWS IAM para criar uma função para o serviço AWS Lambda.

    Anote o nome da função. Você precisa dessa informação para atribuir a função à função Lambda.

  5. Depois de criar a função, edite-a para adicionar o ARN do barramento de eventos do EventBridge.
    1. Abra a função.
    2. Na Step 2: Add permissions, clique em Edit e selecione Create inline policy.
    3. Pesquise os serviços EventBridge e selecione o método PutEvents.
    4. Em Resources, clique em Add ARNs.
    5. Insira o ARN do barramento de eventos do EventBridge e clique em Avançar.
    6. Insira um nome para a política e clique em Create policy.
  6. Use o console AWS Lambda para abrir a função Lambda criada e atribuir a função IAM a ela. Na aba Configuration, selecione Permissions e clique em Edit. No final da página, selecione o nome da função e clique em Salvar.

Criação de um webhook do Zendesk para conectar ao Amazon EventBridge

Depois de criar o barramento de eventos do EventBridge e configurar a função Lambda, você precisa criar o webhook.

Como criar um webhook para integrar com o Amazon EventBridge
  1. Na Central de administração, clique em Aplicativos e integrações na barra lateral e selecione Ações e webhooks > Webhooks.
  2. Crie o webhook, especificando os seguintes valores:
    • Defina a URL do ponto de extremidade como a URL da função que você obteve quando criou a função Lambda.
    • Defina a Autenticação como Nenhuma.
  3. Clique em Criar webhook.
Observação: o Zendesk gera uma chave secreta durante o processo de criação para cada webhook. Para conectar o webhook ao Amazon EventBridge com êxito, você precisa copiar e colar essa chave secreta na variável de ambiente WEBHOOK_SECRET da função Lambda. Consulte Criação da função Lambda para receber a carga do webhook.
Observação: este artigo, incluindo o código de integração, é fornecido somente para fins de informação geral. A Zendesk não oferece suporte nem garantia ao código. A Zendesk também não fornece suporte a tecnologias de terceiros, como o Amazon EventBridge. Publique problemas encontrados nos comentários ou pesquise por uma solução online.
Powered by Zendesk