Integrate Webex コンタクトセンターと ServiceNow バージョン 1—レガシー
前提条件
現在、この機能はエージェントにのみ適用できます。
Webex Contact Center を ServiceNow CRM コンソールと統合する前に、次のものがあることを確認してください。
-
Webex Contact Center へのアクセス
-
https://admin.webex.com および Webex コンタクトセンター管理ポータルの Control Hub への管理者アクセス。 管理ポータルの URL は、お使いの地域固有の URL です。
-
デスクトップにアクセスできるエージェント。 デスクトップの URL は地域固有の URL です。
-
エージェントは、コンテンツ セキュリティ ポリシーの許可リストに追加された次のドメインにアクセスします。
-
*.service-now.com
許可リストの定義方法の詳細については、 記事「Webex コンタクトセンターのセキュリティ設定」を参照してください。
-
-
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 コンタクトセンターがサポートする ServiceNow のエディションは、バンクーバー、ユタ、トキア、ワシントン、ザナドゥです。 詳細については、 Webex コンタクトセンターと ServiceNow の連携を参照してください。
以下の 2 つの方法のいずれかに従います。
開発者インスタンスについては、開発者インスタンス ガイドの手順に従うことをおすすめします。
エンタープライズ ライセンスのインスタンスを所有している場合は、エンタープライズ ライセンス インスタンスのガイドラインに従ってください。
エンタープライズ ライセンス アプリと開発者サンドボックス インスタンスを混在させることはお勧めしません。
以下のセクションでは、開発者インスタンス用の ServiceNow コネクタをインストールする手順について説明します。
1 |
ServiceNow 開発者ポータルアカウントにログインして [ 管理 ] コンソールを開きます。 |
2 |
[アカウント] メニューの [マイインスタンス] 領域で、[構築の開始] をクリックします。 |
3 |
開発者インスタンスで、ウィンドウの左上にある フィルターナビゲーター フィールドから プラグインに移動します。 |
4 |
Openframeというタイトルの Openframe プラグインを検索します。 リストのスクロールが必要な場合があります。 |
5 |
[インストール] をクリックして、OpenFrame プラグインをインストールします。 |
6 |
[プラグインの有効化] ダイアログボックスで、[有効化] をクリックします。 |
7 |
プラグインのアクティベーションが完了したら、[閉じる &] をクリックします。 [フォーム の再読み込み] を [ プラグインのアクティベーション ] ダイアログボックスで行います。 |
8 |
プラグインのアクティベーションを確認するには、ウィンドウの左上部にある [ナビゲーターのフィルタ処理] フィールドで、[OpenFrame] に移動します。 |
9 |
[設定] をクリックして、OpenFrame プラグインが [OpenFrame設定] リストに表示されていることを確認します。 |
1 |
Github リポジトリの最新のシステム更新セット XML ファイルを次の場所にダウンロードします: https://desktop.wxcc-jp1.cisco.com。 ファイル名: webexc-servicenow-update-setV(X).xml |
2 |
ServiceNow インスタンスで、ウィンドウの左上にある フィルターナビゲーター フィールドから します。 |
3 |
[XML から更新セットをインポート] リンクをクリックします。 |
4 |
[ファイルの選択]をクリックし、システム更新セット XML ファイルを選択して、[ アップロード] をクリックします。
更新セットが [取得した更新セット] リストに表示され、[ロード済み] 状態に表示されます。
|
5 |
取得した更新セット リストから、[更新セットファイル名] (リンク) をクリックして更新セットを開きます。 |
6 |
ウィンドウの右上部にある [プレビュー更新セット] をクリックして、問題の更新セットを確認します。 |
7 |
プレビューが完了したら、[更新セットのプレビュー] ダイアログボックスで [ 閉じる ] をクリックします。 |
8 |
[更新セットをコミットする] をクリックします。 |
9 |
更新セットの確定が完了したら、[ 更新セット確定 ] ダイアログボックスで [ 閉じる ] をクリックします。 |
1 |
ウィンドウ左上の フィルタナビゲータの フィールドに |
2 |
[システムプロパティ] ページで、更新された日付でプロパティを並べ替えます。 次の Webex Contact Center のプロパティが表示されていることを確認してください。 |
3 |
[agentdesktop_url] をクリックして、[システムプロパティの agentdesktop_url] ページを開きます。 |
4 |
[ 値 ] フィールドに、運用地域に応じて Webex コンタクトセンターデスクトップの URL を入力します。 |
5 |
[更新(Update)] をクリックして変更を保存します。 |
6 |
(オプション)アクティビティテーブル名を変更するには、必要に応じて webexccactivitytable のプロパティを編集します。 システムプロパティ ページで、 webexcactivitytable をクリックします。 必要に応じて 値 フィールドを変更します。 |
7 |
(オプション) 以下の方法でユーザグループを追加します。
|
1 |
[ナビゲーターのフィルタ処理] フィールドで、 に移動します。 |
2 |
[新規] をクリックします。 |
3 |
URL の次のプロパティを入力します:
|
4 |
URL フィールドの右にある ロック ボタンをクリックして追加 |
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 |
フィルターナビゲータの フィールドから に移動します。 |
以下のセクションでは、ライセンスされたエンタープライズ インスタンスに ServiceNow コネクタをインストールする手順について説明します。
1 |
ServiceNow 開発者ポータルアカウントにログインして 管理 コンソールを開きます。 |
2 |
[アカウント] メニューの [マイインスタンス] 領域で、[構築の開始] をクリックします。 |
3 |
開発者インスタンスで、ウィンドウの左上にある フィルターナビゲーター フィールドから プラグインに移動します。 |
4 |
Openframeというタイトルの Openframe プラグインを検索します。 リストのスクロールが必要な場合があります。 |
5 |
[インストール] をクリックして、OpenFrame プラグインをインストールします。 |
6 |
[プラグインの有効化] ダイアログボックスで、[有効化] をクリックします。 |
7 |
プラグインのアクティベーションが完了したら、[閉じる &] をクリック [フォーム の再読み込み] を [ プラグインのアクティベーション ] ダイアログボックスに開きます。 |
8 |
プラグインのアクティベーションを確認するには、ウィンドウの左上部にある [ナビゲーターのフィルタ処理] フィールドで、[OpenFrame] に移動します。 |
9 |
[設定] をクリックして、OpenFrame プラグインが [OpenFrame設定] リストに表示されていることを確認します。 |
エンタープライズ ライセンスを持つインスタンスは、ServiceNow ストアから直接 Webex コンタクト センター アプリケーションをインストールできます。
ServiceNow ストア https://store.servicenow.com/sn_appstore_store.do#!/store/application/6c8e2a4edbc73410e1c75e25ca961947 から Webex コンタクトセンター パッケージをダウンロードしてインストールします。 |
1 |
ウィンドウの左上部にある [ナビゲーターのフィルタ処理] フィールドに、 |
2 |
[システムプロパティ] ページで、更新された日付でプロパティを並べ替えます。 次の Webex Contact Center のプロパティが表示されていることを確認してください。 |
3 |
[agentdesktop_url] をクリックして、[システムプロパティの agentdesktop_url] ページを開きます。 |
4 |
[ 値 ] フィールドに、Webex コンタクトセンターデスクトップの運用地域に応じた URL を入力します。 |
5 |
[更新(Update)] をクリックして変更を保存します。 |
6 |
(オプション) アクティビティ テーブル名を変更するには、 x_caci_webEXc.webexcactivitytable プロパティを必要に応じて編集します。
|
7 |
(オプション) 以下の方法でユーザグループを追加します。
|
1 |
[ナビゲーターのフィルタ処理] フィールドで、 に移動します。 |
2 |
[新規] をクリックします。 |
3 |
URL の次のプロパティを入力します:
|
4 |
[ URL ] をクリックします。 ロック ボタンを選択して追加 |
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 |
Management Portal のナビゲーションバーから、[ を選択します。 |
5 |
[新しいレイアウト] をクリックし、デスクトップレイアウトの詳細を入力します。 |
6 |
ServiceNow デスクトップレイアウトの場合は、次のファイルをアップロードします。 |
7 |
[Save] をクリックして、設定を保存します。 ServiceNow コンソール内で Webex コンタクト センター デスクトップを開始できるようになりました。 |
8 |
フィルターナビゲータの フィールドから に移動します。 |
1 |
フィルターナビゲータの フィールドで [ インシデント ] に移動します。未解決の問題。 |
2 |
発信者フィールドで右クリックして、[ 辞書の設定] をクリックします。 |
3 |
カンマ区切りの属性を追加 ServiceNow コンソール内で Webex コンタクト センター デスクトップを開始できるようになりました。 |
4 |
フィルターナビゲーターの フィールドから に移動します。 |
WebRTC for Salesforce (SFDC) および Microsoft Dynamics (MS Dynamics) コネクタのみを使用した Agent Desktop へのログインをサポートしています。
ServiceNow コンソールで Agent Desktop
発信する前に、次の操作を実行してください。
-
アウトダイヤル エントリポイントを作成し、アウトダイヤルのエントリポイント戦略を設定する。
-
エージェントプロファイルのアウトダイヤル ANI を有効にする。
-
ダイヤル番号からエントリポイントへのマッピングにアウトダイヤル ANI を設定します。
詳細については、『Cisco Webex Contact Center セットアップおよび管理ガイド』の「プロビジョニング」の章を参照してください。
フィルターナビゲータの フィールドから に移動します。
デスクトップの使用方法に関する情報は、Webex コンタクトセンターヘルプの エージェント タブを参照してください。
概要
この記事では、ServiceNow CRM コネクタのビジネス ルールをカスタマイズするいくつかの方法について説明します。 ServiceNow に固有のビジネス ルールに基づいて、ユース ケースをカスタマイズする方法について詳しく説明します。
顧客は ServiceNow でこれらの使用事例を自己管理する必要があります。 設定は ServiceNow に固有のものであり、Webex コンタクトセンターのソフトウェアや専門知識ではありません。
これはビジネスルールの変更を支援するための参照ドキュメントです。 ServiceNow の開発者は、ビジネス ルールを作成および管理し、サポートを提供します。
Cisco はサンプル ドキュメントのみを提供します。
以下のセクションでは、開発者およびエンタープライズ インスタンスのアクション ウィジェットをセットアップ、有効化、および管理する方法の詳細について説明します。
アクション ウィジェットの更新セットを確定
ライセンスを持つエンタープライズ インスタンスの場合は、 ServiceNow ストアから最新の Webex コンタクトセンター アプリをインストールしてください。
開発者インスタンスにアクション ウィジェットをセットアップするには、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", "プロパティ": { "isWidgetDisplayEnabled": true, "typeOfRecord" : "インシデントの作成" }, "wrapper": { "title": "Snow アクション !", "maximizeAreaName": "app-maximize-eria" } } ] }
- ライブ通話メモの追加: テキスト領域に通話に関する追加情報を入力し、通話をまとめます。 活動記録に通話メモとして追加されたメモを確認できます。
ServiceNow でのコードの変更
台本に変更を加える-
フィルター ナビゲーターに移動して、
スクリプトのインクルード
.[ スクリプトのインクルード の下で システム UI。
-
フィルタリングする 名前 に移動し、次を検索します
プロパティ ユーティリティ
. -
方法の変更
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 ページ
を検索します。[システム UI ] 下の UI ページを選択します。
-
[ 名前 ] をフィルタリングして次の検索を行います:
エージェントデスクトップ
. -
を
スクリーンポップ
クライアントスクリプト の関数です。現在の機能:
// スクリーンポップ関数 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 活動に列を追加する
-
開発者バージョンの ServiceNow でテーブルを編集します。
-
フィルター ナビゲーターに移動して、stodo を検索します。
選択
Webex Contact Center
または
-
を選択します。
WebexCC IMP 活動
表 -
新しい列を追加します。例:
CustomerName さん
電話ログに列を追加する
-
電話ログテーブルを編集します。
-
新しい列を追加します。例:
CustomerName さん
.
WebexCC アクティビティ変換マップ
新しい列を追加します。例: CustomerName さん
フィールド マッピング。
リストの列をパーソナライズする
Service Now が推奨しているように、選択アクションを作成から無視に変更します。
電話ログ リストの設定
スクリプトインクルードに移動
1 行だけ追加してください webexc.u_customername=actInfo.CustomerName
を PropUtils に追加します。
次の行を参照してください。 webexpc.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 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; // else // return 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 は、上記の「actInfo.CustomerName」に示されているサンプル スクリプトの一部である 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 の下にある スクリプト インクルード を選択します。
-
名前 をフィルター
プロパティユーティリティ
. -
方法を変える
Webexcctable を設定する
.インシデントの新しいサンプルコード:
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=""; delete actInfo['interaction_sys_id']; delete actInfo['incident_sys_id']; if(interactionsysid!= null && interactionsysid != undefined){ 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 != 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(); } return sys_id; },
UI ページでのメソッドの変更
-
フィルターナビゲータに移動して検索
UI ページ
選択してください UI ページ オプション システム UI。
-
UI ページをフィルタリングする 名前 そして検索
エージェントデスクトップ
。 -
変更する
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 コネクタへの新しい呼び出しごとに、新しいインシデント レコードを作成します。
フィルターナビゲータでビジネスルールを検索する
[新規] をクリックします。
参考サンプルコード:
function 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) 処理は True としてマークされています 。
スクリーンポップ URL をカスタム CTI ルール " cti.do?sysparm_cti_rule=createIncident&sysparm_caller_phone=" で更新します
sysparm_cti_rule=name ('name' は、デフォルトのスクリプトを使用するのではなく、 CTI 処理 のために呼び出される 関数の名前です。
sys_script エントリで クライアント呼び出し可能としてマークされた関数を定義します。
関数内で GlideRecord を挿入、更新、または削除する必要がある場合は、別の非クライアント呼び出し可能関数を呼び出して更新を実行します。
スクリプトをクライアント呼び出し可能にするには、sys_script エントリが表示されるときに表示されるフォームでクライアント呼び出し可能チェック ボックスをオンにする必要があります。
クライアント呼び出し可能チェック ボックスはデフォルトでは表示されません。 表示するには、歯車アイコンとスラッシュ バケット メカニズムを使用して、フォームに表示されるフィールドを変更する必要があります。
カスタマイズ # 2 - Webex コンタクト センター アクティビティ テーブルに CAD 変数を追加する
概要この記事では、ServiceNow CRM コネクタ用の Webex CC のインストール時に作成される ServiceNow テーブル (webexcc_activity) に追加の列を追加するプロセスについて詳しく説明します。
デフォルトでは、テーブルにはすぐに使用できるシステム フィールドと値が含まれています。
WebexCC フロー デザイナー内でビジネス固有の変数 (CAD 変数) をさらに作成し、それらの CAD 変数を ServiceNow 通話後アクティビティ ログ内に追加し、これを 通話後アクティビティ テーブル データに保持することができます。
-
これは参照ドキュメントのみであり、IVR 内に顧客名を保存し、これを ServiceNow に投稿する Customer Name というサンプル CAD 変数に対してこれを行う方法を示しています。
-
これは既存のコネクタのカスタマイズであるため、パートナー + 顧客の ServiceNow 開発者がこの構成を構成および管理します。
-
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 変数を表示します。
