音声通話における番号ブロック機能の実装方法
時折、コンタクトセンターのエージェントは、迷惑なスパム発信者や、単に話したいだけの孤独な個人から電話を受けることがあります。相手が誰であれ、それは業務の妨げとなり、エージェントの貴重な時間を奪ってしまいます。では、こうした厄介な妨害にはどのように対処すればよいのでしょうか?その答えは「番号ブロック」です。
Bright Patternコンタクトセンターソフトウェアは、高度にカスタマイズ可能な環境を提供しており、さまざまな機能や設定を実装することができます。しかし、どこから手をつければよいか分からないという方もいらっしゃるかもしれません。このガイドでは、音声通話における発信者番号ブロックを設定するいくつかの方法のうち、その一つをご紹介します。
仕組み
非常に簡単に説明すると、エージェントがブロックしたい電話を受けた場合、コールを終了し、ディスポジションで「番号をブロック」を選択して、「完了」ボタンをクリックするだけです。
このディスポジションが送信されると、ワークフローがトリガーされ、ブロックリスト内にエントリが作成されます。その後、このリストはインバウンド音声シナリオによって参照され、その番号への着信をエージェントに接続するか、切断するか(その番号を「ブロック」するか)が決定されます。

要件
設定に取り掛かる前に、これを機能させるために必要なものが2つあります。APIを呼び出すためのAPIシークレットと、リストのフォーマット設定に使用する.CSVファイルです。
APIシークレット
APIシークレットプロパティは、Contact Center Administrator アプリケーションの[Users & Teams] > [Users]セクションで、適切なAPI権限を持つユーザーからアクセスできます。「Generate」をクリックするだけで、APIシークレットが発行されます。

CSVファイル
.CSVファイルについては、2つのフィールドが記入されていることをご確認ください。1つは電話番号用、もう1つはブロック状態用で、trueまたはfalseのいずれかを指定します。

設定
この設定は、より高いレベルで簡単に実装でき、以下の4つのエリアのみで動作します:リスト、ディスポジション、ワークフロー、およびシナリオです。
リストの作成
このリストには、ブロックする電話番号が保存されます。「コンタクトセンター管理者」アプリケーションの「リスト」セクションで、先ほど作成した.CSVファイルをアップロードしてリストを作成してください。
リストインポートウィザードを進めていく際、設定が必要な主な項目は以下の通りです:
- 「フォーマットタイプ」タブで、「最初の行にフィールド名を含む」チェックボックスにチェックを入れます。
- 「フィールド」タブで、「電話番号(Phone Number)」と「ブロック済み(Blocked)」の両方のフィールドを必須項目かつ検索可能に設定します。
- 「キー」タブで、「電話番号(Phone Number)」フィールドを一意の識別子として設定します。
サービス&キャンペーンの設定 - ディスポジション
リストの作成が完了したら、それを任意のインバウンド音声サービスに紐付けます。このサービスは、インバウンドコールを担当するチームに割り当てておく必要があります。
選択したサービス内で、「プロパティ」タブに移動し、「ディスポジションを使用する」チェックボックスにチェックを入れます。
次に、「ディスポジション」タブで、目的のカテゴリーに新規のインバウンドディスポジションを追加し、「番号をブロック」という名前を付けます。これにより、エージェントが番号をブロックできるようになります。
ワークフローの構築
ディスポジションを用意することは、エージェントが操作できる仕組みを提供するという点で有用ですが、ワークフローが紐付けられていない限り、実際のアクションは何も実行されません。
まず、Contact Center Administrator アプリケーションの「ワークフロー」セクションで新規ワークフローを作成します。「+」ボタンをクリックすると、ワークフロービルダーアプリケーションが開きます。
ワークフロービルダーでは、他のAPIを呼び出すためのアクセストークンを取得するブロックを追加し、その電話番号がブロックリストにすでに存在するかどうかを確認します。電話番号のエントリが存在する場合は、そのエントリのブロック状態を「true」に更新し、存在しない場合は新しい番号を新規のリストエントリとして追加します。
ワークフローは、次のように構成します:
- アクセストークンを取得する「Fetch URL」ブロック
- レコードを照会する「Fetch URL」ブロック
- このブロックの「No data」条件分岐の出口に、レコードを更新する「Fetch URL」ブロックを追加します。ここでは「Blocked」フィールドの値をfalseからtrueに変更します。
- レコードを追加する「Fetch URL」ブロック
- 「Exit」ブロック
メモ:Fetch URLブロックの具体的な設定については、「Fetch URL ブロックの例」のセクションをご覧ください。

ワークフローが完了したら保存し、その後、ワークフローエントリのプロパティで「番号をブロック」ディスポジションをトリガーとして追加します。これで、エージェントが「番号をブロック」ディスポジションを提示すると、このワークフローが自動的に実行されます。

シナリオの構築
ここまでで、望ましくない電話番号をブロックリストに登録する機能を実装しましたが、このリスト自体は実際にはどの番号もブロックしません。それは、ブロックしたいインバウンドコールを処理するためのシナリオを別途作成する必要があるためです。
ワークフローを作成したときと同様に、Contact Center Administrator アプリケーションの[シナリオ] > [音声]セクションに移動し、新規のシナリオを作成します。シナリオビルダーアプリケーションでは、アクセストークンを取得するブロックを追加し、次に電話番号がブロックリストに存在するかどうかを確認します。エントリが存在する場合、ブロック状態が「true」か「false」かをチェックします。「true」の場合はシナリオを終了し、そうでない場合は処理を継続します。
シナリオは次のように構成します:
- アクセストークンを取得する「Fetch URL」ブロック
- レコードを照会する「Fetch URL」ブロック
- 真の分岐を持つ「If」ブロック(条件は以下の通りです):
- シナリオ変数(文字列)
- jsdata.__data__.entry.blocked
- is =
- true
- (注:「jsdata」は、前の「Fetch URL」ブロックの結果を含むシナリオ変数です。)
- 真の分岐には以下が含まれます:
- 発信者に対し、かけた番号がもはや存在しないことを通知する「Play Prompt」ブロック。
- 「Exit」ブロック。
注:Fetch URLブロックの具体的な設定については、「Fetch URL ブロックの例」のセクションをご参照ください。

保存後、この番号ブロックシナリオは、以下の例に示すように、インバウンドコールを処理するメインシナリオから呼び出すことができます。具体的には、「別のシナリオを開始」ブロックを使用して、番号ブロックシナリオをトリガーします。発信者の番号がブロックされていない場合、通話はメインシナリオに戻り、エージェントに接続されます。

ブロック解除
番号のブロックと同様に、ブロック解除の実装方法も多数あります。この例では、SMSを通じてブロック解除を行う方法を紹介しています。エージェントまたはスーパーバイザーが、専用の番号に「UNBLOCK」という単語をメッセージとして送信することで、ブロック解除が行われます。
シナリオはこの単語を検知し、ブロック解除をリクエストした電話番号が、権限を持つエージェントまたはスーパーバイザーの電話番号と一致するかどうかを確認します。番号が有効な場合、ブロック解除対象となる電話番号を尋ねるメッセージを送信します。電話番号を受け取ると、その番号が紐付けられたエントリを取得し、ブロック状態を「false」に更新します。

これを行うには、次のような新規チャットシナリオを作成します:
- 変数item.messageが文字列「UNBLOCK」と一致するかどうかを確認する「If」ブロック。

- ブロック解除対象の電話番号を尋ねる「Request」入力ブロック
- アクセストークンを取得する「Fetch URL」ブロック
- レコードを照会する「Fetch URL」ブロック
- レコードを更新する「Fetch URL」ブロック
- 番号がブロック解除されたことを確認する「Send Message+」ブロック

設定が完了したら、このシナリオをインバウンドチャットを処理するサービスに割り当ててください。その際、サービスの「プロパティ」タブで、専用番号を「アウトバウンドチャットアカウント」として設定してください。
カスタマイズ
このチュートリアルでは、音声通話向けの番号ブロック機能の基本的な実装例をご紹介していますが、コンタクトセンターのニーズに合わせてカスタマイズすることが可能です。カスタマイズ例としては、タイムアウトの設定、特定のエージェントに対するブロック機能の適用、SMSへのブロック機能の実装などが挙げられます。
Fetch URL ブロックの例
ワークフローとシナリオの両方で使用される「Fetch URL」ブロックは、Bright Pattern List Management API のメソッドを使用しています。以下の例は、各ブロックにおけるメソッドリクエストの構成方法を示しています。

アクセストークンの取得
List Management API のすべてのメソッドが正常に動作するためには、有効なアクセストークンを含める必要がある点にご注意ください。
- タイトルテキスト:<任意のテキスト>
- リクエストタイプ:POST
- 取得するURL:https://<tenant_URL>/configapi/v2/oauth/token
- コンテンツタイプ:application/x-www-form-urlencoded
- フォームパラメータ:
- client_id:<username>
- client_secret:<client_secret>
- grant_type:<client_credentials>
- scope:<contact_center_URL>
- シナリオ変数:<任意のテキスト>

レコードの追加
- タイトルテキスト:<任意のテキスト>
- リクエストタイプ:POST
- 取得するURL:https://<tenant_URL>/configapi/v2/callinglist/add/:list_name
- 追加ヘッダー:
- Authorization: Bearer $(<scenario_variable>.access_token)
- コンテンツタイプ:application/json
- 本文:{"<list_phone_field_name>": "$(item.customerPhone)", "Blocked": "true"}

レコードの照会
- タイトルテキスト:<任意のテキスト>
- リクエストタイプ:POST
- 取得するURL:https://<tenant_URL>/configapi/v2/callinglist/get/:list_name/:campaignname
- 追加ヘッダー:
- Authorization: Bearer $(<scenario_variable>.access_token)
- コンテンツタイプ:application/json
- 本文:{"<list_phone_field_name>": "$(item.customerPhone)"}
- データをループ処理するには、GetNextブロックの使用を確認してください

レコードの更新
- タイトルテキスト:<任意のテキスト>
- リクエストタイプ:POST
- 取得するURL:https://<tenant_URL>/configapi/v2/callinglist/get/:list_name/:campaignname
- 追加ヘッダー:
- Authorization: Bearer $(<scenario_variable>.access_token)
- コンテンツタイプ:application/json
- 本文:{"<list_phone_field_name>": "$(item.message)", "Blocked": "false"}
- データをループ処理するには、GetNextブロックの使用を確認してください
