[Amazon Connect] 自動発信(Automated Outbound Calling)を利用したサンプル(その1)〜キャンペーンの案内を送って興味あるお客様をリストアップする〜

2018.11.30

この記事は公開されてから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版を試してみる