快速查看: 管理中心 > 应用和整合 > 操作和 Webhook > Webhook
Zendesk Webhook 是一个功能强大的工具,可帮助您将 Zendesk 帐户中的更改更新到其他系统。使用 Webhook 与 Amazon EventBridge 整合为通过实时数据处理实现更复杂的工作流程创造机会。本文章介绍了如何使用 Webhook 将 Zendesk 事件发送到 Amazon EventBridge。
使用 Webhook 发送事件到 Amazon EventBridge 的要求
要使用 Webhook 连接 Amazon EventBridge,必须满足以下要求:
- 您必须是 Zendesk 帐户的管理员。
- 您必须有一个已设置 EventBridge 的 AWS 帐户。
此外,您应对 AWS 服务(包括 EventBridge)有基本的了解。
创建 EventBridge 事件总线
在创建 Webhook 之前,您必须 创建一个 EventBridge 事件总线。
记下 ARN,稍后的步骤中需要用到它。ARN 应采用以下格式:
arn:aws:events:{REGION}:{AWS_ID}:event-bus/{EVENT_BUS_ID}
创建 SLA 函数以接收 Webhook 有效负载
需要一个 SLAM 函数来接收 Webhook,确认 Webhook 的签名,并将 Webhook 有效负载传递到您创建的 EventBridge 事件总线。
创建 SLA 函数
- 使用 AWS SLA 控制台创建新的 SLA 函数。根据需要填写字段。在 高级设置下,选择 启用函数 URL,然后作为身份验证方法选择 无 。
记下 函数 URL。这是您将连接 Webhook 的公开 URL。
- 将以下代码添加到 代码来源 窗口,然后单击 部署。
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)}), }
- 添加两个环境变量到 SLA 函数:
-
EVENT_BUS_ARN
:将其设置为您在 创建 EventBridge 事件总线时获得的 ARN 值。这是事件总线位置。 -
WEBHOOK_SECRET
:创建 Webhook后,需要将其设置为 Webhook 密钥。
-
- 使用 AWS SAM 控制台 为 AWS SLA 服务 创建用户角色 。
记下用户角色的名称。您将需要此信息来将用户角色分配给您的 SLA 函数。
- 创建用户角色后,对其进行编辑以添加 EventBridge 事件总线 ARN。
- 打开用户角色。
- 下 第 2 步:添加权限 单击 编辑 并选择 创建内联政策。
- 搜索 EventBridge 服务,然后选择 PutEvents 方法。
- 在 资源下,单击 添加 ARN。
- 输入 EventBridge 事件总线 ARN,然后单击 下一步。
- 输入您政策的 名称 ,然后单击 创建政策。
- 使用 AWS LAMBDA 控制台 打开您创建的 LAMBDA 函数,并为其分配 AM 用户角色。在 配置 标签上,选择 权限 ,然后单击 编辑。在页面底部,选择用户角色名称,然后单击 保存。
创建 Zendesk Webhook 以连接到 Amazon EventBridge
创建 EventBridge 事件总线并配置 SLA 函数后,您需要创建 Webhook 本身。
创建 Webhook 以与 Amazon EventBight 整合
- 在 管理中心,单击 侧栏中的 应用和整合 ,然后选择 操作和 Webhook > Webhook。
-
创建 Webhook,确保指定以下值:
- 将 端点 URL 设置为您 在创建 SLA 函数时获取的 函数 URL。
- 将 身份验证 设置为 无。
- 单击创建 Webhook。
注意:Zendesk 在创建每个 Webhook 的过程中生成一个密钥。要将您的 Webhook 成功连接到 Amazon EventBridge,您必须将此密钥复制并粘贴到 SLA 函数的
WEBHOOK_SECRET
环境变量。请参阅 创建 SLA 函数以接收 Webhook 有效负载。
注意:本文(包括整合代码)仅供一般信息之用。Zendesk 不支持并不保证该代码。Zendesk 也无法为第三方技术(例如 Amazon EventBridge)提供支持。如有任何问题,请将其发布在评论部分,或尝试在线搜索解决方案。
翻译免责声明:本文章使用自动翻译软件翻译,以便您了解基本内容。 我们已采取合理措施提供准确翻译,但不保证翻译准确性
如对翻译准确性有任何疑问,请以文章的英语版本为准。