[Amazon Connect] 営業時間外に着信した電話番号の一覧を、翌朝メールで受け取る仕組みを作ってみた

1 はじめに

AIソリューション部の平内(SIN)です。

Amazon Connect(以下、Connect)では、オペレーション時間を設定して、その時間に基づいてロジックを作成することが可能です。

通常、着信では、営業時間外の場合は、オペレーターが対応できないので、「おかけ直しください」のようなアナウンスを流して切断するようなフローを構築すると思います。

これでも、まったく問題ないですが・・・「営業時間外に、どれぐらいの電話があったのか?」とか、「重要な顧客からの電話は無かっただろうか?」なんて気になる場合もあるかも知れません。

今回は、営業時間外で切断した電話の一覧を、毎朝の営業開始時にメールで受け取る仕組みを作ってみました。

構成は、以下のような感じです。

2 コンタクトフロー

サンプルのコンタクトフローは以下のようなものです。着信後、オペレーション時間を確認し、営業時間内であれば、通常の処理に進み、時間外の場合、Lamndaを呼び出して、発信番号を記録し切断しています。

3 S3へ記録

LambdaによってS3へ記録されているようすは、下図のとおりです。特定のバケットに、着信した時間と発信番号をそのままキーにして保存しています。(オブジェクトの中身はありません)

時間外に電話がかかってくるたびに、このオブジェクトが増えるわけですが、次の営業日に、集計してメールで送った後は、全部削除して空っぽにしてしまう運用です。

4 集計メール

次回の営業開始時に、送られて来るメールは、以下のようなものです。SESを使用して、事前に登録されたメールアドレス宛に送られます。

5 Lambda

実装したLambdaのコードは、次のとおりです。この関数は、Connectのコンタクトフロートからと、営業開始時にクローンから呼び出されます。

コンタクトフローから呼ばれたときは、単純に発信番号と日時をKeyにしてS3にオブジェクトを作成しているだけです。 一方、営業時間前に呼ばれた場合は、溜まったS3のオブジェクトを列挙し、メールにして送っています。また、この時、オブジェクトは全部削除しています。

const aws_sdk = require('aws-sdk');
const s3 = new aws_sdk.S3();
const ses = new aws_sdk.SES({region: 'us-east-1'}); // 東京では利用できない

const bucket = 'incoming-calls-overtime';
const fromAddress = 'sin@example.com';
const toAddress = 'sin@example.com';

exports.handler = async function(event, context) {
  // 着信の記録(Connectから呼び出された場合)
  if (event.Details && event.Details.ContactData) { 
    // 発信者番号
    const phoneNumber = event.Details.ContactData.CustomerEndpoint.Address;
    await savePhoneNumber(phoneNumber);

   // 着信記録をメールする(営業開始前にクーロンで呼び出される)
   } else {
    await sendPhoneNumber();
   }
  return {};
}

async function savePhoneNumber(phoneNumber){
  // 着信時間
  const dt = new Date();
  let params = {
    Bucket: bucket,
    Key: dt.toString() + ' ' + phoneNumber,
    Body: ''
  }
  await s3.putObject(params).promise();
}

async function sendPhoneNumber(){
  // データの一覧取得
  let params = {
    Bucket: bucket,
  }
  const list = await s3.listObjects(params).promise();

  let message = '';
  for (var i=0; i < list.Contents.length; i++) {
    const phonNumber = list.Contents[i].Key
    let params = {
      Bucket: bucket,
      Key: phonNumber
    }
    // データ取得
    const data = await s3.getObject(params).promise();
    // データ削除
    await s3.deleteObject(params).promise();
    // メール用のテキスト作成
    message += phonNumber + ' ' + data.Body.toString() + '\n';
  }
  await send_ses('営業時間外の着信リスト', message)
}

// メール送信
async function send_ses(subject, body){
  const params = {
    Destination: {
      ToAddresses: [ toAddress ]
    },
    Message: {
      Body: {
        Text: {
          Data: body,
          Charset: 'utf-8'
        }
      },
      Subject: {
        Data: subject,
        Charset: 'utf-8'
      }
    },
    Source: fromAddress 
  };
  await ses.sendEmail(params).promise();
}

6 最後に

Connectでは、営業時間外の着呼をあっさり切ってしまうことが可能です。しかし、顧客リストなどと連携させて、重要な顧客の電話を拒否した場合は、このような仕組みを応用して、フォローアップなどを考えた方がいいかも知れないですね。

弊社では、「Amazon Connect」の導入を検討している方を対象とした無料相談会を毎週開催中です。

また、音声を利用した各種ソリューションの導入支援を行っております。お気軽にお問い合わせください。
チャットボット開発支援
クラウド型コンタクトセンターサービス導入支援

コメントは受け付けていません。