himanago

Azure・C#などのMS系技術やLINE関連技術など、好きな技術について書くブログ

Azure Cognitive Service for Language + Azure Bot Service で超簡単にチャットボット作成④~Alexa スキルとしての公開

以下のつづきです。たぶん今回が最終回。

① ナレッジベースの作成&Webチャットの公開 himanago.hatenablog.com

Microsoft Teamsへの簡易接続 himanago.hatenablog.com

③ LINE Botとしての公開 himanago.hatenablog.com

最後は Alexa

Azure Cognitive Service for Language + Azure Bot Service で作ったチャットボットを、最後は Alexa スキルとしてスマートスピーカーから使えるようにしてみます。

ドキュメントの手順どおりやればたしかに簡単に公開できるのですが…ちょっといままでと違ってそのままで OK!とはならなそうです。

さっそく手順をみていきましょう。

手順

接続方法はこちらにまとまっています。

docs.microsoft.com

このとおりにやってみます。

Alexa Developer Console でのスキル作成

Alexa Developer Console にログインし、「スキルの作成」ボタンをクリックします。

f:id:himanago:20220131230021p:plain

新しいスキルの名前を入力し、「日本語」「カスタム」「ユーザー定義のプロビジョニング」を選択して、最後に上部の「スキルを作成」をクリックします。

f:id:himanago:20220131230615p:plain

「スクラッチで作成」が選択された状態で「選択」をクリックします。

f:id:himanago:20220131230823p:plain

するとスキルが作成されます。

対話モデル JSON の登録

通常はここからスキルとの対話をどのように行うかを設計し、対話モデルを作っていくのですが、Azure Bot Service とつなぐ場合はそこはいりません。対話は Azure Bot Service 側ですべて処理するので、Alexa スキルはユーザーからの入力をそのまま伝える役割しか担わないのです。

Alexa スキルの場合、phrase スロットを使うと入力そのままを処理できます。

とてもシンプルなモデルになるので、ドキュメントにはあらかじめ JSON で定義された対話モデルが用意されています。

スキルダッシュボードの左側のメニューの「対話モデル」の「JSON エディター」に、以下の JSON を設定します。

一番上の呼び出し名と、一番下発話例3つが自分で考える部分です。

{
    "interactionModel": {
        "languageModel": {
            "invocationName": "アジュールサポート使い方ボット",
            "intents": [
                {
                    "name": "GetUserIntent",
                    "slots": [
                        {
                            "name": "phrase",
                            "type": "phrase"
                        }
                    ],
                    "samples": [
                        "{phrase}"
                    ]
                },
                {
                    "name": "AMAZON.StopIntent",
                    "samples": []
                }
            ],
            "types": [
                {
                    "name": "phrase",
                    "values": [
                        {
                            "name": {
                                "value": "サポートの使い方を教えて"
                            }
                        },
                        {
                            "name": {
                                "value": "サポートの対応言語を教えて"
                            }
                        },
                        {
                            "name": {
                                "value": "こんにちは"
                            }
                        }
                    ]
                }
            ]
        }
    }
}

起動名は、音声入力できちんと一致するような表現にしてあげないといけないので、実機テストをしながら誤動作しないような名前にしてあげましょう。

また、JSON エディター上では IME がオンだとうまく入力ができないので、JSON を完成させてからコピペするようにしたほうがいいです。

「モデルの保存」をクリックし、その後活性化される「モデルのビルド」をクリックします。これで対話モデルがスキルに反映されます。

f:id:himanago:20220131231851p:plain

Azure Bot Service との接続

Alexa 側のスキル ID を取得して Bot Service へ設定し、Bot Service の URL を Alexa スキルのエンドポイントに設定します。

ドキュメントでは Alexa Developer Console の最初のページを開けと書いてありますが、「エンドポイント」セクションを開くのが早いです。

スキル ID が表示されているので、これをコピーします。

f:id:himanago:20220131232413p:plain

Azure ポータルを別タブで開き、Azure Bot Service のチャンネルを有効化します。

f:id:himanago:20220126232903p:plain

スキル ID を貼り付け、エンドポイント URI をコピーします(まだ保存は押さない)。

f:id:himanago:20220131232931p:plain

Alexa Developer Console に戻り、サービス エンドポイントの種類を「HTTPS」に変更し、「デフォルトの地域」にコピーしたエンドポイント URI の値に設定します。

その下にの選択は「開発用のエンドポイントは、証明機関が発行したワイルドカード証明書をもつドメインサブドメインです」にします。

f:id:himanago:20220131233007p:plain

設定したら、上部の「エンドポイントを保存」をクリックします。

これで完成です!

動作確認

Developer Console の「テスト」から、「スキルテストが有効になっているステージ」を「開発中」にするとシミュレーターや実機で動作確認できます。

f:id:himanago:20220131235512p:plain

スキル起動後にあいさつが返ってきて、その後リスニング状態になります。

質問をすると回答が返ってきて再びリスニング状態に…という繰り返しで動きます。

おしゃべりもちゃんと対応してくれますし、音声認識による表現のぶれなども吸収してくれます。

ただ、回答が長いので VUI 向きではないかなと思うものも多いです。画面付きでなければ正直きついです。

やはりスマートスピーカーで使う場合は、音声になじむように回答を作らないといけないですね。

おわりに

クロスプラットフォームにチャットボットをまったくの実装なしに公開できる、というのは非常に優れたサービスだと思います。

とはいえ、チャットボット(スマートスピーカースキル)はそれぞれのプラットフォームや形式ごとに適した UI/UX が存在します。

質問・回答の1対1の対話だとしても、それぞれのチャンネル(プラットフォーム)に適した回答のしかたをするべきで、安易にそのまま公開すればよいというものではなさそうです(特に Alexa)。

実際複数のチャンネルに公開したい場合は単純に Language の質問回答をつなげただけで要件を満たすことはないと思うので、素直に Bot Framework で各チャンネル固有の実装をしてカスタマイズすべきでしょう。

限られた用途なら、今回紹介した手順でささっと公開することはありだと思います。

公開したいチャンネルの特性を踏まえて質問・回答をチューニングして、用途を絞って使っていきましょう。