注文のキャンセル処理を追加する 〜セッション変数の使い方〜

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/758811b1-e3f1-98f6-eaeb-7e24a6c0827c.png)

New Watson Assistant Build 編の 2 回目です。

前回[「直感的に操作できる Action で対話フローを作成してみる」](https://qiita.com/yanagih/items/f98cff2b5b9ce3208fc4)では、
* **ピザの注文・アクション**の作成
* **Preview 機能を使ったアクションの動作確認** (変数値確認モードを使用)

を実際の操作手順を交えながら紹介しました。

今回の記事では、
* **割引条件アクション**と**注文キャンセル・アクション**の作成

を実際の操作手順を交えながら紹介します。

#### 各アクションとその処理内容
作成するアクションとその処理内容のイメージ図です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/44a744d5-ea62-a75d-7e01-b23bd039ceb8.png)

今回は、**割引条件アクション**と**注文キャンセル・アクション**に関する対話フローを作成します。

特に**注文キャンセル・アクション**では、**ピザの注文アクション**で注文した内容を使用します。
特定のアクション内で得た値は自動的に変数値として保存されますが、その特定のアクションが実行されている間だけ有効な一時的な保存なので、他のアクションで使用したい場合は、セッション変数として保存する必要があります。

:::note info
**セッション変数の作成方法と使い方**は、Actions を使いこなす上で重要な概念ですので、この記事でしっかりと理解していただければと思います。
:::


#### これまでの記事
第 1 回目 [New Watson Assistantがやってきた！](https://qiita.com/yanagih/items/4bd8add06d1e0695b314)
第 2 回目 [Watson Assistantのインスタンスを立てる](https://qiita.com/yanagih/items/b02db00d06de397bec64)
第 3 回目 [直感的に操作できる Action で対話フローを作成してみる](https://qiita.com/yanagih/items/f98cff2b5b9ce3208fc4)

# 対話フローの作成 (第 3 回目からの続き)

ピザの注文には欠かせない:smiley:、「割引条件」と「注文のキャンセル」を扱うアクションを作成します。

#### 割引条件・アクション

新しいアクションを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/891a42ff-3126-68e8-e8de-1149a47da14b.png)


:::note info
上記画面までの操作を忘れた方は[こちらを参照](https://qiita.com/yanagih/items/f98cff2b5b9ce3208fc4#%E5%AF%BE%E8%A9%B1%E3%83%95%E3%83%AD%E3%83%BC%E3%81%AE%E4%BD%9C%E6%88%90-1)してください。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/dfd70198-1c46-698a-ec06-c32e4d8c308c.png)

ユーザーへの返信を入力します。
このアクションはこれで終了なので、[End the action]を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/f7e9e8b8-9e12-cab9-c65d-6a84594875e8.png)

このように表示されていれば OK です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/5c4e9c47-d446-6936-fcf9-57c2a72e6da7.png)

右上の[保存アイコン]と[x]をクリックして、アクション作成画面に戻ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/09b9c30f-2dc1-26f2-914e-2c81c4713243.png)


#### 注文キャンセル・アクション

注文キャンセル・アクションでは、ピザの注文アクションで注文した内容を使用します。

ピザの注文アクション内で得た値は自動的に変数値として保存されますが、そのアクションが実行されている間だけの**一時的な保存**なので、注文キャンセル・アクションで使用したい場合は、ピザの注文アクション内で**セッション変数として保存しておく**必要があります。

セッション変数として保存するために必要な設定は2つです。

1. セッション変数を定義する
1. アクション内で得た値をセッション変数にセット

#### セッション変数を定義する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/65f65146-5ff0-6a20-f0f3-9e4ceabcd9b4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/71a3784b-df06-499a-e383-c00a834c6a97.png)

ピザの種類を保存する、**セッション変数 pizza** を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/1b789352-b60a-1ac5-7244-2cd6bca50b7b.png)

同様に、ピザのサイズを保存する、**セッション変数 size** を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/4afae355-0376-db08-72c0-14345fb86dbc.png)

同様に、配達時間を保存する、**セッション変数 time** を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/f6b62780-cba1-1d26-0a8f-c82afc4d12bc.png)

このように表示されていれば OK です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/715a08f1-87d7-392e-ebc5-75611bde13b8.png)

#### ピザの注文アクション内で得た値をセッション変数にセットする

ピザの注文内容を保存するセッション変数の準備ができたので、注文内容をセッション変数にセットするための設定を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/6af0d95f-b5eb-eee5-8f6a-b57406f9ca1b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/99b6c0ef-43fd-b6e2-8847-ab1baf780f19.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/3e32255f-aad0-1d72-e053-760680dab7b9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/7d8d4d95-31c1-7193-3393-0a4e4bb23298.png)

ピザの種類は、ステップ 1 の聞き返しで入手しています。
設定画面に表示されている**ステップ 1 での聞返文**を選択することで、ピザの種類を **pizza 変数**にセットできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/6f2e5053-f86d-cdb5-3ae3-ecc7f2c337dd.png)

次はピザのサイズを**セッション変数 size** にセットします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/c2688ae1-a1bc-8a29-5859-6b10f1522095.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/b9cfe1da-7e9f-8c2f-3886-f9f77d7204b9.png)

次は配達時刻を**セッション変数 time** にセットします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/2e62b34f-e94c-284c-2885-5cb4085f62ea.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/3859a330-8949-7fc6-0b0f-9525e62968ee.png)

このように表示されていれば OK です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/6d1820d9-979e-a246-4ef2-3e03fbcaee2b.png)


#### 注文キャンセル・アクションの作成

ピザの注文内容を保存しているセッション変数を使用して、注文キャンセル・アクションを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/a8cb5f54-c40e-c974-e1a8-05a832992f6d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/9b1711fe-6be2-0f88-39b0-647f6dd2fd8c.png)

#### ステップ1: キャンセル内容の確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/489f0fd4-a86a-faba-7ce1-cb6bc7c12b6e.png)

**セッション変数 pizza** の値を挿入します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/b2b92847-5e50-6e6b-40fb-1ac98223c60d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/a36e9dba-bd92-b5c8-6053-fe2369066a74.png)
このように表示されていれば OK。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/40a13e24-2b96-6f0a-78e3-d525d9227a80.png)

**セッション変数 size** の値を挿入します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/bd129ddf-e56b-4edd-ffa9-f18ce652827a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/c923f8c0-9cde-dc63-c905-ce53a8c0375f.png)
このように表示されていれば OK。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/4b57591e-a2c7-042a-f6cc-4436c30ca5a7.png)

**セッション変数 time** の値を挿入します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/a2708b0e-2295-49cc-88a7-04eb936de65c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/1204ba8a-9dac-e008-1440-0280c799eeec.png)

このように表示されていれば OK。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/c5ba4537-1e04-f80c-264d-7d794b6e80c8.png)

注文内容がキャンセルするか、キャンセルしない、かの選択肢を表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/01fb4be4-f496-274c-ffed-e34cdb42faf1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/8846cb38-d73c-a0bb-62c8-3c8d83df14c3.png)

このように表示されていれば OK。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/08fb1b6d-5bae-bc69-ed22-8ee986d83ed9.png)

#### ステップ2: キャンセルの実行

キャンセルする場合の処理を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/294ac9cf-1524-a4f6-ba24-65816cdda7d4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/4ad39371-729e-a0b6-f14a-e03e6d823076.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/237aaca6-1a92-afd8-9a97-c59818cb5a53.png)

セッション変数をクリアします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/acfc9427-bb53-8ce0-7f46-e4fdcc3549cc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/944fd5bc-2929-2141-74f3-ac124afe2aa6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/3bac4875-0ef1-a54c-d516-c69e30c88e2d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/1908850e-3ebd-7ac3-d75d-cecf129a867d.png)

同様に、**size** と **time** にも null をセットする。
このように表示されていれば OK。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/ea6868fc-f02d-a5d6-7c22-9a50a17a3dc2.png)

#### ステップ3: キャンセルしないの実行

キャンセルしない場合の処理を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/840e4dbc-b93b-89ca-da86-f291ddf6a4b1.png)

これまでの操作手順にて、このような内容にセットします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/d0e5d779-60a0-17e7-f2fc-8438808ac680.png)

# 作成した対話フローのテスト

#### ピザの注文内容がセッション変数の保存される様子を確認
["直感的に操作できる Action で対話フローを作成してみる"のテスト 1](https://qiita.com/yanagih/items/f98cff2b5b9ce3208fc4#%E3%83%86%E3%82%B9%E3%83%88-1-%E6%B3%A8%E6%96%87%E3%81%AE%E5%AE%8C%E4%BA%86) を実行してください。
前回でも確認しましたが、ユーザーの選択した内容が内部変数の値として保存されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/1765451a-ad55-2de3-79c4-9fc4e32e123a.png)

今回、追加定義した内容により、**セッション変数**に内部変数の値がセットされました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/f24b3a37-3d58-f066-daca-3fec0b1362e9.png)

#### 注文のキャンセル・アクションでセッション変数が使用できていることを確認

セッション変数の値を使用して注文内容を表示している様子がわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/8b288749-9217-3cfc-ed31-c40babc48089.png)

注文のキャンセルでセッション変数がクリアされた様子がわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/71375020-4e55-c7a3-acd6-306e36695fd5.png)

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

今回は、セッション変数を使用し、アクション間で情報を共有するスマートな対話フローを作成する手順を確認しました。

# 参考情報

#### 公式オンラインマニュアル: セッション変数の使い方
https://cloud.ibm.com/docs/watson-assistant?topic=watson-assistant-manage-info

#### 当記事をリンクしている Advent Callendar 2022
https://qiita.com/advent-calendar/2022/wanclcfc_enjoy