Blogical

AWS/Salesforceを中心に様々な情報を配信していきます(/・ω・)/

Amazon Connect の不在着信通知をSNSで構築してみた

こんにちは、ロジカル・アーツの井川です。 今日は、Amazon Connect とAmazon Simple Notification Service との連携にチャレンジしてみました。

はじめに

Amazon ConnectAmazon SNSは非常に相性が良くて、様々なユースケースで活躍すると思います。今回想定するユースケースは、Amazon Connect の標準機能である「携帯電話への転送」を使用し、Amazon Connect での受電を携帯電話へ転送。さらに携帯電話で取れなかった場合は、不在着信としてSMSにて携帯電話へ通知。このようなケースをAmazon SNSを使用して解決するアーキテクチャを紹介をしたいと思います。

Amazon Connectの構築

ステップ1:Amazon Connect インスタンス作成

ここではインスタンスの作成、電話番号の取得などの詳細は割愛させて頂きます。 公式で詳しい説明資料が出ていますので、下記を参考にしてください。

https://d1.awsstatic.com/Developer%20Marketing/jp/magazine/pdf/builders_BusinessCloud02_kimmasaf_connect_Handson.pdf

ステップ2:問合せフローの設定

今回構築した、Amazon Connect の問合せフローは以下の通りです。

f:id:logicalarts:20201208112059j:plain
contactFlow

今回は「電話番号への転送ブロック」に下記3点の設定をしてください。

  • 自身の携帯電話番号を入力
  • タイムアウトの設定:7秒
  • 切断後に問合せフローを再開:はい

全て出来たら「保存」を押します。

※この段階で公開すると「エラー」がでますので気を付けてください。

ステップ3:Lambdaの設定

Lambdaの詳細は次章の「Lambda関数の作成」を確認してください。 下記で作成したLambdaの設定をします。 Amazon Connect インスタンスエイリアスをクリックすると 「問合せフロー」という項目に「AWS Lambda」という項目が出てきます。

f:id:logicalarts:20201208113618j:plain
Lambda2
上記の様に、今回作成したLambdaをタブから選択し、 「+Add Lambda Function」 を押してLambdaを登録しましょう。

ステップ4:問合せフローからLambdaの呼出し

ステップ3でLambdaの登録を行うと、問合せフローから登録したLambdaを呼び出す事が出来ます。

f:id:logicalarts:20201208113722j:plain
lambda3
今回作成したLambda関数をタブから選択し、Saveを押しましょう。 次に、「保存」と「公開」を順番に押します。

これで、Amazon Connect の設定は終了です。

Lambda関数の作成

コンソールからLambdaを開きます。

f:id:logicalarts:20201208113928j:plain
lambda1

  • 「一から作成」を選択
  • 関数名に”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内にある、基本設定の「編集」を押すと、デフォルトで下記の様なロールが出来ています。

f:id:logicalarts:20201208114638j:plain
role
「Send-to-SNS-role-vig01k9r ロールを表示します」を押します。

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 を開いて電話履歴を見るのは面倒ですよね。

参考サイト

  1. https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/connect-ag.pdf

  2. https://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-dg.pdf

  3. SNS — Boto3 Docs 1.16.31 documentation