Integrate Webex コンタクトセンターと ServiceNow
Webex Contact Center を ServiceNow CRM コンソールと統合すると、ServiceNow 内から Webex Contact Center デスクトップを起動できます。
前提条件
現在、この機能はエージェントにのみ適用できます。
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 ] フィールドの右側にある [ ロック ] ボタンをクリックして x_caci_webexc_gentdesktop を追加します .do |
5 |
(オプション) [ユーザ/エージェントグループ] を選択して構成を指定します。 |
6 |
[送信(Submit)] をクリックします。 URL がリンクとして表示されます。 |
7 |
フィルターナビゲータの フィールドから に移動します。 |
8 |
(オプション) [ ユーザグループ ] リストで、Webex コンタクトセンターデスクトップにアクセスできるユーザグループを、[利用可能] から から移動します 。a56>から までまで選択済みです。 |
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 |
フィルターナビゲーターの フィールドから に移動します。 |
1 |
フィルターナビゲータの フィールドから インシデント > に移動します。未解決の問題。 |
2 |
発信者フィールドで右クリックして、[ 辞書の設定] をクリックします。 |
3 |
カンマ区切りの属性を追加 ServiceNow コンソール内で Webex コンタクト センター デスクトップの使用を開始できるようになりました。 |
4 |
フィルターナビゲーター フィールドから に移動します。 |
ServiceNow コンソールで Agent Desktop
発信する前に、次の操作を実行してください。
-
アウトダイヤル エントリポイントを作成し、アウトダイヤルのエントリポイント戦略を設定する。
-
エージェントプロファイルのアウトダイヤル ANI を有効にする。
-
ダイヤル番号からエントリポイントへのマッピングにアウトダイヤル ANI を設定します。
詳細については、『Cisco Webex Contact Center セットアップおよび管理ガイド』の「プロビジョニング」の章を参照してください。
フィルターナビゲータの フィールドから に移動します。
デスクトップの使用方法に関する情報は、Webex コンタクトセンターヘルプの エージェント タブを参照してください。
概要
この記事では、ServiceNow CRM コネクタのビジネス ルールをカスタマイズするいくつかの方法について説明します。 ServiceNow に固有のビジネス ルールに基づいて、ユース ケースをカスタマイズする方法について詳しく説明します。
顧客は ServiceNow でこれらの使用事例を自己管理する必要があります。 設定は ServiceNow に固有であり、Webex コンタクト センターのソフトウェアや専門知識ではありません。
これはビジネスルールの変更を支援するための参照ドキュメントです。 ServiceNow の開発者は、ビジネス ルールを作成および管理し、サポートを提供します。
Cisco はサンプル ドキュメントのみを提供します。
以下のセクションでは、開発者およびエンタープライズ インスタンスのアクション ウィジェットをセットアップ、有効化、および管理する方法の詳細について説明します。
アクション ウィジェットの更新セットを確定
ライセンスを持つエンタープライズ インスタンスの場合、 ServiceNow ストアから最新の Webex コンタクトセンター アプリをインストールしてください。
開発者インスタンスにアクション ウィジェットをセットアップするには、github リポジトリの https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow/ActionsWidget で利用可能な最新のシステム更新セット XML ファイルをダウンロードします。 ファイル名は 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 でのコードの変更
台本に変更を加える-
フィルター ナビゲーターに移動して、
スクリプトのインクルード
.システム 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 テーブルに余分な列を追加するプロセス (webexc_imp_activity) と、ServiceNow CRM Connector の Webex CC のインストール時に 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 に追加します。
サンプルスクリプト
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 変数を作成する
インシデントの緊急度インシデントの影響
[サービスの開始] スクリプトの更新
スクリプト インクルードの更新
-
フィルタナビゲータに移動して、「
スクリプトの追加」を検索します
システム UI の スクリプトインクルード オプションを選択します。
-
PropUtils で
名前
をフィルタリングします。 -
方法の変更
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 ページ
] を検索します。[システム 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) { var Imfect=3; if(callSessionInfo.callAssociatedData.Impact != null && callSessionInfo.callAssociatedData.Impact != un 定義) { Impat=callSessionInfo.callAssociatedData.Impact.value;変数 IncUrgency=3; if(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
次をクリックします。 更新。
新しい列を 電話ログ
表
[ 電話ログ
表
WebexCC アクティビティ変換マップ
Open 変換マップ
フィルター ナビゲーターから
次をクリックします。 WebexCC アクティビティのトランスフォームマップ
[更新(Update)] をクリックします。
スクリプト インクルードの変更
-
フィルター ナビゲーターに移動し、「script インクルード」を検索します。
システム UI で インクルードスクリプト を選択します。
-
次の条件で 名前 をフィルタリングする
プロパティ ユーティリティ
. -
方法の変更
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 ページでのメソッドの変更
-
フィルター ナビゲーターに移動して、
UI ページ
[システム UI] の オプションを選択し、 UI ページ オプションを選択します。
-
UI ページを 名前 でフィルタリングし、
gentdesktop
を検索します。 -
を
今すぐアクティビティとスクリーンポップ
スクリプトで機能します。現在の機能:
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 コネクタへのすべての新しい通話について、新しいインシデント レコードを作成します。
フィルター ナビゲーターでのビジネス ルールの検索
[新規] をクリックします。
参照用のサンプルコード:
関数 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 を返します。}
ビジネスルールの設定例
クライアント呼び出し可能オブジェクトを有効にする
インシデント用のコンピュータテレフォニーインテグレーション (CTI) の処理中 は次のようにマークされています: True。
カスタム CTI ルールでスクリーンポップ URL を更新します " cti.do?sysparm_cti_rule=create インシデント&sysparm_caller_phone= "
[ sysparm_cti_rule=name '名前' は、 機能 の呼び出し期間 CTI 処理中 既定のスクリプトを使用する代わりに。
関数を sys_script エントリがマークされました クライアント呼び出し可能。
関数で GlideRecords を挿入、更新、または削除する必要がある場合、別の非クライアント呼び出し可能関数を呼び出して更新を実行します。
スクリプトをクライアント呼び出し可能にするには、sys_script エントリが表示されるときに表示されるフォームの [クライアント呼び出し可能] チェックボックスをオンにする必要があります。
[クライアント呼び出し可能] チェックボックスは既定では表示されません。 表示するには、歯車アイコンとスラッシュ バケツ メカニズムを使用してフォームに表示されるフィールドを変更する必要があります。
カスタマイズ # 2 - Webex コンタクト センター アクティビティ テーブルに CAD 変数を追加
概要この記事では、ServiceNow テーブルに列を追加するプロセス、つまり ServiceNow CRM コネクタの Webex CC のインストール時に作成される webexc_activity のプロセスについて詳しく説明します。
既定では、テーブルにはすぐに使用できるシステムフィールドと値が含まれています。
WebexCC Flow デザイナー内で、よりビジネスに特化した変数 (CAD 変数) を作成することもできます。これらの CAD 変数を、ServiceNow 通話後アクティビティ ログ に追加し、 事後活動テーブルの データです。
-
これは参照ドキュメントのみです。IVR 内に顧客名を保存し、これを ServiceNow に投稿する Customer Name というサンプル CAD 変数に対してこれを行う方法を示します。
-
この構成は既存のコネクタのカスタマイズであるため、パートナーと顧客の ServiceNow 開発者が構成および管理します。
-
Cisco は、コネクタをカスタマイズおよび拡張する方法に関するテクニックのみを提供します。
-
この記事の時点で、Cisco チームは以下で説明する手法を使用して、アクティビティ ログとアクティビティ テーブルに CAD 変数を追加できることを確認しました。
開発者バージョンの ServiceNow でテーブルを編集します。
WebexCC アクティビティ 表を選択します。
たとえば、 顧客名 です。
WebexCC アクティビティのリストレイアウトを選択してください。
更新セット XML を使用している場合、この手順は必要ありません。- "webexc.u_customername=actInfo.CustomerName" を 1 行だけ追加するだけです。
サンプルスクリプト
webexc.u_customername=actInfo.CustomerName; とサポートのコメントを参照してください。
varPropUtils2 = Class.create(); PropUtils2.prototype = Object.ex 頭出しオブジェクト(global.AbstractAjaxProcessor,{getWebExcelProp:関数() { var webEXCProp = {}; webexcProp.instanceurl='https://'+gs.getProperty('instance_name')+'.service-now.com/'; webexcprop.url=gs.getProperties('x_caci_webexc.). .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 変数を表示します。