hero_picture
Cover Image for 自動電話コールバックシステムを作ってみた Amazon Connect受信編

自動電話コールバックシステムを作ってみた Amazon Connect受信編

前回からの続きです。

前回はAmazon Connectでのシンプルな電話受信フローを作りました。

今回はその受信フローをカスタマイズしてLambdaきっかけで発信できるようにしていきます。

目次

Lambda関数の作成

1から作成

関数名を適当なものを入力します。

ランタイムはNode.js 16xを選択します。

それ以外は一旦デフォルトでOKです。

右下の「関数の作成」押して関数作成を待ちます。

IAMロールの設定

このままではLambdaからAmazon Connectの発信許可がありませんので許可設定を行います。

先ほどできた関数を選び、

設定>アクセス権限から、デフォルトの実行ロールをクリックしIAM設定画面に移ります。

初期状態では、Cloudwatchlog系のポリシーしかありません。

インラインポリシーにAmazon Connectの音声電話発信許可ポリシーを追加します。

許可の追加よりインラインポリシーの作成を選択し、以下の設定を行います。

ポリシー名 AmazonConnectOutboudCall

1{
2     "Version": "2012-10-17",
3     "Statement": [
4         {
5             "Sid": "VisualEditor0",
6             "Effect": "Allow",
7             "Action": "connect:StartOutboundVoiceContact",
8             "Resource": "*"
9         }
10     ]
11 }
1{
2    "Version": "2012-10-17",
3    "Statement": [
4        {
5            "Sid": "VisualEditor0",
6            "Effect": "Allow",
7            "Action": "connect:StartOutboundVoiceContact",
8            "Resource": "arn:aws:connect:(リージョン):(AWSアカウントID):instance/(インスタンスID)/contact/*"
9        }
10    ]
11}

セキュリティーベストプラクティスに則り、最小限のポリシーとするためリソースまでしっかりと指定するのであればこのように許可範囲を制限します。

コード(node版)

変更するのは赤枠の4箇所です。

1  ContactFlowId: "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
2  DestinationPhoneNumber: "相手先電話",
3  InstanceId: "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
4  SourcePhoneNumber: "AmazonConnect発信元電話番号"

ContactFlowIdとInstanceIdは以下の手順にてAmazon Connect画面から取得します。

電話番号はE.164形式で指定します。

1080xxxxxxxx → +8180xxxxxxxx

ContactFlowIdとInstanceIdの確認方法

ContactFlowIdとInstanceIdの確認方法

1arn:aws:connect:ap-northeast-1:00000000000:instance/xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx/contact-flow/xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx
1const AWS = require("aws-sdk");
2AWS.config.update({region: 'ap-northeast-1'});
3const connect = new AWS.Connect({apiVersion: '2017-08-08'});
4
5exports.handler = async (event, context) => {
6    let params = {
7      ContactFlowId: "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
8      DestinationPhoneNumber: "+81xxxxxxxxxxxx",
9      InstanceId: "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
10      SourcePhoneNumber: "+81xxxxxxxxxxxx"
11    };
12    //架電開始
13    await connect.startOutboundVoiceContact(params, function(err, data) {
14      if (err) {
15        console.log("connect error",err);
16      } else {
17        console.log("connect success",data);
18      }
19    }).promise();
20};

テスト

設定ができたらテストを行います。

「成功」とされ、電話がかかってくるか確認します。

エラーが改善されないときはこちらのログを確認しながらデバッグします。

APIリファレンス StartOutboundVoiceContact

https://docs.aws.amazon.com/connect/latest/APIReference/API_StartOutboundVoiceContact.html

以上で、発信処理の基本形ができました。

続いて、DynamoDBとの連携、API Gatewayからの処理を呼び出しなど、実運用に必要な処理を肉付けしていきます。

Amazon Connectの費用

最初の一年間は以下が無料です。

  • 1 か月あたり 90 分の Amazon Connect サービス使用量
  • AWS リージョンがある国からの直通ダイヤルイン (DID) 番号
  • 1 か月あたり 30 分のインバウンド DID コール
  • 1 か月あたり 30 分の AWS リージョンがある国の番号へのアウトバウンドコール

参考実費(1ドル140円)

電話番号(DID)1日あたり0.10 USD14円
受信通話1分あたり0.003 USD0.42 円
発信通話1分あたり(日本)0.0844 USD11.92 円

1日1回1分使うとして

電話番号 14円✕30=420円

受信通話 0.42円✕30=12.6円

発信通話 11.92円✕30= 358円

合計  約790円

初年度はほぼ無料枠内に収まります。

使わない期間があれば電話番号をリリースすれば無駄なコストもかかりません。

Amazon Connect の料金

https://aws.amazon.com/jp/connect/pricing/