★この記事は「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の操作を許可してよい番号かどうかを確認します。

      • 「ブランチ」の「問い合わせ属性を確認する」をドラッグドロップで持ってきます
      • エントリポイントの「開始」からドラッグして、「問い合わせ属性を確認する」と接続します
      • 「問い合わせ属性を確認する」のキャプション部分をクリックして設定画面に入り、電話番号のチェック条件を入力します。
      • 番号が一致していれば次に進みますが、一致していなければブチっと切ってしまいましょう。遠慮はいりません。「切断/ハングアップ」をドラッグ&ドロップして、「一致なし」と接続します
    • 音声の設定を行う
      • 電話番号の認証が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の自動化にチャレンジしてみてください!