tukaのブログ

気が向いた時に何か書きます

Zendesk Supportのチケット起票をWebhookでSlackに連携する(雑文&小ネタです)

今年から仕事で本格的に Zendesk というカスタマーサポートのSaaSを使い始めました。

何か新しいツールを使い始めると連携したくなってしまうのですが、ZendeskにはSlackインテグレーションがあり、有効にするとSlackから問い合わせチケットに関する通知や操作などができるようになります。

support.zendesk.com

↑にも記載があるけど具体的にインテグレーションではこんなことができそう。

  • Slackでのチケットイベント通知
  • チャンネルの構成(SupportグループごとのSlackチャンネルとの紐付け)
  • Slackから新規チケット作成
  • リクエスタの作成と割り当て
  • サイドカンバセーション
  • Slack用Answer Bot

問い合わせなどの受信に気づくきっかけとしてSlack連携は必須だったので、インテグレーションを試しましたがうまく行かず。

先ほどの記事をよく読むと制約があり、Slackの1ワークスペースにつきZendeskのサブドメインを1つしか登録することができない(※2020年12月現在)らしく、これに該当していました。

通知が出来ないのは困る、でもよく見るとインテグレーションは高機能すぎる(欲しいのは通知だけ)なので、Webhookで実現することにしました。

ZendeskのSlack通知に必要なこと

ざっくりだけどこんな感じ。

  • Slack で Incoming Webhook を作成
  • Zendesk で通知先とするターゲットを作成
  • ターゲットに通知するトリガを作成

Slack通知するためのターゲットを作成

管理 > 設定 > 拡張機能 を開き、ターゲットを追加します。 (もしかしたらZendeskを契約した時期やプランによってメニューが異なるかもしれません?)

f:id:tukaelu:20201229102805p:plain

Slackで作成した Incoming Webhook URL を設定します。この時、HTTPメソッドはPOST、コンテンツタイプをJSONにするのをお忘れなく。

f:id:tukaelu:20201229103008p:plain

ターゲット作成はこれで完了。

Slack通知するためのトリガを作成

設定 > ビジネスルール > トリガ から新しいトリガを追加します。

f:id:tukaelu:20201229103539p:plain

  • トリガ名
    • 任意
  • 説明
    • 任意
  • 条件
    • コメント = パブリック
  • アクション
    • ターゲットに通知 で先ほど追加したターゲットを選択

f:id:tukaelu:20201229104739p:plain

続いてターゲットに通知するメッセージデータをJSONで指定するのですが、今回は通知内容の見栄えを良くしたかったので Attachment 形式のメッセージを送信しようと思います。

そんな時に便利なのがSlackのメッセージビルダーです。

api.slack.com

メッセージを構成するJSONからSlackでの実際の見え方をチェックすることができるので、試しに以下を入力してプレビューで確認してみます。

{
  "attachments": [
      {
          "pretext": "pretext",
          "author_name": "{{ticket.requester.name}}",
          "author_link": "https://xxxxxx.zendesk.com/agent/users/{{ticket.requester.id}}/requested_tickets",
          "title": "{{ticket.title}}",
          "title_link": "{{ticket.link}}",
          "fields": [
              {
                  "title": "企業名",
                  "value": "{{ticket.organization.name}}",
                  "short": false
              },
              {
                  "title": "カスタムフィールド",
                  "value": "{{ticket.ticket_field_xxxxxxxxxxxx}}",
                  "short": false
              },
              {
                  "title": "本文",
                  "value": "{{ticket.latest_public_comment}}",
                  "short": false
              }
          ],
          "footer": "フッター文字列",
          "footer_icon": "https://example.com/path/to/icon.png"
      }
  ]
}

こんな感じ。

f:id:tukaelu:20201229110242p:plain

{{ticket.organization.name}} などのタグは Zendesk Support のプレースホルダなので、実際にPOSTされる際はトリガとなったチケットの情報が埋め込まれて通知されます。

どんなプレースホルダがあるかは ↓ で確認できます。

support.zendesk.com

メッセージビルダーでレイアウトの調整などが出来たら、あとはトリガ設定にJSONボディとして指定して完了です。

Slackに通知する際は、通知する項目やその公開範囲などに注意する必要がありますが、プレースホルダにはカスタムフィールド(独自のフォーム項目)も指定できるのでインテグレーションよりも柔軟にメッセージを構成できるのは嬉しいですね。

実際に僕も業務でWebhookを仕込んで通知をしているのですが、POSTされるデータサイズが大きすぎるとSlack側でエラーとなってしまうので、使用するプレースホルダがどの程度のサイズになるかなどは意識して組み立てるなど注意が必要です。

最後に

Zendeskには API なども用意されているので、このあたりも活用して業務効率を上げる取り組みなどもしていきたいなー。

今年は兎にも角にもZendeskと共にあった一年なので最後に小ネタでした。それでは。