Amazon Connectを使ってみたいときに、理解しておくと良いなと思うこと

nishida-blog

こんにちは、CTC の西田です。
AWS構築サービスであるCUVIC on AWSの担当をしております。
前回は、『strongSwanを使ってVGWとのVPN接続を試す』というブログを書きましたが、今回は、『Amazon Connect』についてです。

Amazon Connectとは

Amazon Connectは、簡単に言えば、IVRコールセンターをクラウドで構築できるAWSのサービスです。
2017年4月現在、バージニアリージョンでしか利用ができない新しいサービスです。
このAmazon Connectを検証し、自分で実装してみたのですが、1日でそれっぽいシステムが実装できてしまいました。

DIY要素がそれなりにあるものの、インテリジェントなコールセンターを簡単に構築できることもあり、日本で展開されれば、更に話題になるのではないでしょうか?

Amazon Connectのドキュメントは少ない

2017年4月現在、Connectのアーキテクチャーを全体的に説明する資料はかなり少ないです。

またバージニアリージョンでしか利用ができないため、日本から利用するには幾つか工夫が必要でした。

そこで本ブログ記事では、これらを補完すべく、実装する前に理解しておいた方が良いと思ったこと、『Amazon Connectのアーキテクチャー』と『日本から利用する際の注意点』に重点を置いて解説します。

免責

なお、本記事ではドキュメントがあまり充実していない中で検証し、『自分なり』に理解したことをベースに書いたものです。 そのため誤った認識より良い方法がある可能性もあります。 もしお気づきの点などあれば、是非ご指摘ください。

書いてあること

Amazon Connectの基本的なアーキテクチャ
Amazon Connectのリソースと基本機能
Amazon Connectのサポート機能(クイックコネクトの説明など)
特殊なコンタクトフロー
日本でテストするときの注意
ハマりどころ(一部解決してない)
感想

Amazon Connectの基本的なアーキテクチャ

connect_architecture

※ピンク色で表示したのが、Amazon Connectのリソース

  • IAMユーザーが、インスタンスを作成。
    • インスタンスは、コールセンターを構成する箱のようなもの。
    • インスタンスを作成すると、専用のダッシュボードへのURLが提供される。
    • IAMは、このダッシュボードへ管理者権限でログイン可能。
  • IAMユーザーが、Amazon Connectのコールセンター管理者用のユーザーを作成する。
    • 作成されたユーザーは、ダッシュボードへログイン可能になる。
  • コールセンター管理者が、ダッシュボード上にログインし、各リソース(コンタクトフロー・その他ユーザーなど)を作成。
  • 電話番号は、コンタクトフローと紐づいており、カスタマーが、電話をすることでフローが実行開始。
    • 音声(プロンプト)の再生や顧客入力(DTMFなど)が可能。
    • Lambdaファンクションの実行が可能。
  • フロー上で、キューにカスタマーをセットすると、ユーザー(エージェント)と通話可能。
    • ルーティングプロファイルに応じて、カスタマーは分散され、担当エージェントが選ばれ、着信する。
      • 担当エージェントは、CCPと呼ばれる画面を開いて待機する必要がある。
    • なお、キューにセットせず、自動応答のまま電話を切ることも可能。

Amazon Connectのリソースと基本機能

ここでは、先程登場した各リソースについて更に詳しく機能を説明する

インスタンス

  • EC2インスタンスとは異なる概念
  • 1つのコールセンターを構成する箱のようなもの。必ず、最初にこれを作る必要がある。
  • 専用のドメイン空間(インスタンス名.awsapps.com)が提供され、ダッシュボードと呼ばれるWeb管理画面にログインできるようになる。
  • ダッシュボードには、インスタンスを作成したIAMユーザでログインが可能。
  • またIAMとは異なる独自のユーザーをダッシュボード上で作成することが可能。

電話番号

  • カスタマーが電話する電話番号
  • 電話番号は、インスタンスごとに複数持てる。
  • 1つの電話番号に、1つのコンタクトフローを紐づける。
  • カスタマーが取得した番号に電話をすると、紐付いたコンタクトフローが実行される。

コンタクトフロー

contanct_flow

  • 電話応答の流れを定義する
  • 『荷物の再配達』や『インターネットプロバイダ』の問い合わせなどの電話応答をイメージするとわかりやすい
  • コンタクトフローでできることの一例(これで全てというわけではない)
    • Audio File(プロンプト)の再生
      • 待ち状態時に音楽を再生したり、定型音声を読ませたりできる
    • テキスト読み上げ(Amazon Polly)
      • 音声ファイルを準備が不要。テキスト入力だけで勝手に読み上げてくれる
    • DTMF
      • 問い合わせ内容に応じて、番号を入力するあれ。
    • Lambda実行
      • Lambda関数を実行し、処理結果を取得し、その後のフローで変数として利用できる。
      • Lambda経由で顧客情報にアクセスすることが可能になる
    • フロー分岐
      • DTMFの入力値やLambdaの処理結果を条件に、フローを分岐する
    • 変数
      • Lambdaの処理結果や、DTMFなどで入力した値は、変数として参照できる
      • Lambdaであれば、$.External.{Returned-Hash-Key}で参照可能
      • Pollyに処理結果=変数($.External.{key})を渡して喋らせたりできる。
    • エージェント通話(キューにカスタマーをセット)
      • カスタマーをキューにセットすると、通話の順番待ち状態になる
      • エージェントはCCP(顧客応対用の画面)を開き、状態をAvailableにしておく
      • ルーティングプロファイルに応じて、Availableなエージェントの一人に着信
    • 電話転送
      • カスタマーを別の外部電話へ転送させる。
        • カスタマー⇔コンタクトセンター から カスタマー⇔転送先番号 という通話状態になる
        • 現状で、日本の電話番号へ転送も可能
        • 担当者の携帯や外部の留守番電話サービスなどに転送したりもできる
    • コールバック
      • エージェントから、カスタマーにコールバックする(カスタマーの通話は一度切れる)
      • コールバック番号をDTMFなどで入力させ、コールバックキューにセットすることで利用できる
      • キューにセットされると、一度カスタマーは電話終了となる
      • 一方で担当エージェントに着信通知が発生する
        • ソフトフォンの場合は、エージェントがAccept Callすると、コールバック番号へ自動で電話
        • デスクフォンの場合でも、現状は、ソフトフォンでコールバックを行う模様
    • 通話録音
      • 通話音声の録音が可能。コンタクトフローで体験した全ての音声を録音するわけではない
      • 録音はエージェント・カスタマー・その両方のレベルで選択できる
    • 入力値の暗号化
      • DTMFで入力された情報を暗号化できる
      • エージェントは暗号化された情報を平文で読むことはできなくなる

キュー

  • カスタマーがエージェントと通話する際に入る待ち行列
  • エージェントは各々、ルーティングプロファイルに応じて担当するキューを持つ
  • カスタマーをキューにセットすると、ルーティングプロファイルに応じて一人のエージェントへ電話が着信
    • ソフトフォンの場合は、Accept Callを押すと、通話開始
    • デスクフォンの場合は、指定した電話番号へ着信が開始し、通話を開始するとCCP上で自動検知
  • 複数のカスタマーがセットされた場合、複数のエージェントへ振り分けされる

ルーティングプロファイル

  • エージェントが担当するキューを決める
  • 担当するキューの中でも優先付けが可能
  • ユーザーに一つだけ割当可能
  • 図の例
    • Beginnerのルーティングプロファイルでは、Goldサポートの対応をさせない
    • Masterのルーティングプロファイルでは、SilverよりもGoldサポートを優先する

セキュリティプロファイル

  • ダッシュボードの操作権限の定義
    • エージェント→CCPの操作権限
    • 管理者→ダッシュボードの全権限(履歴参照やユーザー追加など)
  • ユーザーにセキュリティプロファイルを複数割当可能

ユーザー

  • ダッシュボードにアクセスできるユーザー。
  • IAMではない。Microsoft ADやAD Connectorでユーザー連携も可能
    • なお、IAMユーザーは、IAM権限に応じて、Administratorとして特定のダッシュボードへアクセス可能
  • 1つのルーティングプロファイル(キューの担当)を引き受ける
  • 複数のセキュリティプロファイル(ダッシュボードの操作権限)を引き受ける
  • デスクフォンかソフトフォンを選択
    • ソフトフォンは、CCP上のソフトフォンに着信
    • デスクフォンは、入力した任意の電話番号へ着信
      • 現状は、米国ナンバーのみ対応
      • 実際に着信するには、CCP上でエージェントの状態をAvailableにする必要がある

Amazon Connectのサポート関連機能

CCP

ccp

  • エージェントがキューにセットされたカスタマーとの通話を行う際に必ず表示させておく画面
  • CCP上で、エージェントが自身の状態をAvailableにすることでキューにセットされたカスタマーからの電話(Inbound call)が振り分けられる
  • 着信を受け取る(Accept Call)と、Connectedとなり、カスタマーと通話できる
  • 通話を終える(End Call)とAfterCallWorkという状態となり、その間は、新しい着信が来ない
    • 通話後に、次の電話を受け取る前に、メモを取るなど、別の作業ができる

クイックコネクト

  • CCP上でカスタマーと通話中に、別のエージェントに通話を切り替える時に使う

ccp_quickconnect1

※左が転送先のエージェントで、右が転送元のエージェントのCCP画面

ccp_quickconnect2

※転送先がクイックコネクトによる着信をAccept callしたときの画面。この時の通話はエージェント間になる。

  • カスタマーと通話中、クイックコネクトで別のエージェントに電話を転送
    • 転送直後は、カスタマーは保留状態。転送元と転送先のエージェント間で通話状態になる(図下の状態)
    • 転送元がLeave callすると転送先エージェントとカスタマーの通話になる
    • 転送元がSwapを選ぶと、通話相手が転送先エージェントとカスタマーで切り替わる
    • 転送元がJoinを選ぶと、電話会議(カスタマー・転送元・転送先で通話)になる
  • カスタマーとは関係無しに、あるエージェントが、別のエージェントに電話を繋ぐ時にも使える
    • 例えば、別のエージェントに質問したいときなどに使える
  • クイックコネクトでは、ユーザーだけでなく、キューや外部電話番号にも紐付けられる
    • ユーザー
    • キュー→プロファイルによって、ユーザーが選択されてクイックコネクトが成立
    • 外部電話番号(現状は、米国番号のみ可能)

営業時間(Hours of Operation)

  • コンタクトセンターの営業時間を現状は、『曜日とその時間』で定義
    • タイムゾーンを選べる
    • 曜日でしか選べないので細かい制御ができない(祝日とか第4金曜など)
  • キューなどに、紐付けることができる。紐付けず単体でも利用できる
    • コンタクトフローで営業時間かどうかで処理分岐が可能

AD連携

  • Microsort ADやAD Connectorを使うとユーザー連携が可能
  • Connect側でユーザーの作成は不可能になる
  • ADで作成済みのユーザーを検索し、Connectへログインできるように設定する

全体統制・履歴・監視

 1. Connect独自機能

  • Real-time metrics
    • キューやエージェントなどの現在の状態を確認できる
    • ここから各エージェントの状態変更が可能(Availableへ強制的に移行するなど)
  • Historical metrics
    • キューやエージェントやカスタマーの電話番号の現在に至るまでの統計情報を確認できる
  • Contact Search
    • カスタマー発信1回ごとの履歴情報

 2. Cloudwatch

  • コンタクトフローでエラーが発生した回数や受け取れなかった着信の数などのメトリックが存在する
  • これらのメトリックにアラートを設定することで、動的な監視が可能

エージェントヒエラルキー

  • ヒエラルキーを5段階までセットし、ユーザーにヒエラルキーを設定できる
  • ユーザーのロードバランスに使えるとのこと
    • 現状は、統計情報をヒエラルキーでグルーピングするときなどデータの参照目的にしか使えない模様
    • いずれ、ヒエラルキーを利用したカスタマーとユーザー割当の優先順位付けなどが実装されるのかも

特殊なコンタクトフロー

概要

Amazon Connectには、通常コンタクトフローの他に幾つか特殊なフローが存在する。
通常のコンタクトフローは、電話をした際に開始されるフローである。
しかし、特殊なコンタクトフローは、電話を開始して、キューにセットされた時など 『特定のタイミング』で遷移するフローである。
通常のコンタクトフローは、カスタマーの体験を定義する。
しかし、特殊なコンタクトフローの幾つかは、エージェントが体験するフローを定義するものもある。
通常のコンタクトフローは、電話番号に紐付けられる。
しかし、特殊なコンタクトフローは、電話番号には紐付けられず、紐付け(セット)方法もそれぞれ異なる。

特殊なコンタクトフローについては、上記で説明した、『遷移するタイミング』、『誰が体験するか』、『設定方法』の違いを意識すると理解しやすくなる。

Queue Flow系


Customer Queue Flow

  • 『通常のコンタクトフローからキューにカスタマーが入れられてから、エージェントが受信するまでの間』
  • 『カスタマー』が体験するフロー
  • コンタクトフロー内で、『Set Customer Queue Flow』を使ってセットする
  • 主に、待ち音声や音楽の再生などで使われる

Whisper Flow系


Customer Whisper Flow

  • 『エージェントが受信してから、実際に通話を初める直前』
  • 『カスタマー』が体験するフロー
  • コンタクトフロー内で、『Set Whisper Flow』を使ってセットする

Agent Whisper Flow

  • 『エージェントが受信してから、実際に通話を初める直前』
  • 『エージェント』が体験するフロー
  • コンタクトフロー内で、『Set Whisper Flow』を使ってセットする
  • 顧客情報を事前に知ったりするのに使えそう。

Outbound Whisper Flow

  • 『コールバックをエージェントが処理して、コールバック先が電話を取った時』
  • 『コールバックを受けた相手』が体験するフロー
  • 『キューの設定』でセットできる(コンタクトフローではセットできない)
  • 録音を入れたり、録音してますよ的な注意を入れることが可能。

Hold Flow系


Customer Hold Flow

  • 『通話中に保留になった時』
  • 『カスタマー』が体験するフロー
  • コンタクトフロー内で、『Set Hold Flow』を使ってセットする

Agent Hold Flow

  • 『通話中に保留になった時』
  • 『エージェント』が体験するフロー
  • コンタクトフロー内で、『Set Hold Flow』を使ってセットする

Transfer to XXX Flow系


Transfer to Queue Flow

  • 『あるエージェントが、別のキューにクイックコネクトで転送するときに』
  • 『あるエージェント』が体験するフロー
  • 『キューへのクイックコネクトの設定』としてセットできる

Transfer to Agent Flow

  • 『あるエージェントが、別のエージェントにクイックコネクトで転送するときに』
  • 『あるエージェント』が体験するフロー
  • 『ユーザーへのクイックコネクトの設定』としてセットできる

日本でテストするときの注意

現状、コンタクトセンターの電話番号は米国のみしか取得できない。
そのため、日本からかけると国際電話になってしまい、色々面倒。
また、コールバックなどでコンタクトセンターから発信できる番号も 基本的には米国ナンバーにしか対応してない。
そのため、コンタクトセンターへ発信をする際や、着信を受ける際に、工夫が必要。

発信はSkypeを使う

  • 米国トールフリーの番号へ無料で通話できる(クレジットも不要)
    • もし、個別の日本の電話番号を取得していると駄目かも
  • コンタクトセンターの電話番号をトールフリーで取り、Skypeを使えば、料金をAWSに寄せられる

着信はTalkatoneを使う

  • 米国電話番号を取得でき、かつ着信については無料で使える
  • デスクフォンなどの電話番号として使える

Pollyで日本語を朗読させる方法

  • コンタクトフローでSet Voice→Mizuki
  • Lambdaで日本語メッセージを構築し、Pollyに喋らせる
    • Python2.7で確認する限りでは、Lambdaで日本語を返してから、変数($.External.{dict-key})を利用すればOK
      • 型は、str/unicodeどちらもOKだった

ハマりどころ

  • 海外サイトのためなのか、ともかく電話が安定しない。通話まで行けば問題ないが、接続完了になるまでに結構失敗する。
    • どうも、Whisperでしゃべる内容をあまりに盛りだくさんにすると、接続しづらくなる模様。Whisperさせるテキストはエージェント側・カスタマー側双方少なくした方がよいのかもしれない。
  • Pollyはちゃんと読んでくれない部分も多い。SSMLで回避する。
  • コンタクトフローにおけるSaveとPublishの違いを意識する。画面上は、Publish済のフローが優先で表示されるので注意。
    • 間違えて、PublishフローをSaveして、未Publishの更新分を上書いてしまわないように注意する。
  • 画面が重く、フローが増えるほど重くなる。フローはコンパクトにとどめて、同じ種類のコンタクトフローに遷移できるTransfer to Flowを使うよう心がける。
  • Set queueでキューを動的指定する場合、名前ではなく、ARNを指定する必要がある 。
    • キューARNは、キューedit画面のURLに含まれるクエリパラメータで確認できる
  • Screen Pop機能については、利用しても現時点ではCCP上には表示されない。(APIで取得して勝手に表示させることはできる)
  • 入力の暗号化がよくわからない。ドキュメントも薄く、暗号化も復号化も非常にわかりづらい。
    • 暗号化を行うには、公開鍵をインスタンスへ登録した上で、かつx509証明書を作成し、コンタクトフロー上で証明書をコピペする必要がある。
    • この暗号は、AWS Encryption SDKと登録した公開鍵で行われる模様
    • 復号する場合、AWS Encryption SDKと秘密鍵を用いて自力復号が必要な模様
    • 暗号化された文書は、Base64でエンコードされて変数として保存されている。
    • Base64をデコードした暗号文を、AWS Encryption SDK in Pythonで設定をあれこれ変えて復号を試みたものの上手くいかなかった。

感想

  • 電話番号などのインフラを即準備できてありがたい
  • Pollyによる朗読便利
  • 営業時間は便利だけど、もう少しお利口さん(祝日とか設定したい)だと嬉しい
    • Lambdaなどで現状でもやれなくは無いが…
  • 入力の暗号と復号がちょっと面倒(まだ上手く復号できない)ドキュメントが充実したら再チャレンジしたい
  • ボイスメール(留守番電話)が欲しい
    • カスタマーの質問を録音しておき、後で返す的なことはAmazon Connect単体ではできない
    • 外部番号に転送したりはできるので、外部留守番電話サービスに転送すれば一応可能

西田 信輝
クラウド技術検証や業務改善アプリ開発を行うソフトウェアエンジニア
2016年より、AWS関連の業務に従事
AWS Certified DevOps Professional取得
お問い合わせ:business-on-it@ctc-g.co.jp

 

Pocket

コメント