Amazon Connect + AWS Lambda で、スプラトゥーン2のステージ情報を確認できる電話番号を作ってみた

スプラトゥーンTech

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 のフローを切り替えることも可能です。
電話経由でサーバにコマンドを投げたり、色々な応用ができそうですね。