CTIOperationRequest:スコープ、グローバル
CTIOperationRequest スクリプトインクルードは、現在の CTIOperationRequest オブジェクトでデータを設定および取得するためのメソッドを提供します。
CTIOperationRequest オブジェクトを使用して、 ServiceNow 音声アシスト機能 フレームワーク内のメッセージトランスフォーマーと操作ハンドラーの間で情報を渡します。
通常、メッセージトランスフォーマーは、受信 CTI 固有のペイロードを解析し、関連する CTIOperationRequest オブジェクトにペイロードデータを設定します。操作ハンドラーは、CTIOperationRequest オブジェクトから情報を取得し、そのデータを使用して要求された操作を処理します。
- Amazon Web サービス (AWS) Lambda プロキシ (AWS Lambda 関数を呼び出す)
- AWS Lex ボット (顧客入力を取得)
ペイロードは、操作要求を行っているコンピューター電話統合 (CTI) プロバイダーなどの外部ソースから ServiceNow インスタンスに渡されます。要求を受信すると、メッセージトランスフォーマーはペイロードを解析し、CTIOperationRequest セットメソッドを使用して、操作ハンドラー名などのペイロード値を操作および連絡先固有の CTIOperationRequest オブジェクトに設定します。
たとえば、次のメッセージトランスフォーマースクリプトは、渡された JSON ペイロードを解析し、CTIOperationRequest オブジェクトに関連する操作ハンドラーに必要な値を設定します。
{
try {
var jsonPayload = httpRequest.body.data;
if (jsonPayload) {
var event = jsonPayload.event;
if (event) {
var details = event.Details;
if (details) {
operationRequest.setOperationName(details.Parameters['sn_operation']);
var contactData = details.ContactData;
if(contactData) {
// Call id should be surfaced in openframe call log so it can be tied to transcription later
operationRequest.setParameter('contact.call_id', contactData.ContactId);
for(var ck in contactData.CustomerEndpoint) {
operationRequest.setParameter('contact.' + ck, contactData.CustomerEndpoint[ck]);
}
operationRequest.setParameter('contact.id', contactData.ContactId);
operationRequest.setParameter('contact.phone', contactData.CustomerEndpoint.Address);
}
var parameters = details.Parameters;
if (parameters) {
for (var pk in parameters) {
switch(pk) {
case 'interactionId':
operationRequest.setInteractionSysId(parameters[pk]);
break;
case 'authToken':
operationRequest.setAuthToken(parameters[pk]);
break;
case 'language':
operationRequest.setLanguage(parameters[pk]);
break;
default:
operationRequest.setParameter(pk, parameters[pk]);
}
}
}
}
}
}
} catch(e) {
ctx.setError(e);
}
})(httpRequest, operationRequest, ctx);メッセージトランスフォーマーが渡されたペイロードの解析を終了すると、 ServiceNow 音声アシスト機能 フレームワークは指定された操作ハンドラーをインスタンス化します。操作ハンドラーは、 CTIOperationResponse スクリプトインクルード get メソッドを使用して、要求された操作を処理するために必要な情報を関連する CTIOperationRequest オブジェクトから取得します。
たとえば、次の操作ハンドラースクリプトは、コールに関連付けられたインタラクションレコードの CTIOperationRequest オブジェクトに設定された値を保存します。
(function(/*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response, ctx) {
// Returns the sys_id of the interaction record.
var interactionSysId = request.getInteractionSysId();
var number = request.getParameter('number');
var addComment = request.getParameter('add_comment');
addComment = addComment ? addComment.toLowerCase() : addComment;
addComment = 'yes' === addComment || 'true' === addComment || '1' === addComment;
var workNotes = request.getParameter('work_notes');
var message = gs.getMessage('Thankyou');
var interactionGr = request.getInteractionRecord();
var openedFor = interactionGr ? interactionGr.getValue('opened_for') : null;
if (openedFor && number && addComment && workNotes) {
var now_GR = new GlideRecordSecure('incident');
now_GR.addQuery('caller_id', openedFor);
now_GR.addQuery('number', number);
now_GR.query();
if (now_GR.next()) {
now_GR.work_notes += workNotes;
now_GR.update();
message = now_GR.getMessage('Your comment was added');
}
}
response.setStatusCode(200);
response.setMessage(message);
})(request, response, ctx);操作ハンドラーの作成の詳細については、「 自動発信者インタラクションの連絡先フローの構成」を参照してください。
このスクリプトインクルードは、 sn_cti_core 名前空間で実行されます。CTIOperationRequest スクリプトインクルードにアクセスするには、ServiceNow 音声アシスト機能 (sn_cti_core) プラグインをアクティブ化する必要があります。ServiceNow 音声アシスト機能のアクティブ化については、「ServiceNow 音声アシスト機能アプリケーションのインストール」を参照してください。
ServiceNow 音声アシスト機能の詳細については、「ServiceNow 音声アシスト機能」を参照してください。
CTIOperationRequest:CTIOperationRequest(文字列作成元)
CTIOperationRequest オブジェクトをインスタンス化します。
| 名前 | タイプ | 説明 |
|---|---|---|
| origin | 文字列 | オプション。要求の作成元。通常は、コンピューター電話インテグレータープロバイダーの名前。 デフォルト値:null |
var request = new sn_cti_core.CTIOperationRequest('AWS Connect');
request.setSessionAttribute('contact.phone', '+15552222345');
request.setSessionAttribute('contact.okToCall', true);
request.setSessionAttribute('contact.address', {
street: '1234 Main St'
city: 'API City',
zip: 91335
});
CTIOperationRequest:getAuthToken()
関連付けられた CTIOperationRequest オブジェクトに設定された認証トークンを返します。
このトークンは、ハンドラーのauth_requiredフラグが true に設定されている場合、要求された操作ハンドラーを実行する前に現在のServiceNow 音声アシスト機能ユーザーを認証するためにServiceNow 音声アシスト機能フレームワークによって使用されます。auth_requiredフラグは、操作ハンドラー [sn_cti_operation_handler] テーブルのフィールドです。認証トークンの有効期間はコールセッションの有効期間である必要がありますが、CTI プロバイダーによって決定されます。
独自の認証操作ハンドラーを作成することで、実装に必要な認証/承認処理を定義できます。認証トークンの生成方法に関係なく、メッセージ翻訳ツールは CTI ペイロードでトークンを渡す必要があります。さらに、CTI プロバイダーはこの認証トークンをローカルに保存し、認証を必要とする各操作要求で渡す必要があります。
インスタンス提供の認証操作ハンドラーを使用する場合、ハンドラーはユーザーが入力した 4 桁の PIN に基づいて認証トークンの作成を開始します。次に、CTIOperationResponse オブジェクトの sessionAttributes オブジェクトに認証トークンを設定します。関連付けられたメッセージトランスフォーマーは、sessionAttributes オブジェクトを CTI 固有のペイロードに変換し、CTI プロバイダーに送信します。
- Amazon Web サービス (AWS) Lambda プロキシ (AWS Lambda 関数を呼び出す)
- AWS Lex ボット (顧客入力を取得)
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| 文字列 | 現在の ServiceNow 音声アシスト機能 ユーザーに関連付けられている認証トークン。 |
(function( /*CTIProviderResponseExecutionContext*/ ctx, /*CTIOperationRequest*/ operationRequest, /*CTIOperationResponse*/ operationResponse, /*HTTPResponse*/ httpResponse) {
var sessionAttributes = {},
intentResponse;
var statusCode = -1;
var message = 'Unprocessed';
if (operationResponse) {
statusCode = operationResponse.getStatusCode();
sessionAttributes = operationResponse.getSessionAttributes();
message = operationResponse.getMessage();
var error = operationResponse.getError();
if (error) {
sessionAttributes.error = error;
}
}
if (sn_cti_core.CTIRequestDispatcher.Constants.HTTP.Status.AUTH_REQUIRED.code === statusCode) {
//first call for a secure action without authentication token
sessionAttributes.statusCode = 401;
sessionAttributes.message = message;
intentResponse = {
sessionAttributes: sessionAttributes,
dialogAction: {
type: 'Close',
fulfillmentState: 'Fulfilled',
message: {
contentType: 'PlainText',
content: 'This operation requires authentication. Say authenticate for authentication.'
}
}
};
} else if ('DialogCodeHook' === operationRequest.getParameter('$$invocationSource')) {
//pass back authToken and interactionId
sessionAttributes.authToken = operationRequest.getAuthToken();
sessionAttributes.interactionId = operationRequest.getInteractionSysId();
var originalSlots = operationRequest.getParameter('$$slots');
var responseParameters = operationResponse ? operationResponse.getParameters() : {};
responseParameters = responseParameters ? responseParameters : {};
// See if processing happened and we got a dialogAction
var responseDialogAction = responseParameters['dialogAction'];
// Default dialog action
var dialogAction = {
type: 'Delegate',
slots: originalSlots
};
// If the response doesn't contain an override replay the inputs
if (responseDialogAction) {
// We bypassed dialoghook so delegate and pass through inputs
dialogAction = responseDialogAction;
}
intentResponse = {
sessionAttributes: sessionAttributes,
dialogAction: dialogAction
};
} else {
// Override required session attributes
sessionAttributes.statusCode = statusCode;
sessionAttributes.message = message;
// Build response template
intentResponse = {
sessionAttributes: sessionAttributes,
dialogAction: {
type: 'Close',
fulfillmentState: 'Fulfilled',
message: {
contentType: 'PlainText',
content: message
}
}
};
}
httpResponse.setBody(intentResponse);
})(ctx, operationRequest, operationResponse, httpResponse);
CTIOperationRequest:getInteractionRecord()
操作要求に関連付けられたインタラクション GlideRecord を返します。
インタラクションは、チャット、電話、または対面を通じて行われた顧客のサポート要求を表します。やり取りは、アサインのためにキューにルーティングすることも、エージェントに直接アサインすることもできます。インタラクションレコードはインタラクション [interaction] テーブルに保存され、特定のセッションにおける顧客とのサービスアカウントインタラクションを説明するあらゆるタイプのデータを含めることができます。
インタラクションレコードは、 CTIOperationRequest - setInteractionSysId(String Id) メソッドを介して CTIOperationRequest オブジェクトに関連付けられます。このメソッドは通常、メッセージトランスフォーマーによって呼び出され、 getInteractionRecord() メソッドを呼び出す前に呼び出す必要があります。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| GlideRecord | 現在の CTIOperationRequest オブジェクトに関連付けられたインタラクション GlideRecord オブジェクト。CTIOperationRequest オブジェクトにインタラクションレコードsys_idが設定されていない場合は、null を返します。 |
(function(/*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response, /*Context*/ ctx) {
var notes = '', lang = request.getLanguage();
try {
// Returns the interaction record (GlideRecord) set on the passed in CTIOperationRequest object
var interactionGr = request.getInteractionRecord();
var now_GR = new GlideRecord('sys_user');
if(interactionGr && now_GR.get(interactionGr.opened_for.toString())) {
if(now_GR.locked_out == true) {
notes += gs.getMessageLang("User record found locked. Unlocking the account.\n", lang);
now_GR.locked_out=false;
now_GR.update();
response.setStatusCode(200);
response.setMessage(gs.getMessageLang("Your account has been unlocked.", lang));
} else {
notes += gs.getMessageLang("User record not locked.\n", lang);
response.setStatusCode(200);
response.setMessage(gs.getMessageLang("Your account doesn't seem to be locked.", lang));
}
} else {
notes += gs.getMessageLang("User record not found. Transfer to agent\n", lang);
response.setStatusCode(302);
response.setMessage(gs.getMessageLang("I am unable to find your record. Let me transfer to someone who can help.", lang));
}
if(interactionGr) {
interactionGr.work_notes = notes;
interactionGr.update();
}
} catch(e) {
ctx.setError(e);
}
})(request, response, ctx);
CTIOperationRequest:getInteractionSysId()
現在の CTIOperationRequest オブジェクトに関連付けられたインタラクションレコードのsys_idを返します。
CTIOperationRequest - setInteractionSysId(String Id) メソッドは、このメソッドを呼び出す前に呼び出されている必要があります。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| 文字列 | 現在の CTIOperationRequest オブジェクトに設定されたインタラクションレコードのsys_id。 関連付けられた CTIOperationRequest オブジェクトにsys_idが設定されていない場合、このメソッドは null を返します。 |
(function( /*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response, ctx) {
// Returns the sys_id of the interaction record associated with the CTIOperationRequest object.
var interactionSysId = request.getInteractionSysId();
var number = request.getParameter('number');
var addComment = request.getParameter('add_comment');
addComment = addComment ? addComment.toLowerCase() : addComment;
addComment = 'yes' === addComment || 'true' === addComment || '1' === addComment;
var workNotes = request.getParameter('work_notes');
var message = gs.getMessage('Thankyou');
var interactionGr = request.getInteractionRecord();
var openedFor = interactionGr ? interactionGr.getValue('opened_for') : null;
if (openedFor && number && addComment && workNotes) {
var now_GR = new GlideRecordSecure('incident');
now_GR.addQuery('caller_id', openedFor);
now_GR.addQuery('number', number);
now_GR.query();
if (now_GR.next()) {
now_GR.work_notes += workNotes;
now_GR.update();
message = gs.getMessage('Your comment was added');
}
}
response.setStatusCode(200);
response.setMessage(message);
})(request, response, ctx);
CTIOperationRequest:getLanguage()
現在の CTIOperationRequest オブジェクトに設定された ISO 639.1 言語コードを返します。
顧客の優先言語を使用すると、プラットフォームが提供するインターナショナリゼーションおよびローカリゼーション機能を使用して、関連する発信者とのメッセージやその他の通信をカスタマイズできます。
通常、操作ハンドラーは getLanguage() メソッドを呼び出し、メッセージトランスフォーマーは CTIOperationRequest - setLanguage(String languageCode) メソッドを呼び出して CTIOperationRequest オブジェクトに言語を設定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| 文字列 | 現在の CTIOperationRequest オブジェクトに設定されている ISO 639.1 言語コード。言語コードが設定されていない場合は、 en を返します。 |
次の例は、 getLanguage() を呼び出して呼び出し元の優先言語を取得する操作ハンドラーを示しています。
(function(/*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response) {
// Obtain the contact's preferred language
var notes = "", announcement, lang = request.getLanguage();
try {
var interactionGr = request.getInteractionRecord();
announcement = gs.getMessageLang("We are currently experiencing issues with VPN. If you are calling about VPN issues, you may hang up the call.", lang);
// Use the contact's language to customize the response messages and notes
if(announcement) {
notes = gs.getMessageLang("Listened to announcement: {0}", lang, [announcement]);
response.setStatusCode(200);
} else {
announcement = gs.getMessageLang("There are currently no known outage announcements", lang);
//use the status case as the flag to check for announcements in contact flow
response.setStatusCode(404);
}
response.setMessage(announcement);
if(interactionGr && notes) {
interactionGr.work_notes = notes;
interactionGr.update();
}
} catch(e) {
ctx.setError(e);
}
})(request, response);
CTIOperationRequest:getMajorVersion()
現在の CTIOperationRequest オブジェクトに設定されているコンピューター電話インテグレーター (CTI) ソフトウェアのメジャーバージョンを返します。
ServiceNow インスタンスに接続されている CTI プロバイダーが複数のバージョンのソフトウェアを実行している場合は、この方法を使用します。これは、ソフトウェアバージョンによって異なる処理動作が必要になる可能性があるためです。処理動作がソフトウェアのバージョン間でわずかに異なるだけの場合は、操作ハンドラーを 1 つだけ使用することが理にかなっている場合があります。その後、要求を行うソフトウェアのバージョンを確認するだけで処理の違いを処理し、操作ハンドラー内で要求/データを処理できます。必要な処理がバージョン間で大きく異なる場合は、複数の操作ハンドラーを使用する方が効果的です。
通常、メッセージトランスフォーマーは CTIOperationRequest - setMajorVersion(Number majorVersion) メソッドを呼び出して CTIOperationRequest オブジェクトにソフトウェアバージョンを設定し、操作ハンドラーはこのメソッドを使用して設定値を消費します。CTIOperationRequest - getMinorVersion() および CTIOperationRequest - setMinorVersion(Number minorVersion) メソッドを使用して、プロバイダーのソフトウェアのマイナーバージョン値を取得/設定することもできます。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| 番号 | CTI ソフトウェアのメジャーバージョン番号。 メジャーバージョンが設定されていない場合は、 1 を返します。 |
var request = new sn_cti_core.CTIOperationRequest('origin');
var majorVersion = request.getMajorVersion();
CTIOperationRequest:getMinorVersion()
CTIOperationRequest オブジェクトに関連付けられたコンピューター電話インテグレーター (CTI) ソフトウェアのマイナーバージョンを返します。
ServiceNow インスタンスに接続されている CTI プロバイダーが複数のバージョンのソフトウェアを実行している場合は、この方法を使用します。これは、ソフトウェアバージョンによって異なる処理動作が必要になる可能性があるためです。処理動作がソフトウェアのバージョン間でわずかに異なるだけの場合は、操作ハンドラーを 1 つだけ使用することが理にかなっている場合があります。その後、要求を行うソフトウェアのバージョンを確認するだけで処理の違いを処理し、操作ハンドラー内で要求/データを処理できます。必要な処理がバージョン間で大きく異なる場合は、複数の操作ハンドラーを使用する方が効果的です。
通常、メッセージトランスフォーマーは CTIOperationRequest - setMinorVersion(Number minorVersion) CTIOperationRequest:setMinorVersion(番号 minorVersion) メソッドを呼び出して CTIOperationRequest オブジェクトにソフトウェアバージョンを設定し、操作ハンドラーはこのメソッドを使用して設定値を消費します。CTIOperationRequest - getMajorVersion() CTIOperationRequest:getMajorVersion() および CTIOperationRequest - setMajorVersion(Number majorVersion) CTIOperationRequest:setMajorVersion(番号 majorVersion) メソッドを使用して、プロバイダーのソフトウェアのメジャーバージョン値を取得/設定することもできます。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| 番号 | CTI ソフトウェアのマイナーバージョン番号。 マイナーバージョンが設定されていない場合は、 0 を返します。 |
var request = new sn_cti_core.CTIOperationRequest('origin');
var minorVersion = request.getMinorVersion();
CTIOperationRequest:getOperationName()
コンピューター電話統合 (CTI) プロバイダーが実行を要求している操作の名前を返します。
操作名によって、要求の処理に使用される操作ハンドラーが決まります。通常、メッセージトランスフォーマーは、 CTIOperationRequest - setOperationName(String name) メソッドを使用して CTIOperationRequest オブジェクトに操作名を設定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| 文字列 | CTI プロバイダーが実行を要求している操作の名前。操作名が設定されていない場合は、null を返します。 |
var request = new sn_cti_core.CTIOperationRequest('origin');
var name = request.getOperationName();
CTIOperationRequest:getOperationSubStepName()
現在の CTIOperationRequest オブジェクトに設定されたサブステップ操作ハンドラー名を返します。
サブステップを使用して、操作を処理する前に初期化や検証などのアクションを実行します。汎用であり、すべての CTI プロバイダーで使用される操作ハンドラーとは異なり、サブステップは CTI プロバイダー固有であり、CTI プロバイダーに固有の用語と命名規則を使用します。
- 要求に関連付けられた操作ハンドラーの検索を試みます。
- 最初に、
myOperation_SUFFXと呼ばれる操作ハンドラーをチェックします。 - 見つからない場合は、操作ハンドラー
myOperationをチェックします。見つからない場合はエラーになります。
- 最初に、
- ハンドラーが見つかった場合は、操作ハンドラーの auth_required フラグをチェックします。設定すると、有効な認証トークン ( getAuthToken() メソッドを介して取得された) が要求に存在するかどうかが確認されます。存在し有効な場合は処理を続行し、それ以外の場合はエラーをスローします。
- 渡されたサブステップの操作ハンドラーを検索します。この例では、
subStepName=SubStepとします。- 最初に、myOperation_SUFFX という名前の操作ハンドラーをチェックします
。サブステップ。見つかった場合は、ハンドラーを実行します。 - 見つからない場合は、ハンドラー
myOperation.SubStepをチェックします。見つかった場合は、ハンドラーを実行します。 - 見つからない場合は、request オブジェクトに
subStepNotFoundBehaviorが設定されているかどうかを確認します。 - 設定されている場合は動作を実行し、設定されていない場合はエラーが発生します。
- 最初に、myOperation_SUFFX という名前の操作ハンドラーをチェックします
- プライマリ操作ハンドラー (
myOpersation_SUFFXまたはmyOperation) を実行します。
通常、メッセージトランスフォーマーは、 CTIOperationRequest - setOperationSubStepName(String name) メソッドを使用して CTIOperationRequest オブジェクトにサブステップ名を設定します。独自のトランスフォーマーを作成する場合は、 CTIOperationRequest - setSubStepNotFoundBehaviour(Object behavior) メソッドを呼び出して、この動作を上書きできます。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| 文字列 | CTIOperationRequest オブジェクトに設定されたサブステップ操作ハンドラーの名前。存在しない場合は null を返します。 |
var request = new sn_cti_core.CTIOperationRequest('origin');
var name = request.getOperationSubStepName();
CTIOperationRequest:getParameter(文字列キー)
現在の CTIOperationRequest オブジェクトに以前に設定された指定されたキーの値を返します。
get/set パラメーターメソッドを使用すると、メッセージトランスフォーマーと操作ハンドラーの間でほぼすべての文字列または数値を渡すことができます。パラメーターオブジェクトには、現在の操作要求に直接関連するデータの 0 個以上のキーと値のペアを含めることができます。操作ハンドラーは、これらの値を消費するときに必要なキー/値ペアを決定します。通常、メッセージトランスフォーマーは CTIOperationRequest - setParameter(String key, Object value) メソッドを呼び出して CTIOperationRequest オブジェクトにこれらのパラメーターを設定し、操作ハンドラーはこのメソッドを使用してそれらを消費します。
| 名前 | タイプ | 説明 |
|---|---|---|
| key | 文字列 | 返すキー値の名前。 |
| タイプ | 説明 |
|---|---|
| 文字列または数値 | 指定されたキーの値。そのようなキーが存在しない場合は、null を返します。 |
(function( /*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response, ctx) {
var interactionSysId = request.getInteractionSysId();
// Returns the number and add_comment parameters from the CTIOperationRequest object
var number = request.getParameter('number');
var addComment = request.getParameter('add_comment');
addComment = addComment ? addComment.toLowerCase() : addComment;
addComment = 'yes' === addComment || 'true' === addComment || '1' === addComment;
var workNotes = request.getParameter('work_notes');
var message = gs.getMessage('Thankyou');
var interactionGr = request.getInteractionRecord();
var openedFor = interactionGr ? interactionGr.getValue('opened_for') : null;
if (openedFor && number && addComment && workNotes) {
var now_GR = new GlideRecordSecure('incident');
now_GR.addQuery('caller_id', openedFor);
now_GR.addQuery('number', number);
now_GR.query();
if (now_GR.next()) {
now_GR.work_notes += workNotes;
now_GR.update();
message = gs.getMessage('Your comment was added');
}
}
response.setStatusCode(200);
response.setMessage(message);
})(request, response, ctx);
CTIOperationRequest:getParameters()
現在の CTIOperationRequest オブジェクトで以前に設定されたすべてのパラメーターのキーと値のペアを返します。
get/set パラメーターメソッドを使用すると、メッセージトランスフォーマーと操作ハンドラーの間でほぼすべての文字列または数値を渡すことができます。パラメーターオブジェクトには、現在の操作要求に直接関連するデータの 0 個以上のキーと値のペアを含めることができます。操作ハンドラーは、これらの値を消費するときに必要なキー/値ペアを決定します。通常、メッセージトランスフォーマーは CTIOperationRequest - setParameter(String key, Object value) メソッドを呼び出して CTIOperationRequest オブジェクトにこれらのパラメーターを設定し、操作ハンドラーはこのメソッドを使用してそれらを消費します。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| オブジェクト | CTIOperationRequest オブジェクトに以前に設定されたキーと値のペアのマップ。このキーと値のペアは自由形式で、操作ハンドラーのニーズによって定義されます。戻り値は文字列または数値です。 |
var request = new sn_cti_core.CTIOperationRequest('origin');
var parms = request.getParameters();
for(var key in parms) {
gs.info(key + '=' + parms[key]);
}
CTIOperationRequest:getSessionAttribute(文字列キー)
現在の CTIOperationRequest オブジェクトに設定された指定されたセッション属性キーの値を返します。
get/set セッション属性メソッドを使用すると、メッセージトランスフォーマーと操作ハンドラーの間でほぼすべての文字列または数値を渡すことができます。sessionAttribute オブジェクトには、連絡先の電話番号など、コンピューター電話統合プロバイダーによって定義されたセッションの期間中有効な 0 個以上のデータのキー/値ペアを含めることができます。セッション属性には、連絡先フロー内でもアクセスできます。操作ハンドラーは、これらの値を消費するときに必要なセッション属性のキー/値ペアを決定します。通常、メッセージトランスフォーマーは、 CTIOperationRequest - setSessionAttribute(String key, Object value) メソッドを呼び出して、CTIOperationRequest オブジェクトにこれらの属性を設定します。セッション属性は、セッションの存続期間 (コール全体など) にわたって保持され、そのコールセッション内の各操作要求とともに CTI プロバイダーによって渡される必要があるという点でパラメーターとは異なります。
| 名前 | タイプ | 説明 |
|---|---|---|
| key | 文字列 | 返すキー値の名前。 |
| タイプ | 説明 |
|---|---|
| 文字列または数値 | 指定されたキーの値。そのようなキーが存在しない場合は、null を返します。 |
var request = new sn_cti_core.CTIOperationRequest('origin');
var phoneAttribute = request.getSessionAttribute('contact.phone');
CTIOperationRequest:getSessionAttributes()
現在の CTIOperationRequest オブジェクトに設定されているすべてのセッション属性のキーと値のペアマップを返します。
get/set セッション属性メソッドを使用すると、メッセージトランスフォーマーと操作ハンドラーの間でほぼすべての文字列または数値を渡すことができます。sessionAttribute オブジェクトには、連絡先の電話番号など、コンピューター電話統合プロバイダーによって定義されたセッションの期間中有効な 0 個以上のデータのキー/値ペアを含めることができます。セッション属性には、連絡先フロー内でもアクセスできます。操作ハンドラーは、これらの値を消費するときに必要なセッション属性のキー/値ペアを決定します。通常、メッセージトランスフォーマーは、 CTIOperationRequest - setSessionAttribute(String key, Object value) メソッドを呼び出して、CTIOperationRequest オブジェクトにこれらの属性を設定します。セッション属性は、セッションの存続期間 (コール全体など) にわたって保持され、そのコールセッション内の各操作要求とともに CTI プロバイダーによって渡される必要があるという点でパラメーターとは異なります。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| オブジェクト | 関連付けられた CTIOperationResponse オブジェクトに設定されたセッション属性のキーと値のペアのマップ。このマップは自由形式で、操作ハンドラーのニーズによって定義されます。 |
var request = new sn_cti_core.CTIOperationRequest('origin');
var parms = request.getSessionAttributes();
for(var key in parms) {
gs.info(key + '=' + parms[key]);
}
CTIOperationRequest:getSubStepNotFoundBehaviour
サブステップの操作ハンドラーが見つからない場合のサブセップの処理動作を返します。
サブステップを使用して、操作を処理する前に初期化や検証などのアクションを実行します。汎用であり、すべての CTI プロバイダーで使用される操作ハンドラーとは異なり、サブステップは CTI プロバイダー固有であり、CTI プロバイダーに固有の用語と命名規則を使用します。
要求されたサブステップ操作ハンドラーが ServiceNow 音声アシスト機能 フレームワークで見つからない場合、「ステップが見つかりません」動作の使用を試みます。この動作は通常、操作が最初に要求されたときにメッセージトランスフォーマーによって設定されます。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| OperationNotFoundBehaviour | 操作/サブステップの組み合わせに対して操作ハンドラーが見つからない場合に実行する動作/処理 (<operation_name>。SubStep>)。定義されていない場合は null を返します。 可能な値:
|
var request = new sn_cti_core.CTIOperationRequest('origin');
var behavior = request.getSubStepNotFoundBehaviour();
CTIOperationRequest:setAuthToken(文字列 ID)
現在の CTIOperationRequest オブジェクトに認証トークンを設定します。
このトークンは、ハンドラーのauth_requiredフラグが true に設定されている場合、要求された操作ハンドラーを実行する前に現在のServiceNow 音声アシスト機能ユーザーを認証するためにServiceNow 音声アシスト機能フレームワークによって使用されます。auth_requiredフラグは、操作ハンドラー [sn_cti_operation_handler] テーブルのフィールドです。認証トークンの有効期間はコールセッションの有効期間である必要がありますが、CTI プロバイダーによって決定されます。
独自の認証操作ハンドラーを作成することで、実装に必要な認証/承認処理を定義できます。認証トークンの生成方法に関係なく、メッセージ翻訳ツールは CTI ペイロードでトークンを渡す必要があります。さらに、CTI プロバイダーはこの認証トークンをローカルに保存し、認証を必要とする各操作要求で渡す必要があります。
インスタンス提供の認証操作ハンドラーを使用する場合、ハンドラーはユーザーが入力した 4 桁の PIN に基づいて認証トークンの作成を開始します。次に、CTIOperationResponse オブジェクトの sessionAttributes オブジェクトに認証トークンを設定します。関連付けられたメッセージトランスフォーマーは、sessionAttributes オブジェクトを CTI 固有のペイロードに変換し、CTI プロバイダーに送信します。
- Amazon Web サービス (AWS) Lambda プロキシ (AWS Lambda 関数を呼び出す)
- AWS Lex ボット (顧客入力を取得)
| 名前 | タイプ | 説明 |
|---|---|---|
| ID | 文字列 | 関連付けられた ServiceNow 音声アシスト機能 ユーザーの認証トークン。 |
| タイプ | 説明 |
|---|---|
| なし |
渡された認証トークンを保存するメッセージトランスフォーマースクリプトの例。
{
try {
var jsonPayload = httpRequest.body.data;
if (jsonPayload) {
var event = jsonPayload.event;
if (event) {
var details = event.Details;
if (details) {
operationRequest.setOperationName(details.Parameters['sn_operation']);
var contactData = details.ContactData;
if(contactData) {
// Call id should be surfaced in openframe call log so it can be tied to transcription later
operationRequest.setParameter('contact.call_id', contactData.ContactId);
for(var ck in contactData.CustomerEndpoint) {
operationRequest.setParameter('contact.' + ck, contactData.CustomerEndpoint[ck]);
}
operationRequest.setParameter('contact.id', contactData.ContactId);
operationRequest.setParameter('contact.phone', contactData.CustomerEndpoint.Address);
}
var parameters = details.Parameters;
if (parameters) {
for (var pk in parameters) {
switch(pk) {
case 'interactionId':
operationRequest.setInteractionSysId(parameters[pk]);
break;
case 'authToken':
operationRequest.setAuthToken(parameters[pk]);
break;
case 'language':
operationRequest.setLanguage(parameters[pk]);
break;
case 'statusCode':
case 'message':
break;
default:
operationRequest.setParameter(pk, parameters[pk]);
}
}
}
}
}
}
} catch(e) {
ctx.setError(e);
}
})(httpRequest, operationRequest, ctx);
CTIOperationRequest:setInteractionSysId(文字列 ID)
現在の CTIOperationRequest オブジェクトの操作要求に関連付けられたインタラクションレコードのsys_idを設定します。
連絡先固有のインタラクションレコード内で連絡先インタラクション情報を維持する場合は、 ServiceNow 音声アシスト機能 コールセッション全体にわたってインタラクションレコードsys_idを維持する必要があります。
通常、操作ハンドラーは、新しい連絡先コールが開始されるとインタラクションレコードを作成します。次に、 CTIOperationRequest - setSessionAttribute(String key, Object value) メソッドを使用して、関連付けられた CTIOperationResponse オブジェクトのインタラクションレコードsys_idとテーブル名をセッション属性として設定します。その後、関連付けられたメソッドトランスフォーマーは、この情報をコンピューター電話統合 (CTI) プロバイダーのペイロードに変換し、CTI プロバイダーに送り返します。
CTI プロバイダーは、連絡先セッションのインタラクションレコードsys_idをローカルに保存する必要があります。CTI プロバイダーは、この連絡セッションの ServiceNow 音声アシスト機能 とやり取りするたびに、対応するインタラクションレコードをそのペイロードにsys_id返す必要があります。次に、受信メッセージトランスフォーマーはペイロードを解析し、CTIOperationRequest - setInteractionSysId() メソッドを使用して、関連する CTIOperationtRequest オブジェクトにインタラクションレコードsys_idを設定します。
CTIOperationRequest - getInteractionRecord() メソッドは、このsys_idを使用して、連絡先セッションの正しいインタラクションレコードを取得します。
| 名前 | タイプ | 説明 |
|---|---|---|
| sys_id | 文字列 | 要求に関連付けるインタラクションレコードのSys_id。 テーブル:インタラクション [interaction] |
| タイプ | 説明 |
|---|---|
| なし |
受信ペイロード (パラメーターとして渡される) からインタラクションレコードsys_idを抽出し、関連付けられた CTIOperationRequest オブジェクトに設定するメッセージトランスフォーマースクリプトの例。
{
try {
var jsonPayload = httpRequest.body.data;
if (jsonPayload) {
var event = jsonPayload.event;
if (event) {
var details = event.Details;
if (details) {
operationRequest.setOperationName(details.Parameters['sn_operation']);
var contactData = details.ContactData;
if(contactData) {
// Call id should be surfaced in openframe call log so it can be tied to transcription later
operationRequest.setParameter('contact.call_id', contactData.ContactId);
for(var ck in contactData.CustomerEndpoint) {
operationRequest.setParameter('contact.' + ck, contactData.CustomerEndpoint[ck]);
}
operationRequest.setParameter('contact.id', contactData.ContactId);
operationRequest.setParameter('contact.phone', contactData.CustomerEndpoint.Address);
}
var parameters = details.Parameters;
if (parameters) {
for (var pk in parameters) {
switch(pk) {
// Associate the existing customer interaction record with the request
case 'interactionId':
operationRequest.setInteractionSysId(parameters[pk]);
break;
case 'authToken':
operationRequest.setAuthToken(parameters[pk]);
break;
case 'language':
operationRequest.setLanguage(parameters[pk]);
break;
case 'statusCode':
case 'message':
break;
default:
operationRequest.setParameter(pk, parameters[pk]);
}
}
}
}
}
}
} catch(e) {
ctx.setError(e);
}
})(httpRequest, operationRequest, ctx);
CTIOperationRequest:setLanguage(文字列 languageCode)
CTIOperationRequest オブジェクトに関連する操作を処理するときに使用する ISO 639.1 言語コードを設定します。
顧客の優先言語を使用すると、プラットフォームが提供するインターナショナリゼーションおよびローカリゼーション機能を使用して、関連する発信者とのメッセージやその他の通信をカスタマイズできます。通常、メッセージトランスフォーマーは CTIOperationRequest オブジェクトに言語を設定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| 言語コード | 文字列 | 関連する操作を処理するときに使用する ISO 639.1 言語コード。 |
| タイプ | 説明 |
|---|---|
| なし |
{
try {
var jsonPayload = httpRequest.body.data;
if (jsonPayload) {
var event = jsonPayload.event;
if (event) {
var details = event.Details;
if (details) {
operationRequest.setOperationName(details.Parameters['sn_operation']);
var contactData = details.ContactData;
if(contactData) {
// Call id should be surfaced in openframe call log so it can be tied to transcription later
operationRequest.setParameter('contact.call_id', contactData.ContactId);
for(var ck in contactData.CustomerEndpoint) {
operationRequest.setParameter('contact.' + ck, contactData.CustomerEndpoint[ck]);
}
operationRequest.setParameter('contact.id', contactData.ContactId);
operationRequest.setParameter('contact.phone', contactData.CustomerEndpoint.Address);
}
var parameters = details.Parameters;
if (parameters) {
for (var pk in parameters) {
switch(pk) {
case 'interactionId':
operationRequest.setInteractionSysId(parameters[pk]);
break;
case 'authToken':
operationRequest.setAuthToken(parameters[pk]);
break;
case 'language':
operationRequest.setLanguage(parameters[pk]);
break;
case 'statusCode':
case 'message':
break;
default:
operationRequest.setParameter(pk, parameters[pk]);
}
}
}
}
}
}
} catch(e) {
ctx.setError(e);
}
})(httpRequest, operationRequest, ctx);
CTIOperationRequest:setMajorVersion(番号 majorVersion)
関連する CTIOperationRequest オブジェクトで要求を行うコンピューター電話インテグレーター (CTI) プロバイダーソフトウェアのメジャーバージョンを設定します。
ServiceNow インスタンスに接続されている CTI プロバイダーが複数のバージョンのソフトウェアを実行している場合は、この方法を使用します。これは、ソフトウェアバージョンによって異なる処理動作が必要になる可能性があるためです。処理動作がソフトウェアのバージョン間でわずかに異なるだけの場合は、操作ハンドラーを 1 つだけ使用することが理にかなっている場合があります。その後、要求を行うソフトウェアのバージョンを確認するだけで処理の違いを処理し、操作ハンドラー内で要求/データを処理できます。必要な処理がバージョン間で大きく異なる場合は、複数の操作ハンドラーを使用する方が効果的です。
通常、メッセージトランスフォーマーはこのメソッドを呼び出して CTIOperationRequest オブジェクトにソフトウェアバージョンを設定し、操作ハンドラーは CTIOperationRequest - getMajorVersion() メソッドを使用して設定値を消費します。CTIOperationRequest - getMinorVersion() および CTIOperationRequest - setMinorVersion(Number minorVersion) メソッドを使用して、プロバイダーのソフトウェアのマイナーバージョン値を取得/設定することもできます。
| 名前 | タイプ | 説明 |
|---|---|---|
| majorVersion | 番号 | 操作要求を行う CTI プロバイダーソフトウェアのメジャーバージョン。 この値が以前に設定されていない場合は、 1 を返します。 |
| タイプ | 説明 |
|---|---|
| なし |
var request = new sn_cti_core.CTIOperationRequest('origin');
request.setMajorVersion(2);
CTIOperationRequest:setMinorVersion(番号 minorVersion)
関連する CTIOperationRequest オブジェクトで要求を行うコンピューター電話インテグレーター (CTI) プロバイダーソフトウェアのマイナーバージョンを設定します。
ServiceNow インスタンスに接続されている CTI プロバイダーが複数のバージョンのソフトウェアを実行している場合は、この方法を使用します。これは、ソフトウェアバージョンによって異なる処理動作が必要になる可能性があるためです。処理動作がソフトウェアのバージョン間でわずかに異なるだけの場合は、操作ハンドラーを 1 つだけ使用することが理にかなっている場合があります。その後、要求を行うソフトウェアのバージョンを確認するだけで処理の違いを処理し、操作ハンドラー内で要求/データを処理できます。必要な処理がバージョン間で大きく異なる場合は、複数の操作ハンドラーを使用する方が効果的です。
通常、メッセージトランスフォーマーはこのメソッドを呼び出して CTIOperationRequest オブジェクトにソフトウェアバージョンを設定し、操作ハンドラーは CTIOperationRequest - getMinorVersion() メソッドを使用して設定値を消費します。CTIOperationRequest - getMajorVersion() および CTIOperationRequest - setMajorVersion(Number majorVersion) メソッドを使用して、プロバイダーのソフトウェアのメジャーバージョン値を取得/設定することもできます。
| 名前 | タイプ | 説明 |
|---|---|---|
| minorVersion | 番号 | 操作要求を行う CTI プロバイダーソフトウェアのマイナーバージョン。 この値が以前に設定されていない場合は、 0 を返します。 |
| タイプ | 説明 |
|---|---|
| なし |
var request = new sn_cti_core.CTIOperationRequest('origin');
...
request.setMinorVersion(3);
CTIOperationRequest:setOperationName(文字列名)
コンピューター電話統合 (CTI) プロバイダーが現在の CTIOperationRequest オブジェクトで実行しようとしている操作の名前を設定します。
操作名によって、要求の処理に使用される操作ハンドラーが決まります。関連付けられたメッセージトランスフォーマーからこのメソッドを呼び出します。
| 名前 | タイプ | 説明 |
|---|---|---|
| name | 文字列 | CTI プロバイダーが現在実行しようとしている操作の名前。 この名前は、要求の処理に使用する操作ハンドラーの名前と同じである必要があります。そうでない場合は、エラーがスローされます。使用可能な操作ハンドラーは、操作ハンドラー [sn_cti_operation_handler] テーブルにあります。 |
| タイプ | 説明 |
|---|---|
| なし |
{
try {
var jsonPayload = httpRequest.body.data;
if (jsonPayload) {
var event = jsonPayload.event;
if (event) {
var details = event.Details;
if (details) {
// Set the operation handler to use to process the request
operationRequest.setOperationName(details.Parameters['sn_operation']);
var contactData = details.ContactData;
if(contactData) {
// Call id should be surfaced in openframe call log so it can be tied to transcription later
operationRequest.setParameter('contact.call_id', contactData.ContactId);
for(var ck in contactData.CustomerEndpoint) {
operationRequest.setParameter('contact.' + ck, contactData.CustomerEndpoint[ck]);
}
operationRequest.setParameter('contact.id', contactData.ContactId);
operationRequest.setParameter('contact.phone', contactData.CustomerEndpoint.Address);
}
var parameters = details.Parameters;
if (parameters) {
for (var pk in parameters) {
switch(pk) {
case 'interactionId':
operationRequest.setInteractionSysId(parameters[pk]);
break;
case 'authToken':
operationRequest.setAuthToken(parameters[pk]);
break;
case 'language':
operationRequest.setLanguage(parameters[pk]);
break;
case 'statusCode':
case 'message':
break;
default:
operationRequest.setParameter(pk, parameters[pk]);
}
}
}
}
}
}
} catch(e) {
ctx.setError(e);
}
})(httpRequest, operationRequest, ctx);
CTIOperationRequest:setOperationSubStepName(文字列名)
現在の CTIOperationRequest オブジェクトに操作サブステップ名を設定します。
サブステップを使用して、操作を処理する前に初期化や検証などのアクションを実行します。汎用であり、すべての CTI プロバイダーで使用される操作ハンドラーとは異なり、サブステップは CTI プロバイダー固有であり、CTI プロバイダーに固有の用語と命名規則を使用します。
- 要求に関連付けられた操作ハンドラーの検索を試みます。
- 最初に、
myOperation_SUFFXと呼ばれる操作ハンドラーをチェックします。 - 見つからない場合は、操作ハンドラー
myOperationをチェックします。見つからない場合はエラーになります。
- 最初に、
- ハンドラーが見つかった場合は、操作ハンドラーの auth_required フラグをチェックします。設定すると、有効な認証トークン ( getAuthToken() メソッドを介して取得された) が要求に存在するかどうかが確認されます。存在し有効な場合は処理を続行し、それ以外の場合はエラーをスローします。
- 渡されたサブステップの操作ハンドラーを検索します。この例では、
subStepName=SubStepとします。- 最初に、myOperation_SUFFX という名前の操作ハンドラーをチェックします
。サブステップ。見つかった場合は、ハンドラーを実行します。 - 見つからない場合は、ハンドラー
myOperation.SubStepをチェックします。見つかった場合は、ハンドラーを実行します。 - 見つからない場合は、request オブジェクトに
subStepNotFoundBehaviorが設定されているかどうかを確認します。 - 設定されている場合は動作を実行し、設定されていない場合はエラーが発生します。
- 最初に、myOperation_SUFFX という名前の操作ハンドラーをチェックします
- プライマリ操作ハンドラー (
myOpersation_SUFFXまたはmyOperation) を実行します。
サブステップのデフォルトの動作を設定するには、 CTIOperationRequest - setSubStepNotFoundBehaviour(Object behaviorhaviour) メソッドを呼び出します。
| 名前 | タイプ | 説明 |
|---|---|---|
| name | 文字列 | CTI プロバイダーが実行しようとしているサブステップの名前。 |
| タイプ | 説明 |
|---|---|
| なし |
(function( /*HTTPRequest*/ httpRequest, /*CTIOperationRequest*/ operationRequest, /*Context*/ ctx) {
try {
var jsonPayload = httpRequest.body.data;
if (jsonPayload) {
var event = jsonPayload.event;
if (event) {
var intent = event.currentIntent;
var inputTranscript = event.inputTranscript;
if(inputTranscript) {
operationRequest.setParameter('$utterance', inputTranscript);
}
if (intent) {
operationRequest.setOperationName(intent.name);
// Add this because intent name gets changed through the pipeline
operationRequest.setParameter('$original_intent', intent.name);
var sessionAttributes = event.sessionAttributes;
if (sessionAttributes) {
for (var sk in sessionAttributes) {
switch (sk) {
case 'interactionId':
operationRequest.setInteractionSysId(sessionAttributes[sk]);
break;
case 'authToken':
operationRequest.setAuthToken(sessionAttributes[sk]);
break;
case 'language':
operationRequest.setLanguage(sessionAttributes[sk]);
break;
case 'statusCode':
case 'message':
break;
default:
operationRequest.setSessionAttribute(sk, sessionAttributes[sk]);
}
}
}
var slots = intent.slots;
// Always copy in slots they are the parameters for the operation
if (slots) {
for (var pk in slots) {
operationRequest.setParameter(pk, slots[pk]);
}
}
var invocationSource = event.invocationSource;
operationRequest.setParameter('$$invocationSource', invocationSource);
// Specific handling for dialog hooks with a way to override for Amazon specific provider
if (invocationSource === 'DialogCodeHook') {
// Set substep to trigger forwarding to another handler IF it s present
operationRequest.setOperationSubStepName(invocationSource);
// Allow pass through behavior
var behaviourToUse = sn_cti_core.CTIOperationRequest.OperationNotFoundBehaviours.PassThrough;
operationRequest.setSubStepNotFoundBehaviour(behaviourToUse);
// Reserved - copy slots in so we can just use delegate as default if the call isn't handled
operationRequest.setParameter('$$slots', slots);
}
}
}
}
} catch (e) {
ctx.setError(e);
}
return operationRequest;
})(httpRequest, operationRequest, ctx);
CTIOperationRequest:setParameter(文字列キー, オブジェクト値)
現在の CTIOperationRequest オブジェクトのパラメーターオブジェクトに指定されたキーと値のペアを設定します。
get/set パラメーターメソッドを使用すると、メッセージトランスフォーマーと操作ハンドラーの間でほぼすべての文字列または数値を渡すことができます。パラメーターオブジェクトには、現在の操作要求に直接関連するデータの 0 個以上のキーと値のペアを含めることができます。操作ハンドラーは、これらの値を消費するときに必要なキー/値ペアを決定します。通常、メッセージトランスフォーマーはこのメソッドを呼び出して CTIOperationRequest オブジェクトにこれらのパラメーターを設定し、操作ハンドラーは CTIOperationRequest - getParameter(String key) または CTIOperationRequest - getParameters() メソッドを使用してそれらを消費します。
JSON.parse(JSON.stringify(object)) 操作を存続できるオブジェクトのみを格納する必要があります。この基準を満たさないオブジェクトは、操作処理チェーン全体に正しく伝達されない可能性があります。var x = {
"string": 'abc',
"int": 123,
"float": 1.234,
"number": new Number(3),
"boolean": true,
"date": new Date(2006, 0, 2, 15, 4, 5),
"object": {
"string": 'abc',
"int": 123,
"float": 1.234,
"number": new Number(3),
"boolean": true,
"date": new Date(2006, 0, 2, 15, 4, 5)
},
"function": function(abc) {
}
}
var stringify = JSON.stringify(x);
gs.info(stringify);
var hydrate = JSON.parse(stringify);
var stringify2 = JSON.stringify(hydrate);
gs.info(stringify2);
{"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z","object":{"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z"}}
{"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z","object":{"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z"}}
| 名前 | タイプ | 説明 |
|---|---|---|
| key | 文字列 | 関連する値を格納するキーの名前。 |
| value | オブジェクト | 格納する値。 有効なデータタイプ:
|
| タイプ | 説明 |
|---|---|
| なし |
{
try {
var jsonPayload = httpRequest.body.data;
if (jsonPayload) {
var event = jsonPayload.event;
if (event) {
var details = event.Details;
if (details) {
operationRequest.setOperationName(details.Parameters['sn_operation']);
var contactData = details.ContactData;
if(contactData) {
// Call id should be surfaced in openframe call log so it can be tied to transcription later
operationRequest.setParameter('contact.call_id', contactData.ContactId);
for(var ck in contactData.CustomerEndpoint) {
operationRequest.setParameter('contact.' + ck, contactData.CustomerEndpoint[ck]);
}
operationRequest.setParameter('contact.id', contactData.ContactId);
operationRequest.setParameter('contact.phone', contactData.CustomerEndpoint.Address);
}
var parameters = details.Parameters;
if (parameters) {
for (var pk in parameters) {
switch(pk) {
case 'interactionId':
operationRequest.setInteractionSysId(parameters[pk]);
break;
case 'authToken':
operationRequest.setAuthToken(parameters[pk]);
break;
case 'language':
operationRequest.setLanguage(parameters[pk]);
break;
case 'statusCode':
case 'message':
break;
default:
operationRequest.setParameter(pk, parameters[pk]);
}
}
}
}
}
}
} catch(e) {
ctx.setError(e);
}
})(httpRequest, operationRequest, ctx);
CTIOperationRequest:setSessionAttribute(文字列キー、オブジェクト値)
現在の CTIOperationRequest オブジェクトに指定されたセッション属性のキーと値のペアを設定します。
get/set セッション属性メソッドを使用すると、メッセージトランスフォーマーと操作ハンドラーの間でほぼすべての文字列または数値を渡すことができます。sessionAttribute オブジェクトには、コンピューター電話統合プロバイダーによって定義されたセッションの期間中有効なキー/値のペアが 0 個以上含められます。セッション属性には、連絡先フロー内でもアクセスできます。操作ハンドラーは、これらの値を消費するときに必要なセッション属性のキー/値ペアを決定します。通常、メッセージトランスフォーマーはこのメソッドを呼び出して CTIOperationRequest オブジェクトにこれらの属性を設定し、操作ハンドラーは CTIOperationRequest - getSessionAttribute(String key) または CTIOperationRequest - getSessionAttribute() メソッドを使用して属性を取得します。
JSON.parse(JSON.stringify(object)) 操作を存続できるオブジェクトのみを格納する必要があります。この基準を満たさないオブジェクトは、操作処理チェーン全体に正しく伝達されない可能性があります。var x = {
"string": 'abc',
"int": 123,
"float": 1.234,
"number": new Number(3),
"boolean": true,
"date": new Date(2006, 0, 2, 15, 4, 5),
"object": {
"string": 'abc',
"int": 123,
"float": 1.234,
"number": new Number(3),
"boolean": true,
"date": new Date(2006, 0, 2, 15, 4, 5)
},
"function": function(abc) {
}
}
var stringify = JSON.stringify(x);
gs.info(stringify);
var hydrate = JSON.parse(stringify);
var stringify2 = JSON.stringify(hydrate);
gs.info(stringify2);
{"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z","object":{"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z"}}
{"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z","object":{"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z"}}
| 名前 | タイプ | 説明 |
|---|---|---|
| key | 文字列 | 関連する値を格納するキーの名前。 |
| value | オブジェクト | 格納する値。 有効なデータタイプ:
|
| タイプ | 説明 |
|---|---|
| なし |
var request = new sn_cti_core.CTIOperationRequest('origin');
request.setSessionAttribute('contact.phone', '+15552222345');
request.setSessionAttribute('contact.okToCall', true);
request.setSessionAttribute('contact.address', {
street: '1234 Main St'
city: 'API City',
zip: 91335
});
CTIOperationRequest:setSubStepNotFoundBehaviour(オブジェクトの動作)
現在のサブステップの操作ハンドラーが見つからない場合に実行する動作を設定します。
このメソッドは、入力メッセージトランスフォーマーによって呼び出される必要があります。
| 名前 | タイプ | 説明 |
|---|---|---|
| 動作 | OperationNotFoundBehaviour | サブステップに処理動作が指定されていない場合に使用する動作。これは、CTIOperationRequest.OperationNotFoundBehaviours オブジェクトで定義されている動作である必要があります。 可能な値:
|
| タイプ | 説明 |
|---|---|
| なし |
(function( /*HTTPRequest*/ httpRequest, /*CTIOperationRequest*/ operationRequest, /*Context*/ ctx) {
try {
var jsonPayload = httpRequest.body.data;
if (jsonPayload) {
var event = jsonPayload.event;
if (event) {
var intent = event.currentIntent;
var inputTranscript = event.inputTranscript;
if(inputTranscript) {
operationRequest.setParameter('$utterance', inputTranscript);
}
if (intent) {
operationRequest.setOperationName(intent.name);
// Add this because intent name gets changed through the pipeline
operationRequest.setParameter('$original_intent', intent.name);
var sessionAttributes = event.sessionAttributes;
if (sessionAttributes) {
for (var sk in sessionAttributes) {
switch (sk) {
case 'interactionId':
operationRequest.setInteractionSysId(sessionAttributes[sk]);
break;
case 'authToken':
operationRequest.setAuthToken(sessionAttributes[sk]);
break;
case 'language':
operationRequest.setLanguage(sessionAttributes[sk]);
break;
case 'statusCode':
case 'message':
break;
default:
operationRequest.setSessionAttribute(sk, sessionAttributes[sk]);
}
}
}
var slots = intent.slots;
// Always copy in slots they are the parameters for the operation
if (slots) {
for (var pk in slots) {
operationRequest.setParameter(pk, slots[pk]);
}
}
var invocationSource = event.invocationSource;
operationRequest.setParameter('$$invocationSource', invocationSource);
// Specific handling for dialog hooks with a way to overide for Amazon specific provider
if (invocationSource === 'DialogCodeHook') {
// Set substep to trigger forwarding to another handler IF it s present
operationRequest.setOperationSubStepName(invocationSource);
// Allow pass through behavior
var behaviourToUse = sn_cti_core.CTIOperationRequest.OperationNotFoundBehaviours.PassThrough;
operationRequest.setSubStepNotFoundBehaviour(behaviourToUse);
// Reserved - copy slots in so we can just use delegate as default if the call isn't handled
operationRequest.setParameter('$$slots', slots);
}
}
}
}
} catch (e) {
ctx.setError(e);
}
return operationRequest;
})(httpRequest, operationRequest, ctx);