Amazon Connect + AWS Lambda で、スプラトゥーン2のステージ情報を確認できる電話番号を作ってみた
Amazon Connect と AWS Lambda を使って、スプラトゥーン2のステージ情報が聞ける電話番号を作りました。100%お遊びネタです。
押した番号に応じて、ナワバリバトル・ガチマッチ・リーグマッチの最新ステージ情報を返します。
試してみたい方は 050-3000-7540 からどうぞ。
Amazon Connect = AWS の電話サービス
Amazon Connect とは、AWS が提供するコールセンター用のマネージドサービスです。
電話番号の取得から Hello World の作成まで、5分ほどでサクッと作れてしまいます。
前回の記事で詳しく触れていますので、気になる方は合わせてご確認ください。
Amazon Connect と AWS Lambda を連動させる
Amazon Connect には、AWS Lambda との連携機能が用意されており、外部サービスと連動した電話サービスを実現できます。
今回は、自前の REST API でもある Spla2 API を使って、スプラトゥーン2のステージ情報を返すように実装しました。
問い合わせフローの完成図
完成した問い合わせフローは以下の通りです。
使用したコンポーネントは5種類でした。
- 音声の設定
- 顧客の入力を保存する
- AWS Lambda 関数を呼び出す
- プロンプトの再生
- 切断/ハングアップ
AWS Lambda のダミー準備
まずは固定の文言を返す簡単な Lambda を用意しておきます。
request モジュールを後ほど使うため、ローカルの作業場所で用意しましょう。
$ mkdir spla2-telephone
$ cd spla2-telephone
$ npm install request
$ vi index.js
index.js
の中身は「現在のステージ情報は、ホゲです。」と返すだけの処理です。
用意したファイル一式を ZIP で固めて、Lambda にデプロイします。
$ zip -r ./lambda.zip index.js node_modules
Lambda のトリガーポリシーを設定する
今回の作業において一番分かりづらいのがココです。
Amazon Connect が AWS Lambda を呼べるように設定するのですが、Web コンソールが未対応のため CLI から設定する必要があります。詳しくは 公式ドキュメント を参照。
$ aws lambda add-permission --function-name function:lambda-function-name --statement-id 1 \
--principal connect.amazonaws.com --action lambda:InvokeFunction --source-account 999999999999 \
--source-arn arn:aws:connect:ap-northeast-1:999999999999:instance/aaaaaaaa-bbbb-cccc-dddd-eeeeeeffffff
lambda-function-name
: Lambda の関数名に置き換え999999999999
: AWS アカウント番号に置き換えaaaaaaaa-bbbb-cccc-dddd-eeeeeeffffff
: Amazon Connect の ARN に置き換え
Amazon Connect の ARN は、管理コンソール からインスタンス名をクリックすると確認可能です。東京リージョン以外の場合は、リージョン名も書き換えてください。
Amazon Connect で入力値を受け取る
Lambda の準備ができたら次は Connect 側です。
電話番号の取得や基本設定は 前回記事 で触れているため省略します。
今回は、ユーザが欲しい情報を選択してもらうため、「顧客の入力を保存する」コンポーネントでプッシュボタンの番号入力を受け取ります。
保存した番号を Lambda に渡して起動する
「AWS Lambda 関数を呼び出す」コンポーネントを使って、Lambda を起動できます。
起動する Lambda の ARN を入力し、引数として渡すパラメータも指定します。
今回は「mode」というキーで、ユーザが電話入力した番号を渡すことにしました。
Lambda から返ってきた音声を読み上げる
Lambda から返ってきた結果を読み上げるため、「プロンプトの再生」コンポーネントを使います。
Lambda の実行結果は { "result": "結果のテキスト" }
形式で返すこととしたため、Amazon Connect 側では result
を読み上げるように設定すれば OK です。
テスト電話をかけてみる
フローの最後&エラー発生時は「切断」するように設定し、問い合わせフローを電話番号に紐づけます。手順は 前回記事 を参照。
試しに電話をかけてみると、何番を押しても「ほげです」と返すようになりました。
スプラトゥーンのステージ情報を反映
あとは Lambda 側をせっせと実装するだけです。
今回使用したのは、Splatoon2 のステージ情報を返す自作 API で、プッシュされた番号に応じて取得内容を切り替えています。
プッシュされた番号は event.Details.Parameters.mode
で取得できます。末尾の「mode」は、Connect 側で設定したキー名です。
コールセンターの完成
AWS Lambda を保存すると即反映されます。
選択した番号に応じて REST API を使い分け、最新の情報を読み上げる電話番号が完成しました。
しばらくの間は 050-3000-7540 で公開しているので、試してみたい方はぜひ。番号非通知(184)で掛けてもちゃんと動きます。
Amazon Connect + AWS Lambda の連携まとめ
- Amazon Connect から Lambda を呼び出せる
- ユーザが電話入力した番号を Lambda に渡せる
- Lambda が返したテキストを電話で読み上げできる
- 権限付与は CLI から設定する必要あり
今回は使いませんでしたが、Lambda の戻り値で Connect のフローを切り替えることも可能です。
電話経由でサーバにコマンドを投げたり、色々な応用ができそうですね。