[Amazon Lex] AWS Amplify + Vue.js でWebページにボットを追加してみました

2021.05.05

1 はじめに

CX事業本部の平内(SIN)です。

AWS Amplify(以下、Amplify)では、UIツールキットの1つに、チャットボット機能が提供されています。
INTERACTIONS Chatbot

こちらを利用すると、Webページなどに簡単にチャット機能を追加することが可能です。

Amazon Lex(以下、Lex)も最近、日本語に対応したので、利用される場面も広がっているだろうという事で、ここで手順を確認してみたいと思います。
Amazon Lex が日本語に対応。東京リージョンでお使いいただけますhttps://aws.amazon.com/jp/blogs/news/amazon-lex-tokyo/)

Lexのボットは、テンプレートにあるOrderFlowerをそのまま利用した、下記のものを利用しています。

また、ユーザー認証は省略し、Cognitoの未認証IDに、最低限のパーミンションを付与して利用しています。

なお、Amplifyには、Interactions カテゴリの追加で、質問に答えるだけでBot自体を生成する機能もありますが、ここでは、日本語のボットを作成するオプションがなかったので、今回は、使用していません。

% amplify add interactions

2 Amazon Lex

先のブログで作成したボットの名前は、OrderFlowers_ja.JPとなっています。

Lexのコンソール上のTest Chatbotで、動作を確認している様子です。

ボットは、Publishされています。

3 Vue.js+Amplifyの初期化

Vue.jsのプロジェクトをlex_sampleという名前で作成しました。

% vue create lex_sample
❯ Default ([Vue 2] babel, eslint)
・・・略
🎉  Successfully created project lex_sample.
・・・略
%cd lex_sample

すべてデフォルトの設定でamplifyを初期化し、authカテゴリを追加しています。

% amplify init
% amplify add auth
% amplify push
% amplify status

Current Environment: dev

| Category | Resource name     | Operation | Provider plugin   |
| -------- | ----------------- | --------- | ----------------- |
| Auth     | lexsample95c68d5b | No Change | awscloudformation |

4 ロール設定

Amazon Cognito Identity Poolsに作成されたIDの編集を開き、「認証されていないIDに対してアクセスを有効にする」にチェックを入れます。

未認証で使用されるロールに、今回の要件で必要最小限(テキストのやり取りのみ)となるLexへのアクセス権限を付与しています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lex:PostText"
            ],
            "Resource": "arn:aws:lex:ap-northeast-1:*:bot:OrderFlowers_jaJP:$LATEST"
        }
    ]
}

5 main.js

必要なライブラリをインストールし、main.jsでimportしています。

% yarn add aws-amplify aws-amplify-vue

Botへのアクセス情報は、botconfigというオブジェクトに設定して、Amplify.configure() に渡しています。 aws-exports.jsは、Amplifyのコマンドから変更がされるため、修正を避けた形です。

main.js

import Vue from "vue";
import App from "./App.vue";
import "@aws-amplify/ui-vue";
import Amplify from "aws-amplify";
import awsconfig from "./aws-exports";
Amplify.configure(awsconfig);
const botconfig = {
  bots: {
      "OrderFlowers_jaJP": {
        "alias": "$LATEST",
        "region": "ap-northeast-1",
      }
  }
}
Amplify.configure(botconfig);

new Vue({
  render: (h) => h(App),
}).$mount("#app");

Amplify.configure()が2回出てきてなんか、変な感じですが、動いてるみたいです。

main.jsで設定する要領で、下記のようは記述も紹介されていました。


https://aws.amazon.com/jp/blogs/news/amazon-lex-tokyo/

6 App.vue

App.vueは、amplify-chatbotだけを以下のように記述しています。

App.vue

<template>
  <div id="app">
    <amplify-chatbot
      bot-name="OrderFlowers_jaJP"
      bot-title="お花屋さん"
      welcome-message="いらっしゃませ"
    />
  </div>
</template>

7 動作確認

Amplifyでホスティングして、動作を確認している様子です。

% amplify hosting add
% amplify publish
・・・略
✔ Zipping artifacts completed.
✔ Deployment complete!
https://dev.d23p4hlp9ojngb.amplifyapp.com

8 最後に

今回は、Amplify + Vue.js で作成されたWebアプリに、ボットを追加してみました。

AmplifyのUIツールキットは、簡単で強力だと思います。