前提条件

Webex Contact Center を ServiceNow CRM コンソールと統合する前に、次のものがあることを確認してください。


 

以下の 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

[ファイルの選択] をクリックし、システム アップデート セット XML ファイルを選択して、 アップロード をクリックします。

更新セットが [取得した更新セット] リストに表示され、[ロード済み] 状態に表示されます。
5

[ 取得されたアップデート セット ] リストから、アップデート セット ファイル名 (リンク) をクリックしてアップデート セットを開きます。

6

ウィンドウの右上部にある [プレビュー更新セット] をクリックして、問題の更新セットを確認します。

7

プレビューが完了したら、[セットのプレビューを更新] ダイアログ ボックスで 閉じる をクリックします。

8

[更新セットをコミットする] をクリックします。

9

アップデート セットのコミットが完了したら、[ アップデート セットのコミット ] ダイアログ ボックスで [ 閉じる ] をクリックします。

1

ウィンドウの左上にある フィルタ ナビゲータ フィールドに sys_properties.list と入力し、Enter を押します。

2

[システムプロパティ] ページで、更新された日付でプロパティを並べ替えます。 次の Webex Contact Center のプロパティが表示されていることを確認してください。

3

[agentdesktop_url] をクリックして、[システムプロパティの agentdesktop_url] ページを開きます。

4

[ ] フィールドに、運用地域に応じた Webex コンタクト センター デスクトップの URL を入力します。

5

[更新(Update)] をクリックして変更を保存します。

6

(オプション)アクティビティテーブル名を変更するには、必要に応じて webexccactivitytable のプロパティを編集します。

[ システム プロパティ ] ページで、 webexccactivitytable をクリックします。

必要に応じて、 フィールドを変更します。

7

(オプション) 次の方法でユーザ グループを追加します。

  1. ウィンドウの左上にある フィルタ ナビゲータ フィールドで、システム セキュリティの グループ に移動します。

  2. 新しいユーザ グループを作成するか、既存のユーザ グループを使用します。

  3. [Edit] をクリックします。

  4. コレクションsn_openframe_user を検索し、ユーザ グループに移動します。

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

  6. ユーザをグループメンバーとして追加します。

1

[ナビゲーターのフィルタ処理] フィールドで、[OpenFrame] > [設定] に移動します。

2

[新規] をクリックします。

3

URL に次のプロパティを入力します。

  • 名前: Webex コンタクト センター デスクトップ

  • タイトル: Webex コンタクト センター

  • : 550 (推奨)

  • 高さ: 600 (推奨)

4

URL フィールドの右側にある ロック ボタンをクリックし、 # を追加します。agentdesktop.do を URL として使用します。 (この手順を実行して、構成を UI ページにポイントします)

5

(オプション) 構成を割り当てるユーザ/エージェント グループを選択します。

6

[送信(Submit)] をクリックします。 URL がリンクとして表示されます。

7

OpenFrame 電話を使用する前に、ServiceNow カスタム デスクトップ レイアウト JSON ファイルを Webex コンタクト センター管理ポータルにアップロードしてください。 詳細については、「 Webex コンタクト センターの 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 コンタクト センター デスクトップを起動できるようになりました。

8

フィルタ ナビゲータ フィールドから、 エージェント ワークスペース > エージェント ワークスペース ホームに移動します。

左下の電話アイコンをクリックします。

次のセクションでは、ライセンスを取得したエンタープライズ インスタンス用の ServiceNow コネクタをインストールする手順について説明します。

1

ServiceNow 開発者ポータル アカウントにログインし、 管理 コンソールを開きます。

2

[アカウント] メニューの [マイインスタンス] 領域で、[構築の開始] をクリックします。

3

開発者インスタンスで、ウィンドウの左上にある フィルタ ナビゲータ フィールドから、 プラグインに移動します。

4

Openframeというタイトルの Openframe プラグインを検索します。 リストのスクロールが必要な場合があります。

5

[インストール] をクリックして、OpenFrame プラグインをインストールします。

6

[プラグインの有効化] ダイアログボックスで、[有効化] をクリックします。

7

プラグインの有効化が完了したら、をクリックします。 フォームを閉じて再読み込み の中に プラグインの有効化 ダイアログボックス。

8

プラグインのアクティベーションを確認するには、ウィンドウの左上部にある [ナビゲーターのフィルタ処理] フィールドで、[OpenFrame] に移動します。

9

[設定] をクリックして、OpenFrame プラグインが [OpenFrame設定] リストに表示されていることを確認します。

1

ウィンドウの左上部にある [ナビゲーターのフィルタ処理] フィールドに、sys_properties.list と入力します。

2

[システムプロパティ] ページで、更新された日付でプロパティを並べ替えます。 次の Webex Contact Center のプロパティが表示されていることを確認してください。

3

[agentdesktop_url] をクリックして、[システムプロパティの agentdesktop_url] ページを開きます。

4

[ ] フィールドに、運用地域に応じた Webex コンタクト センター デスクトップの URL を入力します。

5

[更新(Update)] をクリックして変更を保存します。

6

(オプション) アクティビティ テーブル名を変更するには、必要に応じて x_caci_webexcc.webexccactivitytable プロパティを編集します。

  1. [ システム プロパティ ] ページで、 x_caci_webexcc.webexccactivitytable をクリックします。

  2. 必要に応じて、 フィールドを変更します。

7

(オプション) 次の方法でユーザ グループを追加します。

  1. ウィンドウの左上にある フィルタ ナビゲータ フィールドで、 の下の グループ に移動します。システムセキュリティ。

  2. [ 編集 ] をクリックし、次の役割を追加します。

    • sn_openframe_user

    • x_caci_webexcc.agent

    • エージェント_ワークスペース_ユーザ

    • x_caci_webexcc.webexcc_imp_activity_user

    • x_caci_webexcc.webex_contact_center

1

[ナビゲーターのフィルタ処理] フィールドで、[OpenFrame] > [設定] に移動します。

2

[新規] をクリックします。

3

URL に次のプロパティを入力します。

  • 名前: Webex コンタクト センター デスクトップ

  • タイトル: Webex コンタクト センター

  • : 550 (推奨)

  • 高さ: 600 (推奨)

4

URL フィールドの右側にある ロック ボタンをクリックし、 x_caci_webexcc_agentdesktop を追加します。.do を URL として指定します。 (この手順を実行して、構成を UI ページにポイントします)

5

(オプション) 構成を割り当てるユーザ/エージェント グループを選択します。

6

[送信(Submit)] をクリックします。 URL がリンクとして表示されます。

7

フィルタ ナビゲータ フィールドから、 エージェント ワークスペース > エージェント ワークスペース ホームに移動します。

左下の電話アイコンをクリックします。

8

(オプション) ユーザ グループ リストで、Webex コンタクト センター デスクトップにアクセスできるユーザ グループを 使用可能 から 選択

9

OpenFrame 電話を使用する前に、ServiceNow カスタム デスクトップ レイアウト JSON ファイルを Webex コンタクト センター管理ポータルにアップロードしてください。 詳細については、「 Webex コンタクト センターの 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 コンタクト センター デスクトップを開始できるようになりました。

8

フィルタ ナビゲータ フィールドから、 エージェント ワークスペース > エージェント ワークスペース ホームに移動します。

左下の電話アイコンをクリックします。

1

フィルタ ナビゲータ フィールドから、 インシデント > に移動します。インシデントを開きます。

2

発信者フィールドを右クリックし、 辞書の構成 をクリックします。

3

カンマ区切りの属性 "ref_contributions=show_phone,を追加します。

ServiceNow コンソール内で Webex コンタクト センター デスクトップの使用を開始できるようになりました。

4

フィルタ ナビゲータ フィールドから、 エージェント ワークスペース > エージェント ワークスペース ホームに移動します。

左下の電話アイコンをクリックします。

ServiceNow コンソールの Agent Desktop

発信する前に、次の操作を実行してください。

  • アウトダイヤル エントリポイントを作成し、アウトダイヤルのエントリポイント戦略を設定する。

  • エージェントプロファイルのアウトダイヤル ANI を有効にする。

  • ダイヤル番号からエントリポイントへのマッピングにアウトダイヤル ANI を設定します。

詳細については、『Cisco Webex Contact Center セットアップおよび管理ガイド』の「プロビジョニング」の章を参照してください。

フィルタ ナビゲータ フィールドから、 エージェント ワークスペース > エージェント ワークスペース ホームに移動します。

左下の電話アイコンをクリックします。

デスクトップの使用方法については、 Cisco Webex Contact Center Agent Desktop ユーザ ガイド を参照してください。

サードパーティ製ストレージのパーティショニング

Google Chrome および Edge 116 以降への最近のアップデートで発生する可能性のある問題により、Webex コンタクト センターの CRM コネクタへのサインイン エクスペリエンスが中断される可能性があります。 この問題は、ServiceNow CRM コンソールでのデスクトップ サインインに影響します。

Google Chrome ブラウザでこの問題を解決するには:

  1. Google Chrome ブラウザを開き、アドレス バーに「 chrome://flags/#third-party-storage-partitioning 」と入力します。

  2. 実験的なサードパーティ製ストレージのパーティショニング フラグを無効にします。

  3. Chrome を閉じて再起動します。

  4. ServiceNow CRM コンソール内のデスクトップに再度ログインします。

Edge ブラウザーでこの問題を解決するには:

  1. ブラウザを開き、アドレス バーに「 edge://flags/#third-party-storage-partitioning 」と入力します。

  2. 実験的なサードパーティ製ストレージのパーティショニング フラグを無効にします。

  3. 変更を保存し、ブラウザを再起動します。

  4. ServiceNow CRM コンソール内のデスクトップに再度ログインします。

Firefox ブラウザでこの問題を解決するには:

  1. ブラウザを開き、アドレス バーに「 about:config 」と入力します。

    警告ページが表示される場合があります。 クリック リスクを受け入れて続行する へ行くこと 概要:設定 ページ。

  2. の上部にある 検索設定名 ボックスに「 network.cookie.cookieBehavior 」と入力します。 ページで設定を見つけます。

  3. 設定をダブルクリックするか、 編集 アイコンをクリックして設定を編集します。

  4. 値を 0 に変更します。

  5. 変更を保存し、ブラウザを再起動します。

  6. ServiceNow CRM コンソール内のデスクトップに再度ログインします。

概要

この記事では、ServiceNow CRM コネクタのビジネス ルールをカスタマイズするいくつかの方法について説明します。 ServiceNow に固有のビジネス ルールに基づいてユース ケースをカスタマイズする方法について詳しく説明します。

お客様は、ServiceNow でこれらのユースケースを自己管理する必要があります。 この構成は ServiceNow に固有のものであり、Webex Contact Center ソフトウェアや専門知識ではありません。


 

これは、ビジネス ルールの変更を支援するための参考ドキュメントです。 ServiceNow 開発者はビジネス ルールを作成および管理し、サポートを提供します。

シスコではサンプル ドキュメントのみを提供しています。

ServiceNow でのコード変更

スクリプトには変更が含まれています
  1. フィルターナビゲーターに移動して検索します スクリプトに含まれるもの.

    システム UI の下にある スクリプト インクルードを選択します。

  2. 名前 をフィルタリングして検索します propUtils.

  3. 方法を変更する ユーザ GetSysId スクリプト内。

    現在:

    UserGetSysId: function () { var opens_for; var user = new GlideRecord("sys_user"); user.addQuery(this.getParameter('フィールド'),this.getParameter('値')); user.query(); if (user.next()) opens_for=user.sys_id; var grInt = new GlideRecord('インタラクション'); grInt.initialize(); grInt.assigned_to= gs.getUserID(); grInt.type= '電話'; grInt.opened_for= open_for; var sysid=grInt.insert(); sysid を返します。}、

    インシデントの新しいサンプル コード:

    UserGetSysId: function () { var opens_for; //インシデント関連の変更 var sysidlist = {}; var user = new GlideRecordSecure("sys_user"); user.addQuery(this.getParameter('フィールド'),this.getParameter('値'));ユーザ.クエリ(); if(user.next()) {opened_for=user.sys_id;//return user.sys_id; var inc = new GlideRecordSecure('事件'); inc.addQuery('caller_id', opens_for); inc.addQuery('状態','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='電話'; inc.short_description='受信した通話 '+ this.getParameter('value'); sysidlist.incsysid=inc.insert(); var grInt = new GlideRecordSecure('インタラクション'); grInt.initialize(); grInt.assigned_to= gs.getUserID(); grInt.type= '電話'; grInt.opened_for= open_for; var sysid=grInt.insert(); sysidlist.sysid=sysid; JSON.stringify(sysidlist) を返します。}、

UI ページでのメソッド変更
  1. フィルター ナビゲーターに移動し、 UI ページを検索します。

    システム UI の下にある UI ページを選択します。

  2. 名前 をフィルタリングして検索します エージェントデスクトップ.

  3. 変更 スクリーンポップ クライアントスクリプトの関数。

    現在の機能:

    // スクリーンポップ関数 screenpop(callerani,callSessionInfo) { if(callerani===callSessionInfo.phoneNumber){ callerani=stripPrefixes(callerani); var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('フィールド', '電話'); gaout.addParam('値', callerani); gaout.getXMLWait(); var sysid = gaout.getAnswer(); openFrameAPI.openServiceNowForm({ エンティティ: 'インタラクション'、クエリ: '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('フィールド', '電話'); gaout.addParam('値', callerani); gaout.getXMLWait(); // インシデント関連の変更の場合 var sysObj = JSON.parse(gaout.getAnswer()); if(sysObj.incsysid){ openFrameAPI.openServiceNowForm({ エンティティ: 'インシデント'、クエリ: 'sys_id='+sysObj.incsysid、'interaction_sys_id': sysObj.sysid }); }else{ openFrameAPI.openServiceNowForm({ エンティティ: 'インシデント', クエリ: 'sys_id=-1', 'interaction_sys_id': sysObj.sysid //'a2ba0ba62fd121106446cc96f699b6b8' }); } }

発信者情報が CRM に存在し、この連絡先ですでにオープンされた新しいインシデントがある場合、アプリケーションは進行中のインシデントをオープンします

発信者情報が CRM に存在しない場合、アプリケーションは新しいインシデントを開きます

発信者情報が CRM に存在する場合、アプリケーションは詳細が事前に入力された新しいインシデントを開きます

概要

この使用例では、ServiceNow テーブル webexcc_imp_activity に追加の列を追加し、ServiceNow CRM コネクタ用 Webex CC のインストール時に sn_openframe_phone_log を作成するプロセスを詳しく説明します。

デフォルトでは、テーブルには特定の既製のシステム フィールドと値が含まれています。

WebexCC Flow デザイナー内でさらにビジネス固有の変数 (CAD 変数) を作成し、ServiceNow の通話後アクティビティ ログ内に CAD 変数を追加し、これを通話後アクティビティ テーブル データに永続化することができます。


 

これは参照ドキュメントのみであり、IVR 内に顧客名を格納し、これを ServiceNow にポストする Customer Name というサンプル CAD 変数に対してこれを行う方法を示しています。

この構成は既存のコネクタのカスタマイズであるため、パートナーと顧客の ServiceNow 開発者が構成および管理することが期待されます。

シスコは、コネクタをカスタマイズおよび拡張する方法に関する技術のみを提供します。

この記事の時点で、シスコ チームは、次に説明する手法を使用して、アクティビティ ログおよびアクティビティ テーブルへの CAD 変数の追加のサポートを検証しました。

WebexCC IMP アクティビティに列を追加

  1. ServiceNow の開発者バージョンでテーブルを編集します。

  2. フィルターナビゲーターに移動し、スタジオを検索します。

    選択 Webex Contact Center

    または

  3. を選択します。 WebexCC IMP アクティビティ

  4. 新しい列を追加します。例: 顧客名

電話ログに列を追加

  1. 電話ログテーブルを編集します。

  2. 新しい列を追加します。例: 顧客名.

WebexCC アクティビティ変換マップ

新しい列を追加します。例: 顧客名 フィールドマッピング。

リスト列をパーソナライズする

Service Now が推奨するように、Choice アクションを作成から無視に変更します。

電話ログリストの構成

「スクリプトインクルード」に移動


 

1 行だけ追加してください webexcc.u_customername=actInfo.CustomerName propUtils に。

サンプルスクリプト

次の行を参照してください。 webexcc.u_customername=actInfo.CustomerName; 応援コメント付き。

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 opens_for; var user = new GlideRecord("sys_user"); user.addQuery( this.getParameter('field'),this.getParameter('value')); user.query(); if (user.next()) opens_for=user.sys_id;//return user.sys_id; // else / / return null; var grInt = new GlideRecord('interaction'); grInt.initialize(); grInt.assigned_to= gs.getUserID(); grInt.type= 'phone'; grInt.opened_for= opens_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("電話", 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(); sys_id を返します。}、タイプ: 'propUtils' });

フロー デザイナーで CAD 変数を作成する

CAD 変数をデスクトップ レイアウトに追加する

「CadName1:SnowField1,CadName2:SnowField2」CadName1 は CustomerName です SnowField1 は、「actInfo.CustomerName」の上に示されているサンプル スクリプトの一部である CustomerName としても使用されます。

デモのスクリーンショット

WebexCC アクティビティ テーブルに新しく追加された CAD 変数を表示します。

フロー デザイナーの CAD 変数を作成する

インシデントの緊急性

インシデントの影響

Service Now スクリプトの更新

スクリプトの更新内容には以下が含まれます

  1. フィルターナビゲーターに移動し、次を検索します スクリプトに含まれるもの

    を選択 スクリプトに含まれるもの 下のオプション システム UI

  2. フィルタリング 名前propUtils

  3. 方法を変更する ユーザ GetSysId の中に 脚本 分野。

    現在のスクリプト:

    UserGetSysId: function () { var opens_for; var user = new GlideRecord("sys_user"); user.addQuery(this.getParameter('フィールド'),this.getParameter('値')); user.query(); if (user.next()) opens_for=user.sys_id; var grInt = new GlideRecord('インタラクション'); grInt.initialize(); grInt.assigned_to= gs.getUserID(); grInt.type= '電話'; grInt.opened_for= open_for; var sysid=grInt.insert(); sysid を返します。}、

    インシデントの新しいサンプル コード:

    UserGetSysId: function () { var opens_for; var sysidlist = {}; var user = new GlideRecordSecure("sys_user"); user.addQuery(this.getParameter('フィールド'),this.getParameter('値')); user.query(); if(user.next()) {opened_for=user.sys_id;//return user.sys_id; var inc = new GlideRecordSecure('事件'); inc.addQuery('caller_id', opens_for); inc.addQuery('状態','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='電話'; inc.urgency=this.getParameter('IncUrgency'); inc.impact=this.getParameter('インパクト'); inc.short_description='受信した通話 '+ this.getParameter('value'); sysidlist.incsysid=inc.insert(); var grInt = new GlideRecordSecure('インタラクション'); grInt.initialize(); grInt.assigned_to= gs.getUserID(); grInt.type= '電話'; grInt.opened_for= open_for; var sysid=grInt.insert(); sysidlist.sysid=sysid; return JSON.stringify(sysidlist);//sysid; }、

UI ページのメソッドの変更
  1. フィルターナビゲーターに移動し、次を検索します UI ページ

    を選択 UI ページ 下のオプション システム UI

  2. フィルタリング UI ページ名前 そして検索してください エージェントデスクトップ

  3. 変更 スクリーンポップ スクリプトフィールドの関数。

    現在の機能:

    // スクリーンポップ関数 screenpop(callerani,callSessionInfo) { if(callerani===callSessionInfo.phoneNumber){ callerani=stripPrefixes(callerani); var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('フィールド', '電話'); gaout.addParam('値', callerani); gaout.getXMLWait(); var sysid = gaout.getAnswer(); openFrameAPI.openServiceNowForm({ エンティティ: 'インタラクション'、クエリ: 'sys_id='+sysid }); }

    インシデントのサンプルコード:

    // スクリーンポップ関数 screenpop(callerani,callSessionInfo) { var Impact=3; if(callSessionInfo.callAssociatedData.Impact != null && callSessionInfo.callAssociatedData.Impact != 未定義) { Impact=callSessionInfo.callAssociatedData.Impact.value; varIncUrgency=3; if(callSessionInfo.callAssociatedData.Urgency != null && callSessionInfo.callAssociatedData.Urgency != 未定義) { IncUrgency=callSessionInfo.callAssociatedData.Urgency.value; if(callerani===callSessionInfo.phoneNumber){ callerani=stripPrefixes(callerani); var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('フィールド', '電話'); gaout.addParam('値', callerani); gaout.addParam('IncUrgency', IncUrgency); gaout.addParam('影響', 影響); gaout.getXMLWait(); // var sysid = gaout.getAnswer(); var sysObj = JSON.parse(gaout.getAnswer()); if(sysObj.incsysid){ openFrameAPI.openServiceNowForm({ エンティティ: 'インシデント'、クエリ: 'sys_id='+sysObj.incsysid、'interaction_sys_id': sysObj.sysid }); }else{ openFrameAPI.openServiceNowForm({ エンティティ: 'インシデント'、クエリ: 'sys_id=-1'、'interaction_sys_id': sysObj.sysid }); window.localStorage.setItem("screenpopinteraction",JSON.stringify(sysObj)); }

発信者情報が CRM に存在し、新しいインシデントまたは進行中のインシデントがない場合、アプリケーションは新しいインシデントを開きます

ServiceNow でコードを変更する

新しい列を WebexCC IMP アクティビティ

を開きます WebexCC IMP アクティビティ

新しい列を追加します - InteractionsNumber

新しい列を追加 - IncidentNumber

クリック アップデート

新しい列を 電話ログ

を開きます 電話ログ

新しい列を追加します - InteractionsNumber

新しい列を追加 - IncidentNumber

WebexCC アクティビティ変換マップ

Open 変換マップ フィルターナビゲーターから

クリック WebexCC アクティビティ TransformMap

新規追加 - インタラクション番号マップ用

新規追加 - インシデント番号マップ用

[更新(Update)] をクリックします。

スクリプトインクルードの変更

  1. フィルター ナビゲーターに移動し、「スクリプト インクルード」を検索します。

    を選択 スクリプトに含まれるものシステム UI

  2. フィルタリング 名前propUtils.

  3. 方法を変更する 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 interactionsysid=actInfo.interaction_sys_id; var incnum=""; var intenum=""; actInfo['interaction_sys_id'] を削除します。actInfo['incident_sys_id'] を削除します。if( interactionsysid!= null && interactionsysid != 未定義){ var inte = new GlideRecordSecure('interaction'); //inte.get('sys_id', interactionsysid ); inte.addQuery('sys_id', interactionsysid ); inte.query(); if (inte.next()) { intenum=inte.number; // inte.setValue('state','Closed Complete'); inte.work_notes='状態をクローズに更新します。'; inte.update(); } } if( incsysid!= null && incsysid != 未定義){ 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("電話", this.getParameter('ani')); suser.query(); if(suser.next()) { var inc = new GlideRecordSecure('incident'); inc.addQuery('caller_id', suser.sys_id); inc.addQuery('状態','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 ページでのメソッドの変更

  1. フィルターナビゲーターに移動して検索します UI ページ

    [ システム UI] で [ UI ページ ] オプションを選択します

  2. 名前 で UI ページをフィルタし、 agentdesktop を検索します。

  3. 変更 nowActivity とスクリーンポップ スクリプト内の関数。

    現在の機能:

    function 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 != 未定義) { 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); } 関数 screenpop(callerani,callSessionInfo) { if(callerani===callSessionInfo.phoneNumber){ callerani=stripPrefixes(callerani); var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('フィールド', '電話'); gaout.addParam('値', callerani); gaout.getXMLWait(); // var sysid = gaout.getAnswer(); var sysObj = JSON.parse(gaout.getAnswer()); if(sysObj.incsysid){ openFrameAPI.openServiceNowForm({ エンティティ: 'インシデント'、クエリ: 'sys_id='+sysObj.incsysid、'interaction_sys_id': sysObj.sysid }); }else{ openFrameAPI.openServiceNowForm({ エンティティ: 'インシデント'、クエリ: '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 コネクタへの新しい通話ごとに、新しいインシデント レコードを作成します。

  1. フィルターナビゲーターでビジネスルールを検索する

  2. [新規] をクリックします。

    参考用のサンプルコード:

    関数 customcti() { var url = null;変数名 = sysparm_caller_name; eid = sysparm_caller_id; varphone = sysparm_caller_phone; var タスク ID = 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("従業員番号",eid); } if (userID == null && name != null && name != '') { userID = UserGetSysId("name", name); } if (userID == null && フォン != null && フォン != '') { userID = UserGetSysId("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;答え = URL; URL を返します; } function UserGetSysId(フィールド, 値) { var user = new GlideRecord("sys_user"); user.addQuery(フィールド, 値); user.query(); if (user.next()) は user.sys_id を返します。それ以外の場合は null を返します。}

    ビジネスルールの設定例

  3. クライアント呼び出し可能を有効にする

    コンピューター テレフォニーの統合 (CTI) インシデントの処理 としてマークされています 真実

  4. カスタム CTI ルールを使用してスクリーンポップ URL を更新します。 cti.do?sysparm_cti_rule=createIncident&sysparm_caller_phone=

sysparm_cti_rule=名前 どこ '名前' の名前です。 関数 のために呼び出されます CTI 処理中 デフォルトのスクリプトを使用するのではなく。

で関数を定義します。 システムスクリプト マークされたエントリ クライアント呼び出し可能

関数内の GlideRecord を挿入、更新、または削除する必要がある場合は、別の非クライアント呼び出し可能関数を呼び出して更新を実行します。


 

スクリプトをクライアント呼び出し可能にするには、sys_script エントリが表示されたときに表示されるフォームで、クライアント呼び出し可能チェック ボックスをオンにする必要があります。

クライアント呼び出し可能チェックボックスはデフォルトでは表示されません。 表示するには、歯車アイコンとスラッシュ バケット メカニズムを使用して、フォームに表示されるフィールドを変更する必要があります。

参考資料

カスタマイズ # 2 - Webex コンタクト センター アクティビティ テーブルに CAD 変数を追加する

概要

この記事では、ServiceNow CRM コネクタ用の Webex CC のインストール時に作成される、ServiceNow テーブルに追加の列を追加するプロセスについて詳しく説明します。

デフォルトでは、テーブルにはすぐに使用できるシステム フィールドと値が含まれています。

WebexCC Flow デザイナー内でさらにビジネス固有の変数 (CAD 変数) を作成し、それらの CAD 変数を ServiceNow 内に追加できる可能性があります。 通話後のアクティビティログ、これを永続化します。 通話後のアクティビティテーブル データ。


 
  • これは参照ドキュメントのみであり、IVR 内に顧客名を格納し、これを ServiceNow にポストする Customer Name というサンプル CAD 変数に対してこれを行う方法を示しています。

  • この構成は既存のコネクタのカスタマイズであるため、パートナーと顧客の ServiceNow 開発者が構成および管理します。

  • シスコは、コネクタをカスタマイズおよび拡張する方法に関する技術のみを提供します。

  • この記事の時点で、シスコ チームは、以下で説明する手法を使用して、アクティビティ ログおよびアクティビティ テーブルへの CAD 変数の追加のサポートを検証しました。

WebexCC アクティビティに列を追加
  1. ServiceNow の開発者バージョンでテーブルを編集します。

  2. スタジオ > Webex コンタクト センターに移動します

  3. WebexCC アクティビティ テーブルを選択します。

  4. たとえば、 顧客名

  5. WebexCC アクティビティ のリスト レイアウトを選択します。

新しいスクリプトを作成します。

 

更新セット XML を使用している場合、この手順は必要ありません。「webexcc.u_customername=actInfo.CustomerName」を propUtils に追加する必要があるのは 1 行だけです。

サンプルスクリプト

次の行を参照してください:webexcc.u_customername=actInfo.CustomerName; サポート コメント。

var propUtils2 = Class.create(); propUtils2.prototype = Object.extendsObject(global.AbstractAjaxProcessor,{ getWebexccProp: function () { var webexcprop = {}; 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("電話", 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(); sys_id を返します。}、タイプ: 'propUtils2' });
新しいスクリプト名で UI ページを編集します。

フロー デザイナーで CAD 変数を作成する

CAD 変数をデスクトップ レイアウトに追加する

デモのスクリーンショット

WebexCC アクティビティ テーブルに新しく追加された CAD 変数を表示します。