ServiceNow

コンタクト センター AI プラットフォーム(CCAI プラットフォーム)は、ServiceNow CRM との統合を提供します。

ServiceNow デベロッパー設定

推奨される ServiceNow の最小バージョン要件: Tokyo patch 1

基本認証ユーザーを設定する

ServiceNow 管理者アカウントで 2 段階認証プロセスが有効になっており、そのユーザーに関連付けられている可能性があります。そのため、CCAI Platform で管理者権限を取得するために使用することはできません。この目的で ServiceNow にユーザー アカウントを作成する必要があります。

認証情報を使用して基本ユーザーを作成します。

  1. [User] > [New] に移動します。

  2. 詳細を入力し、[Web service access only] を選択します。

  3. ユーザー ID とパスワードをメモしておきます。

ServiceNow で必要なロール

ServiceNow のデフォルト ロールは、プラットフォーム内で特定のアクセスと権限を提供するように事前構成されています。管理者は、特定の権限を付与するロールを作成して構成できます。このロールは、そのロールを持つユーザーとグループが実行できる操作を制御します。

この統合を行うには、ServiceNow で次のロールが必要です。

  • user_admin: このロールは、ServiceNow インスタンス内のユーザー、グループ、ロケーション、会社を管理する必要がある管理者を対象としています。

  • sn_incident_read: このロールは、インシデント管理アプリケーションとその関連機能に対する読み取り専用アクセス権を付与します。ユーザーはインシデント レコードを表示できます。

  • sn_incident_write: このロールは、インシデント管理アプリケーションとその関連機能への書き込みアクセス権を付与し、ユーザーがインシデント レコードを作成および変更できるようにします。

  • personalize_dictionary: このロールを使用すると、特定のビジネス要件に合わせて辞書のエントリとラベルをカスタマイズできます。

  • function_field_admin: このロールは、レポート デザイナー内で関数フィールドの作成、編集、表示を行う必要があるユーザーを対象としています。プラットフォーム リストまたはフォームから関数フィールドを作成または削除する機能は提供されません。

インスタンス ビューを構成する

以降のセクションでは、インスタンス ビューに必要な構成の変更について説明します。

(省略可)お気に入りを追加する

お気に入りは、ServiceNow インスタンス内で最もよく使用するリンクをすばやく見つける方法です。お気に入りを追加するには、ナビゲーション パネルのフィールドの横にあるスターアイコンを選択します。後でナビゲータ パネルをフィルタして、お気に入りのみを表示する場合は、ナビゲータ パネルのフィルタ ナビゲータ フィールドのすぐ下にある星アイコンを選択します。

便利な「お気に入り」の例:

  • インシデント: カスタム CRM のレコードへの関連付け。
  • ユーザー: カスタム CRM のアカウントとの関連付け。
  • Rest API Explorer: API をテストするのに適した方法です。

カスタム フィールドを手動で追加する

変更するオブジェクト ビューの左上にある展開アイコン(3 本の横線)を選択します。この操作は、[セルフサービス ビュー] または [デフォルト ビュー] で行うことができます。

  1. メニューで [Configure] > [Form Design] を選択して、フォーム デザイナーを開きます。

  2. 左側の列で [Field Types] タブを選択します。

  3. 追加するカスタム フィールドのタイプをドラッグします。

  4. フィールド タイプを目的のセクションにドロップしたら、歯車アイコンを選択して [設定] を表示します。

  5. ウィンドウ内でラベルを変更し、名前をメモします。この名前は、CCAI Platform アプリの設定で使用します。

  6. 画面の右上にある [保存] を選択します。

セッション データを CRM にマッピングする

Dialogflow を使用して CCAIP から適切なセッション データをマッピングし、次のパラメータを使用する必要があります。

仮想エージェントのデータ

{
  "ujet": {
    "session_variable": {
      "capture_target": "payload",
      "payload": {
        "value_one": "$session.params.payload_value_one"
      };
      "capture_type": [ "comment", "field" ] // optional, default of ["comment"]
    }
  }
}

メタデータ

https://INSTANCE.service-now.com/api/now/table/sys_dictionary?sysparm_query=name%3Dsys_user https://INSTANCE.service-now.com/api/now/table/sys_dictionary?sysparm_query=name%3Dincident

ラベル: column_label

API キー: element

カスタム フィールドは、sys_user または incident のレスポンスの標準フィールドと同じレベルにあります。

CCAI プラットフォームから CRM にファイルをアップロードする

https://INSTANCE_URL.service-now.com/api/now/attachment/upload

メソッド: POST

リクエスト データ形式: property

レスポンス データの場所: data.result

タイプ: Multi-part form

添付ファイルのタイプ: Attachment Url

添付ファイルの URL: download_link

パラメータ: table below

リクエストの例:

{
    file: FILE_DATA,
    table_name: incident,
    table_sys_id: RECORD_ID
}

エージェント アダプタを統合する(カスタムフォーム)

次の手順では、ServiceNow インスタンスでエージェント アダプタと [クリックして通話] 機能を有効にするプロセスについて説明します。

OpenFrame をインストールして構成する

  1. [All] > [System Applications] > [All Available Applications] > [All] に移動します。

  2. OpenFrame を検索します。

  3. OpenFrame をインストールします。

  4. インストールが完了したら、[すべて > OpenFrame > 構成] に移動します。

  5. URL を使用して構成を作成します。Servicenow インスタンス内に複数の構成がある場合、ユーザーが新しく作成された構成にアクセスできないことがあります。グループと OpenFrame 構成オーダーのリストを確認して、ユーザーが使用している構成を特定します。

  6. 検索に sys_properties.list と入力します。

  7. glide.ui.concourse.onmessage_enforce_same_origin_whitelist を編集します。

  8. 新しい URL を値のリストに追加します。

  9. sn_openframe.cross.origin.access を編集します。

  10. 値のリストに autoplay を追加します。

ユーザー向けに次世代 UI エクスペリエンスを有効にする

  1. ナビゲーション バーに「sys_properties.list」と入力し、Enter キーを押します。

  2. システム プロパティ glide.ui.polaris.experiencetrue に設定します。

  3. システムのユーザー設定 glide.ui.polaris.usefalse に設定します。

  4. ユーザーのユーザー設定 glide.ui.polaris.usetrue に設定します。(ユーザー設定の行を作成できます)。

システム プロパティを更新する

  1. ナビゲーション バーに「sys_properties.list」と入力して、Enter キーを押します。

  2. glide.ui.concourse.onmessage_enforce_same_origin_whitelist を編集します。

  3. URL を値のリストに追加します。複数の値を指定する場合は、カンマで区切る必要があります。

  4. sn_openframe.cross.origin.access を編集します。

  5. 値のリストに自動再生を追加します。

  6. glide.ui.polaris.experience を編集します。

  7. 有効にすると一部の機能が動作しないため、false に変更します。

フォームの上部に Click-to-Call を追加する

  1. [System UI] > [UI Actions] に移動します。

  2. [Create New Action] を選択します。

  3. 図に示すフォームで、このクリック トゥ コールが属するテーブルを選択します。

  4. 連絡先またはユーザーを参照するフォームの場合、g_form.getReference API を使用してユーザーの電話番号にアクセスします。カスタム テーブルの場合、参照 ID と結果の属性が異なることがあります。CCAI プラットフォームとの通信は同じであるため、ペイロードとデータ構造は次のものと同一である必要があります。

    function clickToDial() {
      var user = g_form.getReference('caller_id',function(res) {
        var phone = res.phone || res.mobile_phone;
        var payload = {"name": "clicktodial", "number": phone}; 
        var data = {"payload": payload, "method": "openframe_communication" }; 
        CustomEvent.fireAll("openframe_request", data);
      });
    }
    
  5. フォーム内に電話番号が含まれているフォームの場合は、g_form.getValue API を使用して関連する値を取得します。これは、Users テーブルの UI アクションの例です。カスタム テーブルの場合、フォーム フィールドの名前が異なることがあります。CCAI プラットフォームとの通信は同じであるため、ペイロードとデータ構造は次のものと同一のままにする必要があります。

    function clickToDial() {
      var phone = g_form.getValue('phone') || g_form.getValue('mobile_phone');
      var payload = {"name": "clicktodial", "number": phone}; 
      var context = {"payload": payload, "method" : "openframe_communication" }; 
      CustomEvent.fireAll("openframe_request", context);
    }
    

参照の横に Click-to-Call を追加

  1. 連絡先への参照の横にある通話ボタンは、フォーム内で編集する必要があります。フィールドを右クリックして、[Configure Dictionary] に移動します。属性の場合は、ref_contributions 値に show_phone または show_phone_customer_service のいずれかの値を追加します。

  2. UI マクロで、show_phoneshow_phone_customer_service を編集します。

  3. 次のように置き換えます。

変更前:

var task =    {"entity": p.attr('data-task-table'), "query" :"sys_id="+p.attr('data-task-id')+"$[AMP]sysparm_view="+p.attr('data-task-view'),"value":p.attr('data-task-value'),"label":p.attr('data-task-label')};
                                        var company = {"entity": p.attr('data-company-table'),"query":"sys_id="+p.attr('data-company-id')+"$[AMP]sysparm_view="+p.attr('data-task-view'),"value":p.attr('data-company-value'),"label":p.attr('data-company-label')};
                                        var caller = {"entity": p.attr('data-caller-table'),"query": "sys_id="+p.attr('data-caller-id')+"$[AMP]sysparm_view="+p.attr('data-task-view'),"value":p.attr('data-caller-value'),"label":p.attr('data-caller-label')};
                                        
                                        var callContext = [];
                                        callContext.push(task);
                                        callContext.push(company);
                                        callContext.push(caller);
                
                                        var metaData = {"phoneNumber":p.attr('data-caller-phone'),"taskId":p.attr('data-task-id')};
                                        
                                        var data =    {"metaData":metaData , "data": callContext};
                                        var payload = {"type": "OUTGOING_CALL", "data" : data};
                                        var createInteractionData ={};
                                        createInteractionData.interactionSysId = -1;
                                        createInteractionData.direction = 'outbound';
                                        createInteractionData.context_document = p.attr('data-task-id');
                                        createInteractionData.context_table = p.attr('data-task-table');
                                        createInteractionData.account = p.attr('data-company-id');
                                        if(p.attr('data-caller-table') === 'customer_contact')
                                                createInteractionData.contact = p.attr('data-caller-id');
                                        createInteractionData.opened_for = p.attr('data-caller-id');
        
                                        var ga = new GlideAjax('sn_openframe.OpenFrameAjaxUtility');
                                        ga.addParam('sysparm_name', 'createInteractionWithPropertyCheck');
                                        ga.addParam('context', JSON.stringify(createInteractionData));
                                        ga.getXML(function(serverResponse) {
                                                var result = serverResponse.responseXML.getElementsByTagName("result");
                                                var output = JSON.parse(result[0].getAttribute("data"));
                                                if(output.status == "success"){
                                                        var interaction = {"entity": "interaction", "query" :"sys_id="+output.fields.interactionSysId, "value":output.fields.number, "label":"Interaction", "display":false};
                                                        payload.data.data.push(interaction);
                                                }
                                                var context = {"payload": payload, "method" : "openframe_communication" };
                                                jslog("context with interaction : "+ JSON.stringify(context));
                                                CustomEvent.fireAll("openframe_request", context);
                                        });

新規:

var phone = p.attr('data-caller-phone')
                   var payload = {"name": "clicktodial", "number": phone}; 
                   var data = {"payload": payload, "method": "openframe_communication" }; 
                   CustomEvent.fireAll("openframe_request", data);

CRM の設定

次の手順では、CCAI Platform ポータルを使用して API を ServiceNow に接続する方法について説明します。

  1. CCAI Platform ポータルで、[設定] > [デベロッパー設定] > [CRM] に移動します。

  2. [エージェント プラットフォーム] セクションで、[ServiceNow] を選択します。

  3. [ServiceNow Domain] フィールドに ServiceNow ドメイン情報を入力します。これは必要に応じてデベロッパー インスタンスまたはベンダー インスタンスになりますが、インスタンスに直接関連付けられており、ServiceNow ポータル ウェブアドレスの URL の最初の部分(https://{your instance}.servicenow.com)になります。

  4. [ServiceNow Cloud Selection] フィールドで、基本的なチケット タイプとして Incident を選択します。Custom を選択すると、追加のオプションが表示されます。インシデントはタスク テーブルの拡張機能です。カスタム オブジェクトはインシデントの拡張機能である必要があります。

  5. [Authentication Credentials] フィールドに、ユーザー名とパスワードを入力します。

  6. [Cloud Selection Field] のタイプとして Incident を選択した場合、次のフィールドが表示されます。

    • Lookup Account Object には、Object TypePhone Number lookup fieldsPhone number primary field の 3 つのプルダウン フィールドが含まれています。
  7. [Cloud Selection Field] のタイプとして Custom を選択した場合、次のフィールドが表示されます。

    • Lookup Record Object(レコード オブジェクトの検索):
      • ベース レコード オブジェクト タイプ: task または incident のテーブルタイプを選択します。
      • レコード オブジェクト タイプ: インシデント テーブルが拡張されている場合、このフィールドにデータが入力されます。必要に応じて選択できます。
    • Lookup Account Object には、Object TypePhone Number lookup fieldsPhone number primary field の 3 つのプルダウン フィールドが含まれています。
  8. カスタム ユーザー ID フィールド: モバイルまたはウェブ SDK セッションのカスタム ユーザー検索フィールドを有効にする場合は、このチェックボックスをオンにします。

  9. 電話番号の形式: 電話番号の表示に使用する形式を選択できます。

  10. セッション メタデータ ファイル: このチェックボックスをオンにすると、セッション メタデータが CRM レコードに添付されます。

  11. [保存] をクリックして、選択内容を保存します。[カスタム ユーザー ID フィールド] チェックボックスをオンにすると、レコードのカスタム フィールドを作成するオプションが表示されます。これにより、各 ServiceNow インシデントの下部にある [解決コード] セクションと [解決メモ] セクションの下に、カスタム フィールドのタブが追加されます。

レコードのカスタム フィールド

これらは、フォーム デザイナーで ServiceNow インスタンス用にすでに作成されているカスタム フィールドです。他のカスタム フィールドの作成方法については、ServiceNow のドキュメントの ServiceNow CRM の設定のセクション カスタム フィールドを手動で追加するをご覧ください。

フィールド タイプ 定義
u_ujet_custom_field_after_call_work 文字列 通話後の作業時間
u_ujet_custom_field_call_duration 文字列 通話時間
u_ujet_custom_field_comm_id Integer 連絡先の種類に応じた通話またはチャットの ID
u_ujet_custom_field_rating Integer CSAT スコア
u_ujet_custom_field_email_via_web 文字列 ウェブから送信されたメール
u_ujet_custom_field_feedback 文字列 フィードバック
u_ujet_custom_field_from_phone_number 文字列 発信者の電話番号
u_ujet_custom_field_hold_duration 文字列 合計保留時間
u_ujet_custom_field_menu_path 文字列 メニュー選択
u_ujet_custom_field_queue_name 文字列 キューの名前
u_ujet_custom_field_session_type 文字列 セッション タイプ
u_ujet_custom_field_verification 正しい / 誤り 確認が完了したことを確認する
u_ujet_custom_field_wait_time 文字列 合計待機時間

OAuth を設定する

OAuth を構成するには、ServiceNow で OAuth アプリケーションを作成する手順を行います。次に、[Developer Settings > CRM > Authentication Method] で認証情報(OAuth クライアント ID と OAuth クライアント シークレット)を入力します。

Service Now で OAuth アプリケーションを作成する

  1. ServiceNow アカウントで、[All] > [System OAuth] > [Application Registry] に移動します。

  2. OAuth アプリケーションを作成し、[Create an OAuth API endpoint for external clients] を選択します。

  3. 次のフィールドを構成します。

    • 名前: 一意の名前を入力します。

    • クライアント ID: クライアント ID は ServiceNow OAuth サーバーによって自動的に生成されます。

    • クライアント シークレット: OAuth アプリケーションのクライアント シークレットです。自動生成する場合は空欄のままにします。

    • リフレッシュ トークンの有効期間: リフレッシュ トークンが有効になる時間(秒単位)。

    • アクセス トークンの有効期間: アクセス トークンが有効な時間(秒単位)。

    • Redirect URL: 環境 URL とサブディレクトリを入力します。例: https://servicenow.yourcompany.co/v1/servicenow/oauth_callback

    • Enforce Token Restriction: アクセス トークンの使用を、ServiceNow ドキュメントに記載されている REST API アクセス ポリシーで定義されている API に制限します。このオプションの選択を解除すると、他の REST API でアクセス トークンを使用できるようになります。

  4. [送信] をクリックします。

  5. アプリケーションを作成したら、レコードに戻り、クライアント ID と新しく作成されたクライアント シークレットを取得します。

デベロッパー設定で設定を更新する

  1. [Developer Settings] > [CRM] に移動します。

  2. 設定が入力され、前の手順に沿って構成されていることを確認します。

  3. 認証方法で [OAuth] をクリックします。

  4. OAuth クライアント ID と OAuth クライアント シークレットを入力します。(上記の手順 5 を参照)。

  5. [保存] をクリックします。

  6. [link credentials] をクリックします。

Virtual Agent のカスタム フィールド マッピング

Virtual Agent を使用している場合は、[Custom Field Mappings] 画面でこのフィールドを構成します。これにより、バーチャル エージェントの変数をバーチャル エージェント セッションのペイロードから ServiceNow に転送できます。変数名には任意の文字列を使用できます。ここに記載されているフィールド ラベルは一例です。

[Custom Field Mappings] 画面で、最初のバーチャル エージェントの構成で使用したペイロード定義によって作成された変数と、ServiceNow 内の関連する変数との間の接続を構成します。

フィールド マッピングのタイトル CRM フィールド ラベル カスタムデータ フィールドのラベル
仮想エージェントのフィードバック ccaip_custom_field_incident_feedback va_feedback

その他の設定を構成する

CCAI Platform を ServiceNow インスタンスに適切に統合するためのその他の設定は、[設定] プルダウン メニューにあります。各セクションの設定の詳細については、次のリストのリンクを参照してください。

テスト出力

CCAI Platform ポータルの画面上部にある該当するボタンをクリックして、通話フローとチャットフローの機能を確認できるようになりました。このテストを実行する際は、ポップアップ ブロッカーが無効になっていることを確認してください。

ServiceNowインシデントが作成され、通話またはチャットの連絡先がインシデントの [アクティビティ] セクションに表示されます。この情報はインシデントのコメントではなく、作業メモとして表示されるようにする必要があります。これにより、このバックエンド アクティビティはお客様に表示されなくなります。

ケースの説明には「Call using CCAI Platform」または「Chat using CCAI Platform」が自動的に入力されますが、エージェントが更新する必要がある場合があります。

通話またはチャットの結果に満足したら、解決コードとメモを入力(ServiceNow の解決コードとメモのフィールドが構成されている場合)して、ケースを閉じます。

ケースがクローズされたことを確認するには、ブラウザの back ナビゲーション ボタンをクリックする必要がある場合があります。ServiceNow インスタンスでは、ケースを解決すると自動的にクローズされ、顧客レコード ページに移動するのが想定される動作です。