APIを使用してZendeskトリガーを作成および更新する方法

Stevia Putri
Written by

Stevia Putri

Reviewed by

Stanley Nicholas

Last edited 2026 2月 24

Expert Verified

APIを使用してZendeskトリガーを作成および更新する方法のバナー画像

ZendeskのUI(ユーザーインターフェース)を通じてトリガーを管理することは、一度限りの変更には適しています。しかし、複数の環境に同じトリガーをデプロイしたり、サンドボックスと本番環境間で構成を同期したり、トリガー管理を大規模に自動化する必要がある場合は、APIが不可欠になります。このガイドでは、認証から本番環境で使用できるコード例まで、Zendeskトリガーをプログラムで作成および更新する方法を説明します。

理解と判断を必要とするシナリオを処理するために、ますます複雑なトリガーチェーンを構築している場合は、AI(人工知能)を活用した代替手段を検討することをお勧めします。当社のZendesk連携は、ルールベースのトリガーでは対応が難しい、ニュアンスのある自動化を処理します。しかし、まずはAPIを使い始めましょう。

Zendeskのランディングページ
Zendeskのランディングページ

必要なもの

最初のAPIコールを行う前に、以下の基本事項を確認してください。

  • 管理者アクセス権を持つZendeskアカウント。 APIトークンを作成してトリガーを管理するには、管理者権限が必要です。
  • APIトークン。 管理センターから生成されます(ステップ1で説明します)。
  • HTTPリクエストを行うためのツール。 テストにはcurlが最適です。Postmanは探索に役立ちます。HTTP機能を持つ任意のプログラミング言語(Python、Node.js、Ruby)は、自動化に適しています。
  • JSONの基本的な理解。 APIはJSONペイロードを受け入れ、返します。

Zendeskトリガーの構造を理解する

Zendeskのトリガーは、単純なパターンに従います。**条件(conditions)**はトリガーがいつ実行されるかを定義し、**アクション(actions)**はトリガーが実行されたときに何が起こるかを定義します。「もしこうなら、そうする」というルールと考えてください。

基本的なJSON構造は次のとおりです。

{
  "trigger": {
    "title": "再オープン時に担当者に通知",
    "conditions": {
      "all": [
        {"field": "status", "operator": "changed", "value": "open"}
      ]
    },
    "actions": [
      {"field": "notification_user", "value": ["assignee_id", "チケットが再オープンされました", "お客様がこのチケットを再オープンしました。"]}
    ]
  }
}

conditionsオブジェクトには、all(論理AND)とany(論理OR)の2つの配列が含まれています。トリガーが発動するには、all配列内のすべての条件がtrueである必要があります。any配列内の条件は、1つだけtrueであれば十分です。

知っておくべき重要なフィールド:

  • title: トリガー名(必須)
  • conditions: トリガーがいつ実行されるかを定義します(必須)
  • actions: トリガーが何をするか(必須)
  • active: 有効/無効を切り替えるブール値(デフォルトはtrue)
  • category_id: トリガーをカテゴリに整理します(オプション)
  • position: 実行順序を制御します(数値が小さいほど最初に実行されます)

トリガー条件の評価とアクションの実行フロー
トリガー条件の評価とアクションの実行フロー

重要な区別:POSTでトリガーを作成するときは、完全なトリガーオブジェクトを送信します。PUTでトリガーを更新するときは、変更するフィールドだけでなく、すべての条件とアクションを含める必要があります。更新はトリガー構成全体を置き換えます。

ステップ1:API認証を設定する

Zendeskは認証にAPIトークンを使用します。トークンを生成する方法は次のとおりです。

  1. 管理センター > アプリとインテグレーション > API > Zendesk APIに移動します。
  2. 設定タブをクリックし、「トークンアクセス」が有効になっていることを確認します。
  3. (+) APIトークンを追加ボタンをクリックします。
  4. トークンに「トリガー管理」のようなわかりやすい名前を付けます。
  5. トークンをすぐにコピーします(再度表示されることはありません)。

**トークンの制限:**アカウントごとに最大256個のアクティブなトークンを持つことができます。その制限に達した場合は、新しいトークンを作成する前に、既存のトークンを削除する必要があります。

**認証形式:**メールアドレスとトークンを/token:を区切り文字として組み合わせて使用​​します。

jdoe@example.com/token:6wiIBWbGkBMo1mRDMuVwkw1EPsNkeUj95PIz2akv

簡単なリクエストで認証をテストします。

curl https://your-subdomain.zendesk.com/api/v2/triggers.json \
  -u jdoe@example.com/token:YOUR_API_TOKEN

トリガーを含むJSONレスポンス(またはトリガーがない場合は空の配列)が表示された場合は、認証されており、続行する準備ができています。

セキュリティのベストプラクティス:

  • トークンはコードではなく、環境変数に保存します。
  • 使用していないトークンは削除します。
  • トークンを定期的にローテーションします。
  • 異なる環境(開発、ステージング、本番)には、個別のトークンを使用します。

ステップ2:最初のトリガーを作成する

次に、API経由でトリガーを作成しましょう。「緊急」という単語を含むチケットを特定のグループに割り当てる簡単なトリガーを作成します。

エンドポイントはPOST /api/v2/triggersです。

curl https://your-subdomain.zendesk.com/api/v2/triggers.json \
  -u jdoe@example.com/token:YOUR_API_TOKEN \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "trigger": {
      "title": "緊急チケットをTier 2にルーティング",
      "conditions": {
        "all": [
          {"field": "comment_includes_word", "operator": "includes", "value": "urgent"},
          {"field": "status", "operator": "is", "value": "new"}
        ]
      },
      "actions": [
        {"field": "group_id", "value": "20455932"},
        {"field": "priority", "value": "high"}
      ]
    }
  }'

何が起こっているかを詳しく見てみましょう。

**条件:**トリガーは、チケットが新規(status is new)であり、コメントに「緊急」(comment_includes_word includes urgent)という単語が含まれている場合にのみ発動します。両方の条件はall配列にあるため、trueである必要があります。

**アクション:**条件が満たされると、トリガーはチケットをグループID 20455932に割り当て、優先度を「高」に設定します。

APIレスポンスには、割り当てられたIDを持つ作成されたトリガーが含まれています。

{
  "trigger": {
    "id": 360012345678,
    "title": "緊急チケットをTier 2にルーティング",
    "active": true,
    "conditions": {...},
    "actions": {...},
    "position": 15,
    "created_at": "2026-02-24T10:30:00Z"
  }
}

そのIDを保存します。更新に必要になります。

**トリガーのテスト:**説明に「緊急」という単語を含むテストチケットを作成します。正しいグループに割り当てられ、優先度が「高」に設定されていることを確認します。動作しない場合は、トリガーの位置を確認してください(トリガーは順番に実行され、別のトリガーが干渉している可能性があります)。

ステップ3:既存のトリガーを更新する

トリガーの更新には、特に注意が必要です。PUT /api/v2/triggers/{id}エンドポイントは、トリガー構成全体を置き換えます。変更するフィールドのみを送信すると、他のすべての条件とアクションが失われます。

トリガーを安全に更新する方法は次のとおりです。

  1. 既存のトリガーを取得して、現在の状態を取得します。
  2. 変更するフィールドを修正します。
  3. 完全なオブジェクトをPUTで返送します。
curl https://your-subdomain.zendesk.com/api/v2/triggers/360012345678.json \
  -u jdoe@example.com/token:YOUR_API_TOKEN

curl https://your-subdomain.zendesk.com/api/v2/triggers/360012345678.json \
  -u jdoe@example.com/token:YOUR_API_TOKEN \
  -X PUT \
  -H "Content-Type: application/json" \
  -d '{
    "trigger": {
      "title": "緊急および重大なチケットをTier 2にルーティング",
      "conditions": {
        "all": [
          {"field": "comment_includes_word", "operator": "includes", "value": "urgent critical"},
          {"field": "status", "operator": "is", "value": "new"}
        ]
      },
      "actions": [
        {"field": "group_id", "value": "20455932"},
        {"field": "priority", "value": "high"},
        {"field": "set_tags", "value": "urgent-routing"}
      ]
    }
  }'

条件とアクションの設定を示すZendeskトリガー作成インターフェース
条件とアクションの設定を示すZendeskトリガー作成インターフェース

キーワードに「重大」を追加し、タグアクションを追加したことに注意してください。変更だけでなく、条件とアクションの配列全体が含まれています。

**更新の競合の処理:**2つのプロセスが同じトリガーを同時に更新しようとすると、409 Conflictエラーが発生する可能性があります。トリガーはチケットが使用するsafe_updateパラメーターをサポートしていませんが、変更を行う前にupdated_atタイムスタンプを確認することで、独自の競合検出を実装できます。

ステップ4:一括操作

トリガーを大規模に管理する場合、個別のAPIコールは非効率になります。Zendeskは、一般的な操作のための一括エンドポイントを提供します。

トリガーの並べ替え

トリガーの位置によって実行順序が決まります。複数のトリガーを移動するには:

curl https://your-subdomain.zendesk.com/api/v2/triggers/update_many.json \
  -u jdoe@example.com/token:YOUR_API_TOKEN \
  -X PUT \
  -H "Content-Type: application/json" \
  -d '{
    "triggers": [
      {"id": 360012345678, "position": 1},
      {"id": 360012345679, "position": 2},
      {"id": 360012345680, "position": 3}
    ]
  }'

一括でのアクティブ化と非アクティブ化

curl https://your-subdomain.zendesk.com/api/v2/triggers/update_many.json \
  -u jdoe@example.com/token:YOUR_API_TOKEN \
  -X PUT \
  -H "Content-Type: application/json" \
  -d '{
    "triggers": [
      {"id": 360012345678, "active": false},
      {"id": 360012345679, "active": false}
    ]
  }'

一括操作のユースケース:

  • 環境全体へのトリガー構成のデプロイ
  • メンテナンス中のトリガーの一時的な無効化
  • 新しいトリガーを追加した後のトリガーの並べ替え
  • Zendeskインスタンス間のトリガーの移行

**パフォーマンスに関する考慮事項:**一括更新は非同期で処理されます。APIは、完了を確認するためにポーリングできるジョブステータスを返します。大規模な操作(100個以上のトリガー)の場合は、より小さなバッチに分割することを検討してください。

一括操作を使用した環境間のトリガーデプロイメント
一括操作を使用した環境間のトリガーデプロイメント

一般的なパターンと例

ニーズに合わせて調整できる4つの実用的なトリガーパターンを次に示します。

パターン1:チケットタイプに基づく自動割り当て

{
  "trigger": {
    "title": "インシデントをL3チームに割り当てる",
    "conditions": {
      "all": [
        {"field": "type", "operator": "is", "value": "incident"},
        {"field": "status", "operator": "is", "value": "new"}
      ]
    },
    "actions": [
      {"field": "group_id", "value": "20456000"},
      {"field": "assignee_id", "value": "296220096"}
    ]
  }
}

パターン2:優先度の変更を伴うエスカレーショントリガー

{
  "trigger": {
    "title": "優先度の高いチケットをエスカレートする",
    "conditions": {
      "all": [
        {"field": "priority", "operator": "is", "value": "high"},
        {"field": "status", "operator": "is", "value": "open"},
        {"field": "hours_since_open", "operator": "greater_than", "value": "4"}
      ]
    },
    "actions": [
      {"field": "priority", "value": "urgent"},
      {"field": "notification_group", "value": ["20456001", "エスカレーション:優先度の高いチケット", "優先度の高いチケットが4時間以上オープンになっています。"]}
    ]
  }
}

パターン3:カスタムメッセージを使用した通知トリガー

{
  "trigger": {
    "title": "VIPチケットに関するマネージャーへの通知",
    "conditions": {
      "all": [
        {"field": "current_tags", "operator": "includes", "value": "vip"},
        {"field": "update_type", "value": "Create"}
      ]
    },
    "actions": [
      {"field": "notification_user", "value": ["296220100", "新しいVIPチケット:{{ticket.title}}", "VIPのお客様から新しいチケットが送信されました。\n\nチケットID:{{ticket.id}}\nリクエスター:{{ticket.requester.name}}\n優先度:{{ticket.priority}}"]}
    ]
  }
}

パターン4:外部連携のためのWebhookトリガー

{
  "trigger": {
    "title": "チケットをCRMに送信",
    "conditions": {
      "all": [
        {"field": "status", "operator": "changed", "value": "solved"}
      ]
    },
    "actions": [
      {"field": "notification_webhook", "value": ["01G8Z5K1234567890ABCDEF", "{\"ticket_id\": \"{{ticket.id}}\", \"status\": \"{{ticket.status}}\", \"solved_at\": \"{{ticket.solved_at}}\"}"]}
    ]
  }
}

エラー処理とトラブルシューティング

Triggers APIを使用する場合、次のHTTPステータスコードが発生します。

コード意味対処方法
200OKリクエストが成功しました
201作成済みトリガーが正常に作成されました
400不正なリクエストJSON構文を確認してください
401認証されていませんAPIトークンを確認してください
404見つかりませんトリガーIDが存在しません
422処理できません無効な条件またはアクションフィールド
429レート制限リクエストを遅らせてください

一般的な問題と修正:

**無効なJSONエラー:**APIはJSON形式に厳密です。一般的な間違いには、末尾のコンマ、引用符で囲まれていないキー、文字列内の特殊文字の不適切なエスケープなどがあります。

**検証エラー(422):**これらは通常、条件またはアクションフィールドが存在しないか、無効な値を持っていることを意味します。条件リファレンスおよびアクションリファレンスに対してフィールド名を再確認してください。

**作成後にトリガーが発動しない:**トリガーは位置順に実行されることを忘れないでください。別のトリガーが最初にチケットを変更した場合、新しいトリガーの条件が一致しなくなる可能性があります。トリガーをより早い位置に移動してみてください。

**レート制限:**Zendeskは、ほとんどのエンドポイントに対して1分あたり700件のリクエストを許可しています。制限に達した場合は、指数関数的な遅延でバックオフして再試行してください。

APIトリガー管理のベストプラクティス

複数のプロジェクトでTriggers APIを操作した後、時間を節約し、頭痛の種を防ぐためのプラクティスを次に示します。

**トリガー構成のバージョン管理を行います。**トリガーJSONをGitに保存します。これにより、トリガーの変更に対するコードレビュー、何かが壊れた場合の簡単なロールバック、および特定の条件が存在する理由のドキュメントが可能になります。

**最初にサンドボックスでテストします。**本番環境にデプロイする前に、常にサンドボックス環境でトリガーロジックを検証してください。トリガーの相互作用は複雑になる可能性があり、単独で動作するものが既存のトリガーと競合する可能性があります。

**一貫した命名規則を使用します。**UIでスキャンできるように、関数でトリガーにプレフィックス(「ROUTE-」、「NOTIFY-」、「ESCALATE-」)を付けます。トリガーが特定の問題に関連付けられている場合は、チケット参照をコミットメッセージに含めます。

**トリガーの依存関係を文書化します。**トリガーが相互作用する場合(あるトリガーが別のトリガーがチェックするタグを設定する場合)、これらの関係を文書化します。1つのトリガーへの変更は、他のトリガーを微妙な方法で壊す可能性があります。

**トリガーのパフォーマンスを監視します。**使用状況のサイドロード(?include=usage_24h)を使用して、トリガーが発動する頻度を追跡します。発動しないトリガーには、誤った条件がある可能性があります。常に発動するトリガーは、不必要な負荷を引き起こしている可能性があります。

**UIとAPIをいつ使用するかを知っておいてください。**一度限りの変更や実験にはUIを使用します。環境全体へのデプロイ、一括更新、およびバージョン管理したいものにはAPIを使用します。

自動化にeesel AIを検討する場合

トリガーは、単純なルールベースの自動化に適しています。しかし、それらには限界があります。コンテキスト、感情、または意図を理解できません。顧客が実際に何を必要としているかを理解するのではなく、キーワードの正確な一致が必要です。

eesel AIでは、自動化へのアプローチが異なります。厳格なトリガーロジックを構築する代わりに、ビジネスを学習し、インテリジェントな意思決定を行うAIチームメイトを採用します。

自動化の可能性を予測するeesel AIシミュレーション機能
自動化の可能性を予測するeesel AIシミュレーション機能

複雑なトリガーの代わりに、またはその横に、当社のZendesk連携を検討する時期は次のとおりです。

**理解を必要とする複雑な自動化。**感情、緊急性、または顧客の意図に基づいてチケットをエスカレートしたいですか?当社のAIは、フィールド値だけでなく、チケットの内容を読み取り、理解します。

自然言語条件。「タグがXと等しい場合」の代わりに、「顧客が請求について不満を持っているように見える場合」のようなことを言うことができます。AIはコンテキストとニュアンスを理解します。

**自動チケット解決。**トリガーは通知とタグ付けを行うことができますが、当社のAIエージェントは実際にチケットを自律的に解決できます。過去のチケットとヘルプセンターから学習し、手動設定なしで正確な回答を提供します。

**段階的な自動化。**エージェントレビューのためにAIが返信を下書きすることから始めます。それが証明されたら、直接応答を送信させます。最終的には、最前線のサポート全体を処理できます。ペースはあなたがコントロールできます。

スーパーバイザーエージェントを構成するためのeesel AIダッシュボード
スーパーバイザーエージェントを構成するためのeesel AIダッシュボード

ますます複雑なトリガーチェーンを構築している場合は、別のアプローチを検討する時期かもしれません。eesel AIがZendeskとどのように連携するかをご覧ください

よくある質問

いいえ、APIトークンを生成してトリガーを管理するには、管理者権限が必要です。管理者アクセス権がない場合は、Zendesk管理者に管理者権限を付与してもらうか、代わりにトリガーを作成してもらうように依頼してください。
単一操作では、POST /api/v2/triggersを使用してトリガーを作成し、PUT /api/v2/triggers/{id}を使用して個々のトリガーを更新します。一括操作では、PUT /api/v2/triggers/update_manyを使用して、複数のトリガーの位置、アクティブステータス、またはカテゴリを一度に更新します。一括更新は非同期で処理され、ジョブステータスが返されます。
一般的なエラーには、400(無効なJSON)、401(認証の問題)、404(トリガーが見つからない)、および422(検証エラー)が含まれます。常にレスポンスボディで詳細なエラーメッセージを確認してください。422エラーの場合は、公式のZendeskリファレンスドキュメントに対して、条件フィールドとアクションフィールドを確認してください。
いいえ、PUTエンドポイントはトリガー構成全体を置き換えます。部分的な更新を行うには、まず既存のトリガーを取得し、変更する必要があるフィールドを変更してから、完全なオブジェクトを返送します。これにより、条件やアクションを誤って失うことがなくなります。
"active": falseでトリガーを作成して、最初は無効にしておきます。サンドボックス環境でテストし、検証が完了したら本番環境でアクティブにします。positionフィールドを使用して、新しいトリガーをリストの最後に配置して、既存の自動化を妨げないようにすることもできます。
トリガーは65 KB未満である必要があります。これには、すべての条件、アクション、およびメタデータが含まれます。この制限に達している場合は、複雑なロジックを複数のトリガーに分割するか、Webhookを使用して複雑な操作を外部で処理することを検討してください。
GET /api/v2/triggersを使用してソースインスタンスからトリガーをエクスポートし、JSONを変更してID(インスタンス固有)を削除してから、POST /api/v2/triggersを使用してターゲットインスタンスにトリガーを作成します。インスタンス間でグループID、ユーザーID、およびその他の参照をマッピングする必要があります。

この記事を共有

Stevia undefined

Article by

Stevia Putri

Stevia Putri is a marketing generalist at eesel AI, where she helps turn powerful AI tools into stories that resonate. She’s driven by curiosity, clarity, and the human side of technology.