Amazon Connect + DynamoDBで顧客管理システム構築

こんにちは。katoです。

今回はAmazon ConnectとDynamoDBを利用して、コールセンターなどにおける顧客管理のシステムを簡単に構築していきます。

 

概要

今回構築する顧客管理システムの概要は下図の様になります。

 

Amazon Connect + DynamoDBで顧客管理システム

 

CCP(Contact Control Panel)を埋め込んだアプリケーションサーバを用意し、顧客からの問合せが発生した際に電話番号から顧客情報を検索し、アプリケーションサーバ上に自動出力するという流れになります。

Amazon ConnectにCRMを連携したいけど予算が。。。」
Amazon Connectに既存のCRMが対応していない。。。」

今回ご紹介するDynamoDBを利用した顧客管理システムは、利用コストを低く抑え、カスタマイズ性にも優れているため、上記のようなお悩みを解決できるかもしれません。

 

手順

それではさっそく構築を行っていきたいと思います。

今回はAmazon Connectが利用可能なシドニーリージョン(ap-southeast-2)で構築を行っていきます。

なお、今回はAmazon Connectのフロー作成等は省略させていただきます。

フロー作成に関しましては、下記ブログをご参考にして下さい。

Amazon Connectでコンタクトセンターを作ろう

xp-cloud.jp

 

DynamoDBテーブル作成

まず初めに、顧客情報を格納するDynamoDBのテーブルを作成していきます。

今回は、プライマリーキーを「number(文字列)」としてテーブルを作成します。
Amazon Connect Streamsでは、キュー転送時に電話番号を取得可能なので、電話番号を元に顧客情報を検索する仕様となります。

その他の設定等は用途に合わせて適宜行ってください。

テーブルを作成したらアイテムを作成します。
今回は以下の内容でアイテムを作成しました。

 

・number(プライマリーキー)
・顧客名
・お客様区分
・契約者会社名
・契約者名
・契約者フリガナ
・契約者部署名
・契約者役職名
・契約者email
・契約者郵便番号
・契約者都道府県
・契約者所在地
・契約者電話番号

 

アイテムを作成

 

アプリケーション設定

DynamoDBの設定が完了したら、アプリケーションサーバ側の設定を行っていきます。

 

アプリケーションサーバにて以下のコマンドを実行していって下さい。
なお、今回はCentOS 7を利用しており、selinux無効化、DynamoDBアクセス権限付与が完了していることが前提となります。

 

##必要パッケージのインストール
[root@connect-app ~]# yum install git httpd epel-release
[root@connect-app ~]# yum install nodejs

##amazon connect streamsのインストール
[root@connect-app ~]# git clone https://github.com/aws/amazon-connect-streams
[root@connect-app ~]# cd amazon-connect-streams
[root@connect-app amazon-connect-streams]# make
[root@connect-app amazon-connect-streams]# cd /var/www/html/
[root@connect-app html]# mv /root/amazon-connect-streams /var/www/html/

##ページ作成
[root@connect-app html]# vi index.html

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>amazon connect custom ccp</title>
</head>
<body>

<script type="text/javascript" src="amazon-connect-streams/amazon-connect-v1.2.0-2-g5fc44af.js"></script>
<script type="text/javascript" src="node_modules/aws-sdk/dist/aws-sdk-react-native.js"></script>

<div id="containerDiv" style="width: 320px; min-width: 200px; height: 465px; min-height: 400px; float: left;"></div>

<div id="logDiv"><textarea id="logtextarea" style="width:60%; height: 465px; min-height: 400px; float: left;"></textarea></div>

<script type="text/javascript">
var ccpUrl = "https://xxxxxxxx.awsapps.com/connect/ccp#/";

connect.core.initCCP(containerDiv, {
  ccpUrl: ccpUrl,
  loginPopup: true,
  softphone: {
    disableRingtone: true,
    ringtoneUrl: null,
    allowFramedSoftphone: true
  }
});
</script>

<script type="text/javascript" src='bundle.js'></script>

</body>
</html>

##必要パッケージのインストール
[root@connect-app html]# npm install aws-sdk
[root@connect-app html]# npm install -g browserify

##javascriptファイルの作成
[root@connect-app html]# vi main.js

function writeLog(message) {
  var logtextarea = document.getElementById('logtextarea');
  var text = logtextarea.value;
  logtextarea.value = text + message;
};

connect.contact(function(contact) {
  if (contact.getActiveInitialConnection() && contact.getActiveInitialConnection().getEndpoint()) {
    var conn = contact.getActiveInitialConnection();
    var phoneNumber = contact.getActiveInitialConnection().getEndpoint().phoneNumber;
  }

  writeLog('電話番号 = ' + phoneNumber + '\n');

  var aws = require('aws-sdk');
  var dynamodb = new aws.DynamoDB({
    region: 'ap-southeast-2',
    accessKeyId: 'xxxxxxxxxxxxxxxxxxxx',
    secretAccessKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
  });

  var params = {
    TableName : 'dynamodb_table_name',
    Key: {
      "number": {"S": phoneNumber}
    }
  };
  dynamodb.getItem(params, function(err, data) {
    if (err){
      writeLog(err + '\n');
    } else {
      writeLog('顧客名 = ' + data.Item.顧客名.S + '\n');
      writeLog('お客様区分 = ' + data.Item.お客様区分.S + '\n');
      writeLog('契約者会社名 = ' + data.Item.契約者会社名.S + '\n');
      writeLog('契約者名 = ' + data.Item.契約者名.S + '\n');
      writeLog('契約者フリガナ = ' + data.Item.契約者フリガナ.S + '\n');
      writeLog('契約者部署名 = ' + data.Item.契約者部署名.S + '\n');
      writeLog('契約者役職名 = ' + data.Item.契約者役職名.S + '\n');
      writeLog('契約者email = ' + data.Item.契約者email.S + '\n');
      writeLog('契約者郵便番号 = ' + data.Item.契約者郵便番号.S + '\n');
      writeLog('契約者都道府県 = ' + data.Item.契約者都道府県.S + '\n');
      writeLog('契約者所在地 = ' + data.Item.契約者所在地.S + '\n');
      writeLog('契約者電話番号 = ' + data.Item.契約者電話番号.S + '\n');
    }
  });

});

script連携&apache起動

[root@connect-app html]# browserify main.js -o bundle.js [root@connect-app html]# systemctl restart httpd  

アプリケーション統合

最後に、Amazon Connectとアプリケーションサーバを連携します。

Amazon Connectサービスページにアクセスし、「アプリケーション統合」を選択します。

「オリジンの追加」を選択し、アプリケーションサーバのURLを追加します。

 

アプリケーションサーバのURLを追加

 

承認済オリジン

 

以上で設定は完了です。

 

動作確認

それでは実際に動作を見ていきましょう。

オリジンとして追加したアプリケーションサーバのURLにアクセスします。

Amazon Connectにログインしていない場合にはログイン画面が別タブで開かれます。

 

Amazon Connectにログイン

 

ログインを行い、アプリケーションサーバのサイトに戻るとCCPとログの出力画面が表示されます。

 

CCPとログの出力画面

 

この状態でキューが転送されてくると、電話番号を元にDynamoDBから顧客情報を検索してきて画面に出力が行われます。

 

DynamoDBから顧客情報を検索

 

まとめ

今回はAmazon ConnectとDynamoDBを利用してコールセンターなどにおける顧客管理のシステムを簡単に構築しました。

追加のソフトウェア等を購入することなく、AWSサービスのみでシステムを構築することができます。

DynamoDBを利用しているので、登録データを変えればさまざまな情報に対応することが可能で、また、AWS CLIなどを利用すればExcelCSVなどから簡単にデータを移行することができます。

サイトデザインの変更や機能の追加など、用途に合わせて幅広いカスタマイズも可能で、低コストで顧客管理システムを構築することが可能です。

Amazon Connect単体でもコンタクトセンターとして便利に利用できますが、今回ご紹介したような他のAWSサービスと連携することで、より優れたサービスとなります。

CRM連携やユーザデータの管理などでAmazon Connectの利用が難しい場合には、独自の顧客管理システムを作ってみることも考えてみてはいかがでしょうか。

また、Excelなどで顧客データを管理している場合には、今回のようなAmazon Connectのシステムによって業務の効率化を図ることができます。

ご興味のある方はぜひ一度Amazon Connectを試してみて下さい。

 

 

 

このブログの著者

 

 

 

AWS相談会バナー  

おてがるCTIバナー