チケットを自動作成する 〜 カスタム拡張機能 (Zendesk Support 編)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/31afc055-519a-a79e-0c1a-c4338d544309.png)

この記事では、ピザの注文内容を記録として残るように、チケット管理システムと連携してみます。
ピザの注文に必要な項目は、これまで紹介してきた**ピザ注文アクション**を使って、ユーザーから聞き出します。
その聞き出した項目を**カスタム拡張機能**を使って繋いだ**チケット管理システム**に送信してみます。

# チケット管理システム

カスタム拡張機能は、REST API の仕様を OpenAPI 文書として定義できれば、その文書を読み込むだけなので、接続先システムを限定しません。
今回は、チケット管理システムとして、[有人エージェントにバトンタッチしてみる！](https://qiita.com/yanagih/items/0d2fd17287ecfc44c950)で使用した **Zendesk** を使います。
Zendesk は非常に多くの機能を有しており、さらにそれらの機能を REST API 経由で呼び出すことが可能です。
今回はその中でも **Zendesk Support** を使用してみます。

そして、Watson Assistant は、Zendesk Suppport をカスタム拡張機能を使って接続するための **Starter Kit** を提供していますので、ほぼ **no code**で構成できます。

# Zendesk Support に関する事前準備

Zendesk 環境の準備は、[有人エージェントにバトンタッチしてみる！](https://qiita.com/yanagih/items/0d2fd17287ecfc44c950)を参照ください。 Zendesk Chat が使用できる状態であれば、Zendesk Support も使用できます。
ただし、チケット作成機能を使用するためには、API コール時の認証情報となる **アクセス・トークン**を入手する必要があります。
**アクセス・トークン**は、**管理センター** (https://(サブドメインで置換えます).zendesk.com/admin/apps-integrations/apis/zendesk-api/settings)にアクセスし、**トークンアクセス有効化ボタン**をクリックしてください。**アクセス・トークン**が表示されますので、メモしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/e1f21cc0-a539-a363-6396-25fcc5023785.png)


# Zendesk に接続する

### カスタム拡張機能を作成する

**Integrations** (カスタム拡張機能) を使用して、Zendesk に接続するための設定を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/1dae0742-ffea-1de7-318d-13b2707ed795.png)
カスタム拡張機能をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/e1a79224-a0f7-8c67-8da4-f97af760e55b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/f753fd0e-1c81-5430-a08e-2856d559ede0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/c2832085-75a4-c31f-13a4-b7a173cd20e0.png)
drag & drop する OpenAPI 文書は、[こちらの GitHub](https://github.com/Watson-bx-04/zendesk-support) からダウンロードしてください。
※ファイル名: zendesk-telNum.openapi.json

:::note info
zendesk-telNum.openapi.json は、配達時刻等、デフォルトで定義されていない情報も送信できるように、一部カスタマイズした内容を含んでいます。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/f8adff78-ad80-1543-bca3-554f8af02b3b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/d0129de6-ad0b-c64f-08e4-c2c813f39215.png)
**注文チケット**拡張機能が作成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/31d0671d-dd88-631d-85a6-028661033d00.png)

### カスタム拡張機能に認証情報を設定する

下記手順は、ドラフト環境で利用するカスタム拡張機能に認証情報を設定する手順です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/16d621a5-9336-30d0-1c32-2152acbaeda3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/8f360989-ebe8-8802-c84e-59fc8563d243.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/3e1823b3-9748-8c55-d165-d1234f946d53.png)
認証情報をセットします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/6e66d63f-c958-6f0e-f690-a2636095da44.png)

:::note info
Usernameのところには、**メールアドレス/token** というように、メールアドレスの後ろに **/token** を追加してください。
(ex) hoge@fuga.com/token
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/ab0cf11a-ad2b-ee30-32b1-896a417aa5ea.png)
ドラフト環境が構成されると、「Add」から「Open」　に表示が変わります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/76012f3c-b822-e816-1d04-95629bdeac32.png)
以上です。

# チケット作成アクションの作成

チケットを自動作成する**チケット作成アクション**を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/a34f27fd-f972-4cf7-a642-208570dd48bc.png)
STEP 1 を構成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/17a14285-f746-c798-5b79-174761d33367.png)
STEP 2 を構成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/52da57ee-3031-20df-6f03-710584f84316.png)
STEP 3 を構成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/8723c9f1-19c7-993b-5aea-554d0bcb4aae.png)
Parameters の **request.comment...** の部分は、このように入力してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/9fbac393-d458-052a-abcd-0fbf542d72ac.png)

:::note warn
エラーが発生する場合(文字列として扱われない場合)は、ダブルコーテーション(")で囲ってみてください
```"{'サイズ': ${size},'配達時刻: ${time.value}}"```
:::

STEP 4 を構成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/3f63043a-88cd-cb13-5fc4-f796203c010f.png)
STEP 5 を構成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/b5fa4ceb-6a5a-3c72-4a2f-b4b5ff3aecf4.png)
以上、チケットを作成するアクションが作成できました。

## ピザの注文アクションからチケット作成アクションを呼び出す

ピザの注文内容をチケットに反映するために、**ピザの注文アクション**から**チケット作成アクション**を呼び出す処理を追加します。

**ピザの注文アクションのSTEP 5** を修正します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/16eef379-53e7-f706-1408-a5aa8a1040e2.png)
**ピザの注文アクションのSTEP 6** を作成します。
**Go to another action** を使って、**チケット作成アクション**を呼び出します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/06960f2a-ff47-f109-fd87-78ef1a713255.png)
以上です。

### 作成した Actions について
作成した Actions をエクスポートし、[こちらのGitHub](https://github.com/Watson-bx-04/zendesk-support) にアップロードしました。
実際に試される場合は、ダウンロードしてお試しください。
※ファイル名: 初めてのアクション-action.json

# 試してみる

テストの様子を動画に収めましたので、こちらをご覧ください。

https://youtu.be/Dn43p1sm3pI

# いかがでしたでしょうか

ピザの注文内容を Zendesk Support に送信して、ピザ注文チケットを自動生成してみました。

ピザ注文チケットにより
* 注文内容が記録として残る
* ユーザーとの対話が別のシステムに引き継がれたとしても、注文内容を追うことができる

等のメリットがあり、ユーザーも**同じことを二度聞かれなくて済む**、等のメリットがありますね。
バーチャル・アシスタントを単体で使った場合に比べ、**ユーザー・エクスペリエンスが一歩前進**しました。

# 参考情報

## 公式オンライン・マニュアル: カスタム拡張機能の作成

https://cloud.ibm.com/docs/watson-assistant?topic=watson-assistant-build-custom-extension

## 公式オンライン・マニュアル: アシスタントに拡張機能を追加

https://cloud.ibm.com/docs/watson-assistant?topic=watson-assistant-add-custom-extension

## Watson Assistant Starter Kits: Zendesk Support

https://github.com/watson-developer-cloud/assistant-toolkit/tree/master/integrations/extensions/starter-kits/zendesk-support

## 関連記事
https://qiita.com/yanagih/items/0d2fd17287ecfc44c950

## Zendesk オンラインマニュアル: Creating and updating tickets
https://developer.zendesk.com/documentation/ticketing/managing-tickets/creating-and-updating-tickets/#setting-custom-field-values

## チケット自動作成テスト
https://youtu.be/Dn43p1sm3pI