Amazon Connect CTI Adapter for SalesforceでCTI Flowを使ってみた – Amazon Connect アドベントカレンダー 2022

Amazon Connect CTI Adapter for SalesforceでCTI Flowを使ってみた – Amazon Connect アドベントカレンダー 2022

Clock Icon2022.12.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、中川です。

Amazon Connect アドベントカレンダー 2022、17 日目の記事です!
Amazon Connect アドベントカレンダー 2022 はクラスメソッドとギークフィードさんの有志が募ってチャレンジしている企画になります。

https://qiita.com/advent-calendar/2022/amazon-connect

Amazon Connect CTI Adapter for Salesforce(以降 CTI Adapter)は Amazon Connect を Salesforce に統合するパッケージです。Salesforce 上に CCP を埋め込み、Salesforce 上の情報や機能と連携して Amazon Connect を利用できるようになります。

本ブログでは CTI Adapter の機能である CTI Flow について紹介します。

CTI Flowとは

CTI Flow は、着信時や発信時に発生するイベントに合わせて Salesforce の機能や Amazon Connect API を動作させる処理フローです。
CTI Flow を使用することで「顧客から電話がかかってきたときに Salesforce から顧客情報をポップアップ表示」や「自動で Salesforce のケースを作成する」といった実装ができるようになります。
フローはサービスコンソール上でブロックを組み合わせたり、Json ファイルを直接編集してインポートすることで作成できます。

CTI Flow の例

イベント

CTI Flow ではトリガーとするイベントを設定します。

イベントは音声通話やエージェントといったソース種別ごとに用意されています。各イベントごとにフローを設定できますが、そのイベントで有効にできるフローは一つまでなので注意が必要です。(例:ソース「Amazon Connect Voice Contacat」のイベント「onConnecting」をトリガーとするフローを複数作成できない)

ソースごとにどのイベントがサポートされているかは以下のドキュメントから確認します。

Appendix C: CTI Flow Sources and Events

ブロック

代表的なブロックをいくつか紹介します。

開始 / 終了

フローの最初と最後に設定するブロックです。必ず使用します。

コンソールにログを記録する

手前のブロックの結果を出力するブロックです。失敗時の分岐先などに配置し、特定の結果を開発モードのコンソールに出力してエラー調査等で使用します。

コンタクトのプロパティを取得

Amazon Connect のコンタクト情報を取得するブロックです。発信者の電話番号やコンタクト ID をこのブロックで取得して、後続のブロックで使用します。

このブロックでは以下の戻り値が渡されます。後続のブロックでは、この戻り値を引数として使用できます。

コンタクトのプロパティを取得の戻り値(抜粋)

戻り値名 内容
channel 「音声」または「チャット」
formattedPhoneNumberE164 発信者の電話番号(E164形式)
formattedPhoneNumber 発信者の電話番号
queueTimestamp キューのタイムスタンプ
queueId キュー ID
phone 発信者の電話番号
isInbound 着信通話かどうか
status 「着信中」または「進行中」
country 発信者の国
attributes コンタクトフロー内で定義した属性値
callType 「インバウンド」または「アウトバウンド」
type 「音声」または「チャット」
contactId コンタクト ID
queueName キュー名
isConnected 接続されているかどうか

検索とスクリーンポップ

指定されたオブジェクトから特定の文字列を検索し、検索結果が一致したレコードをポップアップ表示するブロックです。発信元の電話番号をもとに検索することで、Salesforce に登録された顧客情報を特定できます。

検索とスクリーンポップの戻り値

戻り値名 内容
Id レコード ID (ExactMatch が true の場合にのみ使用可能)。
Name レコード名 (ExactMatch が true の場合にのみ使用可能)
RecordType レコードタイプ (ExactMatch が true の場合にのみ使用可能)
ExactMatch 単一の一致かどうか(bool値)
recordCount レスポンスのレコード数(複数の一致があった場合にのみ使用可能)

if-else

条件分岐処理で使用するブロックです。比較する値 2 つと演算子をパラメータを指定します。

レコードの保存 (または作成)

Salesforce のレコードを作成するブロックです。オブジェクト(取引先、ケース、タスクなど)と任意のフィールドを入力して、レコード作成を自動化できます。

ブロックの紹介は以上です。

他のブロックの情報については、以下のドキュメントや実際に CTI Flow のコンソール上から確認します。ドキュメントには最低限の説明しかないため、ブロックのあたりをつける程度にドキュメントは使用し、詳細情報は直接コンソールから確認するといった使い分けをお奨めします。
Appendix F: CTI Flow Blocks

やってみた

受電したときに Salesforce に登録されている番号だった場合に、自動でケースを作成するフローを作ります。ケースには取引先情報と Amazon Connect のコンタクト ID が自動で入力されるようにします。

前提

以下を前提としてしています。

  • CTI Adapter v5 以降が設定されいること
  • オブジェクト「取引先責任者(Contact)」に電話番号が登録されたレコードがあること
  • オブジェクト「ケース(Case)」のフィールドに「Amazon Connect ID(amazonconnect__AC_Contact_Id__c)」が追加されていること

CTI Flowの作成

Salesforce にログインし、サービスコンソール > AC CTI アダプタから登録された CTI Adapter の設定を開きます。

下にスクロールし、タブの[CTI Flow]をクリックします。右上の[新規]をクリックし、新規フローを作成します。

CTI Flow Name、Source、Event を以下の通りそれぞれ入力し、[保存]をクリックします。

項目
CTI Flow Name ケース作成
Source Amazon Connect Voice Contact
Event onConnected

CTI Flow の作成画面が表示されました。

ここからフローを作成していきます。
まず、開始のブロックを配置します。左下のメインメニューから[Start]をドラッグアンドドロップします。

コンタクト情報を取得するため、ブロック「コンタクトのプロパティを取得」を配置します。メインメニューから CTI Block をドラッグアンドドロップします。
ブロックのメニューが表示されます。検索欄に「Contact Properties」と入力するとブロックが見つかるので、[選択]をクリックします。

ブロックが追加されたので、「開始」と「コンタクトのプロパティの取得」をつなげます。

次に発信元の電話番号を検索するために「検索とスクリーンポップアップ」を追加します。先ほどと同じように CTI Bloack を追加し、検索欄に「Search」と入力して選択します。
「コンタクトのプロパティを取得」とつなげ、またブロック「検索とスクリーンポップアップ」をクリックします。

検索とスクリーンポップアップでは、検索対象の電話番号を引数として指定します。

searchParams をクリックすると、接続されたブロックの戻り値をプルダウンから選択できます。ここでは「formattedPhoneNumber」を選択します。

callType には直接「inbound」を入力し、「Add New Value」をクリックします。値が入力されたら[保存]をクリックします。

次に登録された電話番号かどうかの判定する分岐処理を設定します。CTI Block を追加して、検索欄に「If-else」を入力します。ブロック「If-else」を選択し、ブロック「検索とスクリーンポップアップ」の Success とつなげます。

ブロック「if-else」をクリックします。1 件のレコードがあったことを判定したいため、「検索とスクリーンポップアップの戻り値 ExactMatch が true」であることを以下の通り設定します。

  • operatedA で Search And Screenpop の「ExactMatch」を選択
  • comparator で「===」を選択
  • operatedB で「true」を入力して「Add New Value」をクリック
  • evaluateAs で「booleam」を選択

引数を設定したら[保存]をクリックします。

1 件のレコードだったときに、「ケース」オブジェクトのレコードを作成するため、ブロック「スクリーンポップの新しいレコード」を追加します。CTI Block を追加したら検索欄に「NewRecord」といれて選択します。

追加したブロックを「if-else」の Success とつなげます。

ブロック「スクリーンポップの新しいレコード」をクリックして、引数に「Case」を入力します。
※このブロックで他のオブジェクトを作成する場合は、オブジェクトマネージャから API 参照名を確認して入力します。

フィールドの追加をクリックして、Key にオブジェクトのフィールド、value に CTI Flow のブロックで取得する値を以下の通り 2 つ指定します。入力したら[保存]をクリックします。

key(オブジェクトの項目名) value value (例)
amazonconnect__AC_Contact_Id__c $.actions.ブロックID.results.contactId $.actions.uid-10.results.contactId
ContactId $.actions.ブロックID.results.Id $.actions.uid-12.results.Id

フィールドで追加する value について補足します。
value をクリックしたときに、これまでのように繋がったブロックの戻り値がプルダウンで表示されないため、値を直接入力する必要があります。

値のフォーマット$.actions.ブロックID.results.戻り値名 です。ブロック ID はブロックにカーソルを合わせたり、ブロックの詳細メニューに表示されているので確認します。

戻り値名はブロックの説明欄から確認したり、実際に CTI Flow を動かしたときのコンソールログから確認できます。以下はコンソールログからブロック「コンタクトのプロパティを取得」を抜粋した内容です。

追加したブロックで処理が失敗したときにログを表示するため、ブロック「コンソールにログを記録する」を追加します。CTI Block を追加して、検索欄に「Console」と入力して選択します。追加されたブロックを各ブロックの failure とつなげます。

ブロック「コンソールにログを記録する」をクリックし、ログレベル(info/warn/error/debug)と message を指定します。message では静的な値またはブロックの戻り値して動的に出力できます。ここで直接「Error Value」と入力してしまいます。

さいごにメインメニューからブロック「End」を追加し、「スクリーンポップの新しいレコード」と「コンソールログを記録する」の Success とつなげます。メインメニューの[保存]をクリックしたら、CTI Flow の作成は完了です。

動作確認

電話をかけます。CCP に立ち上がりましたので、[通話を受電]をクリックします。

ケースの作成画面がポップアップされました。取引先責任者と Amazon Connect Contact Id が入力されていることを確認できます。そのまま保存をクリックします。

ケースを自動で作成でき、動作を確認できました。

さいごに

Amazon Connect と Salesforce を連携して使用できる CTI Flow を紹介しました。

CTI Flow を使うことで Amazon Connect や Salesforce のイベントをトリガーにした処理をプログラミング不要で実装できます。コンタクトセンターごとの細かいニーズに対応できる機能となってますので、是非活用ください。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.