この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
1 はじめに
CX事業本部の平内(SIN)です。
Amazon Connect(以下、Connect)には、電話への転送機能があります。この機能では、タイムアウトを設定して、電話に出なかった場合の処理も設定することが可能です。
今回は、Connectを会社の代表電話に利用する場面を捉え、この機能を利用して、転送先の拠点で電話対応ができない時に、次の拠点に転送するという仕組みを試してみました。
電話を掛けた側には、転送が廻されても分かりませんので、大きく顧客体験が損なわれる事は無いと思います。
また、拠点ごと、時期によって電話対応できない時間帯などが、予め分かっている場合は、S3上の設定ファイル(RotationalTransfer.txt)を編集することで、転送の優先順位を変えたり、定期的に再生するメッセージが編集できるようにしてみました。
2 セットアップ
プロジェクトは、SAM(Lambda,S3)で作成しました。このプロジェクトを設置する手順は以下のとおりです。
(1) ダウンロード
GitHubからプロジェクトをcloneして下さい。
$ git clone https://github.com/furuya02/AmazonConnect-Extended-RotationalTransfer3.git
$ cd AmazonConnect-Extended-RotationalTransfer3
事後の作業は、全てappの中で行います。
$ cd app
(2) 外部モジュールのダウンロード
[app]$ cd src;yarn install;cd ..
[app]$ cd dst;yarn install;cd ..
[app]$ chmod 755 .vscode/deploy.sh
本プロジェクトは、VSCode上で作業すると、快適に作業できるようセットアップされています。
[app]$ code . ( <= ドットを忘れないように)
(3) 構成
プロジェクトのファイル構成は、概ね以下のとおりです。
├── README.md
├── images (ドキュメント用画像)
├── sample
│ ├── RotationalTransfer.txt (設定のサンプル)
│ └── RotationalTransfer(問い合わせフローのサンプル)
└── app
├── dst (js出力)
│ ├── yarn.lock (デプロイ用)
│ ├── package.json (デプロイ用)
│ └── node_modules(デプロイ用)
├── src (tsソースコード)
│ ├── yarn.lock (TS用)
│ ├── package.json (TS用)
│ ├── node_modules(TS用)
│ ├── tsconfig.json (TypeScript設定)
│ └── index.ts
└── template.yml (AWS SAM テンプレート)
(4) コンパイル
tscでコンパイルして、jsファイルを生成します。 app/tsconfig.jsonに設定ファイルがあり、これを元にコンパイルすることで、dst/配下にjsファイルが出力されます。
[app]$ tsc --build src/tsconfig.json
VSCodeでは、Shift+Cmd+b(ビルドタスクの実行)で表示される選択から、tsc:ウォッチ(常時動作)若しくは、tsc:ビルド(1回のみ) でコンパイルできます。
(5) デプロイ
sam package及び、sam deployコマンドでデプロイします。 SAMによるパッケージ作成のために、予め、S3のバケットが必要です。
[app]$ export Profile=プロファイル名
[app]$ export BucketName=S3バケット名
[app]$ export StackName=Connect-Extended-Operation-Of-Tiime
[app]$ sam package --output-template-file packaged.yaml --s3-bucket ${BucketName} --p ${Profile}
[app]$ sam deploy --template-file packaged.yaml --stack-name ${StackName} --capabilities CAPABILITY_IAM --p ${Profile}
VSCode上でデプロイするには、Cmd+d(カスタム:タスク実行)で表示される選択から、deployタスクを選択します。
deployタスクは、.vscode/task.jsonで下記のように、.vscode/deploy.shを実行するように設定されています。
{
"version": "2.0.0",
"tasks": [
{
"label": "deploy",
"type": "shell",
"command": ".vscode/deploy.sh",
"problemMatcher": []
}
]
}
バケット名などパラメータの変更は、.vscode/deploy.shの環境変数を編集して下さい。
export Profile=プロファイル名
export BucketName=バケット名
#--------------- SAM更新 ---------------------------
export StackName=Connect-Extended-RotationalTransfer
sam package --output-template-file packaged.yaml --s3-bucket ${BucketName} --p ${Profile}
sam deploy --template-file packaged.yaml --stack-name ${StackName} --capabilities CAPABILITY_IAM --p ${Profile}
(6) リソース
デプロイされるリソースは、以下の3つです。すべてのリソースは、スタック名で始まります。
- S3バケット(設定ファイルのアップロード用)
- Lambda関数
- Lambda用のRole
(7) 設定ファイル
設定ファイルをS3バケットにアップロードします 。
バケットは、CloudFormationの出力に表示されているバケット名になります。
[app]$ export Profile=プロファイル名
[app]$ export BucketName=バケット名
[app]$ aws s3 cp ../sample/RotationalTransfer.txt s3://${BucketName}/ --profile=${Profile}
(8) 設置
本プロジェクトを設置する手順は、以下のとおりです。
- インスタンスへのLambdaの追加
- 問い合わせフローの設置
- AWS Lambda関数を呼び出すブロックの設定
インスタンスへのLambdaの追加
- インスタンスの設定で、AWS Lambda関数を追加します。関数名は、CloudFormationの出力で確認して下さい。
問い合わせフローの設置
問い合わせフローのサンプル(sample/Sample)をインポートします。
AWS Lambda関数を呼び出すブロックの設定
- AWS Lambda関数を呼び出すブロックのオプションで、関数を選択します。
パラメーターは、属性を使用するに設定し、外部:counterをcounterで渡すように設定します。これにより、ループの何回目の処理かをLambdaで判断できるようになります。
3 設定
設定要領は、拠点の電話番号と、ローテーションの設定の2種類です。
(1) 拠点の電話番号
[TELNO]と[/TELNO]の間で設定し、2カラム目に電話番号を記載します。
ローテーションで使用するのは、何行目の拠点を使用するかだけですので、1カラム目は、記述方法に制約はありません。
#####################################
# 拠点電話番号設定
#####################################
[TELNO]
(0)SAPPORO,+819011111111
(1)OOSAK,+819022222222
(2)TOKYO,+819033333333
(3)YOKOHAMA,+819044444444
(4)SAITAMA,+819055555555
[/TELNO]
(2) ローテーションの設定
ローテーション設定は、[DEFAULT]と、その上書き設定となります。
- 1カラム目:拠点
- 2カラム目:タイムアウト(秒)
- 3カラム目:転送の前にアナウンスを入れる
下記の例では、 1. 拠点0に転送し、15秒でタイムアウト 2. 拠点2に転送し、15秒でタイムアウト 3. 「申し訳ございません・・・」のアナウンス後に、拠点4に転送し、15秒でタイムアウト この動作を、電話にでるまでループします。
#####################################
# デフォルト設定
#####################################
[DEFAULT]
0,15,
2,15,
4,15,申し訳ございません。只今、混み合っております、そのまま、お待ち頂くか、おかけ直し下さい。
[/DEFAULT]
ローテーションの設定は、特定の日時だけ[DEFAULT]の設定を上書きできます。
下記の設定は、月曜日の09:00〜12:00の間だけ、デフォルトのローテーションを上書きします。
#####################################
# 月曜の9:00-12:00の設定
#####################################
[SET]月,0900,1200
3,15,
2,15,
1,15,申し訳ございません。只今、混み合っております、そのまま、お待ち頂くか、おかけ直し下さい。
[/SET]
なお、空行や、#以降(コメント)は、無視されます。
RotationalTransfer.txt の一例です。
#####################################
# 拠点電話番号設定
#####################################
[TELNO]
(0)SAPPORO,+810011111111
(1)OOSAK,+810022222222
(2)TOKYO,+810033333333
(3)YOKOHAMA,+810044444444
[/TELNO]
#####################################
# デフォルト設定
#####################################
[DEFAULT]
0,15,
1,15,
2,15,
3,15,
4,15,申し訳ございません。只今、混み合っております、そのまま、お待ち頂くか、おかけ直し下さい。
[/DEFAULT]
#####################################
# 月曜の9:00-12:00の設定
#####################################
[SET]月,0900,1200
3,15,
1,15,申し訳ございません。只今、混み合っております、そのまま、お待ち頂くか、おかけ直し下さい。
[/SET]
4 最後に
今回は、電話転送を設定ファイルでローテーションするものを作成してみました。
Connectを会社の代表電話などで利用する場合、このような、複数電話にうまくスケージュールする仕組みは、もしかすると有効かも知れません。