CTIOperationRequest:スコープ付き、グローバル
CTIOperationRequest スクリプトインクルードは、現在の CTIOperationRequest オブジェクトのデータを設定および取得するメソッドを提供します。
CTIOperationRequest オブジェクトを使用して、ServiceNow 音声アシスト機能 フレームワーク内のメッセージトランスフォーマーと操作ハンドラーの間で情報を渡します。
通常、メッセージトランスフォーマーは、受信する CTI 固有のペイロードを解析し、関連する CTIOperationRequest オブジェクトにペイロードデータを設定する役割を担います。操作ハンドラーは、CTIOperationRequest オブジェクトから情報を取得し、そのデータを使用して要求された操作を処理する役割を担います。
- Amazon Web Services (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(文字列 origin)
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 Services (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(文字列 Id) メソッドを介して CTIOperationRequest オブジェクトに関連付けられます。このメソッドは一般に、メッセージトランスフォーマーによって呼び出されます。呼び出される順番は getInteractionRecord() メソッドの前でなければなりません。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| GlideRecord | 現在の CTIOperationRequest オブジェクトに関連付けられたインタラクション GlideRecord オブジェクトです。インタラクションレコード sys_id が CTIOperationRequest オブジェクトに設定されていない場合は、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(文字列 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(文字列 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(数値 majorVersion) メソッドを呼び出して CTIOperationRequest オブジェクトにソフトウェアバージョンを設定し、操作ハンドラーは、このメソッドを使用して設定値を使用します。また、CTIOperationRequest - getMinorVersion() および CTIOperationRequest - setMinorVersion(数値 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(文字列 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.SubStepという名前の操作ハンドラーをチェックします。見つかった場合は、ハンドラーを実行します。 - 見つからない場合は、操作ハンドラー
myOperation.SubStepをチェックします。見つかった場合は、ハンドラーを実行します。 - 見つからない場合は、要求オブジェクトに
subStepNotFoundBehaviorが設定されているかどうかを確認します。 - 設定されている場合、動作を実行します。設定されていない場合はエラーになります。
- 最初に、
- プライマリ操作ハンドラー (
myOpersation_SUFFXまたはmyOperation) を実行します。
通常、メッセージトランスフォーマーは、CTIOperationRequest - setOperationSubStepName(文字列 name) メソッドを使用して CTIOperationRequest オブジェクトにサブステップ名を設定します。CTIOperationRequest - setSubStepNotFoundBehaviour(オブジェクト behaviour) メソッドを呼び出して独自のトランスフォーマーを作成する場合は、この動作を上書きできます。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| 文字列 | CTIOperationRequest オブジェクトに設定されているサブステップ操作ハンドラーの名前です。存在しない場合は null を返します。 |
var request = new sn_cti_core.CTIOperationRequest('origin');
var name = request.getOperationSubStepName();
CTIOperationRequest - getParameter(文字列 key)
現在の CTIOperationRequest オブジェクトに既に設定されている、指定されたキーの値を返します。
get/setParameter メソッドを使用すると、メッセージトランスフォーマーと操作ハンドラーの間で実質的に任意の文字列または数値を渡すことができます。パラメーターオブジェクトには、現在の操作要求に直接関連するデータのキー/値ペアを 0 個以上含めることができます。操作ハンドラーは、これらの値を使用するときに必要なキー/値ペアを判断します。通常、メッセージトランスフォーマーは、CTIOperationRequest - setParameter(文字列キー, オブジェクト値) メソッドを呼び出して 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/setParameter メソッドを使用すると、メッセージトランスフォーマーと操作ハンドラーの間で実質的に任意の文字列または数値を渡すことができます。パラメーターオブジェクトには、現在の操作要求に直接関連するデータのキー/値ペアを 0 個以上含めることができます。操作ハンドラーは、これらの値を使用するときに必要なキー/値ペアを判断します。通常、メッセージトランスフォーマーは、CTIOperationRequest - setParameter(文字列キー, オブジェクト値) メソッドを呼び出して 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(文字列 key)
現在の CTIOperationRequest オブジェクトに設定されている、指定されたセッション属性キーの値を返します。
get/setSessionAttribute メソッドを使用すると、メッセージトランスフォーマーと操作ハンドラーの間で実質的に任意の文字列または数値を渡すことができます。sessionAttribute オブジェクトには、コンピューター電話統合プロバイダーが定義したセッションの期間中に有効なデータのキー/値ペア (連絡先電話番号など) を 0 個以上含めることができます。セッション属性は、問い合わせフロー内でもアクセスできます。操作ハンドラーは、これらの値を使用するときに必要なセッション属性のキー/値ペアを判断します。通常、メッセージトランスフォーマーは、CTIOperationRequest - setSessionAttribute(文字列キー, オブジェクト値) メソッドを呼び出して CTIOperationRequest オブジェクトにこれらの属性を設定します。セッション属性は、セッションの存続期間 (コール全体など) の間存続し、そのコールセッション内の各操作要求とともに CTI プロバイダーによって返される必要があるという点で、パラメーターとは異なります。
| 名前 | タイプ | 説明 |
|---|---|---|
| key | 文字列 | 返されるキーの値の名前です。 |
| タイプ | 説明 |
|---|---|
| 文字列または数値 | 指定されたキーの値です。該当するキーが存在しない場合は、null を返します。 |
var request = new sn_cti_core.CTIOperationRequest('origin');
var phoneAttribute = request.getSessionAttribute('contact.phone');
CTIOperationRequest - getSessionAttributes()
現在の CTIOperationRequest オブジェクトに設定されたすべてのセッション属性のキー/値ペアのマップを返します。
get/setSessionAttribute メソッドを使用すると、メッセージトランスフォーマーと操作ハンドラーの間で実質的に任意の文字列または数値を渡すことができます。sessionAttribute オブジェクトには、コンピューター電話統合プロバイダーが定義したセッションの期間中に有効なデータのキー/値ペア (連絡先電話番号など) を 0 個以上含めることができます。セッション属性は、問い合わせフロー内でもアクセスできます。操作ハンドラーは、これらの値を使用するときに必要なセッション属性のキー/値ペアを判断します。通常、メッセージトランスフォーマーは、CTIOperationRequest - setSessionAttribute(文字列キー, オブジェクト値) メソッドを呼び出して 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 音声アシスト機能 フレームワークで見つからない場合は、「step not found behavior」の使用が試みられます。この動作は通常、操作が最初に要求されたときにメッセージトランスフォーマーによって設定されます。
| 名前 | タイプ | 説明 |
|---|---|---|
| なし |
| タイプ | 説明 |
|---|---|
| OperationNotFoundBehaviours | 操作/サブステップの組み合わせ (<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 Services (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(文字列 key, オブジェクト value) メソッドを使用して、関連する CTIOperationResponse オブジェクトに、インタラクションレコード sys_id とテーブル名をセッション属性として設定します。関連するメソッドトランスフォーマーは、この情報をコンピューター電話統合 (CTI) プロバイダーのペイロードに変換し、CTI プロバイダーに送り返します。
CTI プロバイダーは、問い合わせセッションのインタラクションレコード sys_id をローカルに保存する必要があります。CTI プロバイダーは、この問い合わせセッションの ServiceNow 音声アシスト機能 とのインタラクションのたびに、そのペイロードで対応するインタラクションレコード sys_id を返す必要があります。受信メッセージトランスフォーマーは、ペイロードを解析し、CTIOperationRequest - setInteractionSysId() メソッドを使用して、関連する CTIOperationtRequest オブジェクトにインタラクションレコード sys_id を設定します。
CTIOperationRequest - getInteractionRecord() メソッドは、この sys_id を使用して問い合わせセッションの正しいインタラクションレコードを取得します。インタラクションレコードはインタラクション [interaction] テーブルにあります。インタラクションレコードの詳細については、「」を参照してください。
| 名前 | タイプ | 説明 |
|---|---|---|
| sys_id | 文字列 | 要求に関連付けるインタラクションレコードの sys_id です。 |
| タイプ | 説明 |
|---|---|
| なし |
受信ペイロード (パラメーターとして渡される) からインタラクションレコード 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 オブジェクトに言語を設定します。
| 名前 | タイプ | 説明 |
|---|---|---|
| languageCode | 文字列 | 関連操作を処理するときに使用する 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(数値 minorVersion) メソッドを使用して、プロバイダーのソフトウェアのマイナーバージョン値も取得/設定できます。
| 名前 | タイプ | 説明 |
|---|---|---|
| majorVersion | 番号 | 操作要求を行う CTI プロバイダーソフトウェアのメジャーバージョンです。 この値がまだ設定されていない場合は、1 を返します。 |
| タイプ | 説明 |
|---|---|
| なし |
var request = new sn_cti_core.CTIOperationRequest('origin');
request.setMajorVersion(2);
CTIOperationRequest - setMinorVersion(数値 minorVersion)
要求を行うコンピューター電話統合 (CTI) ソフトウェアのマイナーバージョンを、関連する CTIOperationRequest オブジェクトに設定します。
ServiceNow インスタンスに接続されている CTI プロバイダーが複数のバージョンのソフトウェアを実行している場合は、ソフトウェアのバージョンごとに異なる処理動作が必要になる可能性があるため、このメソッドを使用します。ソフトウェアのバージョン間で処理の動作がわずかに異なるだけの場合は、操作ハンドラーを 1 つだけにすることができます。その後、要求を行っているソフトウェアのバージョンを確認するだけで、処理の違いに対応し、操作ハンドラー内で要求/データを処理できます。必要な処理がバージョン間で大幅に異なる場合は、複数の操作ハンドラーを使用する方が効率的です。
通常、メッセージトランスフォーマーは、このメソッドを呼び出して CTIOperationRequest オブジェクトにソフトウェアバージョンを設定し、操作ハンドラーは、CTIOperationRequest - getMinorVersion() メソッドを使用して設定値を使用します。また、CTIOperationRequest - getMajorVersion() および CTIOperationRequest - setMajorVersion(数値 majorVersion) メソッドを使用して、プロバイダーのソフトウェアのメジャーバージョン値も取得/設定できます。
| 名前 | タイプ | 説明 |
|---|---|---|
| minorVersion | 番号 | 操作要求を行う CTI プロバイダーソフトウェアのマイナーバージョンです。 この値がまだ設定されていない場合は、0を返します。 |
| タイプ | 説明 |
|---|---|
| なし |
var request = new sn_cti_core.CTIOperationRequest('origin');
...
request.setMinorVersion(3);
CTIOperationRequest - setOperationName(文字列 name)
現在の CTIOperationRequest オブジェクトに、コンピューター電話統合 (CTI) プロバイダーが実行を試みている操作の名前を設定します。
操作名によって、要求の処理に使用される操作ハンドラーが決まります。関連するメッセージトランスフォーマーからこのメソッドを呼び出します。
| 名前 | タイプ | 説明 |
|---|---|---|
| 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(文字列 name)
現在の CTIOperationRequest オブジェクトに操作サブステップ名を設定します。
サブステップを使用して、操作を処理する前に初期化や検証などのアクションを実行します。すべての CTI プロバイダーが使用する汎用的な操作ハンドラーとは異なり、サブステップは CTI プロバイダー固有であり、CTI プロバイダーに固有の用語と命名規則を使用します。
- 要求に関連付けられた操作ハンドラーを探します。
- 最初に、
myOperation_SUFFXという名前の操作ハンドラーをチェックします。 - 見つからない場合は、操作ハンドラー
myOperationをチェックします。見つからない場合はエラーになります。
- 最初に、
- ハンドラーが見つかった場合、操作ハンドラーの auth_required フラグがチェックされます。設定すると、有効な認証トークン (getAuthToken() メソッドで取得されます) が要求に存在することが確認されます。存在していて有効な場合は処理を続行し、それ以外の場合はエラーをスローします。
- サブステップで渡された操作ハンドラーを探します。この例では、
subStepName=SubStepと仮定します。- 最初に、
myOperation_SUFFX.SubStepという名前の操作ハンドラーをチェックします。見つかった場合は、ハンドラーを実行します。 - 見つからない場合は、操作ハンドラー
myOperation.SubStepをチェックします。見つかった場合は、ハンドラーを実行します。 - 見つからない場合は、要求オブジェクトに
subStepNotFoundBehaviorが設定されているかどうかを確認します。 - 設定されている場合、動作を実行します。設定されていない場合はエラーになります。
- 最初に、
- プライマリ操作ハンドラー (
myOpersation_SUFFXまたはmyOperation) を実行します。
サブステップのデフォルトの動作を設定するには、CTIOperationRequest - setSubStepNotFoundBehaviour(オブジェクト behaviour) メソッドを呼び出します。
| 名前 | タイプ | 説明 |
|---|---|---|
| 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(文字列 key, オブジェクト value)
指定されたキー/値ペアを現在の CTIOperationRequest オブジェクトのパラメーターオブジェクトに設定します。
get/setParameter メソッドを使用すると、メッセージトランスフォーマーと操作ハンドラーの間で実質的に任意の文字列または数値を渡すことができます。パラメーターオブジェクトには、現在の操作要求に直接関連するデータのキー/値ペアを 0 個以上含めることができます。操作ハンドラーは、これらの値を使用するときに必要なキー/値ペアを判断します。通常、メッセージトランスフォーマーは、このメソッドを呼び出して CTIOperationRequest オブジェクトにこれらのパラメーターを設定し、操作ハンドラーは、CTIOperationRequest - getParameter(文字列 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(文字列 key, オブジェクト value)
現在の CTIOperationRequest オブジェクトに、指定されたセッション属性のキー/値ペアを設定します。
get/setSessionAttribute メソッドを使用すると、メッセージトランスフォーマーと操作ハンドラーの間で実質的に任意の文字列または数値を渡すことができます。sessionAttribute オブジェクトには、コンピューター電話統合プロバイダーが定義したセッションの期間中に有効なデータのキー/値ペアを 0 個以上含めることができます。セッション属性は、問い合わせフロー内でもアクセスできます。操作ハンドラーは、これらの値を使用するときに必要なセッション属性のキー/値ペアを判断します。通常、メッセージトランスフォーマーは、このメソッドを呼び出して CTIOperationRequest オブジェクトにこれらの属性を設定し、操作ハンドラーは、CTIOperationRequest - getSessionAttribute(文字列 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(オブジェクト behaviour)
現在のサブステップの操作ハンドラーが見つからない場合に実行する動作を設定します。
このメソッドは、入力メッセージトランスフォーマーによって呼び出す必要があります。
| 名前 | タイプ | 説明 |
|---|---|---|
| behaviour | OperationNotFoundBehaviours | 処理動作がサブステップに指定されていない場合に使用する動作です。これは、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);