AlteryxでZendeskのユーザーの契約期間が過ぎていたらSlackに通知する

2021.04.19

こんにちは、スズです。

Zendeskのユーザーフィールドは管理者が任意のフィールドを追加することができます。ユーザーフィールドを使って、ユーザーに契約期間の情報を追加して管理することもできます。ただ、各ユーザーの画面を開いて契約期間を確認する、というのは少し手間になるかもしれません。今回はAlteryxを使って、Zendeskのユーザーに付与した契約期間が過ぎていた場合に、Slackにメッセージを投稿するワークフローを考えてみました。

環境

本エントリの執筆に使用した環境は以下の通りです。

  • Alteryx Designer 2020.2
  • Windows 10 Pro

また、Zendeskはサンドボックスを使用しています。

事前準備

SlackのWebhook URL

Slackにメッセージを投稿するために、SlackのWebhook URLを用意します。手順については以下のエントリをご参照ください。

作成すると、以下のようにWebhook URLが表示されます。

Zendeskの認証情報

Zendeskからユーザーと組織の情報を取得するために、Zendesk APIの発行とBase64でエンコードした認証情報を用意します。

Zendesk APIは管理者のアカウントを使って管理 > APIからAPIトークンを追加にて発行します。

Base64でエンコードした認証情報はAlteryxを使って用意します。テキスト入力ツールで以下のデータを用意します。

Field1
<APIを発行したアカウントのメールアドレス>/token:<APIトークン>

Base64エンコーダーツールを接続、「Field1」列を対象にしてワークフローを実行すると、以下のように「Base64_encoded」という列が作成されます。

Field1 Base64_encoded
<APIを発行したアカウントのメールアドレス>/token:<APIトークン> <Base64でエンコードした認証情報>

ユーザーの契約期間の情報

Zendeskの管理 > ユーザーフィールドに契約が終了する日を入力するフィールドを追加します。フィールドには日付のタイプがありますが、今回は本文のタイプを選択しています。
※日付のタイプを選択しても対応可能です。

ユーザーの画面に作成したフィールドが表示されますので、yyyy-MM-dd形式で日付を入力します。

データ取得とSlack通知のワークフローの作成

ユーザーと組織のデータの取得

まずはZendeskからユーザーと組織のデータを取得します。以下の赤枠部分が該当する処理となります。ユーザー、組織のデータの取得については、アクセス先のURLが異なる以外は同じ設定を行っています。ユーザー、組織のそれぞれからデータを取得したのち、データを結合します。

はじめにテキスト入力ツールにデータの取得先になるURLを記載します。今回はユーザーや組織が少ない環境を使用しているため1ページで全データを取得できますが、ユーザーや組織が多い場合は全データを取得するために反復マクロを使用するなどの処理が必要になります。

ユーザー情報: https://<サブドメイン>.zendesk.com/api/v2/users.json?page=1
組織情報: https://<サブドメイン>.zendesk.com/api/v2/organizations.json?page=1

ダウンロードツールでは、認証情報とURLを使ってユーザーと組織の情報を取得します。

基本設定:

URLにURLの列を指定します。

ヘッダー:

定数値を追加してAuthorizationを指定します。定数値に追加した内容は以下の通りです。

名前
Authorization Basic <Base64でエンコードされた認証情報>

ペイロード:

HTTPアクションGETを指定します。

ダウンロードツールで取得したデータは、「DownloadData」列のセルにJSONで表示されます。JSONパースツールを使って取得したデータをパースします。オプションには単一の文字列フィールドに値を出力するを選択します。

パースしたデータは、「JSON Name」列には「users.0.id(organizations.0.id)」「users.0.name(organizations.0.name)」など、「JSON_ValueString」列にはユーザー(組織)のIDや名前が入っています。IDや名前などの列を用意したいので、「JDON Name」列を列分割ツールで分割します。区切り文字.を指定し、3つの列に分割します。

クロスタブツールを使ってデータの持ち方を整えます。以下の値でデータをグループ化では「users.0.id(organizations.0.id)」から分割した2列目の「0」などのデータの列、列ヘッダーの変更では「users.0.id(organizations.0.id)」から分割した3列目の「id」などのデータの列、新しい列の値では「JSON_ValueString」列を指定します。

結合ツールでユーザーと組織のデータを結合ツールで組織のIDを使って1つにまとめます。あわせて不要な列を削除しておきます。この時点でデータは以下のようになっています。

Slackへの投稿

データの取得ができましたので、ここからはSlackに投稿する準備をします。

フィルターツールを使って契約期間が過ぎたユーザーを抽出します。また、停止中のユーザーについても除外しておきます。以下の条件をフィルターツールに記載しました。契約情報がある列は文字列型になっていたため、ToDate関数を使用して日付型に変換しています。

ToDate(<契約情報がある列>) <= DateTimeToday() AND [suspended] = "0"

フォーミュラツールを使ってユーザーのURLを用意します。https://<サブドメイン>.zendesk.com/agent/users/に取得したユーザーのIDを組み合わせてURLを用意しています。

"https://<サブドメイン>.zendesk.com/agent/users/" + [id]

また、Slackに投稿するメッセージをJSONで作成します。今回は、ユーザー名、組織名、契約期間の情報とメッセージを投稿します。ユーザー名はZendeskのユーザーのURLにリンクを張っています。

'{"attachments": [{"title": "' + <ユーザー名がある列> + '","pretext":"契約期間が過ぎています。契約を確認してください。","text":"企業:' + <組織名がある列> + '\n契約期限:' + <契約情報がある列> + '","title_link":"' + <URLがある列> + '","color": "#36a64f"}]}'

テキスト入力ツールでSlackのWebhook URLを用意し、各レコードに対してフィールド付加ツールでSlackのWebhook URLを付与します。

ダウンロードツールでSlackにメッセージを投稿するように設定します。

基本設定:

URLにWebhook URLの列を指定します。

ヘッダー:

定数値を追加してContent-Typeを指定します。定数値に追加した内容は以下の通りです。

名前
Content-Type application/json

ペイロード:

HTTPアクションPOSTを指定します。また、フィールドからクエリ文字列/本文を取得するには、フォーミュラツールで用意したSlackに投稿するメッセージの列を指定します。

これで準備できましたので、ワークフローを実行します。

Slackで通知を確認

Slackを確認すると、メッセージや対象のユーザー情報が投稿されています。ユーザー名はリンクになっているので、クリックするとZendeskでユーザーを確認できます。

さいごに

AlteryxでZendeskのユーザーの契約期間が過ぎたらSlackに通知するワークフローをご紹介しました。今回はワークフローを手動で実行していますが、Alteryx Serverを使ってスケジュールを設定することで自動化することもできます。また、今回は「契約期間が過ぎた場合に」という条件でフィルターしましたが、条件を変更することで「契約期間終了する一ヶ月前に」ということも可能かと思います。

参考