前提条件

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

ファイル名: webexc-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 のプロパティを編集します。

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

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

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

https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow から ServiceNow のデスクトップレイアウトをダウンロードしてください。

2

必要に応じて、デスクトップレイアウトファイルのプロパティを更新します。

3

Webex Contact Center 管理ポータルへ移動します。

4

Management Portal のナビゲーションバーから、 [プロビジョニング] > デスクトップレイアウトを選択します。

5

[新しいレイアウト] をクリックし、デスクトップレイアウトの詳細を入力します。

6

ServiceNow デスクトップレイアウトの場合は、次のファイルをアップロードします。

7

[Save] をクリックして、設定を保存します。

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

8

フィルターナビゲータの フィールドから、 Agent Workspace > Agent Workspace ホームに移動します。 にアクセスしてください。

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

以下のセクションでは、ライセンスされたエンタープライズ インスタンスに 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_webEXc.webexcactivitytable プロパティを必要に応じて編集します。

  1. システムプロパティ ページで、 x_caci_webEXc.webexcactivitytable をクリックします。

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

7

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

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

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

    • sn_openframe_user

    • x_caci_webexc.エージェント

    • Agent_workspace_user

    • x_caci_webexc.webexc_imp_activity_user

    • x_caci_webexc.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

フィルターナビゲータの フィールドから、 Agent Workspace > Agent Workspace ホームに移動します。 にアクセスしてください。

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

8

(オプション) [ ユーザグループ ] リストで、Webex コンタクトセンターデスクトップにアクセスできるユーザグループを、 利用可能 から 選択済みに移動します。

9

OpenFrame 電話を使用する前に、ServiceNow カスタム デスクトップ レイアウト JSON ファイルを Webex コンタクト センター管理ポータル にアップロードしていることを確認してください。 詳細については、 Webex コンタクトセンターでの ServiceNow デスクトップレイアウトのセットアップを参照してください。

1

https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow から ServiceNow のデスクトップレイアウトをダウンロードしてください。

2

必要に応じて、デスクトップレイアウトファイルのプロパティを更新します。

3

Webex Contact Center 管理ポータルへ移動します。

4

Management Portal のナビゲーションバーから、 [プロビジョニング] > デスクトップレイアウトを選択します。

5

[新しいレイアウト] をクリックし、デスクトップレイアウトの詳細を入力します。

6

ServiceNow デスクトップレイアウトの場合は、次のファイルをアップロードします。

7

[Save] をクリックして、設定を保存します。

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

8

フィルターナビゲータの フィールドから、 Agent Workspace > Agent Workspace ホームに移動します。 にアクセスしてください。

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

1

フィルターナビゲータの フィールドから インシデント > に移動します。未解決の問題。

2

発信者フィールドで右クリックして、[ 辞書の設定] をクリックします。

3

カンマ区切りの属性を追加 "ref_contributions=show_phone,.

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

4

フィルターナビゲータの フィールドから、 Agent Workspace > Agent Workspace ホームに移動します。 にアクセスしてください。

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

ServiceNow コンソールで Agent Desktop

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

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

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

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

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

フィルターナビゲータの フィールドから、 Agent Workspace > Agent Workspace ホームに移動します。 にアクセスしてください。

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

デスクトップの使用方法に関する情報は、『 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 を入力 検索基本設定名 ボックスに入力します。about:config ページにアクセスして基本設定を見つけます。

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

  4. 値を 0 に変更してください。

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

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

概要

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

顧客は ServiceNow でこれらの使用事例を自己管理する必要があります。 この設定は ServiceNow に固有のものであり、Webex コンタクト センターのソフトウェアや専門知識ではありません。


 

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

Cisco はサンプル ドキュメントのみを提供します。

以下のセクションでは、開発者およびエンタープライズ インスタンスのアクション ウィジェットをセットアップ、有効化、および管理する方法の詳細について説明します。

アクション ウィジェットの更新セットを確定

ライセンスを受けたエンタープライズ インスタンスの場合、ServiceNow コネクタ アクション ウィジェット、バージョン 1.9 を ServiceNow ストア からインストールしてください。

開発者インスタンスにアクション ウィジェットをセットアップするには、github リポジトリの次の場所で最新のシステム更新セット XML ファイルをダウンロードします: https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow/ActionsWidget。 ファイル名は webexc-servicenow-update-setv7-1-ActionsWidget.xml です。 アクション ウィジェットの更新セットを確定するには、「更新セットを確定する 」のステップ 2 9 を参照してください。

アクション ウィジェットを有効にする

isWidgetDisplayEnabled プロパティを使用して、[アクション] ウィジェットを有効にします。 カスタムデスクトップレイアウトのヘッドレスセクションにあるこのプロパティの値を変更してはいけません。 カスタム デスクトップ レイアウトのヘッドレス セクションでは、このプロパティは常に false に設定されます。 カスタム デスクトップ レイアウトのパネル セクションでのみ、プロパティの値を更新する必要があります。

カスタム デスクトップ レイアウトで [アクション] ウィジェットを有効にすると、次のアクションを実行できます。

  • 活動記録の管理— [活動記録] の [表示/編集] をクリックして、発信者に関連付けられた活動記録の一覧を表示します。
  • CRM オブジェクトの関連付け—[ 活動記録に関連付ける ] をクリックして、コールタイプ (着信または発信)、通話オブジェクト、通話メモなどの CRM オブジェクトを活動記録に追加します。。
  • インシデントの管理— [インシデントの作成]をクリックします。 発信者の詳細が事前に入力された状態で、新しいインシデントが作成されます。 インシデントに必要な更新を行うことができます。 要件に基づいて、インシデントごと、人事モジュールなど、レコードタイプを変更することを選択できます。 レコードタイプを変更するには、アクションウィジェット設定の typeOfRecord プロパティの値を変更します。 次に例を示します。
    { "COMP": "md-tab-パネル", "attribute": { "スロット": "パネル", "クラス": "ウィジェットペイン" }, "子供": [ { "コンプ": "エージェント x- Custom-desktop", "script": "https://cx-crmconnector.ciscoccservice.com/servicenow/v5/dist/index.js", "properties": { "isWidgetDisplayEnabled": true, "typeOfRecord" : "インシデントの作成" }, "wrapper": { "title": "Snow アクション !", "maximizeAreaName": "app-maximize-eria" } } ] }
  • ライブ通話メモの追加: テキスト領域に通話に関する追加情報を入力し、通話をまとめます。 活動記録に通話メモとして追加されたメモを確認できます。

ServiceNow でのコードの変更

台本に変更を加える
  1. フィルター ナビゲーターに移動して、 スクリプトのインクルード.

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

  2. [ 名前 ] をフィルタリングして次のように検索します: プロパティ ユーティリティ.

  3. 方法の変更 UserGetSysId スクリプトで修正することができます。

    キュレント:

    UserGetSysId: Function () { varopened_for; var user = new GlideRecord("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value')); user.query(); if (user.ext())opened_for=user.sys_id; var grInt = new GlideRecord('interaction'); grInt.Initialize(); grInt.aligned_to= gs.getUserID(); grInt.type= 'phone'; grInt.opened_for=opened_for; var sysid=grInt.挿入();システム ID を返します。},

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

    UserGetSysId: Function () { varopened_for; //インシデント関連の変更 var sysidlist = {}; var user = new GlideRecordSecure("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value')); user.query(); if(user.ext()) {opened_for=user.sys_id;//return user.sys_id; var inc = new GlideRecordSecure(' Incident'); inc.addQuery('caller_id', open_for); inc.addQuery('state','IN','1,2'); inc. orderByDesc('sys_created_on'); inc.query();もし ( Inc.ext()) { 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.挿入(); var grInt = new GlideRecordSecure('interaction'); grInt.Initialize(); grInt.aligned_to= gs.getUserID(); grInt.type= 'phone'; grInt.opened_for=opened_for; var sysid=grInt.挿入(); sysidlist.sysid=sysid; JSON.stringify(sysidlist); を返します。},

UI ページでのメソッドの変更
  1. フィルター ナビゲーターに移動して、 UI ページ

    選択する UI ページ の下で システム UI

  2. フィルタリングする 名前 に移動し、次を検索します エージェントデスクトップ.

  3. スクリーンポップ 機能する クライアントスクリプト

    現在の機能:

    // スクリーンポップ関数 screenpop(callerani,callSessionInfo) {if(callerani===callSessionInfo.phoneNumber){ callerani=s 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', クエリ: 'sys_id='+sysid });

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

    // スクリーンポップ関数 screenpop(callerani,callSessionInfo) {if(callerani===callSessionInfo.phoneNumber){ callerani=s 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', クエリ: 'sys_id='+sysObj. Incsysid, 'interaction_sys_id': sysObj.sysid }); }else{ openFrameAPI.openServiceNowForm({ entity: ' Incident',query: 'sys_id=-1', 'interaction_sys_id': sysObj.sysid //'a2ba0ba62fd121106446cc96f699b6b8' }); } }

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

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

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

概要

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

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

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


 

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

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

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

この記事の時点で、Cisco チームは、以下で説明する手法を使用して、アクティビティ ログとアクティビティ テーブルに CAD 変数を追加できることを確認しました。

WebexCC IMP 活動に列を追加する

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

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

    選択 Webex Contact Center

    または

  3. を選択します。 WebexCC IMP 活動

  4. 新しい列を追加します。例: CustomerName さん

電話ログに列を追加する

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

  2. 新しい列を追加します。例: CustomerName さん.

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

新しい列を追加します。例: CustomerName さん フィールド マッピング。

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

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

電話ログ リストの設定

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


 

1 行だけ追加してください webexc.u_customername=actInfo.CustomerName を PropUtils に追加します。

サンプルスクリプト

webexc.u_customername=actInfo.CustomerName; とサポートコメントを参照してください。

varPropUtils = Class.create(); PropUtils.prototype = Object.ex 頭出しオブジェクト(global.AbstractAjaxProcessor,{ getWebExcelProp: Function () { var webEXCPROPOP = {}; webexcProp.instanceurl= 'https://'+gs.getProperty('instance_name')+'.service-now.com/'; webEXCCPROP.url=gs.getProperties('x_caci_webexc.gent)//desktop_url_url_url_url_index.php?id=10000000000) / webexcprop.popupurl=gs.getProperties('x_caci_webexc.screenpop_url'); return JSON.stringify(webEXcProp); }, UserGetSysId: Function () { varopened_for; var user = new GlideRecord("sys_user"); user.addQuery( this.get パラメータ('field'),this.get パラメータ('value')); user.query();if (user.ext())opened_for=user.sys_id;//return user.sys_id;//else / / return null; var grInt = new GlideRecord('interaction'); grInt.Initialize(); grInt.aligned_to= gs.getUserID(); grInt.type= 'phone'; grInt.opened_for=opened_for; var sysid=grInt. varactInfo = JSON.parse(this.getParameter('actInfo')); var webexc = new GlideRecordSecure(gs.getProperties('x_caci_webexc.) webexcactivitytable')); webExcel.addQue ry("callobject",actInfo.CallObject); Webexc.query(); if(!webexc.next()) { webexc.ani =actInfo.ani; webexc.dnis =actInfo.dnis; webexc.queuename =actInfo.queuename; webexpc.wrapuptime =actInfo.wrapuptime; webexc.callduration =actInfo.CallDurationInSeconds; webexc.ringingtime =actInfo.ringingtime; webExcelc.activitydate =actInfo.ActivityDate; webexc.callobject =actInfo.CallObject; webexpc.calltype =actInfo.CallType; webexc.calldis ポジション=actInfo.CallDis ポジション; // アクティビティ ログに記録するために、この行が追加されます webexc.u_customername=actInfo.CustomerName; sys_id=webexc.挿入(); //インシデント記録のアクティビティ; varactInfoString =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();の場合 (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 は、CustomerName としても使用されています。これは、"actInfo.CustomerName"の上のサンプルシナリオの一部です。

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

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

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

インシデントの緊急度

インシデントの影響

[サービスの開始] スクリプトの更新

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

  1. フィルタナビゲータに移動して、「 スクリプトの追加」を検索します

    システム UI から スクリプトを含むオプションを選択します。

  2. PropUtils名前をフィルタリングします。

  3. 方法の変更 UserGetSysId [ スクリプト フィールドを選択します。

    現在のスクリプト:

    UserGetSysId: Function () { varopened_for; var user = new GlideRecord("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value')); user.query(); if (user.ext())opened_for=user.sys_id; var grInt = new GlideRecord('interaction'); grInt.Initialize(); grInt.aligned_to= gs.getUserID(); grInt.type= 'phone'; grInt.opened_for=opened_for; var sysid=grInt.挿入();システム ID を返します。},

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

    UserGetSysId: Function () { varopened_for; var sysidlist = {}; var user = new GlideRecordSecure("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value')); user.query(); if(user.ext()) {opened_for=user.sys_id;//return user.sys_id; var inc = new GlideRecordSecure(' Incident'); inc.addQuery('caller_id', open_for); inc.addQuery('state','IN','1,2'); inc. orderByDesc('sys_created_on'); inc.query();もし ( Inc.ext()) { 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.挿入(); var grInt = new GlideRecordSecure('interaction'); grInt.Initialize(); grInt.aligned_to= gs.getUserID(); grInt.type= 'phone'; grInt.opened_for=opened_for; var sysid=grInt.挿入(); sysidlist.sysid=sysid; Return JSON.stringify(sysidlist);//sysid; },

UI ページのメソッド変更
  1. フィルター ナビゲーターに移動して、 UI ページ

    [ UI ページ オプション システム UI

  2. フィルタリングする UI ページ名前 に移動し、次を検索します エージェントデスクトップ

  3. スクリーンポップ スクリプトフィールドに関数を入力します。

    現在の機能:

    // スクリーンポップ関数 screenpop(callerani,callSessionInfo) {if(callerani===callSessionInfo.phoneNumber){ callerani=s 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', クエリ: 'sys_id='+sysid }); }

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

    // スクリーンポップ関数 screenpop(callerani,callSessionInfo) { var Imfect=3; if(callSessionInfo.callAssociatedData.Impact != null && callSessionInfo.callassocidData.Impact != un 定義) {Impact=callSessionInfo.callAssociatedData.Impact.value;変数 IncUrgency=3; if(callSessionInfo.callSessionInfo.callAssociatedData.Urgency != null && callSessionInfo.callAssociatedData.Urgency != un 定義) { IncUrgency=callSessionInfo.callAssociatedData.Urgency.value; }if(callerani===callSessionInfo.phoneNumber){ callerani=s 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', クエリ: 'sys_id='+sysObj. Incsysid, 'interaction_sys_id': sysObj.sysid }); }else{ openFrameAPI.openServiceNowForm({ entity: ' Incident', クエリ: '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 アクティビティのトランスフォームマップ

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

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

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

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

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

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

  2. 次で 名前 をフィルタリングする プロパティ ユーティリティ.

  3. 方法の変更 setWebexcctable.

    Incident の新しいサンプルコード:

    setWebExcelctable: Function () { var sys_id=0; varactInfo = JSON.parse(this.getParameter('actInfo')); var webexc = new GlideRecordSecure(gs.getProperties('webexcactivitytable')); webexc.addQuery("u_callobject",actInfo.CallObject); Webexc.query(); if(!webEXC.Next()) { //インシデント記録のアクティビティ; //varactInfoString =this.getParameter('actInfo'); var incsysid=actInfo. Incident_sys_id; var interactivesysid=actInfo.interaction_sys_id; var incnum=""; var intenum=""; actInfo['interaction_sys_id']; を削除します。actInfo[' Incident_sys_id'] を削除します。if(interactionsysid!= null &&interactionsysid!= un 定義){ var inte = new GlideRecordSecure('interaction'); //inte.get('sys_id', interactivesysid ); inte.addQuery('sys_id', interactivesysid ); inte.query(); if (inte.next()) { intenum=inte.number; // inte.setValue('state','閉じる完了'); inte.work_notes='状態を終了済みに更新します。'; inte.update(); if( incsysid!= null && incsysid != un 定義){ var inci = new GlideRecordSecure(' Incident'); inci.addQuery('sys_id', incsysid ); inci.query();もし (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();もし ( Inc.ext()) { var JSONPretty = JSON.stringify(actInfo,null,2); inc.comments =JSONPretty; inc.update(); } } } webexpc.u_ani =actInfo.ani; webexc.u_dnis =actInfo.dnis; webexc.u_queuename =actInfo.queuename; webexpc.u_wrapuptime =actInfo.wrapuptime; webexc.u_callduration =actInfo.CallDurationInSeconds; webexpc.u_ringingtime =actInfo.ringingtime; webexc.u_activitydate =actInfo.ActivityDate; webexc.u_callobject =actInfo.CallObject; webexc.u_calltype =actInfo.CallType; webexc.u_calldis ポジション=actInfo.CallDis ポジション; webexpc.u_ Incidentnumber= Incnum; webexc.u_interactionsnumber=期間; sys_id=webexc.挿入(); sys_id を返します。},

UI ページでのメソッドの変更

  1. フィルター ナビゲーターに移動して、 UI ページ

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

  2. UI ページを「 名前 」でフィルタリングし、 gentdesktop を検索します。

  3. 今すぐアクティビティとスクリーンポップ スクリプトで機能します。

    現在の機能:

    FunctionnowActivities(actInfo, ani) { var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'setWebExcelctable'); gaout.addParam('actInfo', JSON.stringify(actInfo)); gaout.addParam('ani', StripPrefixes(ani)); gaout.getXML(SetCCsysId); }

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

    FunctionnowActivities(actInfo, ani) { var sysObjstr = window.localStorage.getItem("screenpopinteraction"); if(sysObjstr != null && sysObjstr != un 定義) { 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', 'setWebExcelctable'); gaout.addParam('actInfo', JSON.stringify(actInfo)); gaout.addParam('ani', StripPrefixes(ani)); gaout.getXML(SetCCsysId); Functionscreenpop(callerani,callSessionInfo) {if(callerani===callSessionInfo.phoneNumber){ callerani=s 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', クエリ: 'sys_id='+sysObj. Incsysid, 'interaction_sys_id': sysObj.sysid }); }else{ openFrameAPI.openServiceNowForm({ entity: ' 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 コネクタへのすべての新しい通話について、新しいインシデント レコードを作成します。

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

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

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

    関数 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; (fQuery == null) fQuery = ''; var view = sysparm_view; if (view == null || view == '') view = "itil"; var userID = null; (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"; (fQuery != null) url += "&sysparm_query=" + fQuery;回答 = url;リターン URL; Function UserGetSysId(field, value) { var user = new GlideRecord("sys_user"); user.addQuery(field, value); user.query();もし (user.ext()) が user.sys_id を返します。そうでない場合は null を返します。}

    ビジネスルールの設定例

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

    インシデント用のコンピュータテレフォニーインテグレーション (CTI) の処理中 は次のようにマークされています: True

  4. スクリーンポップ URL を次のカスタムルールで更新します:

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

sys_script エントリに関数を定義します。 クライアント呼び出し可能とマークされています。

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


 

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

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

参考資料

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

概要

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

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

よりビジネスに特化した変数 (CAD Variables) を WebexCC Flow デザイナー内で作成でき、これらの CAD 変数を ServiceNow 通話後アクティビティログ内に追加し、これを 通話後アクティビティのテーブル データです。


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

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

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

  • この記事の時点で、Cisco チームは以下で説明する手法を使用して、アクティビティ ログとアクティビティ テーブルに CAD 変数を追加できることを確認しました。

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

  2. スタジオ > Webex コンタクトセンターに移動してください。

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

  4. たとえば、 顧客名 です。

  5. WebexCC アクティビティのリストレイアウトを選択してください。

スクリプトインクルードの新規作成

 

更新セット XML を使用している場合、このステップは必要ありません。- "webexc.u_customername=actInfo.CustomerName" を 1 行だけ追加する必要があります。

サンプルスクリプト

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

varPropUtils2 = Class.create(); PropUtils2.prototype = Object.ex 外観 Object(global.AbstractAjaxProcessor,{getWebexcProp:関数() { var webEXCProp = {}; webexcProp.in インスタンス url= 'https://'+gs.getProperty('instance_name')+'.service-now.com/'; webexcprop.url=gs.getProperties('x_caci_webEXC.desktop_url); .popupurl=gs.getProperties('x_caci_webexc.screenpop_url'); return JSON.stringify(webEXcProp); }, setWebExcelctable: Function () { var sys_id=0; varactInfo = JSON.parse(this.getParameter('actInfo') ); var webexc = new GlideRecordSecure(gs.getProperties('x_caci_webexc.webexcactivitytable')); webexc.addQuery("callobject",actInfo.CallObject); webexc.query(); .ani =actInfo.ani; webexc.dnis =actInfo.dnis; webexc.queuename =actInfo.queuename; webexc.wrapuptime =actInfo.wrapuptime; webexc.callduration =actInfo.CallDurationInSeconds; webexc.ringingtime =actInfo.ringingtime; webexc.activitydate =actInfo.ActivityDate; webexc.callobject =actInfo.CallObject; webexc.calltype =actInfo.CallType; webexc.calldis ポジション= actInfo.CallDis ポジション; // アクティビティ ログに記録するために、この行が追加されます webexc.u_customername=actInfo.CustomerName; sys_id=webexc.挿入(); // インシデント記録の活動; varactInfoString =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();の場合 (Inc.Next()) { var JSONPretty = JSON.stringify(JSON.parse(acting 文字列),null,2); inc.comments =JSONPretty; inc.update(); sys_id; を返します。次を入力します: 'PropUtils2' });
新しいスクリプト名で UI ページを編集する

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

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

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

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