Webex Contact Center を ServiceNow と統合する (バージョン 1 - レガシー)
前提条件
現在、この機能はエージェントにのみ適用されます。
Webex Contact Center を ServiceNow CRM コンソールと統合する前に、次のものがあることを確認してください。
-
Webex Contact Center へのアクセス
-
https://admin.webex.com の Control Hub および Webex Contact Center 管理ポータルへの管理者アクセス。 管理ポータルの URL は、お使いの地域固有の URL です。
-
デスクトップにアクセスできるエージェント。 デスクトップの URL は地域固有の URL です。
-
コンテンツ セキュリティ ポリシーの許可リストに追加された次のドメインへのエージェント アクセス:
-
*.service-now.com
許可リストを定義する方法の詳細については、記事「 Webex Contact Center のセキュリティ設定」を参照してください。
-
-
ServiceNow の開発ポータルアカウント。 アカウントを作成するには、https://developer.servicenow.com/dev.do にある ServiceNow 開発ポータルに移動し、[サインアップして構築を開始する] をクリックします。
-
https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow にある次のファイルにアクセスできます。
-
ServiceNow 更新セット(XML)
-
ServiceNow Contact Center デスクトップ レイアウト(JSON)
-
- Webex Contact Center がサポートする ServiceNow エディションは、Vancouver、Utah、Tokya、Washington、Xanadu です。 詳細については、 Webex Contact Center ServiceNow との統合を参照してください。
以下の 2 つの方法のいずれかに従ってください。
開発者インスタンスの場合は、開発者インスタンス ガイドの手順に従うことをお勧めします。
エンタープライズ ライセンス インスタンスを所有している場合は、エンタープライズ ライセンス インスタンスのガイドラインに従ってください。
エンタープライズ ライセンス アプリと開発者サンドボックス インスタンスを混在させることはお勧めしません。
次のセクションでは、開発者インスタンス用の ServiceNow コネクタをインストールする手順について説明します。
1 |
ServiceNow 開発者ポータル アカウントにログインし、 管理 コンソールを開きます。 |
2 |
[アカウント] メニューの [マイインスタンス] 領域で、[構築の開始] をクリックします。 |
3 |
開発者インスタンスで、ウィンドウの左上にある フィルター ナビゲータ フィールドから プラグイン に移動します。 |
4 |
Openframeというタイトルの Openframe プラグインを検索します。 リストのスクロールが必要な場合があります。 |
5 |
[インストール] をクリックして、OpenFrame プラグインをインストールします。 |
6 |
[プラグインの有効化] ダイアログボックスで、[有効化] をクリックします。 |
7 |
プラグインのアクティベーションが完了したら、[ プラグインのアクティベーション ] ダイアログボックスで [ 閉じてフォームを再読み込み ] をクリックします。 |
8 |
プラグインのアクティベーションを確認するには、ウィンドウの左上部にある [ナビゲーターのフィルタ処理] フィールドで、[OpenFrame] に移動します。 |
9 |
[設定] をクリックして、OpenFrame プラグインが [OpenFrame設定] リストに表示されていることを確認します。 |
1 |
この場所の github リポジトリで入手可能な最新のシステム アップデート セット XML ファイルをダウンロードします : https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow。 ファイル名: webexcc-servicenow-update-setV(X).XML |
2 |
ServiceNow インスタンスで、ウィンドウの左上にある [フィルター ナビゲータ] フィールドから、 に移動します。 |
3 |
[XML から更新セットをインポート] リンクをクリックします。 |
4 |
[ファイルの選択] をクリックし、System Update Set XML ファイルを選択して、 [アップロード] をクリックします。
更新セットが [取得した更新セット] リストに表示され、[ロード済み] 状態に表示されます。
|
5 |
取得した更新セット リストから、更新セット ファイル名 (リンク) をクリックして更新セットを開きます。 |
6 |
ウィンドウの右上部にある [プレビュー更新セット] をクリックして、問題の更新セットを確認します。 |
7 |
プレビューが完了したら、[更新セットのプレビュー] ダイアログ ボックスで [閉じる] をクリックします。 |
8 |
[更新セットをコミットする] をクリックします。 |
9 |
更新セットのコミットが完了したら、[ 更新セットのコミット ] ダイアログボックスで [ 閉じる ] をクリックします。 |
1 |
ウィンドウの左上にある フィルター ナビゲータ フィールドに「 |
2 |
[システムプロパティ] ページで、更新された日付でプロパティを並べ替えます。 次の Webex Contact Center のプロパティが表示されていることを確認してください。 |
3 |
[agentdesktop_url] をクリックして、[システムプロパティの agentdesktop_url] ページを開きます。 |
4 |
値 フィールドに、運用地域に応じて Webex Contact Center デスクトップの URL を入力します。 |
5 |
[更新(Update)] をクリックして変更を保存します。 |
6 |
(オプション)アクティビティテーブル名を変更するには、必要に応じて webexccactivitytable のプロパティを編集します。 [システム プロパティ] ページで、 [webexccactivitytable] をクリックします。 必要に応じて 値 フィールドを変更します。 |
7 |
(オプション) 次の方法でユーザ グループを追加します。
|
1 |
[ナビゲーターのフィルタ処理] フィールドで、 に移動します。 |
2 |
[新規] をクリックします。 |
3 |
URL に次のプロパティを入力します。
|
4 |
右側には URL フィールドで、 ロック ボタンを押して追加 |
5 |
(オプション) 構成を割り当てるユーザ/エージェント グループを選択します。 |
6 |
[送信(Submit)] をクリックします。 URL がリンクとして表示されます。 |
7 |
OpenFrame フォンを使用する前に、ServiceNow カスタム デスクトップ レイアウト JSON ファイルを Webex Contact Center 管理ポータルにアップロードしてください。 詳細については、 Webex Contact Center の「ServiceNow デスクトップ レイアウトの設定」を参照してください。 |
1 |
ServiceNow のデスクトップ レイアウトを https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow からダウンロードします。 |
2 |
必要に応じて、デスクトップ レイアウト ファイルのプロパティを更新します。 |
3 |
Webex Contact Center 管理ポータルへ移動します。 |
4 |
管理ポータルのナビゲーション バーから、 を選択します。 |
5 |
[新しいレイアウト] をクリックし、デスクトップレイアウトの詳細を入力します。 |
6 |
ServiceNow デスクトップレイアウトの場合は、次のファイルをアップロードします。 |
7 |
[Save] をクリックして、設定を保存します。 ServiceNow コンソール内で Webex Contact Center デスクトップを起動できるようになりました。 |
8 |
フィルター ナビゲータ フィールドから、 に移動します。 |
次のセクションでは、ライセンスされたエンタープライズ インスタンスに ServiceNow コネクタをインストールする手順について説明します。
1 |
ServiceNow 開発者ポータル アカウントにログインし、 管理 コンソールを開きます。 |
2 |
[アカウント] メニューの [マイインスタンス] 領域で、[構築の開始] をクリックします。 |
3 |
開発者インスタンスで、ウィンドウの左上にある フィルター ナビゲータ フィールドから プラグイン に移動します。 |
4 |
Openframeというタイトルの Openframe プラグインを検索します。 リストのスクロールが必要な場合があります。 |
5 |
[インストール] をクリックして、OpenFrame プラグインをインストールします。 |
6 |
[プラグインの有効化] ダイアログボックスで、[有効化] をクリックします。 |
7 |
プラグインのアクティベーションが完了したら、 [プラグインのアクティベーション] ダイアログボックスで [フォームを閉じて再読み込み] をクリックします。 |
8 |
プラグインのアクティベーションを確認するには、ウィンドウの左上部にある [ナビゲーターのフィルタ処理] フィールドで、[OpenFrame] に移動します。 |
9 |
[設定] をクリックして、OpenFrame プラグインが [OpenFrame設定] リストに表示されていることを確認します。 |
エンタープライズ ライセンスを持つインスタンスでは、Webex Contact Center アプリケーションを ServiceNow ストアから直接インストールできます。
ServiceNow ストアから Webex Contact Center パッケージをダウンロードしてインストールします: https://store.servicenow.com/sn_appstore_store.do#!/store/application/6c8e2a4edbc73410e1c75e25ca961947。 |
1 |
ウィンドウの左上部にある [ナビゲーターのフィルタ処理] フィールドに、 |
2 |
[システムプロパティ] ページで、更新された日付でプロパティを並べ替えます。 次の Webex Contact Center のプロパティが表示されていることを確認してください。 |
3 |
[agentdesktop_url] をクリックして、[システムプロパティの agentdesktop_url] ページを開きます。 |
4 |
値 フィールドに、操作地域に応じて Webex Contact Center デスクトップの URL を入力します。 |
5 |
[更新(Update)] をクリックして変更を保存します。 |
6 |
(オプション) アクティビティ テーブル名を変更するには、必要に応じて x_caci_webexcc.webexccactivitytable プロパティを編集します。
|
7 |
(オプション) 次の方法でユーザ グループを追加します。
|
1 |
[ナビゲーターのフィルタ処理] フィールドで、 に移動します。 |
2 |
[新規] をクリックします。 |
3 |
URL に次のプロパティを入力します。
|
4 |
URL フィールドの右側にある ロック ボタンをクリックし、URL として |
5 |
(オプション) 構成を割り当てるユーザ/エージェント グループを選択します。 |
6 |
[送信(Submit)] をクリックします。 URL がリンクとして表示されます。 |
7 |
から フィルターナビゲーター フィールドに移動 。 |
8 |
(オプション) ユーザグループ リストで、Webex Contact Center デスクトップにアクセスできるユーザグループを 利用可能 に 選択済み。 |
9 |
OpenFrame フォンを使用する前に、ServiceNow カスタム デスクトップ レイアウト JSON ファイルを Webex Contact Center 管理ポータルにアップロードしてください。 詳細については、 Webex Contact Center で ServiceNow デスクトップレイアウトを設定する。 |
1 |
ServiceNow のデスクトップ レイアウトを https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow からダウンロードします。 |
2 |
必要に応じて、デスクトップ レイアウト ファイルのプロパティを更新します。 |
3 |
Webex Contact Center 管理ポータルへ移動します。 |
4 |
管理ポータルのナビゲーション バーから、 。 |
5 |
[新しいレイアウト] をクリックし、デスクトップレイアウトの詳細を入力します。 |
6 |
ServiceNow デスクトップレイアウトの場合は、次のファイルをアップロードします。 |
7 |
[Save] をクリックして、設定を保存します。 ServiceNow コンソール内で Webex Contact Center デスクトップを起動できるようになりました。 |
8 |
フィルター ナビゲータ フィールドから、 に移動します。 |
1 |
フィルター ナビゲータ フィールドから、 インシデント > オープン インシデントに移動します。 |
2 |
発信者フィールドを右クリックし、 「辞書の構成」 をクリックします。 |
3 |
カンマ区切りの属性を追加します ServiceNow コンソール内で Webex Contact Center デスクトップの使用を開始できるようになりました。 |
4 |
フィルター ナビゲータ フィールドから、 に移動します。 |
Salesforce (SFDC) および WebRTC および Microsoft Dynamics (MS Dynamics) コネクタのみを使用して、Agent Desktop へのログインをサポートしています。
ServiceNow コンソールの Agent Desktop
発信する前に、次の操作を実行してください。
-
アウトダイヤル エントリポイントを作成し、アウトダイヤルのエントリポイント戦略を設定する。
-
エージェントプロファイルのアウトダイヤル ANI を有効にする。
-
ダイヤル番号からエントリポイントへのマッピングにアウトダイヤル ANI を設定します。
詳細については、『Cisco Webex Contact Center セットアップおよび管理ガイド』の「プロビジョニング」の章を参照してください。
フィルター ナビゲータ フィールドから、 に移動します。
Desktop の使用方法については、Webex Contact Center ヘルプの Agent Tab を参照してください。
概要
この記事では、ServiceNow CRM コネクタのビジネス ルールをカスタマイズするいくつかの方法について説明します。 ServiceNow 固有のビジネス ルールに基づいてユース ケースをカスタマイズする方法について詳しく説明します。
顧客は ServiceNow 上でこれらのユースケースを自ら管理する必要があります。 構成は ServiceNow に固有のものであり、Webex Contact Center ソフトウェアや専門知識に固有のものではありません。
これは、ビジネス ルールの変更を支援するためのリファレンス ドキュメントです。 ServiceNow 開発者は、ビジネス ルールを作成および管理し、サポートを提供します。
Cisco はサンプルドキュメントのみを提供します。
次のセクションでは、開発者インスタンスとエンタープライズインスタンスのアクションウィジェットを設定、有効化、管理する方法について詳しく説明します。
アクションウィジェットの更新セットをコミットする
ライセンスされたエンタープライズ インスタンスの場合は、 ServiceNow ストア から最新の Webex Contact Center アプリをインストールします。
開発者インスタンスのアクション ウィジェットを設定するには、次の場所にある github リポジトリで入手可能な最新のシステム アップデート セット XML ファイルをダウンロードします: https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow/ActionsWidget。 ファイル名は webexcc-servicenow-update-setv7-1-ActionsWidget.XML です。 アクション ウィジェットの更新セットをコミットするには、「 更新セットのコミット」の手順 2 ~ 9 を参照してください。
アクションウィジェットを有効にする
アクション ウィジェットを有効にするには、 isWidgetDisplayEnabled プロパティを使用します。 カスタム デスクトップ レイアウトのヘッドレス セクションでこのプロパティの値を変更しないでください。 カスタム デスクトップ レイアウトのヘッドレス セクションでは、このプロパティは常に false に設定されます。 カスタム デスクトップ レイアウトのパネル セクションでのみプロパティの値を更新する必要があります。
カスタム デスクトップ レイアウトでアクション ウィジェットを有効にすると、次のアクションを実行できます。
- アクティビティ レコードの管理 - [アクティビティ レコードの表示/編集] をクリックして、発信者に関連付けられているアクティビティ レコードのリストを表示します。
- CRM オブジェクトの関連付け - アクティビティ レコードへの関連付け をクリックして、通話タイプ (着信または発信)、通話オブジェクト、通話メモなどの CRM オブジェクトをアクティビティ レコードに追加します。
- インシデントの管理 - [インシデントの作成] をクリックします。 発信者の詳細が事前に入力された新しいインシデントが作成されます。 インシデントに必要な更新を行うことができます。 要件に応じて、レコード タイプをインシデントからケース、HR モジュールなどに変更できます。 レコード タイプを変更するには、アクション ウィジェット構成の typeOfRecord プロパティの値を変更します。 次に例を示します。
{ "comp": "md-tab-panel", "attributes": { "slot": "panel", "class": "widget-pane" }, "children": [ { "comp": "agentx-custom-desktop", "script": "https://cx-crmconnector.ciscoccservice.com/servicenow/v5/dist/index.js", "properties": { "isWidgetDisplayEnabled": true, "typeOfRecord" : "インシデントの作成" }, "wrapper": { "title": "SNOW アクション!", "maximizeAreaName": "app-maximize-area" } } ] }
- ライブ通話メモを追加する - 通話に関する追加情報をテキスト領域に記録し、通話を終了できます。 追加されたメモは、アクティビティ レコードの通話メモとして確認できます。
ServiceNow のコード変更
スクリプトには変更が含まれています-
フィルターナビゲータに移動して検索
スクリプトには
.選択してください スクリプトインクルード 下 システム UI。
-
フィルタリング 名前 そして検索
プロップユーティリティ
. -
方法を変える
ユーザ取得システム ID
の中で スクリプト。現在:
UserGetSysId: function () { var opened_for; var user = new GlideRecord("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value')); user.query(); if (user.next()) opened_for=user.sys_id; var grInt = new GlideRecord('interaction'); grInt.initialize(); grInt.assigned_to= gs.getUserID(); grInt.type= 'phone'; grInt.opened_for= opened_for; var sysid=grInt.Insert(); return sysid; },
インシデントの新しいサンプルコード:
UserGetSysId: function () { var opened_for; //インシデント関連の変更 var sysidlist = {}; var user = new GlideRecordSecure("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value')); user.query(); if(user.next()) { opened_for=user.sys_id;//return user.sys_id; var inc = new GlideRecordSecure('incident'); inc.addQuery('caller_id', opened_for); inc.addQuery('state','IN','1,2'); inc.orderByDesc('sys_created_on'); inc.query(); if (inc.next()) { sysidlist.incsysid=inc.getUniqueValue(); }else{ inc.initialize(); inc.caller_id=opened_for; inc.contact_type='phone'; inc.short_description='通話受信元'+ this.getParameter('value'); sysidlist.incsysid=inc.Insert(); } } var grInt = new GlideRecordSecure('interaction'); grInt.initialize(); grInt.assigned_to= gs.getUserID(); grInt.type= 'phone'; grInt.opened_for= opened_for; var sysid=grInt.Insert(); sysidlist.sysid=sysid; return JSON.stringify(sysidlist); },
-
フィルター ナビゲータに移動して、
UI ページを検索します
。システム UI の下の UI ページを選択します。
-
名前 をフィルターして検索
エージェントデスクトップ
. -
変更する
スクリーンポップ
クライアント スクリプト内の関数。現在の機能:
// スクリーンポップ関数 screenpop(callerani,callSessionInfo) { if(callerani===callSessionInfo.phoneNumber){ callerani=stripPrefixes(callerani); } var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('field', 'phone'); gaout.addParam('value', callerani); gaout.getXMLWait(); var sysid = gaout.getAnswer(); openFrameAPI.openServiceNowForm({ entity: 'interaction', query: 'sys_id='+sysid });
インシデントのサンプルコード:
// スクリーン ポップ関数 screenpop(callerani,callSessionInfo) { if(callerani===callSessionInfo.phoneNumber){ callerani=stripPrefixes(callerani); } var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('field', 'phone'); gaout.addParam('value', callerani); gaout.getXMLWait(); // インシデント関連の変更の場合 var sysObj = JSON.parse(gaout.getAnswer()); if(sysObj.incsysid){ openFrameAPI.openServiceNowForm({ entity: 'incident', query: 'sys_id='+sysObj.incsysid, 'interaction_sys_id': sysObj.sysid }); }else{ openFrameAPI.openServiceNowForm({ エンティティ: 'incident', クエリ: 'sys_id=-1', 'interaction_sys_id': sysObj.sysid //'a2ba0ba62fd121106446cc96f699b6b8' }); } }
CRM に発信者情報が存在し、この連絡先で新しいインシデントがすでに開かれている場合、アプリケーションは進行中のインシデントを開きます。
CRM に発信者情報が存在しない場合は、アプリケーションは新しいインシデントを開きます。
CRM に発信者情報が存在する場合、アプリケーションは事前に入力された詳細で新しいインシデントを開きます。
概要
このユースケースでは、ServiceNow CRM コネクタ用の Webex CC のインストール時に、ServiceNow テーブル webexcc_imp_activity に追加の列を追加し、sn_openframe_phone_log を作成するプロセスについて詳しく説明します。
デフォルトでは、テーブルにはすぐに使用できる特定のシステム フィールドと値が含まれています。
WebexCC フロー デザイナー内でビジネス固有の変数 (CAD 変数) をさらに作成し、ServiceNow POST コール アクティビティ ログ内に CAD 変数を追加し、これを POST コール アクティビティ テーブル データに保持することができます。
これは参照ドキュメントのみであり、IVR 内に顧客名を保存し、これを ServiceNow に投稿する Customer Name というサンプル CAD 変数に対してこれを行う方法を示しています。
これは既存のコネクタのカスタマイズであるため、パートナー + 顧客の ServiceNow 開発者がこの構成を構成および管理することが予想されます。
Cisco は、コネクタをカスタマイズおよび拡張する方法に関するテクニックのみを提供します。
この記事の時点で、Cisco チームは、以下に説明する手法を使用して、アクティビティ ログとアクティビティ テーブルへの CAD 変数の追加のサポートを検証しました。
WebexCC IMP アクティビティに列を追加する
-
ServiceNow の開発者バージョンでテーブルを編集します。
-
フィルターナビゲータに移動して、スタジオを検索します。
選択
Webex Contact Center
または
-
を選択します。
WebexCC IMP アクティビティ
表 -
新しい列を追加します。たとえば、
顧客名
電話ログに列を追加する
-
電話ログテーブルを編集します。
-
新しい列を追加します。たとえば、
顧客名
.
WebexCC アクティビティ変換マップ
新しい列を追加します。たとえば、 顧客名
フィールド マッピング。
リスト列をカスタマイズする
Service Now の推奨に従って、選択アクションを「作成」から「無視」に変更します。
電話ログリストを設定する
スクリプトインクルードへ移動
1 行だけ追加 webexcc.u_customername=actInfo.顧客名
propUtils へ。
次の行を参照してください: webexcc.u_customername=actInfo.顧客名; 支持するコメント付き。
var propUtils = Class.create(); propUtils.prototype = Object.extendsObject(global.AbstractAjaxProcessor,{ getWebexccProp: function () { var webexccprop = {}; webexccprop.instanceurl= 'https://'+gs.getProperty('instance_name')+'.service-now.com/'; webexccprop.url=gs.getProperty('x_caci_webexcc.agentdesktop_url'); // webexccprop.popupurl=gs.getProperty('x_caci_webexcc.screenpop_url'); return JSON.stringify(webexccprop); }, UserGetSysId: function () { var opened_for; var user = new GlideRecord("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value')); user.query(); if (user.next()) opened_for=user.sys_id;//return user.sys_id; // そうでない場合 // null を返します。var grInt = new GlideRecord('interaction'); grInt.initialize(); grInt.assigned_to= gs.getUserID(); grInt.type= 'phone'; grInt.opened_for= opened_for; var sysid=grInt.Insert(); return sysid; }, setWebexcctable: function () { var sys_id=0; var actInfo = JSON.parse(this.getParameter('actInfo')); var webexcc = new GlideRecordSecure(gs.getProperty('x_caci_webexcc.webexccactivitytable')); webexcc.addQuery("callobject", actInfo.CallObject); webexcc.query(); if(!webexcc.next()) { webexcc.ani = actInfo.ani; webexcc.dnis =actInfo.dnis; webexcc.queuename =actInfo.queuename; webexcc.wrapuptime =actInfo.wrapuptime; webexcc.callduration =actInfo.CallDurationInSeconds; webexcc.ringingtime =actInfo.ringingtime; webexcc.activitydate =actInfo.ActivityDate; webexcc.callobject =actInfo.CallObject; webexcc.calltype =actInfo.CallType; webexcc.calldisposition=actInfo.CallDisposition; // この行はアクティビティ ログに記録するために追加されます webexcc.u_customername=actInfo.CustomerName; sys_id=webexcc.Insert(); // インシデント レコードのアクティビティ; var actInfoString =this.getParameter('actInfo'); var suser = new GlideRecordSecure("sys_user"); suser.addQuery("phone", this.getParameter('ani')); suser.query(); if(suser.next()) { var inc = new GlideRecordSecure('incident'); inc.addQuery('caller_id', suser.sys_id); inc.orderByDesc('sys_created_on'); inc.query(); if (inc.next()) { var jsonPretty = JSON.stringify(JSON.parse(actInfoString),null,2); inc.comments =jsonPretty; inc.update(); } } } return sys_id; }, type: 'propUtils' });
フローデザイナーで CAD 変数を作成する
CAD 変数をデスクトップレイアウトに追加する
例
「CadName1:SnowField1、CadName2:SnowField2」CadName1 は CustomerName です。SnowField1 は CustomerName としても使用され、これは上記の「actInfo.CustomerName」に示されているサンプル スクリプトの一部です。
デモのスクリーンショット
WebexCC アクティビティ テーブルに新しく追加された CAD 変数を表示します。
Flow Designer 用の CAD 変数を作成する
インシデントの緊急性インシデントの影響
Service Now スクリプトの更新
スクリプトの更新内容
-
フィルターナビゲータに移動して検索します
スクリプトには
選択してください スクリプトインクルード オプションの下 システム UI。
-
フィルタリング 名前 と
プロップユーティリティ
。 -
方法を変える
ユーザ取得システム ID
の中で スクリプト 分野。現在のスクリプト:
UserGetSysId: function () { var opened_for; var user = new GlideRecord("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value')); user.query(); if (user.next()) opened_for=user.sys_id; var grInt = new GlideRecord('interaction'); grInt.initialize(); grInt.assigned_to= gs.getUserID(); grInt.type= 'phone'; grInt.opened_for= opened_for; var sysid=grInt.Insert(); return sysid; },
インシデントの新しいサンプルコード:
UserGetSysId: function () { var opened_for; var sysidlist = {}; var user = new GlideRecordSecure("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value')); user.query(); if(user.next()) { opened_for=user.sys_id;//return user.sys_id; var inc = new GlideRecordSecure('incident'); inc.addQuery('caller_id', opened_for); inc.addQuery('state','IN','1,2'); inc.orderByDesc('sys_created_on'); inc.query(); if (inc.next()) { sysidlist.incsysid=inc.getUniqueValue(); }else{ inc.initialize(); inc.caller_id=opened_for; inc.contact_type='phone'; inc.urgency=this.getParameter('IncUrgency'); inc.impact=this.getParameter('Impact'); inc.short_description='+ this.getParameter('value'); sysidlist.incsysid=inc.Insert(); } } var grInt = new GlideRecordSecure('interaction'); grInt.initialize(); grInt.assigned_to= gs.getUserID(); grInt.type= 'phone'; grInt.opened_for= opened_for; var sysid=grInt.Insert(); sysidlist.sysid=sysid; return JSON.stringify(sysidlist);//sysid; },
-
フィルターナビゲータに移動して検索します
UI ページ
。選択してください UI ページ オプションの下 システム UI。
-
フィルタリング UI ページ と 名前 そして検索
エージェントデスクトップ
。 -
変更する
スクリーンポップ
スクリプト フィールドで関数を実行します。現在の機能:
// スクリーンポップ関数 screenpop(callerani,callSessionInfo) { if(callerani===callSessionInfo.phoneNumber){ callerani=stripPrefixes(callerani); } var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('field', 'phone'); gaout.addParam('value', callerani); gaout.getXMLWait(); var sysid = gaout.getAnswer(); openFrameAPI.openServiceNowForm({ entity: 'interaction', query: 'sys_id='+sysid }); }
インシデントのサンプルコード:
// スクリーン ポップ関数 screenpop(callerani,callSessionInfo) { var Impact=3; if(callSessionInfo.callAssociatedData.Impact != null && callSessionInfo.callAssociatedData.Impact != undefined) { Impact=callSessionInfo.callAssociatedData.Impact.value; } var IncUrgency=3; if(callSessionInfo.callAssociatedData.Urgency != null && callSessionInfo.callAssociatedData.Urgency != undefined) { IncUrgency=callSessionInfo.callAssociatedData.Urgency.value; } if(callerani===callSessionInfo.phoneNumber){ callerani=stripPrefixes(callerani); } var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('field', 'phone'); gaout.addParam('value', callerani); gaout.addParam('IncUrgency', IncUrgency); gaout.addParam('Impact', Impact); gaout.getXMLWait(); // var sysid = gaout.getAnswer(); var sysObj = JSON.parse(gaout.getAnswer()); if(sysObj.incsysid){ openFrameAPI.openServiceNowForm({ entity: 'incident', query: 'sys_id='+sysObj.incsysid, 'interaction_sys_id': sysObj.sysid }); }else{ openFrameAPI.openServiceNowForm({ entity: 'incident', query: 'sys_id=-1', 'interaction_sys_id': sysObj.sysid }); } window.localStorage.setItem("screenpopinteraction",JSON.stringify(sysObj)); }
発信者情報が CRM に存在し、新規または進行中のインシデントがない場合は、アプリケーションは新しいインシデントを開きます。
ServiceNow のコードを変更する
新しい列を追加する WebexCC IMP アクティビティ
表
開く WebexCC IMP アクティビティ表
クリック アップデート。
新しい列を追加する 電話ログ
表
開く 電話ログ
表
WebexCC アクティビティ変換マップ
Open 変換マップ
フィルターナビゲータから
クリック WebexCC アクティビティ トランスフォームマップ
[更新(Update)] をクリックします。
スクリプトインクルードの変更
-
フィルター ナビゲータに移動して、「script include」を検索します。
システム UI の下にある スクリプト インクルード を選択します。
-
名前 をフィルター
プロップユーティリティ
. -
方法を変える
setWebexcctable
.インシデントの新しいサンプルコード:
setWebexcctable: function () { var sys_id=0; var actInfo = JSON.parse(this.getParameter('actInfo')); var webexcc = new GlideRecordSecure(gs.getProperty('webexccactivitytable')); webexcc.addQuery("u_callobject", actInfo.CallObject); webexcc.query(); if(!webexcc.next()) { //インシデント レコードのアクティビティ; //var actInfoString =this.getParameter('actInfo'); var incsysid=actInfo.incident_sys_id; var interactsysid=actInfo.interaction_sys_id; var incnum=""; var intenum=""; delete actInfo['interaction_sys_id']; delete actInfo['incident_sys_id']; if(interactionsysid!= null && interactsysid != undefined){ var inte = new GlideRecordSecure('interaction'); //inte.get('sys_id', interactsysid ); inte.addQuery('sys_id', interactsysid ); inte.query(); if (inte.next()) { intenum=inte.number; // inte.setValue('state','Closed Complete'); inte.work_notes='状態をクローズに更新します。'; inte.update(); } } if(incsysid!= null && incsysid != undefined){ var inci = new GlideRecordSecure('incident'); inci.addQuery('sys_id', incsysid ); inci.query(); if (inci.next()) { incnum=inci.number; var jsonPretty = JSON.stringify(actInfo,null,2); //JSON.stringify(JSON.parse(actInfoString),null,2); inci.comments =jsonPretty; inci.update(); } }else{ var suser = new GlideRecordSecure("sys_user"); suser.addQuery("phone", this.getParameter('ani')); suser.query(); if(suser.next()) { var inc = new GlideRecordSecure('incident'); inc.addQuery('caller_id', suser.sys_id); inc.addQuery('state','IN','1,2'); inc.orderByDesc('sys_created_on'); inc.query(); if (inc.next()) { var jsonPretty = JSON.stringify(actInfo,null,2); inc.comments =jsonPretty; inc.update(); } } } webexcc.u_ani = actInfo.ani; webexcc.u_dnis =actInfo.dnis; webexcc.u_queuename =actInfo.queuename; webexcc.u_wrapuptime =actInfo.wrapuptime; webexcc.u_callduration =actInfo.CallDurationInSeconds; webexcc.u_ringingtime =actInfo.ringingtime; webexcc.u_activitydate =actInfo.ActivityDate; webexcc.u_callobject =actInfo.CallObject; webexcc.u_calltype =actInfo.CallType; webexcc.u_calldisposition=actInfo.CallDisposition; webexcc.u_incidentnumber=incnum; webexcc.u_interactionsnumber=intenum; sys_id=webexcc.Insert(); } sys_id を返します。},
UI ページでのメソッドの変更
-
フィルターナビゲータに移動して検索
UI ページ
システム UI の下にある UI ページ オプションを選択します。
-
UI ページを 名前 でフィルタリングし、
agentdesktop
を検索します。 -
変更する
nowActivities とスクリーンポップ
スクリプト内の関数。現在の機能:
関数 nowActivities(actInfo, ani) { var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'setWebexcctable'); gaout.addParam('actInfo', JSON.stringify(actInfo)); gaout.addParam('ani', stripPrefixes(ani)); gaout.getXML(SetCCsysId); }
インシデントのサンプルコード:
function nowActivities(actInfo, ani) { var sysObjstr = window.localStorage.getItem("screenpopinteraction"); if(sysObjstr != null && sysObjstr != undefined) { var sysObjjson=JSON.parse(sysObjstr); actInfo.interaction_sys_id=sysObjjson.sysid; actInfo.incident_sys_id=sysObjjson.incsysid; } var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'setWebexcctable'); gaout.addParam('actInfo', JSON.stringify(actInfo)); gaout.addParam('ani', stripPrefixes(ani)); gaout.getXML(SetCCsysId); } function screenpop(callerani,callSessionInfo) { if(callerani===callSessionInfo.phoneNumber){ callerani=stripPrefixes(callerani); } var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('field', 'phone'); gaout.addParam('value', callerani); gaout.getXMLWait(); // var sysid = gaout.getAnswer(); var sysObj = JSON.parse(gaout.getAnswer()); if(sysObj.incsysid){ openFrameAPI.openServiceNowForm({ entity: 'incident', query: 'sys_id='+sysObj.incsysid, 'interaction_sys_id': sysObj.sysid }); }else{ openFrameAPI.openServiceNowForm({ エンティティ: 'incident', クエリ: 'sys_id=-1', 'interaction_sys_id': sysObj.sysid }); } window.localStorage.setItem("screenpopinteraction",JSON.stringify(sysObj)); }
アップデート後の結果
次のカスタマイズはバージョン 1.0.5 以下に適用されます。 新しいバージョン 1.0.7 以降のカスタマイズについては、上記の手順に従ってください。
カスタマイズ # 1 - コールフローのユースケースにカスタムビジネスルールを追加する
通話ごとに新しいインシデント記録を作成するServiceNow の WebexCC CRM コネクタへの新しい呼び出しごとに、新しいインシデント レコードを作成します。
フィルターナビゲータでビジネスルールを検索
[新規] をクリックします。
参考サンプルコード:
関数 customcti() { var url = null; var name = sysparm_caller_name; eid = sysparm_caller_id; var phone = sysparm_caller_phone; var taskID = sysparm_task_id; var fQuery = sysparm_query; if (fQuery == null) fQuery = ''; var view = sysparm_view; if (view == null || view == '') view = "itil"; var userID = null; if (eid != null && eid != '') { userID = UserGetSysId("employee_number",eid); } if (userID == null && name != null && name != '') { userID = UserGetSysId("name", name); } if (userID == null && phone != null && phone != '') { userID = UserGetSysId("phone", phone); } if (userID != null) { if (fQuery.length > 0) fQuery += "^"; fQuery += "caller_id=" + userID; } if (url == null) { url = "incident.do?sys_id=-1"; if (fQuery != null) url += "&sysparm_query=" + fQuery; } answer = url; return url; } function UserGetSysId(field, value) { var user = new GlideRecord("sys_user"); user.addQuery(field, value); user.query(); if (user.next()) return user.sys_id; else return null; }
ビジネスルールのサンプル構成
クライアント呼び出しを有効にする
コンピュータテレフォニー統合(CTI)インシデントの処理 としてマークされています 真実。
スクリーンポップの URL をカスタム CTI ルールで更新します 「 cti.do?sysparm_cti_rule=インシデント作成&sysparm_caller_phone=「
その sysparm_cti_rule=名前 どこ '名前'は、 関数 呼び出される CTI 処理中 デフォルトのスクリプトを使用するのではなく。
関数を定義する システムスクリプト エントリがマークされました クライアント呼び出し可能。
関数内で GlideRecord を Insert、更新、または削除する必要がある場合は、別の非クライアント呼び出し可能関数を呼び出して更新を実行します。
スクリプトをクライアント呼び出し可能にするには、sys_script エントリが表示されるときに表示されるフォームのクライアント呼び出し可能チェック ボックスをオンにする必要があります。
クライアント呼び出し可能チェック ボックスはデフォルトでは表示されません。 表示するには、ギアアイコンとスラッシュバケットメカニズムを使用して、フォームに表示されるフィールドを変更する必要があります。
カスタマイズ # 2 - Webex Contact Center アクティビティ テーブルに CAD 変数を追加する
概要この記事では、ServiceNow CRM コネクタ用の Webex CC のインストール時に作成される ServiceNow テーブル (webexcc_activity) に追加の列を追加するプロセスについて詳しく説明します。
デフォルトでは、テーブルにはすぐに使用できるシステム フィールドと値が含まれています。
WebexCC フロー デザイナー内でビジネス固有の変数 (CAD 変数) をさらに作成し、それらの CAD 変数を ServiceNow POST コール アクティビティ ログ内に追加し、これを POST コール アクティビティ テーブル データに保持することができます。
-
これは参照ドキュメントのみであり、IVR 内に顧客名を保存し、これを ServiceNow に投稿する Customer Name というサンプル CAD 変数に対してこれを行う方法を示しています。
-
これは既存のコネクタのカスタマイズであるため、パートナー + 顧客の ServiceNow 開発者がこの構成を構成および管理します。
-
Cisco では、コネクタをカスタマイズおよび拡張する方法に関するテクニックのみが提供されます。
-
この記事の時点で、Cisco チームは、以下に説明する手法を使用して、アクティビティ ログとアクティビティ テーブルへの CAD 変数の追加のサポートを検証しました。
ServiceNow の開発者バージョンでテーブルを編集します。
WebexCC アクティビティ テーブルを選択します。
たとえば、 CustomerName。
WebexCC アクティビティのリスト レイアウトを選択します。
更新セット XML を使用している場合、この手順は必要ありません - propUtils に「webexcc.u_customername=actInfo.CustomerName」という 1 行のみを追加する必要があります。

サンプルスクリプト
次の行を参照してください:webexcc.u_customername=actInfo.CustomerName; 補足コメント付き。
var propUtils2 = Class.create(); propUtils2.prototype = Object.extendsObject(global.AbstractAjaxProcessor,{ getWebexccProp: function () { var webexccprop = {}; webexccprop.instanceurl= 'https://'+gs.getProperty('instance_name')+'.service-now.com/'; webexccprop.url=gs.getProperty('x_caci_webexcc.agentdesktop_url'); webexccprop.popupurl=gs.getProperty('x_caci_webexcc.screenpop_url'); return JSON.stringify(webexccprop); }, setWebexcctable: function () { var sys_id=0; var actInfo = JSON.parse(this.getParameter('actInfo')); var webexcc = new GlideRecordSecure(gs.getProperty('x_caci_webexcc.webexccactivitytable')); webexcc.addQuery("callobject", actInfo.CallObject); webexcc.query(); if(!webexcc.next()) { webexcc.ani = actInfo.ani; webexcc.dnis =actInfo.dnis; webexcc.queuename =actInfo.queuename; webexcc.wrapuptime =actInfo.wrapuptime; webexcc.callduration =actInfo.CallDurationInSeconds; webexcc.ringingtime =actInfo.ringingtime; webexcc.activitydate =actInfo.ActivityDate; webexcc.callobject =actInfo.CallObject; webexcc.calltype =actInfo.CallType; webexcc.calldisposition=actInfo.CallDisposition; // この行はアクティビティ ログに記録するために追加されます webexcc.u_customername=actInfo.CustomerName; sys_id=webexcc.Insert(); // インシデント レコードのアクティビティ; var actInfoString =this.getParameter('actInfo'); var suser = new GlideRecordSecure("sys_user"); suser.addQuery("phone", this.getParameter('ani')); suser.query(); if(suser.next()) { var inc = new GlideRecordSecure('incident'); inc.addQuery('caller_id', suser.sys_id); inc.orderByDesc('sys_created_on'); inc.query(); if (inc.next()) { var jsonPretty = JSON.stringify(JSON.parse(acting string),null,2); inc.comments =jsonPretty; inc.update(); } } } return sys_id; }, type: 'propUtils2' });
新しいスクリプト名で UI ページを編集する
フローデザイナーで CAD 変数を作成する
CAD 変数をデスクトップレイアウトに追加する
デモのスクリーンショット
WebexCC アクティビティ テーブルに新しく追加された CAD 変数を表示します。
