WebexコンタクトセンターをServiceNowと統合します(バージョン1 — レガシー)
前提条件
ソフトフォンインターフェースでサポートされている最小サイズは500pxです。 500px未満の値は、表示や機能に問題が発生する可能性があります。
Webex コンタクトセンターを ServiceNow CRM コンソールと統合する前に、次のものが揃っていることを確認してください。
-
Webex コンタクトセンターへのアクセス。
-
https://admin.webex.com にあるコントロールハブと Webex コンタクトセンターへの管理者アクセス。Management Portal Management PortalのURLは、お住まいの地域に固有のものです。
-
デスクトップにアクセスできるエージェント。 デスクトップのURLは、お住まいの地域によって異なります。
-
コンテンツセキュリティポリシーの許可リストに追加された次のドメインへのエージェントアクセス:
-
*.service-now.com
許可リストを定義する方法の詳細については、「Webex Contact Center のセキュリティ設定」を参照してください。
-
-
ServiceNow開発者ポータルアカウント。 アカウントを作成するには、ServiceNowデベロッパーポータル https://developer.servicenow.com/dev.do にアクセスし、「サインアップして構築を始めましょう」をクリックします。
-
https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow にある次のファイルにアクセスできます。
-
サービスナウアップデートセット(XML)
-
ServiceNowコンタクトセンターのデスクトップレイアウト(JSON)
-
- Webex コンタクトセンターがサポートする ServiceNow のエディションは、バンクーバー、ユタ、東京、ワシントン、ザナドゥです。 詳細については、「Webex コンタクトセンターと ServiceNow の統合」を参照してください。
以下の2つの方法のいずれかに従ってください:
- 開発者インスタンスの場合は、開発者インスタンスガイドの手順に従うことをお勧めします。
- エンタープライズライセンスインスタンスを所有している場合は、エンタープライズライセンスインスタンスのガイドラインに従ってください。
エンタープライズライセンスのアプリと開発者のサンドボックスインスタンスを混在させることはお勧めしません。
チャットやメールなどのデジタルチャネルは、CRMコネクタではサポートされていません。 これは、これらのコネクタを使用するすべてのCRM統合に当てはまります。 それに応じて、導入と顧客エンゲージメントのワークフローを計画してください。
次のセクションでは、開発者インスタンスにServiceNowコネクタをインストールする手順について説明します。
| 1 |
ServiceNow開発者ポータルアカウントにサインインして、 管理コンソールを開きます。 |
| 2 |
アカウントメニューの「マイインスタンス」エリアから、「構築を開始」をクリックします。
|
| 3 |
開発者インスタンスで、ウィンドウの左上にあるフィルターナビゲーターフィールドから、プラグインに移動します。
|
| 4 |
OpenframeというタイトルのOpenframeプラグインを検索してください。 リストをスクロールする必要があるかもしれません。
|
| 5 |
Openframeプラグインをインストールするには、「インストール」をクリックしてください。 |
| 6 |
「プラグインを有効化」ダイアログボックスで、「有効化」をクリックします。
|
| 7 |
プラグインのアクティベーションが完了したら、プラグインアクティベーションダイアログボックスで「フォームを閉じて再読み込み」をクリックします。
|
| 8 |
プラグインの有効化を確認するには、ウィンドウの左上にあるフィルターナビゲーターフィールドからOpenFrameに移動します。 |
| 9 |
設定をクリックして、OpenFrameプラグインがOpenFrame設定リストに表示されていることを確認します。
|
| 1 |
ファイル名:WebEXCC-ServiceNow-Update-Setv (X) .xml
|
| 2 |
ServiceNowインスタンスで、、システム更新セット > コミットする更新セットに移動します。
|
| 3 |
「XMLからアップデートセットをインポート」リンクをクリックします。
|
| 4 |
「ファイルを選択」をクリックし、システムアップデートセットのXMLファイルを選択して、「アップロード」をクリックします。
アップデートセットは 「取得されたアップデートセット」リストに表示され、「読み込まれました」状態です。
|
| 5 |
取得したアップデートセットのリストから、アップデートセットファイル名(リンク)をクリックしてアップデートセットを開きます。
|
| 6 |
ウィンドウの右上にある「アップデートセットのプレビュー」をクリックして、アップデートセットに問題がないか確認します。
|
| 7 |
プレビューが完了したら、アップデートセットのプレビューダイアログボックスで「閉じる」をクリックします。
|
| 8 |
「更新セットをコミット」をクリックします。
|
| 9 |
アップデートセットのコミットが完了したら、「アップデートセットのコミット」ダイアログボックスで「閉じる」をクリックします。
|
| 1 |
ウィンドウの左上にあるフィルターナビゲーターフィールドに、
|
| 2 |
システムのプロパティページで、プロパティを更新日順に並べ替えます。 次の Webex コンタクトセンターのプロパティが表示されていることを確認してください。
|
| 3 |
agentdesktop_urlクリックして、agentdesktop_urlシステムプロパティページを開きます。 |
| 4 |
「値」フィールドに、運用地域に応じて Webex コンタクトセンターデスクトップの URL を入力します。
|
| 5 |
[更新] をクリックして変更を保存します。 |
| 6 |
(オプション)アクティビティテーブル名を変更するには、必要に応じてwebexccactivitytableプロパティを編集します。 システムのプロパティページで、webexccactivitytableをクリックします。 必要に応じて「値」フィールドを変更してください。
|
| 7 |
(オプション)次の方法でユーザーグループを追加します。
|
| 1 |
フィルターナビゲーターフィールドから
|
| 2 |
「新規」をクリックします。
|
| 3 |
URLに次のプロパティを入力します。
|
| 4 |
URLフィールドの右側にあるロックボタンをクリックして、
|
| 5 |
(オプション)設定を割り当てるユーザー/エージェントグループを選択します。
|
| 6 |
[送信] をクリックします。 URLはリンクとして表示されます。
|
| 7 |
OpenFrame電話を使用する前に、ServiceNowカスタムデスクトップレイアウトのJSONファイルをWebexコンタクトセンターにアップロードしてください。Management Portal 詳細については、「Webex コンタクトセンターの ServiceNow デスクトップレイアウトの設定」を参照してください。 |
| 1 |
|
| 2 |
必要に応じて、デスクトップレイアウトファイルのプロパティを更新してください。 |
| 3 |
Webex コンタクトセンターに行ってください。Management Portal |
| 4 |
Management Portalナビゲーションバーから、 。
|
| 5 |
「新しいレイアウト」をクリックして、デスクトップレイアウトの詳細を入力します。 |
| 6 |
ServiceNowデスクトップレイアウトのJSONファイルをアップロードしてください。 |
| 7 |
[保存] をクリックして設定を保存します。 ServiceNowコンソールで Webex コンタクトセンターデスクトップを起動できるようになりました。 |
| 8 |
フィルターナビゲーターフィールドから、。
|
次のセクションでは、ライセンスを受けたエンタープライズインスタンスにServiceNowコネクタをインストールする手順について説明します。
| 1 |
ServiceNow開発者ポータルアカウントにサインインして、 管理コンソールを開きます。 |
| 2 |
アカウントメニューの「マイインスタンス」エリアから、「構築を開始」をクリックします。
|
| 3 |
開発者インスタンスで、ウィンドウの左上にあるフィルターナビゲーターフィールドから、プラグインに移動します。
|
| 4 |
OpenframeというタイトルのOpenframeプラグインを検索してください。 リストをスクロールする必要があるかもしれません。
|
| 5 |
Openframeプラグインをインストールするには、「インストール」をクリックしてください。 |
| 6 |
「プラグインを有効化」ダイアログボックスで、「有効化」をクリックします。
|
| 7 |
プラグインのアクティベーションが完了したら、プラグインアクティベーションダイアログボックスで「フォームを閉じて再読み込み」をクリックします。
|
| 8 |
プラグインの有効化を確認するには、ウィンドウの左上にあるフィルターナビゲーターフィールドからOpenFrameに移動します。 |
| 9 |
設定をクリックして、OpenFrameプラグインがOpenFrame設定リストに表示されていることを確認します。
|
エンタープライズライセンスを持つインスタンスは、ServiceNow Storeから直接Webex コンタクトセンターアプリケーションをインストールできます。
|
|
| 1 |
ウィンドウの左上にあるフィルターナビゲーターフィールドに、と入力します
|
| 2 |
システムのプロパティページで、プロパティを更新日順に並べ替えます。 次の Webex コンタクトセンターのプロパティが表示されていることを確認してください。
|
| 3 |
agentdesktop_urlクリックして、agentdesktop_urlシステムプロパティページを開きます。 |
| 4 |
「値」フィールドに、運用地域に応じて Webex コンタクトセンターデスクトップの URL を入力します。
|
| 5 |
[更新] をクリックして変更を保存します。 |
| 6 |
(オプション)アクティビティテーブル名を変更するには、x_caci_webexcc必要に応じて.webexccactivitytableプロパティを編集します。
|
| 7 |
(オプション)次の方法でユーザーグループを追加します。
|
| 1 |
フィルターナビゲーターフィールドから
|
| 2 |
「新規」をクリックします。
|
| 3 |
URLに次のプロパティを入力します。
|
| 4 |
URLフィールドの右側にあるロックボタンをクリックして、
|
| 5 |
(オプション)設定を割り当てるユーザー/エージェントグループを選択します。
|
| 6 |
[送信] をクリックします。 URLはリンクとして表示されます。
|
| 7 |
フィルターナビゲーターフィールドから、。
|
| 8 |
(オプション)ユーザーグループリストで、Webex Contact Centerデスクトップにアクセスできるユーザーグループを「利用可能」から「選択済み」に移動します。 |
| 9 |
OpenFrame電話を使用する前に、ServiceNowカスタムデスクトップレイアウトのJSONファイルをWebexコンタクトセンターにアップロードしてください。Management Portal 詳細については、「Webex コンタクトセンターの ServiceNow デスクトップレイアウトの設定」を参照してください。 |
| 1 |
|
| 2 |
必要に応じて、デスクトップレイアウトファイルのプロパティを更新してください。 |
| 3 |
Webex コンタクトセンターに行ってください。Management Portal |
| 4 |
Management Portalナビゲーションバーから、 。
|
| 5 |
「新しいレイアウト」をクリックして、デスクトップレイアウトの詳細を入力します。 |
| 6 |
ServiceNowデスクトップレイアウトのJSONファイルをアップロードしてください。 |
| 7 |
[保存] をクリックして設定を保存します。 ServiceNowコンソールで Webex コンタクトセンターデスクトップを起動できるようになりました。 |
| 8 |
フィルターナビゲーターフィールドから、。
|
| 1 |
フィルターナビゲーターフィールドから、インシデント > オープンインシデントに移動します。 |
| 2 |
発信者フィールドを右クリックし、辞書の設定をクリックします。
|
| 3 |
これで、ServiceNowコンソールでWebexコンタクトセンターデスクトップを使い始めることができます。 |
| 4 |
フィルターナビゲーターフィールドから、。
|
- セールスフォース(SFDC)とマイクロソフトダイナミクス(MS Dynamics)Agent DesktopコネクタでのWebRTCの使用へのサインインのみをサポートしています。
- 現在、この機能はエージェントのみに適用されます。
Agent DesktopServiceNowコンソールで
アウトダイヤル電話をかける前に、次のことを必ず行ってください。
-
アウトダイヤルエントリポイントを作成し、アウトダイヤルエントリポイント戦略を設定します。
-
エージェントプロファイルのアウトダイヤルANIを有効にしてください。
-
アウトダイヤルのANIをダイヤル番号とエントリーポイントのマッピングに設定します。
詳しくは、『Cisco Webex Contact Centerセットアップと管理ガイド』の「プロビジョニング」の章を参照してください。
フィルターナビゲーターフィールドから、。
デスクトップの使用方法については、Webex コンタクトセンターのヘルプの「エージェント」タブを参照してください。
概要
この記事では、ServiceNow CRMコネクタのビジネスルールをカスタマイズするいくつかの方法について説明します。 ServiceNow固有のビジネスルールに基づいてユースケースをカスタマイズする方法が詳しく説明されています。
お客様はServiceNowでこれらのユースケースを自分で管理する必要があります。 設定はServiceNowに固有で、Webex コンタクトセンターのソフトウェアや専門知識には固有ではありません。
これはビジネスルールの変更に役立つ参考資料です。 ServiceNowの開発者は、ビジネスルールを作成して管理し、サポートを提供します。
シスコはサンプルドキュメントのみを提供しています。
次のセクションでは、開発者およびエンタープライズインスタンス用のアクションウィジェットを設定、有効化、管理する方法について詳しく説明します。
アクションウィジェットのアップデートセットをコミットしてください
ライセンスされたエンタープライズインスタンスの場合は、ServiceNowストアから最新の Webex コンタクトセンターアプリをインストールしてください。
開発者インスタンス用のアクションウィジェットを設定するには、https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow/ActionsWidget のgithubリポジトリにある最新のシステムアップデートセットXMLファイルをダウンロードしてください。 ファイル名は 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" : "Create Incident" }, "wrapper": { "title": "SNOW Actions !", "maximizeAreaName": "app-maximize-area" } } ] } - ライブ通話メモを追加—通話に関する追加情報をテキスト領域に入力して、通話を終了できます。 これらのメモは活動記録に通話メモとして追加されています。
ServiceNowのコード変更
スクリプトには変更が含まれています-
フィルターナビゲーターに行き、
スクリプトインクルードを検索してください。
システムUIの下にあるスクリプトインクルードを選択してください。
-
名前をフィルタリングして、
PropuTilsを検索してください
。 -
スクリプトのUserGetSysIDメソッドを変更してください
。現在:
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; //Incident related changes 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.short_description='Call Received From '+ 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); },
-
フィルターナビゲーターに移動して検索してください。
UI pageシステム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', query: '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(); // For Incident-related change 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 //'a2ba0ba62fd121106446cc96f699b6b8' }); } }
発信者情報がCRMに存在し、この連絡先で新しいインシデントが既に開かれている場合、アプリケーションは進行中のインシデントを開きます
発信者情報がCRMに存在しない場合、アプリケーションは新しいインシデントを開きます
発信者情報がCRMに存在する場合、アプリケーションは詳細があらかじめ入力された新しいインシデントを開きます
概要
このユースケースでは、webexcc_imp_activity ServiceNowテーブルに列を追加し、Webex CC for ServiceNow sn_openframe_phone_log CRMコネクタのインストール時に作成するプロセスを詳しく説明しています。
デフォルトでは、テーブルには標準で用意されている特定のシステムフィールドと値が含まれています。
WebEXCCフローデザイナー内でビジネス固有の変数(CAD変数)をさらに作成し、ServiceNowのポストコールアクティビティログにCAD変数を追加したり、これをポストコールアクティビティテーブルデータに永続化したりできます。
これはあくまでも参考資料であり、IVRに顧客名を格納してServiceNowに送信するCustomer NameというサンプルCAD変数でこれを行う方法を示しています。
この構成は既存のコネクタをカスタマイズするものなので、パートナー+カスタマーServiceNowの開発者が構成および管理することが期待されます。
シスコが提供しているのは、コネクタのカスタマイズと拡張の方法に関する技術だけです。
この記事の時点で、シスコチームは、以下に説明する手法を使用して、アクティビティログとアクティビティテーブルへのCAD変数の追加がサポートされていることを確認しました。
WebEXCC IMPアクティビティに列を追加してください
-
ServiceNowの開発者版でテーブルを編集してください。

-
フィルターナビゲーターに行き、スタジオを検索してください。

Webex コンタクトセンターを選択してください

または



-
WebEXCC IMPアクティビティテーブルを選択してください

-
顧客名など
、新しい列を追加してください

電話ログに列を追加
-
電話ログテーブルを編集してください。


-
顧客名など
、新しい列を追加してください。

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

顧客名のフィールドマッピングなど
、新しい列を追加します。


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

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


電話ログリストを設定する

スクリプトインクルードに移動
webexccを1行だけ追加してください。u_customername=行動情報。顧客名はプロプティルズへ。



webexcc という行を見てください。u_customername=actinfo.顧客名; 補足コメント付き。
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;
// This line is Added - to capture it in the Activity Log
webexcc.u_customername=actInfo.CustomerName;
sys_id=webexcc.insert();
//Activities on Incident record;
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 is CustomerName
SnowField1 is also used as CustomerName which is part of sample scirpt showen above "actInfo.CustomerName".

デモのスクリーンショット
WebEXCCアクティビティテーブルに新しく追加されたCAD変数を表示します。



フローデザイナー用のCAD変数を作成してください
インシデントの緊急度
インシデントの影響

サービスナウスクリプトの更新
スクリプトの更新には次のものが含まれます
-
フィルターナビゲーターに行き、検索してください
script includesシステムUIの下の 「スクリプトインクルード」オプションを選択します。

-
で名前をフィルタリングします
propUtils。
-
スクリプトフィールドの
userGetSysID
メソッドを変更してください。
現在のスクリプト:
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='Call Received From '+ 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 pagesシステムUIの下の「UIページ」オプションを選択します。

-
agentdesktopUIページを名前でフィルタリングして検索します。
-
スクリプトフィールドのスクリーンポップ機能を変更してください
。
現在の機能:
// 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', query: 'sys_id='+sysid }); }インシデントのサンプルコード:
// screen pop function 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アクティビティ変換マップ
フィルターナビゲーターから変換マップを開きます


WebEXCCアクティビティトランスフォームマップをクリックしてください




「更新」をクリックします。

スクリプトの変更が含まれています
-
フィルターナビゲーターに行き、「スクリプトインクルード」を検索してください。
システムUIの下にあるスクリプトインクルードを選択してください。

-
名前をPropuTilsでフィルタリングします
。
-
setWebExccTableのメソッドを変更してください
。
インシデントの新しいサンプルコード:
setWebexcctable : function () { var sys_id=0; var actInfo = JSON.parse(this.getParameter('actInfo')); var webexcc = new GlideRecordSecure(gs.getProperty('webexccactivitytable')); webexcc.addQuery("u_callobject", actInfo.CallObject); webexcc.query(); if(!webexcc.next()) { //Activities on Incident record; //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='Update State to closed.'; 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ページ」オプションを選択します。

-
agentdesktopUIページを名前でフィルタリングして検索します。
-
スクリプトのNowActivitiesとスクリーンポップ機能を変更してください
。
現在の機能:
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_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({ entity: 'incident', query: '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=インシデントを作成 & = sysparm_caller_phone」

sysparm_cti_rule=name('name'は関数の名前です)は、デフォルトのスクリプトを使用するのではなく、CTI処理で呼び出してください。
client sys_scriptcallableとマークされたエントリに関数を定義してください。
関数内のGlideRecordを挿入、更新、削除する必要がある場合は、クライアント以外の呼び出し可能な別の関数を呼び出して更新を実行してください。
スクリプトをクライアントから呼び出せるようにするには、エントリが表示されたときに表示されるフォームの「クライアント呼び出し可能」チェックボックスをオンにする必要があります。sys_script
クライアントが呼び出せるチェックボックスは、デフォルトでは表示されません。 表示するには、ギアアイコンとスラッシュバケットメカニズムを使用して、フォームに表示されるフィールドを変更する必要があります。
カスタマイズ#2-Webex コンタクトセンターのアクティビティテーブルにCAD変数を追加
概要この記事では、ServiceNow テーブルに Webex CC for ServiceNow CRM webexcc_activity コネクタのインストール時に作成される列を追加するプロセスについて詳しく説明します。
デフォルトでは、テーブルには標準装備のシステムフィールドと値が含まれています。
WebEXCCフローデザイナー内でビジネス固有の変数(CAD変数)をさらに作成し、それらのCAD変数をServiceNowポストコールアクティビティログに追加して、これをポストコールアクティビティテーブルデータに永続化できる可能性があります。
-
これは参考資料であり、IVRに顧客名を格納してServiceNowに送信するCustomer NameというサンプルCAD変数でこれを行う方法を示しています。
-
この構成は既存のコネクタをカスタマイズするものなので、パートナー+カスタマーServiceNowの開発者が構成および管理します。
-
シスコは、コネクタのカスタマイズと拡張の方法に関する技術のみを提供します。
-
この記事の時点で、シスコチームは、以下に説明する手法を使用して、アクティビティログとアクティビティテーブルへのCAD変数の追加がサポートされていることを確認しました。
ServiceNowの開発者版でテーブルを編集してください。

。



WebEXCCアクティビティテーブルを選択してください。

たとえば、顧客名。


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

アップデートセットXMLを使用している場合は、この手順は必要ありません。追加する必要があるのは1行だけです。」webexccu_customername=行動情報。顧客名」をproputilsに。



サンプルスクリプト
webexcc という行を見てください。u_customername=actinfo.顧客名; 補足コメント付き。
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;
// This line is Added - to capture it in the Activity Log
webexcc.u_customername=actInfo.CustomerName;
sys_id=webexcc.insert();
// Activities on Incident record;
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変数を表示します。

CRMコネクタは、デスクトップレイアウトJSONで指定されたウィジェットのバージョンに基づいて動作します。 デスクトップレイアウト内のウィジェットのバージョンを常に最新の状態に保つことは非常に重要です。
管理者は、このCRMコネクタのすべてのデスクトップレイアウトがこのウィジェットバージョンを使用することを確認する必要があります。If the layout is not updated to use the latest version, functionality will no longer be supported and may cease to work correctly.
- サービスナウの最終アップデート — .1.0_v5.0.3.json ServiceNow_Desktop_0。 2024年3月現在、パッケージのバージョンは1.0.9です
- 最新の XML 更新—Webexcc-ServiceNow-Update-Setv7-1-ActionsWidget.xml、2024年6月











































