ファストパス: 管理センター >「アプリおよびインテグレーション」>「アクションとWebhook」 > 「Webhook」
Zendeskの強力なツールであるWebhookを使って、Zendeskアカウントの変更を常に他のシステムに反映させることができます。Amazon EventBridgeとの統合にWebhookを使用すると、リアルタイムのデータ処理のワークフローを洗練化することができます。この記事では、Webhookを使用してZendeskのイベントをAmazon EventBridgeに送信する方法について説明します。
Webhooksを使用してAmazon EventBridgeにイベントを送信するための要件
Webhookを使用してAmazon EventBridgeと接続するには、以下の要件を満たす必要があります。
- Zendeskアカウントの管理者であること。
- EventBridgeが設定されたAWSアカウントがあること。
また、EventBridgeも含め、AWSサービスの基本的な知識が必要です。
EventBridgeイベントバスを作成する
Webhookを作成する前に、EventBridgeイベントバスを作成する必要があります。
ARNをメモしておきます。後のステップで必要になります。ARNは、以下のようなフォーマットになっています。
arn:aws:events:{REGION}:{AWS_ID}:event-bus/{EVENT_BUS_ID}
Webhookのペイロードを受け取るLambda関数を作成する
Webhookを受け取り、Webhookの署名を確認し、作成したEventBridgeイベントバスにWebhookペイロードを渡すには、Lambda関数が必要です。
Lambda関数を作成するには
-
AWS Lambdaコンソールを使用して、新しいLambda関数を作成します。必要に応じてフィールドに値を入力します。「Advanced settings」で「Enable function URL」を選択し、認証方法に「NONE」を選択します。
Function URLをメモしておきます。これは、Webhookを接続する公開URLです。
- 「 Code source」ウィンドウに以下のコードを追加し、「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)}), }
- Lambda関数に以下の2つの環境変数を追加します。
-
EVENT_BUS_ARN
:EventBridgeイベントバスを作成するときに取得したARNの値を設定します。これがイベントバスの場所になります。 -
WEBHOOK_SECRET
:Webhookを作成した後、これをWebhookシークレットに設定する必要があります。
-
-
AWS IAMコンソールを使用して、AWS Lambdaサービスのロールを作成します。
ロールの名前をメモしておきます。Lambda関数にロールを割り当てる際に、この情報が必要になります。
- ロールを作成したら、ロールを編集してEventBridgeイベントバスのARNを追加します。
- ロールを開きます。
- 「Step 2:Add permissions」で「Edit」をクリックし、「Create inline policy」を選択します。
- EventBridgeサービスを検索し、PutEventsメソッドを選択します。
- 「Resources」で、「 Add ARNs」をクリックします。
- EventBridgeイベントバスのARNを入力し、「Next」をクリックします。
- 「Name」にポリシーの名前を入力し、「Create policy」をクリックします。
- AWS Lambdaコンソールを使用して、作成したLambda関数を開き、IAMロールを割り当てます。「Configuration」タブで、「Permissions」を選択し、「Edit」をクリックします。ページの下部で、ロールの名前を選択し、「Save」をクリックします。
Amazon EventBridgeに接続するためのZendesk Webhookを作成する
EventBridgeイベントバスを作成し、Lambda関数を設定したら、Webhook自体を作成する必要があります。
Amazon EventBrightと統合するWebhookを作成するには
- 管理センターで、サイドバーにある「 アプリおよびインテグレーション」をクリックし、「アクションおよびWebhook」>「Webhook」を選択します。
-
Webhookを作成して、以下の値を指定します。
- Endpoint URLを、Lambda関数を作成したときに取得したFunction URLに設定します。
- 「Authentication」を「None」に設定します。
- 「Webhookを作成する」をクリックします。
メモ:Zendeskは各Webhookの作成プロセス中にシークレットキーを生成します。WebhookをAmazon EventBridgeに正常に接続するには、このシークレットキーをコピーして、Lambda関数の
WEBHOOK_SECRET
環境変数に貼り付ける必要があります。「Webhookペイロードを受け取るLambda関数を作成する」を参照してください。
メモ:この記事は、統合コードも含め、一般的な情報提供のみを目的としています。記事内で例示したコードについて、Zendeskではサポートも保証もしません。Zendeskは、Amazon EventBridgeのようなサードパーティのテクノロジーについてサポートを提供することはできません。何か問題が生じた場合はコメント欄に投稿するか、インターネットで解決策を探してみてください。