[Amazon Connect] 自動発信(Automated Outbound Calling)を利用したサンプル(その1)〜キャンペーンの案内を送って興味あるお客様をリストアップする〜
1 はじめに
AIソリューション部の平内(SIN)です。
Amazon Connect(以下、Connect)では、自動発信が可能になっています。
Amazon Connect の Automated Outbound Calling が一般に利用可能になりました
せっかくのOutboundなので、この機能を使用したサンプルをいくつか考えてみました。 最初に紹介するのは、「キャンペーンの案内を送って興味あるお客様をリストアップする」です。
内容は、以下のようなものです。
DBで予め管理されている顧客のリストから、順次自動で電話をかけ、キャンペーへの興味の有無をIVRで取得します。結果で顧客DBのデータを更新します。
こちらは、キャンペーンの電話が顧客にかかってきた時のイメージです。
2 顧客DB
顧客のリストは、下記のようなものを作成してみました。簡単になるように電話番号がキーになっています。
- phoneNumber: 顧客の電話番号 (キー)
- name: 顧客の名前
- canpaign_2018_12: キャンペーン情報
顧客DBには、キャンペーン情報のカラムがあり、その値は、-1:未確認 0:興味なし 1:興味あり となっています。
キャンペーン情報につては、最初に、すべてのデータを -1 に設定しておき、順次に自動で電話をかけて、お客様の興味の有無を確認して行きます。
自動電話に対する顧客の応答で、「興味味あり」と返信された場合は、当該カラムが1、「興味なし」の場合は、0となります。(不在の場合は、-2となります)
あとは、この1のお客様に対して、個別に電話したり、案内を送ることで、効率的にお客様対応ができるという仕組みです。
3 自動発信
顧客DBから取得した電話番号で、順次、お客様に連絡するコードは、以下のとおりです。
実は、このコードでは、一気に電話をかけているのですが、何回線まで多重で電話できるのか、ちょっと分かってません。恐らく、多重化の限界があると思うので、調整が必要となると思います。
const aws = require('aws-sdk'); const connect = new aws.Connect({region:'ap-southeast-2'}); const dynamo = new aws.DynamoDB({region: 'ap-southeast-2'}); // ConnectのインスタンスID const instanceId ='d091242f-xxxx-xxxx-xxxx-f9545cf8f8ef'; // 応答する問い合わせフローのID const contactFlowId = '3191af9e-xxxx-xxxx-xxxx-79081b2e2b13'; // 発信電話番号(Connectインスタンスで確保している番号) const sourcePhoeNumber = '+81507771111'; const tableName = 'outbound-sample-001'; async function job(){ const data = await dynamo.scan({"TableName": tableName}).promise(); if(data){ data.Items.forEach( async item => { // 顧客DBから電話番号を取得 const destinationPhoneNumber = item.phoneNumber; const params = { ContactFlowId: contactFlowId, DestinationPhoneNumber: destinationPhoneNumber.S, InstanceId: instanceId, SourcePhoneNumber: sourcePhoeNumber }; // 自動発信 const result = await connect.startOutboundVoiceContact(params).promise(); console.log(JSON.stringify(result)); }) } } job();
4 問い合わせフロー
顧客が電話に出た場合に、対応する問い合わせフローは以下のようになっています。
最初に「顧客の入力を保存する」で、入力を取得し、その値をLambdaに渡して顧客DBを更新しています。
Lambdaのコードは、以下のとおりです。1が選択された場合、興味あり、0が選択された場合、興味なしということで、それぞれ、顧客の電話番号をキーにして顧客DBを書き換えます。
Timeoutを処理しているのは、顧客が電話にでない(留守番電話に入ってしまう)などの場合を想定しており、後で分かるように -2 を設定しています。
const aws = require('aws-sdk'); const dbClient = new aws.DynamoDB.DocumentClient({region: 'ap-southeast-2'}); const tableName = 'outbound-sample-001'; const campaign = "campaign_2018_12"; // 対象キャンペーン exports.handler = async function(event, context) { console.log(JSON.stringify(event)); // 顧客の電話番号 const phoneNumber = event.Details.ContactData.CustomerEndpoint.Address; // 顧客が選択した番号 const inputData = event.Details.Parameters.inputData; let message = '<speak>'; let flg = -1; // キャンペーンに興味があるかどうかのフラグ if(inputData == 'Timeout') { // 番号選択なし(留守番電話など) message = '番号選択を認識できませんでした。<p/>もし、このキャンペーンに興味がございましたら、0120-000-0000にお電話下さい。'; flg = -2; } else if(inputData == '1') { // 興味あり message = 'ありがとうございます。<p/>追って担当から詳しいご連絡を申し上げます。'; flg = 1; } else { // 興味なし message = 'ありがとうございます。<p/>今後とも、クラスメソッドを宜しくお願い申し上げます。'; flg = 0; } message += '</speak>'; const param = { TableName : tableName, KeyConditionExpression : "#k = :val", ExpressionAttributeValues : {":val" : phoneNumber}, ExpressionAttributeNames : {"#k" : "phoneNumber"} }; const data = await dbClient.query(param).promise(); if(data.Items && 0 < data.Items.length){ data.Items[0][campaign] = flg; await dbClient.put( { "TableName": tableName, "Item": data.Items[0]}).promise(); } return {message:message}; }
5 最後に
今回は、Outboundの機能を利用した「キャンペーンの案内を送って興味あるお客様をリストアップする」サンプルを作成してみました。 今回のサンプルでは、折返しの電話を受け付けるようにしておりませんが、startOutboundVoiceContactでは、キューを設定することで発信者番号を設定できるようですので、折返し専用のフローも準備できるかも知れません。
今回のサンプルでは、まったくエージェントが参加しておらず、全自動となっていますが、次回は、エージェントが絡んだ、Outboundのサンプルを考えてみたいと思います。
弊社では、音声を利用した各種ソリューションの導入支援を行っております。お気軽にお問い合わせください。
チャットボット開発支援
クラウド型コンタクトセンターサービス導入支援
6 参考にさせて頂いたリンク
LINE Botにお願いしてAmazon Connect APIから電話をかけてもらう
Amazon Connect Outbound ContactのPreview版を試してみる