こんにちは、ロジカル・アーツの井川です。 今日は、Amazon Connect とAmazon Simple Notification Service との連携にチャレンジしてみました。
はじめに
Amazon Connect と Amazon SNSは非常に相性が良くて、様々なユースケースで活躍すると思います。今回想定するユースケースは、Amazon Connect の標準機能である「携帯電話への転送」を使用し、Amazon Connect での受電を携帯電話へ転送。さらに携帯電話で取れなかった場合は、不在着信としてSMSにて携帯電話へ通知。このようなケースをAmazon SNSを使用して解決するアーキテクチャを紹介をしたいと思います。
Amazon Connectの構築
ステップ1:Amazon Connect インスタンス作成
ここではインスタンスの作成、電話番号の取得などの詳細は割愛させて頂きます。 公式で詳しい説明資料が出ていますので、下記を参考にしてください。
ステップ2:問合せフローの設定
今回構築した、Amazon Connect の問合せフローは以下の通りです。
今回は「電話番号への転送ブロック」に下記3点の設定をしてください。
- 自身の携帯電話番号を入力
- タイムアウトの設定:7秒
- 切断後に問合せフローを再開:はい
全て出来たら「保存」を押します。
※この段階で公開すると「エラー」がでますので気を付けてください。
ステップ3:Lambdaの設定
Lambdaの詳細は次章の「Lambda関数の作成」を確認してください。
下記で作成したLambdaの設定をします。
Amazon Connect インスタンスエイリアスをクリックすると
「問合せフロー」という項目に「AWS Lambda」という項目が出てきます。
ステップ4:問合せフローからLambdaの呼出し
ステップ3でLambdaの登録を行うと、問合せフローから登録したLambdaを呼び出す事が出来ます。
これで、Amazon Connect の設定は終了です。
Lambda関数の作成
コンソールからLambdaを開きます。
- 「一から作成」を選択
- 関数名に”Send-to-SNS”を入力します。
- ランタイムは”Python3.7”を選択します。 入力出来たら「関数の作成」を押します。
Lambdaのcodeは以下の様になっています。
import json import boto3 def lambda_handler(event, context): # TODO implement TopicPhone = "+81..." # My mobile number customerPhoneNumber = event["Details"]["ContactData"]["CustomerEndpoint"]["Address"] client= boto3.client("sns") response = client.publish( PhoneNumber = TopicPhone, Message = customerPhoneNumber, Subject = "sns-send-call" ) return{ 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') }
上記をコピペして、デプロイを押します。
あと忘れがちなのですが、次にロールの設定も行います。
ロールの設定
Lambda内にある、基本設定の「編集」を押すと、デフォルトで下記の様なロールが出来ています。
IAMが開きますので、今回は、SNSの書き込みである、”Publish”のポリシーをロールにアタッチすればOKです。 まだ慣れてない人は、「SNS FullAccess」のAWS管理ポリシーをアタッチしましょう。
※AWS IAMのベストプラクティスは「最小権限の付与」を推奨しています。今回は動作テスト迄を目標としていますので、簡易的な方法としてFullAccess の代用を記載しています。
テスト
実際にお手持ちの携帯からAmazon Connect の電話番号に発信してみましょう。流れは以下の様になります。
①携帯AからAmazon Connectへコール
②Amazon Connectから携帯Bへ転送
③携帯Bは放置
④携帯Bへ不在着信SMSが送付される。
これで今回のテストは終了となります。
終わりに
今回なぜこのようなアーキテクチャを組んだかというと、Amazon Connect から携帯電話への転送は「発信者の電話番号」が表示されません。つまり転送先の携帯で表示される電話番号は「Amazon Connect の番号」となってしまいます。 携帯に転送するユースケースでは、業務で外出が多いという事が挙げられます。 いちいちAmazon Connect を開いて電話履歴を見るのは面倒ですよね。