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.
Requisitos para enviar eventos ao Amazon EventBridge com webhooks
- 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.
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ê.
- 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.
- 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)}), }
- 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.
-
- 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.
- Depois de criar a função, edite-a para adicionar o ARN do barramento de eventos do EventBridge.
- Abra a função.
- Na Step 2: Add permissions, clique em Edit e selecione Create inline policy.
- Pesquise os serviços EventBridge e selecione o método PutEvents.
- Em Resources, clique em Add ARNs.
- Insira o ARN do barramento de eventos do EventBridge e clique em Avançar.
- Insira um nome para a política e clique em Create policy.
- 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.
- Na Central de administração, clique em Aplicativos e integrações na barra lateral e selecione Ações e webhooks > Webhooks.
-
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.
- Clique em Criar webhook.
WEBHOOK_SECRET
da função Lambda. Consulte Criação da função Lambda para receber a carga do webhook.