[Amazon Lex] Amazon Connectからダイヤルトーン と音声の両方でシームレスにインテントを起動する

1 はじめに

こんにちは、AIソリューション部の平内(SIN)です。

先日、Amazon Web Services ブログに下記の記事が公開されていました。
Amazon Lex を組み合わせた Amazon Connect でダイヤルボタンの数字選択と発話入力を使う

Blogでは、Amazon Connect(以下、Connect)から、Amazon Lex(以下、Lex)への接続は「音声」でも「ダイヤルトーン」でも行えることが紹介されていました。

ユースケースとしては、ピンコード入力など、発話では周りに 聞こえてしまって、ちょっとまずい、というような場合に、「キーでも入力できるので便利」という感じです。

今回は、ブログの内容をなぞる程度ですが、この発話とDTMFの両方でLexへアクセスできることを確認してみました。

2 Lex

テスト用にCustom botとして、DTMFTextBotという名前のボットを作成しました。(リージョンは、バージニアで、言語は英語になっています)

ボットには、以下の3つのインテントを追加しています。

Sample Uterancesは、それぞれ、数字で呼び出せるようにし、該当インテントの名前が入った、Responseを返すように設定しました。

スロットは、まったく設定していませんので、それぞれのインテントが呼び出されると、レスポンスを聞くことで、どのインテントが呼び出されたかを知ることができるようになています。

インテント名 Sample Uterances Response
FirstIntent One The first intent was invoked
SecondInten Two The seccond intent was invoked
ThirdIntent Three The third intent was invoked

作成したボットは、BotというAliasでPublisしました。

3 Connect

(1) 統合

インスタンスの設定 > 問い合わせフロー > Amazon Lexから、作成したボットを統合します。

(2) コンタクトフロー

コンタクトフローは、以下のようなものを作成しました。

顧客の入力を取得するブロックを置いて、FirstIntent及び、SecondIntentが呼ばれた場合は、ループし、ThierdIntentが呼ばれると、終了するようになっています。

顧客の入力を取得するブロックのオプションでは、Lexでブランチするようになっています。

4 動作確認

以下が、動作を確認しているようす。

最初に、「One」「Two」「Three」という発話でインテントを呼び出しています。2回目は、「1」「2」「3」のキー入力で、同様の動作をさせています。

5 Lambdaで検証

以下のような、リクエストを表示するだけの簡単なLambdaをLexのバリデーションに挟んで、Connectからのリクエストを確認してみました。

import * as Lex from 'lex-sdk';

declare var exports: any;
const IntentHandler: Lex.RequestHandler = {
    canHandle(_h: Lex.HandlerInput) {
        return true;
    },
    handle(h: Lex.HandlerInput) {
        // Laxからのリクエストを表示する
        console.log(JSON.stringify(h));
        return h.responseBuilder
            .getDelegateResponse(h.attributes, h.slots)
    }
}

let bot: Lex.Bot;
exports.handler = async function (event: Lex.IntentRequest, context: any) {
    if (!bot) {
        bot = Lex.BotBuilder()
            .addRequestHandler(
                IntentHandler)
            .create();
    }
    return bot.invoke(event, context);
}

ConnectからのLex呼出のログには、inputTranscriptと言うキーで、ユーザーの発話内容が入りますが、発話の時は「one」、キー入力のときは「1」でした。

{
    "requestEnvelope": {

 // ・・・省略・・・

        "inputTranscript": "one"
    },
{
    "requestEnvelope": {

 // ・・・省略・・・

        "inputTranscript": "1"
    },
入力方法 人力値 inputTranscript
発話 One one
発話 Two two
発話 Three three
トーン 1 1
トーン 2 2
トーン 3 3

結果的には、Connectでは、キー入力を数字入力としてLexに送っており、Lexが「1」を「One」というサンプル発話に紐づけて動作しているという事のようです。

6 最後に

今回は、ConnectとLexの連携でDTMFが使えることに確認できました。 この動作は、VUIの設計での応用に重宝する予感がしてます。


弊社ではAmazon Connectのキャンペーンを行なっております。

3月に「無料Amazon Connectハンズオンセミナー」を開催致します。導入を検討されておられる方は、是非、お申し込み下さい。

また音声を中心とした各種ソリューションの開発支援も行なっております。

コメントは受け付けていません。