CTIOperationRequest - 범위 지정, 전역
CTIOperationRequest API는 현재 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 API 가져오기 메서드를 사용하여 요청된 작업을 처리하기 위해 연결된 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);운영 핸들러 생성에 대한 자세한 내용은 자동화된 호출자 상호작용에 대한 연락처 플로우 구성을 참조하십시오.
이 API는 sn_cti_core 네임스페이스에서 실행됩니다. CTIOperationRequest API ServiceNow 음성 기능 에 액세스하려면 (sn_cti_core) 플러그인을 활성화해야 합니다. 활성화 ServiceNow 음성 기능에 대한 자세한 내용은 ServiceNow Voice 애플리케이션 설치를 참조하십시오.
에 대한 자세한 내용은 ServiceNow Voice를 ServiceNow 음성 기능참조하십시오.
CTIOperationRequest - CTIOperationRequest(문자열 원본)
CTIOperationRequest 객체를 인스턴스화합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 원본 | 문자열 | 옵션입니다. 요청의 출처입니다. 일반적으로 컴퓨터 전화 통합 사업자 공급자의 이름입니다. 기본값: 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(String 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(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 제공자가 여러 버전의 소프트웨어를 실행하는 경우 이 방법을 사용합니다. 처리 동작이 소프트웨어 버전 간에 약간만 다른 경우 단일 작업 처리기만 사용하는 것이 합리적일 수 있습니다. 그런 다음 요청을 하는 소프트웨어 버전을 확인하고 운영 핸들러 내에서 요청/데이터를 처리하여 처리 차이를 처리할 수 있습니다. 필요한 처리가 버전마다 크게 다른 경우 여러 작업 처리기를 사용하는 것이 더 효과적일 수 있습니다.
일반적으로 메시지 변환기는 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 제공자가 여러 버전의 소프트웨어를 실행하는 경우 이 방법을 사용합니다. 처리 동작이 소프트웨어 버전 간에 약간만 다른 경우 단일 작업 처리기만 사용하는 것이 합리적일 수 있습니다. 그런 다음 요청을 하는 소프트웨어 버전을 확인하고 운영 핸들러 내에서 요청/데이터를 처리하여 처리 차이를 처리할 수 있습니다. 필요한 처리가 버전마다 크게 다른 경우 여러 작업 처리기를 사용하는 것이 더 효과적일 수 있습니다.
일반적으로 메시지 변환기는 CTIOperationRequest - setMinorVersion(Number minorVersion) 메서드를 호출하여 CTIOperationRequest CTIOperationRequest - setMinorVersion(Number minorVersion) 개체의 소프트웨어 버전을 설정한 다음 작업 처리기는 이 메서드를 사용하여 설정 값을 사용합니다. CTIOperationRequest - getMajorVersion() 및 CTIOperationRequest - setMajorVersion(Number majorVersion CTIOperationRequest - setMajorVersion(Number majorVersion)) CTIOperationRequest - getMajorVersion() 메서드를 사용하여 제공자 소프트웨어의 주 버전 값을 가져오거나 설정할 수도 있습니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| 번호 | 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처리기를 확인합니다. 발견되면 핸들러를 실행합니다. - 찾을 수 없는 경우 요청 객체에
subStepNotFoundBehavior가 설정되어 있는지 확인합니다. - 설정하면 동작이 실행되고, 그렇지 않으면 오류가 발생합니다.
- 먼저 myOperation_SUFFX라는 운영 핸들러를 확인합니다
- 기본 작업 처리기(
myOpersation_SUFFX또는myOperation)를 실행합니다.
일반적으로 메시지 변환기는 CTIOperationRequest - setOperationSubStepName(String name) 메서드를 사용하여 CTIOperationRequest 개체의 하위 단계 이름을 설정합니다. CTIOperationRequest - setSubStepNotFoundBehaviour(Object behaviour) 메서드를 호출하여 고유한 변환기를 만드는 경우 이 동작을 재정의할 수 있습니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| 문자열 | 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 개체에서 이러한 매개 변수를 설정하고 작업 처리기는 이 메서드를 사용하여 매개 변수를 사용합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 키 | 문자열 | 반환할 키 값의 이름입니다. |
| 유형 | 설명 |
|---|---|
| 문자열 또는 숫자 | 지정된 키의 값입니다. 이러한 키가 없으면 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 공급자가 다시 전달해야 합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 키 | 문자열 | 반환할 키 값의 이름입니다. |
| 유형 | 설명 |
|---|---|
| 문자열 또는 숫자 | 지정된 키의 값입니다. 이러한 키가 없으면 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 음성 기능 찾을 수 없는 경우 "단계를 찾을 수 없는 동작"을 사용하려고 시도합니다. 이 동작은 일반적으로 작업이 처음 요청될 때 메시지 변환기에 의해 설정됩니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| OperationNotFoundBehaviours | 운영/하위 단계 조합에 대한 운영 핸들러를 찾을 수 없을 때 수행할 동작/처리(<operation_name>. 하위 단계>). 정의되지 않은 경우 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 음성 기능 사용자에 대한 인증 토큰입니다. |
| 유형 | 설명 |
|---|---|
| void |
전달된 인증 토큰을 저장하는 메시지 변환기 스크립트의 예입니다.
{
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(String 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 사용하여 연락처 세션에 대한 올바른 상호작용 기록을 가져옵니다. 상호작용 기록은 상호작용 [interaction] 테이블에 있습니다. 상호작용 기록에 대한 자세한 내용은 다음을 참조하십시오.
| 이름 | 유형 | 설명 |
|---|---|---|
| sys_id | 문자열 | 요청과 연결할 상호작용 기록의 sys_id입니다. |
| 유형 | 설명 |
|---|---|
| void |
수신 페이로드(매개변수로 전달됨)에서 상호작용 기록 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 언어 코드입니다. |
| 유형 | 설명 |
|---|---|
| void |
{
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(Number majorVersion)
연결된 CTIOperationRequest 개체에 대한 요청을 수행하는 CTI(컴퓨터 전화 통합 시스템) 공급자 소프트웨어의 주 버전을 설정합니다.
소프트웨어 버전마다 다른 처리 동작이 필요할 수 있으므로 ServiceNow 인스턴스에 연결된 CTI 제공자가 여러 버전의 소프트웨어를 실행하는 경우 이 방법을 사용합니다. 처리 동작이 소프트웨어 버전 간에 약간만 다른 경우 단일 작업 처리기만 사용하는 것이 합리적일 수 있습니다. 그런 다음 요청을 하는 소프트웨어 버전을 확인하고 운영 핸들러 내에서 요청/데이터를 처리하여 처리 차이를 처리할 수 있습니다. 필요한 처리가 버전마다 크게 다른 경우 여러 작업 처리기를 사용하는 것이 더 효과적일 수 있습니다.
일반적으로 메시지 변환기는 이 메서드를 호출하여 CTIOperationRequest 개체의 소프트웨어 버전을 설정한 다음 작업 처리기는 CTIOperationRequest - getMajorVersion() 메서드를 사용하여 설정 값을 사용합니다. CTIOperationRequest - getMinorVersion() 및 CTIOperationRequest - setMinorVersion(Number minorVersion) 메서드를 사용하여 제공자 소프트웨어의 부 버전 값을 가져오거나 설정할 수도 있습니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 주 버전 | 번호 | 작업 요청을 수행하는 CTI 공급자 소프트웨어의 주 버전입니다. 이 값이 이전에 설정되지 않은 경우 1을 반환합니다. |
| 유형 | 설명 |
|---|---|
| void |
var request = new sn_cti_core.CTIOperationRequest('origin');
request.setMajorVersion(2);
CTIOperationRequest - setMinorVersion(Number minorVersion)
연결된 CTIOperationRequest 개체에 대한 요청을 수행하는 CTI(컴퓨터 전화 통신 통합자) 공급자 소프트웨어의 부 버전을 설정합니다.
소프트웨어 버전마다 다른 처리 동작이 필요할 수 있으므로 ServiceNow 인스턴스에 연결된 CTI 제공자가 여러 버전의 소프트웨어를 실행하는 경우 이 방법을 사용합니다. 처리 동작이 소프트웨어 버전 간에 약간만 다른 경우 단일 작업 처리기만 사용하는 것이 합리적일 수 있습니다. 그런 다음 요청을 하는 소프트웨어 버전을 확인하고 운영 핸들러 내에서 요청/데이터를 처리하여 처리 차이를 처리할 수 있습니다. 필요한 처리가 버전마다 크게 다른 경우 여러 작업 처리기를 사용하는 것이 더 효과적일 수 있습니다.
일반적으로 메시지 변환기는 이 메서드를 호출하여 CTIOperationRequest 개체의 소프트웨어 버전을 설정한 다음 작업 처리기는 CTIOperationRequest - getMinorVersion() 메서드를 사용하여 설정 값을 사용합니다. CTIOperationRequest - getMajorVersion() 및 CTIOperationRequest - setMajorVersion(Number majorVersion) 메서드를 사용하여 제공자 소프트웨어의 주 버전 값을 가져오거나 설정할 수도 있습니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 부 버전 | 번호 | 작업 요청을 수행하는 CTI 공급자 소프트웨어의 부 버전입니다. 이 값이 이전에 설정되지 않은 경우 0을 반환합니다. |
| 유형 | 설명 |
|---|---|
| void |
var request = new sn_cti_core.CTIOperationRequest('origin');
...
request.setMinorVersion(3);
CTIOperationRequest - setOperationName(문자열 이름)
CTI(컴퓨터 전화 통합 시스템) 공급자가 현재 CTIOperationRequest 개체에서 실행하려고 하는 작업의 이름을 설정합니다.
작업 이름은 요청을 처리하는 데 사용되는 작업 처리기를 결정합니다. 연결된 메시지 변환기에서 이 메서드를 호출합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| name | 문자열 | CTI 제공자가 현재 실행하려고 하는 작업의 이름입니다. 이 이름은 요청을 처리하는 데 사용할 운영 핸들러의 이름과 같아야 합니다. 그렇지 않으면 오류가 throw됩니다. 운영 핸들러 [sn_cti_operation_handler] 테이블에서 사용 가능한 운영 핸들러를 찾을 수 있습니다. |
| 유형 | 설명 |
|---|---|
| void |
{
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처리기를 확인합니다. 발견되면 핸들러를 실행합니다. - 찾을 수 없는 경우 요청 객체에
subStepNotFoundBehavior가 설정되어 있는지 확인합니다. - 설정하면 동작이 실행되고, 그렇지 않으면 오류가 발생합니다.
- 먼저 myOperation_SUFFX라는 운영 핸들러를 확인합니다
- 기본 작업 처리기(
myOpersation_SUFFX또는myOperation)를 실행합니다.
CTIOperationRequest - setSubStepNotFoundBehaviour(Object behaviour) 메서드를 호출하여 하위 단계의 기본 동작을 설정할 수 있습니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| name | 문자열 | CTI 제공자가 실행하려는 하위 단계의 이름입니다. |
| 유형 | 설명 |
|---|---|
| void |
(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 키) 또는 CTIOperationRequest - getParameters() 메서드를 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"}}
| 이름 | 유형 | 설명 |
|---|---|---|
| 키 | 문자열 | 연결된 값을 저장할 키의 이름입니다. |
| 값 | 객체 | 저장할 값입니다. 유효한 데이터 유형:
|
| 유형 | 설명 |
|---|---|
| void |
{
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 키) 또는 CTIOperationRequest - getSessionAttribute() 메서드를 사용하여 특성을 가져옵니다.CTIOperationRequest - getSessionAttributes()
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"}}
| 이름 | 유형 | 설명 |
|---|---|---|
| 키 | 문자열 | 연결된 값을 저장할 키의 이름입니다. |
| 값 | 객체 | 저장할 값입니다. 유효한 데이터 유형:
|
| 유형 | 설명 |
|---|---|
| void |
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(객체 동작)
현재 하위 단계의 운영 핸들러를 찾을 수 없는 경우 수행할 동작을 설정합니다.
이 메서드는 입력 메시지 변환기에서 호출해야 합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 행동 | OperationNotFoundBehaviours | 하위 단계에 대해 처리 동작이 지정되지 않은 경우 사용할 동작입니다. CTIOperationRequest.OperationNotFoundBehaviours 개체에 정의된 동작이어야 합니다. 가능한 값:
|
| 유형 | 설명 |
|---|---|
| void |
(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);