watsonx Assistantの導入オプションをやってみた「iframe応答の追加」「ロケーションの共有」編

# はじめに
watsonx Assistantの機能を体験できるデモサイトがあるのをご存知でしょうか。
この[記事](https://community.ibm.com/community/user/ai-datascience/blogs/kazuma-shimizu/2023/09/29/watsonx-assistant?CommunityKey=eb449c0f-27c1-4223-bbd7-01874dfe4714)を見ることでwatsonx Assistantを簡単に体験することができます。

ただ、この記事を見てもっと自分でwatsonx Assistantをカスタマイズして使ってみたいと思った方もたくさんいらっしゃると思います。
そんな方にはデモ画面左下にあります導入オプションを試してみることがおすすめです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/2aa6183a-f8de-a27a-f637-014c045a6056.png)

この記事では導入オプションの中でもお客様対応( 回答する/実行する/見せる )の「iframe応答の追加」、「ロケーションを共有する」を使ってどんなことができるかについて実際のカスタム例も示しながら、書きたいと思います。

# 事前準備
この記事で紹介するカスタマイズでは前提としてwatsonx Assistantのセットアップが必要です。
この[記事](https://qiita.com/yanagih/items/b02db00d06de397bec64)が参考になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/3316a51f-1062-d629-ebcb-46ed8408a349.png)

# iframe応答の追加
iframeを追加することでwebチャットを続けながら、外部のサービスと接続することができます。
デモの中ではGoogle Mapを活用したチャットを体験することができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/ea2f4708-b545-c124-6f97-08b73fb5bb71.png)
デモの中で、画面左下の「iframe応答の追加」を押すと次のような画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/fae55cc1-e8ad-a118-1269-1554f32a51c4.png)

表示されたこのガイドでは、ステップの指示に従って進めることでGoogle Mapsを使ったwatsonx Assistantのアクションを設定できます。

ここからはこのステップガイドに従ってiframe応答を使ってみます。

## 「アシスタントの内容」フィールドでiframeアイコンをクリックする
まずは「アシスタントの内容」フィールドを探します。

下の画面はホーム画面です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/ce775937-347f-6254-d07e-7f6e334ea102.png)
左のタブから「Actions」を選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/b768f606-f7bc-54d9-f117-c488acf48c91.png)
「Create actions」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/419d4b47-df9a-9970-0109-014c61b39b80.png)
start interactionは「Google Mapを開く」と入力します。(「Google Mapを開く」と入力を受け付けるとGoogle Mapsが開くように設定するため)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/3469d559-d494-067f-e9b1-43461affceef.png)
このAssistant saysの中身がAssistantの内容です。このiframeのマークを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/c330be2a-9387-e4ba-de3f-64d92f356d2c.png)
iframeを選択することができました。

## 「iframeソース」フィールドに、外部コンテンツの完全なURLを追加します
外部コンテンツの完全なURLとは、Google Mapの場合はAPIのことになります。そのため、まずはGoogle MapのAPIを取得します。
ガイドにある「マップ組み込みAPIの概要」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/9f34ffe6-842c-448a-31fb-466ba4443bb4.png)

開いたページの下までいくと「クイックスタートに移動」があるので選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/2d71e552-a849-330c-f834-6c319852b2eb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/14a5cb8f-749e-c478-7a01-ff84e6a53f3d.png)
クイックスタートのガイド指示通りに進めます。
(Google MapのAPIは毎月200ドル分を超過した場合は支払いが発生するようです、これは地図の表示回数に合わせると28500回なので、テストする分には大体無料で実施できます。)

Google MapのAPIが取得できたら、watsonx Assistantに戻って、Source URLを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/445d192c-547a-b864-99fa-9699e313fb59.png)
Source URLには色々なオプションがあるようですが、今回は以下のようにします。
> https://www.google.com/maps/embed/v1/place?q=<地名>&key=<あなたのAPI key> &zoom=15

上記は例として地名を日本IBMとします。プレビューの地図では日本IBMの場所が指定されていますね。

## カスタム例
今回はカスタム例として以下のようなシナリオで動くチャットボットを考えました。
ユーザー: 「Mapを開いてください。」
watson Assistant: 「地名を入力してください。」
ユーザー: どこか地名をあげる( 例えば日本IBM本社 )
チャットボット: 地名を地図で表示

まず地名を入力してくださいというメッセージを出すためのステップを追加します。
「New step」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/363e7d0e-30db-876d-cbbe-310631fb5765.png)

作成したステップはステップ2になるので、一つステップを上げてステップ１になるようにします。
Assistant saysに「地名を入力してください」と入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/169ce85e-3c1f-5cde-b36f-dd7388214d6b.png)
「Define customer response」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/548de488-22fd-10c1-7089-69738ad3b4f0.png)
続いて「Free text」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/b7f0c3a5-b0fb-9297-f9a0-9e16f66a61ef.png)

ステップ２に戻って、Source urlを編集します。<地名>のところを「Action step variables」のステップ1にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/4f361fcc-db6c-2fa2-d4a0-a51d14ccecd1.png)

では、実際にpreviewから動かしてみましょう！
![demo1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/8441b83b-dedf-6954-94b2-e84cd876591a.gif)


# ロケーションを共有する
このカスタムではwebブラウザから自分の位置情報をwatsonx Assistantに共有することでGoogleマップなどと連携して活用できます。

## ドキュメントを読む
デモサイトの「ロケーションを共有する」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/b1ee5ed4-22e1-8901-1503-a47dd5565f83.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/08126dc1-bc30-e607-9cda-ec865db3b6b6.png)
英語の画面になりますが、内容としてはユーザーの位置情報をwatsonx Assistantと共有し、iframeで表示できる、と言う内容です。

まずはカスタム前の、すでに設定ずみのものを触ってみます。
以下のRunning the JavaScript Example(コードの実行例)から、お試しで触ることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/15d0304e-8f33-3fb2-d69a-22389abd9491.png)
[ステップ1](https://github.com/watson-developer-cloud/assistant-toolkit/blob/master/integrations/webchat/examples/share-location/client/javascript/index.html)のリンクをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/a266553e-6bdd-8fab-76cb-8e1375e12386.png)
画面右端のインストールボタンを選択します。

インストールされたindex.htmlというファイルをダブルクリック or Firefoxなどのブラウザーの検索窓に貼り付けると以下のような画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/b3de02e0-7675-d3a8-20cb-2aa5d5760bc4.png)
右下のチャットボットを開くと次のような画面が出てきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/d00c4dd0-faa8-19b2-870e-b9d565ccc20a.png)
一番上の「where is the nearest IBM office?」をクリックします。

すると以下のような内容がアシスタントから返ってきます。( ブラウザの位置情報の共有の設定をしておく必要があります。 )
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/d7d766f1-7080-81fa-a05e-4b1bd263daf9.png)
この「IBM Location」をクリックすると以下のように最寄りのIBM officeが出てきました！(執筆時、IBMの箱崎事業所にいたので少しわかりづらくなってます、、)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/acafcad1-b7f8-2902-2bdc-0ec0cdcc4483.png)

このようにチャットボットユーザーから位置情報を受け取り、それを活用した情報を返すことができます。

## カスタムしてみる
それでは次にこの機能を使ってwatsonx Assisntantを独自にカスタマイズしてみましょう。

先ほどのgithubの画面に戻りましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/004320c1-adb1-c8f4-5e63-11f6492f21f6.png)
ここからカスタマイズできます。リンクを開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/33d9b707-0303-9e6e-9cd6-4f6d0ab1351a.png)
先ほどと同様にファイルをダウンロードします。

それでは独自のカスタマイズをしてみましょう。
元々のデモでは現在地から最寄のIBM事業所までの道のりを表示するデモでした。独自のカスタマイズでは現在地から東京スカイツリーまでの道のりを表示させるようにしましょう。

### まずはアクションファイルを変更します
先ほどダウンロードしたアクションファイルをそのまま使用すると、最寄のIBMを探すデモになるので、まずはこのアクションファイルを変更します。
変更箇所は以下のGoogle Map APIのURLです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/65692a5d-4b0e-7498-5f46-6efd553a0769.png)
ここのsourceを変更します。
> https://www.google.com/maps/embed/v1/directions?key=<your_api_key>&origin=${User_Latitude},${User_Longitude}&destination=Tokyo+Skytree

このように変更します。(api_keyのところは先ほどの章のGoogle MapのAPIキーを入れましょう)

編集したアクションファイルを使ってwatsonx Assistantを構築します。~~アクションファイルのアップロードについてはこの記事が参考になります。~~

### 次にwatsonx Assistantを設定しよう
日本語で「東京スカイツリーまでの道のりを教えてください」とチャットボットに聞くとアシスタントのアクションが進むように変更します。

まずはhome画面からActionsを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/0bdc0d05-c1b4-9f4f-8009-3f9c81be4179.png)

アクションが１つだけ設定されているので、そこをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/90b2d2cc-7b61-8a36-63a4-847ff6bfee58.png)

ここのphrasesを一つ消します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/e8bdce7c-e972-0b29-bf3e-d3f51c279b54.png)

新しいphrasesを追加しましょう。
「東京スカイツリーまでの道のりを教えてください」と入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/d59d49f1-035e-c62f-49b7-aebbeffa0cd3.png)

Watsonx Assistantの変更はここまでです。

### HTMLのJavascript
先ほどの章でダウンロードしたHTMLを変更します。
まずは先ほど作成したwatsonx Assistantを設定します。変更する点は以下の箇所です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/4bb879ac-3498-d78d-9a13-854d70be471a.png)

ここに入力する値はwatsonx Assistantから探します。
まず左のタブから「Environments」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/2e0ef9f3-065f-fcaf-b959-d956565e195e.png)

Web chatを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/e3cdbc19-1ea8-e68a-0ecb-ddf6df2dc7a0.png)

「Embed」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/2256ce7b-c487-18ce-f50a-4bd459ebee6c.png)

ここにintegrationIDとregion、serviceInstanceIDがあるので、それぞれHTMLファイルに適用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3631727/feb1dc26-497d-d376-5719-1358f51bcbdd.png)

カスタマイズはここまでです。

実際に動かしてみましょう！HTMLファイルをダブルクリック、もしくはブラウザの検索窓にドラッグすることで確認することができます。

# 終わりに
今回示しましたように、僅か数ステップでiframeを編集でき、Google Mapをチャット内で表示することができました。ここでは行っていませんがSource URLを変えることで他のサービスとの連携も可能です。
私自身、この記事を執筆する中でこの機能について知りましたが、watsonx Assistantはただのチャットbotに留まらない、非常に拡張性に優れたチャットボットであることを理解しました。

以上です、ここまで読んでいただきありがとうございました。