★この記事は「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をセットアップします。
- Connectの管理画面から電話番号を取得する (なぜか本稿執筆時点2017/12/9 では日本の番号が取得できないようです。以前は取れていたので、一時的な問題かと考えられます。今回は以前から取得していた番号で試しました)
- 問い合わせフローを作る
いよいよ本丸の「問い合わせフロー」です。Connectの管理画面の「ルーティング」から「問い合わせフロー」を選択して、「問い合わせフローの作成」をクリックします
- かかってきた電話番号を確認する
まずはじめに、かかってきた電話番号が、Cooud Automatorの操作を許可してよい番号かどうかを確認します。
- 「ブランチ」の「問い合わせ属性を確認する」をドラッグドロップで持ってきます
- エントリポイントの「開始」からドラッグして、「問い合わせ属性を確認する」と接続します
- 「問い合わせ属性を確認する」のキャプション部分をクリックして設定画面に入り、電話番号のチェック条件を入力します。
- 番号が一致していれば次に進みますが、一致していなければブチっと切ってしまいましょう。遠慮はいりません。「切断/ハングアップ」をドラッグ&ドロップして、「一致なし」と接続します
- 音声の設定を行う
- ボタン入力を受け付ける
アナウンスを流してから、プッシュしてもらいたいと思います。「操作」から「顧客の入力を取得する」を配置して「音声の設定」の「成功」とつなぎます。
- 「顧客の入力を取得する」をクリックすると、話す内容を設定できます。ここで「テキスト読み上げ機能」を選んで、テキストを入力します
- 更にボタンをプッシュしたときの分岐を作ります。「別の条件の追加」を押すと「オプション」という項目が現れます。ここに今回は「1」を入れます。
- Lambdaを呼び出す
- 終了
- Mizukiさんに「処理しました」とお話ししてもらって終了しましょう。「操作」から「プロンプトの再生」を選んで配置し、接続します。
- 最後に
- Connectのフローでは、条件分岐は必ずどこかと接続されている必要があります。「顧客の入力を取得する」の例外も、プロンプトを再生して切断まで繋げてしまいます。
- デプロイ
- このフローを環境に適用しましょう。「保存して発行」を押すと、環境へのデプロイが行われます(保存だけの場合は、環境には適用されません)
- かかってきた電話番号を確認する
まずはじめに、かかってきた電話番号が、Cooud Automatorの操作を許可してよい番号かどうかを確認します。
- 電話番号とフローのひもづけ
- Connectの管理画面にある「ルーティング」の「電話番号」にいき、今回有効にしたいフローの電話番号をクリックします
- 「問い合わせフロー/IVR」を、今つくったフローに変更します
試してみる
これで準備が整いました! さっそく電話をかけてみましょう。 ・・・おお!あのEchoで聞き慣れたMizukiさんの声がします!
案内の通り1を押すと「インスタンスを起動します」というMizukiさんのメッセージと共に無事にインスタンスが起動しました! (Cloud Automatorのジョブ画面から「ログ」を見ると、HTTPで呼び出されたかどうかが確認できます) Cloud AutomatorではジョブのトリガーとしてHTTPを使うことができますので、電話をはじめとする様々なアプリケーションと簡単に連携し、手軽にAWS運用を自動化することができるようになる、ということがおわかり頂けたのではないかと思います。 ぜひみなさんもCloud AutomatorでAWSの自動化にチャレンジしてみてください!