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

2022.12.17

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

こんにちは、中川です。

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

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のイベントをトリガーにした処理をプログラミング不要で実装できます。コンタクトセンターごとの細かいニーズに対応できる機能となってますので、是非活用ください。

参考