🎃
Zendesk Webhookで自分自身のAPIを呼び出してカスタムフィールドを更新する
はじめに
Zendeskのトリガ機能とWebhookを活用して、チケット作成時に自動で自分自身のZendesk APIを呼び出し、特定のカスタムフィールドを更新する構成を紹介します。Zendesk のチケット共有機能を使うにあたって、元の ID を何処かに持たせておきたかったのです。なお、トリガから直接自身のチケットフィールドを設定することはできるのですが、私の検証した限りプレースホルダが使えませんでした。
通常、ZendeskのWebhookは外部システムと連携するために使われますが、工夫すればZendesk自身のREST APIを呼び出すことも可能です。
やりたいこと
- チケットが作成されたら
- 条件に応じてトリガでWebhookを呼び出す
- WebhookはZendesk自身のAPIを呼び出して、カスタムフィールド (例: ID: 12345) を更新する
- 無限ループを避けるため、トリガではタグも設定する
準備
- APIトークンの作成
Zendesk管理センターから以下のようにAPIトークンを作成します。
1. 管理センター → [Apps and Integrations] → [Zendesk API]
2. APIトークンを有効化
3. [APIトークンを追加] → 任意の説明を入れてトークンをコピー
後述の認証で利用します。
Webhookの作成
管理センター → [Apps and integrations] → [Webhooks] にて新規作成。
- URL: https://{your_subdomain}.zendesk.com/api/v2/tickets/{{ticket.id}}.json
- メソッド: PUT
- リクエスト形式: JSON
- 認証: APIキー
- ヘッダー名: Authorization
- 値:
Basic {設定した値}
*
設定した値、というのは、base64 でユーザー名とAPIトークンをエンコードしたものです。たとえばユーザー名がexample@example.com、トークンがxxxxxxの場合、Macのターミナルで以下のコマンドを実行して作成します。
echo -n 'example@example.com/token:xxxxxx' | base64
テスト
以下の画像のように、テストをするとプレースホルダを置き換えられます。
フィールドは、以下のように書きます。id は適宜置き換えます。
{
"ticket": {
"custom_fields": [
{
"id": 12345,
"value": "new_value"
}
]
}
}
無限ループを防ぐタグ戦略
WebhookがZendesk APIを呼び出すと、チケットが再び更新されるため再発火の無限ループになる可能性があります。
これを防ぐために、タグを制御用に使います:
- トリガの条件で tags does not include {タグ名}
- トリガのアクションでチケットにタグを追加
- 以降の更新ではトリガが発火しない
Discussion