Amazon ConnectとCloud Automatorを接続して、電話からAWSを操作してみる(Advent Calendar 9日目)【CEOブログより】
★この記事は「Cloud Automator Advent Calendar 2017」の 12/9 日分のエントリーになります
こんにちは、大石です。
みなさんAWSのサービスは何がお好きですか?
いろいろありますが、私が今一番エキサイトしながら触っているのが「Amazon Connect」です。電話もAWSでできちゃうんです!
2008年当時、私たちはAWSが出てきたので「サーバー購入禁止令」を引きましたが、今度はConnectのおかげて「電話購入禁止令」が出せそうです!
このAmazon Connect、「コンタクトセンターのクラウドサービス」と銘打たれていますが、コンタクトセンターだけでなく様々なアプリケーションとの連携も可能です。今日は「Cloud AutomatorとAmazon Connectとを接続することで、電話によるAWSの操作にも使える」ということを試してみたいと思います。
Cloud Automator側の準備
(何でも良いのですが)Cloud Automatorのジョブを作ります。
トリガーは「HTTP」を選びます。
アクションは今回は「EC2インスタンスを起動」を選んでみましょう。
ジョブを作成すると、このジョブ専用のエンドポイントが作成されます。
ジョブの一覧から「詳細」をクリックして
以下の画面にある「トリガー」のURLと「アクセストークン」を記録しておきます。
Lambdaの準備
次に、 電話のボタンが押された際に今作成したCloud AutomatorのジョブをHTTP(S)経由で呼ぶLambdaを用意します。
Lambdaのコンソールから requestCaJob という名前でLambdaを作成します。
この様なコードになります。コード中のURL, 認証情報(アクセストークン)は、先ほどCloud Automatorで作成したジョブで生成されたものになります。
なおこのブログにはコードブロックの定義がないので、Lambdaのコードはまさかのスクリーンショットです。昔はコードといえば雑誌を見ながら手で打ち込んだものです・・・
Connectから呼ぶだす際にLambdaのARNが必要となります(Lambdaのコンソールの一番右上です)。これを記録しておきましょう。
Connectから呼び出せるように、今作成したLambdaに権限を付与します(ドキュメントはこちら)。AWS CLIがある環境から、以下の通り実行します。
aws lambda add-permission –function-name function:(Lambda関数名。今回の例ではrequestCaJob) –statement-id 1 \–principal connect.amazonaws.com –action lambda:InvokeFunction –source-account (AWSアカウントNo) \–source-arn (ConnecctのARN。Connectの管理画面ではなくAWSのコンソールから「インスタンスARN」が取得できます)
Amazon Connectの準備
次に、Amazon Connectをセットアップします。
(なぜか本稿執筆時点2017/12/9 では日本の番号が取得できないようです。以前は取れていたので、一時的な問題かと考えられます。今回は以前から取得していた番号で試しました)
問い合わせフローを作る
いよいよ本丸の「問い合わせフロー」です。Connectの管理画面の「ルーティング」から「問い合わせフロー」を選択して、「問い合わせフローの作成」をクリックします。
かかってきた電話番号を確認する
まずはじめに、かかってきた電話番号が、Cooud Automatorの操作を許可してよい番号かどうかを確認します。
「ブランチ」の「問い合わせ属性を確認する」をドラッグドロップで持ってきます。
エントリポイントの「開始」からドラッグして、「問い合わせ属性を確認する」と接続します。
「問い合わせ属性を確認する」のキャプション部分をクリックして設定画面に入り、電話番号のチェック条件を入力します。
番号が一致していれば次に進みますが、一致していなければブチっと切ってしまいましょう。遠慮はいりません。「切断/ハングアップ」をドラッグ&ドロップして、「一致なし」と接続します。
音声の設定を行う
電話番号の認証がOKでしたら、いよいよ音声案内です。「設定」から「音声の設定」を配置して、先ほどの「問い合わせ属性を確認する」の「=」の場合と接続します。
音声のデフォルトがJoannaになっています。けしからんですね。日本人であれば安定の「Mizuki」さんに変えましょう。これまでと同様に「音声の設定」をクリックして「日本語」から「Mizuki」を選択します。
ボタン入力を受け付ける
アナウンスを流してから、プッシュしてもらいたいと思います。「操作」から「顧客の入力を取得する」を配置して「音声の設定」の「成功」とつなぎます。
「顧客の入力を取得する」をクリックすると、話す内容を設定できます。ここで「テキスト読み上げ機能」を選んで、テキストを入力します。
更にボタンをプッシュしたときの分岐を作ります。「別の条件の追加」を押すと「オプション」という項目が現れます。ここに今回は「1」を入れます。
Lambdaを呼び出す
「1」が押された場合の処理として、Lambdaを呼び出しましょう。「統合」から「AWS Lambda関数を呼び出す」を配置して、「Pressed 1」と接続します。「AWS Lambda関数を呼び出す」をクリックして、「関数のARN」というところに、先ほど作成したLambda関数のARNを入力します。
終了
Mizukiさんに「処理しました」とお話ししてもらって終了しましょう。「操作」から「プロンプトの再生」を選んで配置し、接続します。
最後に
Connectのフローでは、条件分岐は必ずどこかと接続されている必要があります。「顧客の入力を取得する」の例外も、プロンプトを再生して切断まで繋げてしまいます。
デプロイ
このフローを環境に適用しましょう。「保存して発行」を押すと、環境へのデプロイが行われます。(保存だけの場合は、環境には適用されません)
電話番号とフローのひもづけ
Connectの管理画面にある「ルーティング」の「電話番号」にいき、今回有効にしたいフローの電話番号をクリックします
「問い合わせフロー/IVR」を、今つくったフローに変更します。
試してみる
これで準備が整いました!
さっそく電話をかけてみましょう。
・・・おお!あのEchoで聞き慣れたMizukiさんの声がします!
案内の通り1を押すと「インスタンスを起動します」というMizukiさんのメッセージと共に無事にインスタンスが起動しました!
(Cloud Automatorのジョブ画面から「ログ」を見ると、HTTPで呼び出されたかどうかが確認できます)
Cloud AutomatorではジョブのトリガーとしてHTTPを使うことができますので、電話をはじめとする様々なアプリケーションと簡単に連携し、手軽にAWS運用を自動化することができるようになる、ということがおわかり頂けたのではないかと思います。
ぜひみなさんもCloud AutomatorでAWSの自動化にチャレンジしてみてください!