Webex Contact Center を ServiceNow と統合する(バージョン 1 - レガシー)
Webex Contact Center を ServiceNow CRM コンソールと統合すると、ServiceNow 内から Webex Contact Center デスクトップを起動できます。
前提条件
現在、この機能はエージェントにのみ適用されます。
Webex Contact Center を ServiceNow CRM コンソールと統合する前に、以下の条件を満たしてください。
-
Webex Contact Center にアクセスします。
-
https://admin.webex.com で Control Hub および Webex Contact Center 管理ポータルへの管理者アクセス。管理ポータルの URL は、お客様の地域固有の情報です。
-
デスクトップにアクセスできるエージェント 。デスクトップの URL は 地域 固有です。
-
コンテンツ セキュリティ ポリシー許可リストに追加された次のドメインへのエージェント アクセス:
-
*.service-now.com
許可リストを定義する方法についての詳細は、記事「Webex Contact Center の セキュリティ設定」を参照してください。
-
-
A ServiceNow 開発者ポータルアカウント。アカウントを作成するには、 の ServiceNow 開発者ポータルに移動して、[ https://developer.servicenow.com/dev.do サインアップ] をクリックし、[作成の開始] をクリックします。
-
で次のファイルにアクセスします https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow。
-
ServiceNow アップデートセット (XML)
-
ServiceNow Contact Center デスクトップ レイアウト (JSON)
-
- Webex Contact Center がサポートする ServiceNow エディションは、バンクーバー、ユタ、トキヤ、ワシントン、ザナドゥです。詳細については、「Webex Contact Center と ServiceNow の連携」を参照してください。
以下の 2 つの方法のいずれかに従います。
デベロッパー インスタンスの場合は、デベロッパー インスタンス ガイドの手順に従ってください。
エンタープライズライセンスのインスタンスを所有している場合は、エンタープライズライセンスのインスタンスのガイドラインに従ってください。
エンタープライズライセンスのアプリと開発者サンドボックスインスタンスの混合は推奨しません。
次のセクションでは、デベロッパー インスタンス用の ServiceNow コネクタをインストールする手順について説明します。
1 |
ServiceNow 開発者ポータル アカウントにサインインし、管理 コンソールを開きます。 |
2 |
[アカウント] メニューの [ マイインスタンス] エリアから [作成 の開始] をクリックします。 |
3 |
デベロッパー インスタンスで、ウィンドウの左上の [フィルター ナビゲータ] フィールドから [プラグイン] に移動します。 |
4 |
タイトル「Openframe」の Openframe プラグインを 検索します。リストをスクロールする必要がある場合があります。 |
5 |
[インストール ] を クリックして Openframe プラグインをインストールします。 |
6 |
[プラグインのアク ティベート] ページ ダイアログ ボックスアクティブにする] をクリック します。 |
7 |
プラグインのアクティベーションが完了したら、[プラグインのアクティベーション ] ダイアログボックスで [閉じて再読み込み ] をクリックします。 |
8 |
プラグインのアクティベーションを確認するには、ウィンドウ 左上の Filter Navigator フィールドから 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 |
[取得した更新セット] リストから、[更新セットファイル名(Update Set File Name)] (リンク) をクリックして、更新セットを開きます。 |
6 |
ウィンドウ右上で、[更新セットのプレビュー ] をクリック して、問題の更新セットをチェックします。 |
7 |
プレビューが完了したら、[プレビューの設定] ダイアログボックスで [閉じる] をクリックします。 |
8 |
[Commit Update Set] をクリックします。 |
9 |
更新設定のコミットが完了したら、[設定コミットメント ] ダイアログボックスで [閉じる ] をクリックします。 |
1 |
ウィンドウ左上の [フィルター ナビゲータ] フィールドで、 |
2 |
[システムプロパティ ] ページ で、更新日でプロパティをソートします。次の Webex Contact Center プロパティ が表示されます。 |
3 |
クリック agentdesktop_url すると [システムプロパティ] ページが開 agentdesktop_url きます。 |
4 |
[値] フィールドに、運用地域に従って Webex Contact Center デスクトップの URL を入力します。 |
5 |
[更新 ] を クリックして変更を保存します。 |
6 |
(オプション)アクティビティ表の名前を変更するには、必要に 応じて Webexccactivitytable プロパティ を編集します。 [システムプロパティ ] ページで、[webexccactivitytable] をクリックします。 必要に応じて [値 ] フィールドを変更します。 |
7 |
(オプション)次の方法でユーザ グループを追加します。
|
1 |
[Filter navigator] フィールドから [ |
2 |
[新規] をクリックします。 |
3 |
URL の次のプロパティを入力します。
|
4 |
[URL] フィールドの右側にある [ロック] ボタンをクリックし、URL として |
5 |
(オプション)設定を割り当てるユーザ/エージェントグループを選択します。 |
6 |
[送信] をクリックします。URL はリンクとして表示されます。 |
7 |
OpenFrame 電話を使用する前に、ServiceNow のカスタム デスクトップ レイアウト JSON ファイルを Webex Contact Center 管理ポータルにアップロードしていることを確認してください。詳細については、「Webex Contact Center で ServiceNow デスクトップ レイアウトをセットアップする」を参照してください。 |
1 |
https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow から ServiceNow のデスクトップ レイアウトをダウンロードします。 |
2 |
必要に応じて、デスクトップ レイアウト ファイルのプロパティを更新します。 |
3 |
Webex Contact Center 管理ポータルに 移動します。 |
4 |
管理ポータルナビゲーションバーから、 を選択します。 |
5 |
[新 しいレイアウト] をクリックして、デスクトップ レイアウトの詳細を入力します。 |
6 |
ServiceNow デスクトップレイアウト JSON ファイルをアップロードします。 |
7 |
[保存] をクリックして、構成を保存します。 ServiceNow コンソール内で Webex Contact Center デスクトップ を開始できます。 |
8 |
[フィルター ナビゲータ] フィールドから に移動します。 |
次のセクションでは、ライセンスされたエンタープライズ インスタンス用の ServiceNow コネクタをインストールする手順について説明します。
1 |
ServiceNow 開発者ポータル アカウントにサインインし、管理 コンソールを開きます。 |
2 |
[アカウント] メニューの [ マイインスタンス] エリアから [作成 の開始] をクリックします。 |
3 |
デベロッパー インスタンスで、ウィンドウの左上の [フィルター ナビゲータ] フィールドから [プラグイン] に移動します。 |
4 |
タイトル「Openframe」の Openframe プラグインを 検索します。リストをスクロールする必要がある場合があります。 |
5 |
[インストール ] を クリックして Openframe プラグインをインストールします。 |
6 |
[プラグインのアク ティベート] ページ ダイアログ ボックスアクティブにする] をクリック します。 |
7 |
プラグインのアクティベーションが完了したら、[プラグインのアクティベーション ] ダイアログボックスで [閉じて再読み込み ] をクリックします。 |
8 |
プラグインのアクティベーションを確認するには、ウィンドウ 左上の Filter Navigator フィールドから OpenFrame に 移動します。 |
9 |
[ 構成] を クリックして、OpenFrame プラグインが OpenFrame 設定リスト に表示されます 。 |
エンタープライズ ライセンスを持つインスタンスは、ServiceNow ストアから直接 Webex Contact Center アプリケーションをインストールできます。
ServiceNow ストアから Webex Contact Center パッケージをダウンロードしてインストールします。https://store.servicenow.com/sn_appstore_store.do#!/store/application/6c8e2a4edbc73410e1c75e25ca961947 |
1 |
ウィンドウ左上 のフィルター フィルター フィールドで、.list を入力 |
2 |
[システムプロパティ ] ページ で、更新日でプロパティをソートします。次の Webex Contact Center プロパティ が表示されます。 |
3 |
クリック agentdesktop_url すると [システムプロパティ] ページが開 agentdesktop_url きます。 |
4 |
[値] フィールドに、運用地域に従って Webex Contact Center デスクトップの URL を入力します。 |
5 |
[更新 ] を クリックして変更を保存します。 |
6 |
(オプション) アクティビティ テーブル名を変更するには、必要に応じて x_caci_webexcc.webexccactivitytable プロパティを編集します。
|
7 |
(オプション)次の方法でユーザ グループを追加します。
|
1 |
[Filter navigator] フィールドから [ |
2 |
[新規] をクリックします。 |
3 |
URL の次のプロパティを入力します。
|
4 |
[URL] フィールドの右側にある [ロック] ボタンをクリックし、URL として |
5 |
(オプション)設定を割り当てるユーザ/エージェントグループを選択します。 |
6 |
[送信] をクリックします。URL はリンクとして表示されます。 |
7 |
[フィルター ナビゲータ] フィールドから に移動します。 |
8 |
(オプション)[ユーザー グループ] リストで、Webex Contact Center デスクトップにアクセスできるユーザー グループを [利用可能] から [選択済み] に移動します。 |
9 |
OpenFrame 電話を使用する前に、ServiceNow のカスタム デスクトップ レイアウト JSON ファイルを Webex Contact Center 管理ポータルにアップロードしていることを確認してください。詳細については、「Webex Contact Center で ServiceNow デスクトップ レイアウトをセットアップする」を参照してください。 |
1 |
https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow から ServiceNow のデスクトップ レイアウトをダウンロードします。 |
2 |
必要に応じて、デスクトップ レイアウト ファイルのプロパティを更新します。 |
3 |
Webex Contact Center 管理ポータルに 移動します。 |
4 |
管理ポータルナビゲーションバーから、 を選択します。 |
5 |
[新 しいレイアウト] をクリックして、デスクトップ レイアウトの詳細を入力します。 |
6 |
ServiceNow デスクトップレイアウト JSON ファイルをアップロードします。 |
7 |
[保存] をクリックして、構成を保存します。 ServiceNow コンソール内で Webex Contact Center デスクトップ を開始できます。 |
8 |
[フィルター ナビゲータ] フィールドから に移動します。 |
1 |
[フィルター ナビゲータ] フィールドから、[インシデント] > [インシデントを開く] に移動します。 |
2 |
発信者フィールドを右クリックし、[辞書の設定] をクリックします。 |
3 |
カンマ区切りの属性 ServiceNow コンソール内で Webex Contact Center デスクトップの使用を開始できるようになりました。 |
4 |
[フィルター ナビゲータ] フィールドから に移動します。 |
現在、デスクトップ オプション (WebRTC) を使用したエージェントデスクトップへのサインインはサポートされていません。
ServiceNow コンソールのエージェントデスクトップ
外通話を行う前に、以下を行う必要があります。
-
外見的なエントリ ポイントを作成し、外方的なエントリ ポイント戦略を設定します。
-
エージェント プロファイルに対して outdial ANI を有効にする
-
outdial ANI にダイヤル番号間エントリポイントマッピングを設定します。
詳細については、『Cisco Webex Contact Center セットアップと管理ガイド 』の「プロビジョニング」の章を参照してください。
[フィルター ナビゲータ] フィールドから に移動します。
デスクトップの使用方法については、Webex Contact Center ヘルプの [エージェント] タブを参照してください。
概要
この記事では、ServiceNow CRM コネクタのビジネスルールをカスタマイズするいくつかの方法について説明します。これは、ServiceNow に固有のビジネスルールに基づいてユースケースをカスタマイズする方法の詳細です。
顧客は ServiceNow でこれらの使用事例を自分で管理する必要があります。構成は ServiceNow に固有で、Webex Contact Center ソフトウェアや専門知識ではありません。
これは、ビジネスルールの変更を支援するための参考資料です。ServiceNow の開発者は、ビジネス ルールを作成し、管理し、サポートを提供します。
Cisco はサンプル ドキュメントのみを提供します。
次のセクションでは、開発者およびエンタープライズ インスタンスのアクション ウィジェットのセットアップ、有効化、および管理方法の詳細について説明します。
アクションウィジェットの更新設定をコミットする
ライセンスされたエンタープライズ インスタンスについては、ServiceNow ストアから最新の Webex Contact Center アプリをインストールします。
デベロッパー インスタンスのアクション ウィジェットを設定するには、この場所にある github レポで使用できる最新の System Update Set XML ファイルをダウンロードします。https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow/ActionsWidgetファイル名は webexcc-servicenow-update-setv7-1-ActionsWidget.xml です。アクション ウィジェットの更新設定をコミットするには、「更新設定をコミットする」の手順 2 ~ 9 を参照してください。
アクションウィジェットを有効にする
isWidgetDisplayEnabled プロパティを使用して、アクション ウィジェットを有効にします。カスタム デスクトップ レイアウトのヘッドレス セクションで、このプロパティの値を変更することはできません。カスタムデスクトップレイアウトのヘッドレスセクションでは、プロパティが常に false に設定されます。カスタムデスクトップレイアウトのパネルセクションでのみプロパティの値を更新する必要があります。
カスタム デスクトップ レイアウトでアクション ウィジェットを有効にすると、次のアクションを実行できます。
- アクティビティ レコードの管理 - [アクティビティ レコードの表示/編集] をクリックして、発信者に関連付けられているアクティビティ レコードのリストを表示します。
- CRM オブジェクトの関連付け—[アクティビティ レコードに関連付ける] をクリックして、コール タイプ (インバウンドまたはアウトバウンド)、コール オブジェクト、コール ノートなどの CRM オブジェクトをアクティビティ レコードに追加します。
- インシデントの管理 - [インシデントの作成] をクリックします。発信者の詳細が事前入力された新しいインシデントが作成されます。インシデントに必要な更新を行うことができます。要件に基づいて、インシデントからケース、人事モジュールなどのレコードタイプを変更できます。レコード タイプを変更するには、アクション ウィジェット設定の typeOfRecord プロパティの値を変更します。例:
{ "comp": "md-tab-panel", "attributes": { "slot": "panel", "class": "widget-pane" }, "children": [ { "comp": "agentx-custom-desktop", "script": "https://cx-crmconnector.ciscoccservice.com/servicenow/v5/dist/index.js", "properties": { "isWidgetDisplayEnabled": true, "typeOfRecord" : "インシデントを作成" }, "wrapper": { "title": "SNOW Actions !", "maximizeAreaName": "app-maximize-area" } } ] }
- ライブコールノートの追加:テキスト領域のコールに関する追加情報をキャプチャし、コールをラップアップできます。アクティビティレコードのコールノートとして追加されたこれらのメモを確認できます。
ServiceNow のコード変更
スクリプトには変更が含まれます-
フィルター ナビゲータに移動し、
スクリプトを含む
を検索します。[システム UI ] の下の [スクリプトを含む] を選択します。
-
[名前] をフィルタリングし、
propUtils
を検索します。 -
Script
で UserGetSysId メソッドを変更します。キュレント:
ユーザー GetSysId: 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; },
インシデントの新しいサンプル コード:
ユーザー GetSysId: 関数 () { var opened_for; //インシデント関連の変更 var sysidlist = {}; var user = new GlideRecordSecure("sys_user{{WebExtAPIRef(“WebExtAPIRef(“WebExtAPIRef()”)}} opened_for=ユーザー。sys_id;//ユーザーを返す。sys_idvar inc = new GlideRecordSecure('incident'); inc.addQuery('caller_id'、 opened_for); inc.addQuery('state','IN','1,2'); inc.orderByDesc('sys_created_on{ sysidlist.incsysid=inc.getUniqueValue(); } else{ inc.initialize(); inc.caller_id=opened_for株式会社contact_type='phone'; inc.short_description='着信コール '+ this.getParameter('value'); sysidlist.incsysid=inc.insert(); } } var grInt = new GlideRecordSecure('interaction'); grInt.initialize(); grInt.assigned_to= gs.getUserID(); grInt.type= 'phone'; grIntopened_for= opened_forJSON.stringify(sysidlist); } を返します。
-
フィルター ナビゲーターに移動し、
UI ページ
を検索します。[システム UI] で [UI ページ] を選択します。
-
[名前] をフィルタリングし、
agentdesktop
を検索します。 -
クライアントスクリプト
のスクリーンポップ機能を変更します。現在の機能:
// screen pop 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(); openFrameAPI.openServiceNowForm({ entity: 'interaction'、クエリ: 'sys_id='+sysid });
インシデントのサンプル コード:
// screen pop 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 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 //'a2ba0ba62fd121106446cc96f699b6b8' }); } }
発信者情報が CRM に存在し、この連絡先に対してすでに新しいインシデントがある場合、アプリケーションは進行中のインシデントを開きます
発信者情報が CRM 内に存在しない場合、アプリケーションは新しいインシデントを開きます
発信者情報が CRM 内に存在する場合、アプリケーションは事前入力された詳細を含む新しいインシデントを開きます
概要
この使用事例では、ServiceNow テーブルに追加の列を追加するプロセスを詳しく説明します - webexcc_imp_activity そして、sn_openframe_phone_log ServiceNow CRM Connector 用の Webex CC のインストール時に作成します。
デフォルトでは、この表にはボックス外の特定のシステムフィールドと値が含まれています。
WebexCC フロー デザイナー内でよりビジネス固有の変数 (CAD 変数) を作成し、ServiceNow ポストコールアクティビティ ログに CAD 変数を追加し、コールポストアクティビティ テーブル データに保持できます。
これは参照ドキュメントのみです。顧客名を IVR 内に保存し、ServiceNow に投稿する Customer Name と呼ばれるサンプル CAD 変数に対してこれを行う方法を示します。
パートナーと顧客の ServiceNow の開発者は、既存のコネクタへのカスタマイズであるため、この設定を構成して管理することが予想されます。
シスコは、コネクタをカスタマイズして拡張する方法についての技術のみを提供しています。
この記事の時点で、Cisco チームは、以下に説明する技術を使用して、アクティビティ ログとアクティビティ テーブルに CAD 変数を追加するためのサポートを検証しています。
WebexCC IMP アクティビティに列を追加
-
ServiceNow の開発者バージョンで表を編集します。
-
フィルター ナビゲータに移動して、スタジオを検索します。
[Webex Contact Center]
を選択します。または
-
WebexCC IMP アクティビティ
テーブルを選択します -
新しい列を追加します。例:
CustomerName
電話ログへの列の追加
-
電話機ログ テーブルを編集します。
-
CustomerName
など、新しい列を追加します。
WebexCC アクティビティ変換マップ
CustomerName
フィールド マッピングなど、新しい列を追加します。
リストカラムのカスタマイズ
[今すぐサービス(Service Now)] が推奨されているように、選択アクションを [作成(Create)] から無視に変更します。
電話ログ リストの設定
スクリプトに含めに移動
propUtils に 1 つの回線 webexcc.u_customername=actInfo.CustomerName
のみを追加します。
サンプル スクリプト
回線を参照してください。サポートコメントを含む 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'); JSON.stringify(webexccprop); } を返します。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 // 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 : 関数 () { var sys_idJSON.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 =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.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(); } } } を返します sys_id; }、タイプ: 'propUtils' });
Flow デザイナーで CAD 変数を作成する
デスクトップ レイアウトに CAD 変数を追加
例
"CadName1:SnowField1,CadName2:SnowField2" CadName1 は CustomerName である SnowField1 は "actInfo.CustomerName" 上のサンプル scirpt showen の一部である CustomerName としても使用されます。
デモのスクリーンショット
WebexCC アクティビティ テーブルに新しく追加された CAD 変数を表示します。
Flow Designer の CAD 変数を作成
インシデント緊急時インシデントへの影響
Service Now スクリプトの更新
スクリプトの更新には次が含まれます:
-
フィルター ナビゲータに移動し、
スクリプトを含む
を検索します。[システム UI] で [スクリプトを含む] オプションを選択します。
-
Name を
propUtils
でフィルタリングします。 -
Script
フィールドで UserGetSysId メソッドを変更します。現在のスクリプト:
ユーザー GetSysId: 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; },
インシデントの新しいサンプル コード:
ユーザー GetSysId: 関数 () { var opened_forvar sysidlist = {}; var user = new GlideRecordSecure("sys_user{{WebExtAPIRef(“WebExtAPIRef(“WebExtAPIRef()”)}} opened_for=ユーザー。sys_id;//ユーザーを返す。sys_idvar inc = new GlideRecordSecure('incident'); inc.addQuery('caller_id'、 opened_for); inc.addQuery('state','IN','1,2'); inc.orderByDesc('sys_created_on{ sysidlist.incsysid=inc.getUniqueValue(); } else{ inc.initialize(); inc.caller_id=opened_for株式会社contact_type='phone'; inc.urgency=this.getParameter('IncUrgency'); inc.impact=this.getParameter('Impact'); incshort_description='着信コール '+ this.getParameter('value'); sysidlist.incsysid=inc.insert(); } } var grInt = new GlideRecordSecure('interaction'); grInt.initialize(); grInt.assigned_to= gs.getUserID(); grInt.type= 'phone'; grIntopened_for= opened_forJSON.stringify(sysidlist);//sysid; } を返します。
-
フィルター ナビゲータに移動して、
UI ページ
を検索します。[システム UI] で [UI ページ] オプションを選択します。
-
[名前] で UI ページをフィルタリングし、agentdesktop を検索します。
-
スクリプト フィールドで
screenpop
機能を変更します。現在の機能:
// screen pop 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(); openFrameAPI.openServiceNowForm({ entity: 'interaction'、クエリ: 'sys_id='+sysid }); }
インシデントのサンプル コード:
// screen pop function screenpop(callerani,callSessionInfo) { var Impact=3; if(callSessionInfo.callAssociatedData.Impact != null && callSessionInfo.callAssociatedData.Impact != undefined) { Impact=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'、クエリ: 'sys_id='+sysObj.incsysid、'interaction_sys_id': sysObj.sysid }); } else{ openFrameAPI.openServiceNowForm({ entity: 'incident'、クエリ: 'sys_id=-1', 'interaction_sys_id': window.localStorage.setItem("screenpopinteraction",JSON.stringify(sysObj)); }
発信者情報が CRM に存在し、新規または進行中のインシデントがない場合、アプリケーションは新しいインシデントを開きます
ServiceNow のコードを変更する
WebexCC IMP アクティビティ
テーブルに新しい列を追加
WebexCC IMP アクティビティテーブルを開く 新しい列を追加 - InteractionsNumber 新しい列を追加 - IncidentNumber
[更新] をクリックします。
[電話ログ
] テーブルに新しい列を追加
[電話ログ]
テーブルを開く
WebexCC アクティビティ変換マップ
フィルター ナビゲータからトランスフォーム マップ
を開く
[WebexCC アクティビティ TransformMap]
をクリックします。
[更新] をクリックします。
スクリプトへの変更が含まれます
-
フィルター ナビゲータに移動して、「スクリプトに含まれる」を検索します。
[システム UI ] の下の [スクリプトを含む] を選択します。
-
Name を
propUtils
でフィルタリングします。 -
メソッド
setWebexcctable
を変更します。インシデントの新しいサンプル コード:
setWebexcctable: 関数 () { var sys_id=0; var actInfo = JSON.parse(this.getParameter('actInfo')); var webexcc = new GlideRecordSecure(gs.getProperty('webexccactivitytable')); webexcc.addQuery("u_callobject{ //インシデントレコードのアクティビティ; //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']; actInfo[' を削除incident_sys_id']; if( interactionsysid!= null && interactionsysid != undefined){ var int = new GlideRecordSecure('interaction'); //inte.get('sys_id', interactionsysid ); int.addQuery('sys_id: interactionsysid ); int.query(); if (int.next()) { intenum=int.number; // int.setValue('state','Closed Complete'); intwork_notes='Update State to closed.'; inte.update(); } } if( incsysid!= null && incsysid != undefined){ var inci = new GlideRecordSecure('incident'); inci.addQuery('sys_id//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= インテントム; sys_id=webexcc.insert(); } を返します sys_id; }、
UI ページのメソッド変更
-
フィルター ナビゲータに移動し、
UI ページ
を検索します。[システム UI] で [UI ページ] オプションを選択します。
-
[名前] で UI ページをフィルタリングし、
agentdesktop
を検索します。 -
スクリプトの
nowActivities と screenpop
機能を変更します。現在の機能:
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 != undefined) { var sysObjjson=JSON.parse(sysObjstr); actInfo.interaction_sys_id=sysObjjson.sysid; actInfo。incident_sys_idvar 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// 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': window.localStorage.setItem("screenpopinteraction",JSON.stringify(sysObj)); }
更新後の結果
次のカスタマイズは、バージョン 1.0.5 以降に適用されます。新しいバージョン 1.0.7 以降のカスタマイズについては、上記の手順に従ってください。
カスタマイズ # 1 - 通話フローの使用事例にカスタムビジネスルールを追加する
通話ごとに新しいインシデントレコードを作成ServiceNow の WebexCC CRM コネクタへの新しい通話ごとに、新しいインシデントレコードを作成します。
フィルター ナビゲータでビジネス ルールの検索
[新規] をクリックします。
参照用サンプル コード:
例 1 usort() の例 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_viewif(view = null) || var userID = null; if (eid != null && eid != '') { userID = UserGetSysId()employee_numberif (userID == null && name != null && name != '') { userID = UserGetSysId("name", name); } if (userID == null && phone != null && phone != '') { if (fQuery.length > 0) fQuery += "^"; fQuery += "caller_idif (url == null) { url = "incident.do?sys_id=-1"; if (fQuery != null) url += "&sysparm_queryUserGetSysId(field, value) { var user = new GlideRecord("sys_user"); user.addQuery(フィールド, 値); user.query(); if (user.next()) は user を返します。sys_idそれ以外の場合は null; } を返します。
ビジネスルール設定のサンプル
クライアントの発信可能を有効にする
インシデントに対するコンピュータ テレフォニー インテグレーション (CTI) 処理 が True としてマークされています。
カスタム CTI ルールでスクリーンポップの URL を更新する " cti.do?sysparm_cti_rule=createIncident&sysparm_caller_phone="
sysparm_cti_rule=name の場合、「name」は関数 の名前であり、デフォルトのスクリプトを使用するのではなく、CTI 処理 のために呼び出されます。
sys_script クライアント呼び出し可能とマークされたエントリで機能を定義します。
関数内で GlideRecord を挿入、更新、または削除する必要がある場合は、別のクライアント以外のコール可能な関数を呼び出して更新を実行します。
スクリプトをクライアント通話を可能にするには、sys_script エントリが表示されたときに表示されるフォームで、クライアント通話を可能にするチェックボックスをオンにする必要があります。
クライアントの発信可能なチェックボックスは、デフォルトでは表示されません。表示するには、歯車アイコンとスラッシュバケットメカニズムを使用して、フォームに表示されるフィールドを変更する必要があります。
カスタマイズ # 2 - Webex Contact Center アクティビティテーブルに CAD 変数を追加
概要この記事では、ServiceNow テーブルに追加の列を追加するプロセスについて詳しく説明します。webexcc_activity これは、ServiceNow CRM Connector 用の Webex CC のインストール時に作成されます。
デフォルトでは、表には既定のシステムフィールドと値が含まれています。
WebexCC Flow デザイナー内でよりビジネス固有の変数 (CAD 変数) を作成し、これらの CAD 変数を ServiceNow の通話後のアクティビティ ログに追加して、これを通話後のアクティビティ テーブル データに保持することができます。
-
これは参照ドキュメントのみです。顧客名を IVR 内に保存し、ServiceNow に投稿する Customer Name と呼ばれるサンプル CAD 変数に対してこれを行う方法を示します。
-
パートナーと顧客の ServiceNow の開発者は、既存のコネクタへのカスタマイズであるため、この設定を構成して管理します。
-
シスコは、コネクタをカスタマイズして拡張する方法についての技術のみを提供します。
-
この記事の時点で、Cisco チームは、以下に説明する技術を使用して、アクティビティ ログとアクティビティ テーブルに CAD 変数を追加するためのサポートを検証しています。
ServiceNow の開発者バージョンで表を編集します。
に移動します。
[WebexCC アクティビティ] テーブルを選択します。
たとえば、CustomerName です。
WebexCC アクティビティのリスト レイアウトを選択します。
この手順は、Update Set 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 : 関数 () { var sys_idJSON.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 =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.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(); } } } を返します sys_id; }、タイプ: 'propUtils2' });
新しいスクリプト名で UI ページを編集するFlow デザイナーで CAD 変数を作成する
デスクトップ レイアウトに CAD 変数を追加
デモのスクリーンショット
WebexCC アクティビティ テーブルに新しく追加された CAD 変数を表示します。