CTIOperationRequest - com escopo, global
A API CTIOperationRequest fornece métodos para definir e obter dados sobre o objeto CTIOperationRequest atual.
Você usa objetos CTIOperationRequest para passar informações entre um transformador de mensagem e um manipulador de operação na estrutura ServiceNow Voz.
Normalmente, um transformador de mensagem é responsável por analisar uma carga útil específica de CTI e definir os dados da carga útil em um objeto CTIOperationRequest associado. Um manipulador de operação é responsável por obter as informações do objeto CTIOperationRequest e usar os dados para processar a operação solicitada.
- Proxy do Amazon Web Services (AWS) Lambda (invocar a função do AWS Lambda)
- Bot do AWS Lex (obter entrada do cliente)
Uma carga útil é passada para uma instância ServiceNow de uma origem externa, como de um provedor de integração de telefonia e computação (CTI) que está fazendo uma solicitação de operação. Quando uma solicitação é recebida, um transformador de mensagem analisa a carga útil e usa os métodos de conjunto CTIOperationRequest para definir valores de carga útil, como o nome do manipulador de operação, em uma operação e objeto CTIOperationRequest específico de contato.
Por exemplo, o script do transformador de mensagem a seguir analisa a carga passada em JSON e define os valores exigidos pelo manipulador de operação associado no objeto 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);Depois que o transformador de mensagem termina de analisar a carga passada, a estrutura ServiceNow Voz instancia o manipulador de operação especificado. O manipulador operacional usa os métodos get da API CTIOperationResponse para obter as informações necessárias do objeto CTIOperationRequest associado para processar a operação solicitada.
Por exemplo, o script do manipulador de operação a seguir armazena valores que foram definidos no objeto CTIOperationRequest no registro de interação associado à chamada.
(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);Para obter informações adicionais sobre como criar manipuladores de operação, consulte Configurar um fluxo de contato para uma interação automatizada com o solicitante.
Esta API é executada no namespace sn_cti_core. Antes de acessar a API CTIOperationRequest, o plug-in ServiceNow Voz (sn_cti_core) deve ser ativado. Para obter informações sobre como ativar o ServiceNow Voz, consulte Instalar aplicações do ServiceNow Voice.
Para obter informações adicionais sobre o ServiceNow Voz, consulte ServiceNow Voice.
CTIOperationRequest - CTIOperationRequest(cadeia de caracteres de origem)
Instancia um objeto CTIOperationRequest.
| Nome | Tipo | Descrição |
|---|---|---|
| origem | Cadeia de caracteres | Opcional. Origem da solicitação. Normalmente, o nome do provedor do integrador de telefonia computadorizada. Padrão: nulo |
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()
Retorna o token de autenticação definido no objeto CTIOperationRequest associado.
Este token é usado pela estrutura ServiceNow Voz para autenticar o usuário ServiceNow Voz atual antes de executar o manipulador de operação solicitado se o sinalizador auth_required do manipulador estiver definido como verdadeiro. O sinalizador auth_required é um campo na tabela Operation Handler [sn_cti_operation_handler]. A vida útil de um token de autenticação deve ser a vida útil da sessão de chamada, mas é determinada pelo provedor de CTI.
Você pode definir qualquer manipulação de autenticação/autorização necessária para sua implementação criando seu próprio manipulador de operação de autenticação. Independentemente de como o token de autenticação é gerado, o tradutor de mensagens deve passar o token de volta na carga útil de CTI. Além disso, o provedor de CTI deve armazenar este token de autenticação localmente e passá-lo em cada solicitação de operação que requer autenticação.
Se estiver usando o manipulador de operação de autenticação fornecido pela instância, o manipulador iniciará a criação do token de autenticação com base em um PIN de quatro dígitos inserido pelo usuário. Em seguida, ele define o token de autenticação no objeto "sessionAttributes" do objeto CTIOperationResponse. O transformador de mensagem associado traduz o objeto "sessionAttributes" na carga específica de CTI e a envia para o provedor de CTI.
- Proxy do Amazon Web Services (AWS) Lambda (invocar a função do AWS Lambda)
- Bot do AWS Lex (obter entrada do cliente)
| Nome | Tipo | Descrição |
|---|---|---|
| Nenhum |
| Tipo | Descrição |
|---|---|
| Cadeia de caracteres | O token de autenticação associado ao usuário ServiceNow Voz atual. |
(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()
Retorna a interação GlideRecord associada à solicitação de operação.
Uma interação representa uma solicitação de assistência do cliente feita por meio de um bate-papo, chamada telefônica ou pessoalmente. As interações podem ser roteadas para filas para atribuição ou atribuídas diretamente aos agentes. Os registros de interação são armazenados na tabela Interação [interação] e podem conter qualquer tipo de dados que descreva as interações da conta de serviço com um cliente para uma sessão específica.
Os registros de interação são associados a um objeto CTIOperationRequest por meio do método CTIOperationRequest - setInteractionSysId(String Id). Este método é normalmente chamado pelo transformador de mensagem e deve ser chamado antes de chamar o método getInteractionRecord().
| Nome | Tipo | Descrição |
|---|---|---|
| Nenhum |
| Tipo | Descrição |
|---|---|
| GlideRecord | Objeto GlideRecord de interação associado ao objeto CTIOperationRequest atual. Se o registro de interação sys_id não tiver sido definido no objeto CTIOperationRequest, retornará nulo. |
(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()
Retorna o sys_id do registro de interação associado ao objeto CTIOperationRequest atual.
O método CTIOperationRequest - setInteractionSysId(String Id) deve ter sido chamado antes de chamar este método.
| Nome | Tipo | Descrição |
|---|---|---|
| Nenhum |
| Tipo | Descrição |
|---|---|
| Cadeia de caracteres | O sys_id do registro de interação definido no objeto CTIOperationRequest atual. Se o sys_id não tiver sido definido no objeto CTIOperationRequest associado, o método retornará nulo. |
(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()
Retorna o código de idioma ISO 639.1 que foi definido no objeto CTIOperationRequest atual.
Usar o idioma preferencial do cliente permite que você use os recursos de internacionalização e localização fornecidos pela plataforma para personalizar mensagens e outras comunicações com o solicitante associado.
Normalmente, um manipulador de operação chama o método getLanguage() e o transformador de mensagem define o idioma no objeto CTIOperationRequest chamando o método CTIOperationRequest - setLanguage(String languageCode).
| Nome | Tipo | Descrição |
|---|---|---|
| Nenhum |
| Tipo | Descrição |
|---|---|
| Cadeia de caracteres | O código de idioma ISO 639.1 definido no objeto CTIOperationRequest atual. Se o código de idioma não estiver definido, retornará en. |
O exemplo a seguir mostra um manipulador de operação chamando getLanguage() para obter o idioma preferencial do solicitante.
(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()
Retorna a versão principal do software do integrador de telefonia e computador (CTI) definido no objeto CTIOperationRequest atual.
Use este método se os provedores de CTI conectados à sua instância ServiceNow estiverem executando várias versões do software, pois versões diferentes do software podem exigir um comportamento de processamento diferente. Se o comportamento do processamento for apenas um pouco diferente entre as versões do software, pode fazer sentido ter apenas um manipulador de operação. Você pode lidar com as diferenças de processamento apenas verificando a versão do software que faz a solicitação e processa a solicitação/dados em seu manipulador de operação. Se o processamento necessário for significativamente diferente entre as versões, pode ser mais eficaz usar vários manipuladores de operação.
Normalmente, o transformador de mensagem define a versão do software no objeto CTIOperationRequest chamando o método CTIOperationRequest - setMajorVersion(Number majorVersion) e um manipulador de operação consome o valor definido usando este método. Você também pode obter/definir o valor da versão secundária do software de um provedor usando os métodos CTIOperationRequest - getMinorVersion() e CTIOperationRequest - setMinorVersion(Number minorVersion).
| Nome | Tipo | Descrição |
|---|---|---|
| Nenhum |
| Tipo | Descrição |
|---|---|
| Número | Número da versão principal do software CTI. Se a versão principal nunca foi definida, retornará 1. |
var request = new sn_cti_core.CTIOperationRequest('origin');
var majorVersion = request.getMajorVersion();
CTIOperationRequest – getMinorVersion()
Retorna a versão secundária do software do integrador de telefonia e computador (CTI) associado a um objeto CTIOperationRequest.
Use este método se os provedores de CTI conectados à sua instância ServiceNow estiverem executando várias versões do software, pois versões diferentes do software podem exigir um comportamento de processamento diferente. Se o comportamento do processamento for apenas um pouco diferente entre as versões do software, pode fazer sentido ter apenas um manipulador de operação. Você pode lidar com as diferenças de processamento apenas verificando a versão do software que faz a solicitação e processa a solicitação/dados em seu manipulador de operação. Se o processamento necessário for significativamente diferente entre as versões, pode ser mais eficaz usar vários manipuladores de operação.
Normalmente, o transformador de mensagem define a versão do software no objeto CTIOperationRequest chamando o método CTIOperationRequest - setMinorVersion(Number minorVersion) CTIOperationRequest - setMinorVersion(Number minorVersion) e um manipulador de operação consome o valor definido usando este método. Você também pode obter/definir o valor da versão principal do software de um provedor usando os métodos CTIOperationRequest - getMajorVersion() CTIOperationRequest - getMajorVersion() e CTIOperationRequest - setMajorVersion(Number majorVersion) CTIOperationRequest - setMajorVersion(Number majorVersion).
| Nome | Tipo | Descrição |
|---|---|---|
| Nenhum |
| Tipo | Descrição |
|---|---|
| Número | Número da versão secundária do software CTI. Se a versão secundária nunca foi definida, retornará 0. |
var request = new sn_cti_core.CTIOperationRequest('origin');
var minorVersion = request.getMinorVersion();
CTIOperationRequest - getOperationName()
Retorna o nome da operação que o provedor de integração de telefonia e computação (CTI) está solicitando para executar.
O nome da operação determina o manipulador de operação que é usado para processar uma solicitação. Normalmente, o transformador de mensagem define o nome da operação no objeto CTIOperationRequest usando o método CTIOperationRequest - setOperationName(String name).
| Nome | Tipo | Descrição |
|---|---|---|
| Nenhum |
| Tipo | Descrição |
|---|---|
| Cadeia de caracteres | O nome da operação que o provedor de CTI está solicitando para executar. Se o nome da operação não estiver definido, retornará nulo. |
var request = new sn_cti_core.CTIOperationRequest('origin');
var name = request.getOperationName();
CTIOperationRequest – getOperationSubStepName()
Retorna o nome do manipulador da operação de subetapa definido no objeto CTIOperationRequest atual.
Use subetapas para executar ações como inicialização e validação antes de processar uma operação. Ao contrário dos manipuladores de operação que devem ser genéricos e usados por todos os provedores de CTI, as subetapas são específicas do provedor de CTI e usam terminologia e convenções de nomenclatura que são específicas do provedor de CTI.
- Tenta localizar o manipulador de operação associado à solicitação.
- Primeiro, verifica se há um manipulador de operação chamado
myOperation_SUFFX. - Se não for encontrado, verificará o manipulador de operação
myOperation. Se não for encontrado, os erros serão eliminados.
- Primeiro, verifica se há um manipulador de operação chamado
- Se o manipulador for encontrado, verificará o sinalizador auth_required no manipulador de operação. Se definido, ele verifica se um token de autenticação válido (obtido por meio do método getAuthToken() ) está presente na solicitação. Se presente e válido, continue processando, caso contrário, ocorrerá um erro.
- Pesquisa o manipulador de operação para a subetapa aprovada. Para este exemplo, vamos supor
subStepName=SubStep.- Primeiro, verifica se há um manipulador de operação chamado
myOperation_SUFFX.SubStep. Se encontrado, executa o manipulador. - Se não for encontrado, verificará o manipulador
myOperation.SubStep. Se encontrado, executa o manipulador. - Se não for encontrado, verificará se um
subStepNotFoundBehaviorfoi definido no objeto request. - Se definido, executará o comportamento, caso contrário, ocorrerá erros.
- Primeiro, verifica se há um manipulador de operação chamado
- Executa o manipulador de operação primário (
myOpersation_SUFFXoumyOperation.)
Normalmente, o transformador de mensagem define o nome da subetapa no objeto CTIOperationRequest usando o método CTIOperationRequest - setOperationSubStepName(String name). Você pode substituir esse comportamento se estiver criando seu próprio transformador chamando o método CTIOperationRequest - setSubStepNotFoundBehaviour(Object comportamento).
| Nome | Tipo | Descrição |
|---|---|---|
| Nenhum |
| Tipo | Descrição |
|---|---|
| Cadeia de caracteres | O nome do manipulador de operação de subetapa definido no objeto CTIOperationRequest. Se não existir, retornará nulo. |
var request = new sn_cti_core.CTIOperationRequest('origin');
var name = request.getOperationSubStepName();
CTIOperationRequest - getParameter(cadeia de caracteres chave)
Retorna o valor de uma chave especificada definida anteriormente no objeto CTIOperationRequest atual.
O uso dos métodos de parâmetro get/set permite a passagem de praticamente qualquer cadeia de caracteres ou valor numérico entre um transformador de mensagem e um manipulador de operação. O objeto de parâmetro pode conter zero ou mais pares de chave/valor de dados que se correlacionam diretamente à solicitação de operação atual. O manipulador de operação determina quais pares de chave/valor são necessários conforme ele consome esses valores. Normalmente, o transformador de mensagem define esses parâmetros no objeto CTIOperationRequest chamando o método CTIOperationRequest - setParameter(String key, Object value) e o manipulador de operação os consome usando esse método.
| Nome | Tipo | Descrição |
|---|---|---|
| chave | Cadeia de caracteres | O nome do valor da chave a ser retornado. |
| Tipo | Descrição |
|---|---|
| Cadeia de caracteres ou número | Valor da chave especificada. Se essa chave não existir, retornará nulo. |
(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()
Retorna os pares de chave-valor para todos os parâmetros que foram definidos anteriormente no objeto CTIOperationRequest atual.
O uso dos métodos de parâmetro get/set permite a passagem de praticamente qualquer cadeia de caracteres ou valor numérico entre um transformador de mensagem e um manipulador de operação. O objeto de parâmetro pode conter zero ou mais pares de chave/valor de dados que se correlacionam diretamente à solicitação de operação atual. O manipulador de operação determina quais pares de chave/valor são necessários conforme ele consome esses valores. Normalmente, o transformador de mensagem define esses parâmetros no objeto CTIOperationRequest chamando o método CTIOperationRequest - setParameter(String key, Object value) e o manipulador de operação os consome usando esse método.
| Nome | Tipo | Descrição |
|---|---|---|
| Nenhum |
| Tipo | Descrição |
|---|---|
| Objeto | Um mapa de pares de chave-valor que foram definidos anteriormente no objeto CTIOperationRequest. Esses pares de chave-valor são de forma livre e definidos pelas necessidades do manipulador de operação. Os valores retornados são Cadeias de caracteres ou Números. |
var request = new sn_cti_core.CTIOperationRequest('origin');
var parms = request.getParameters();
for(var key in parms) {
gs.info(key + '=' + parms[key]);
}
CTIOperationRequest - getSessionAttribute(cadeia de caracteres chave)
Retorna o valor de uma chave de atributo de sessão especificada definida no objeto CTIOperationRequest atual.
O uso dos métodos de atributo de sessão get/set permite a passagem de praticamente qualquer cadeia de caracteres ou valor de número entre um transformador de mensagem e um manipulador de operação. O objeto sessionAttribute pode conter zero ou mais pares de chave/valor de dados que são válidos para a duração de uma sessão definida pelo provedor de integração de telefonia por computador, como o número de telefone do contato. Os atributos de sessão também podem ser acessados em um fluxo de contato. O manipulador de operação determina quais pares de chave/valor de atributo de sessão são necessários conforme ele consome esses valores. Normalmente, o transformador de mensagem define esses atributos no objeto CTIOperationRequest chamando o método CTIOperationRequest - setSessionAttribute(String key, Object value). Os atributos de sessão são diferentes dos parâmetros, pois persistem durante a vida útil da sessão (como a chamada inteira) e devem ser passados de volta pelo provedor de CTI com cada solicitação de operação nessa sessão de chamada.
| Nome | Tipo | Descrição |
|---|---|---|
| chave | Cadeia de caracteres | O nome do valor da chave a ser retornado. |
| Tipo | Descrição |
|---|---|
| Cadeia de caracteres ou número | Valor da chave especificada. Se essa chave não existir, retornará nulo. |
var request = new sn_cti_core.CTIOperationRequest('origin');
var phoneAttribute = request.getSessionAttribute('contact.phone');
CTIOperationRequest – getSessionAttributes()
Retorna um mapa de par chave-valor de todos os atributos de sessão definidos no objeto CTIOperationRequest atual.
O uso dos métodos de atributo de sessão get/set permite a passagem de praticamente qualquer cadeia de caracteres ou valor de número entre um transformador de mensagem e um manipulador de operação. O objeto sessionAttribute pode conter zero ou mais pares de chave/valor de dados que são válidos para a duração de uma sessão definida pelo provedor de integração de telefonia por computador, como o número de telefone do contato. Os atributos de sessão também podem ser acessados em um fluxo de contato. O manipulador de operação determina quais pares de chave/valor de atributo de sessão são necessários conforme ele consome esses valores. Normalmente, o transformador de mensagem define esses atributos no objeto CTIOperationRequest chamando o método CTIOperationRequest - setSessionAttribute(String key, Object value). Os atributos de sessão são diferentes dos parâmetros, pois persistem durante a vida útil da sessão (como a chamada inteira) e devem ser passados de volta pelo provedor de CTI com cada solicitação de operação nessa sessão de chamada.
| Nome | Tipo | Descrição |
|---|---|---|
| Nenhum |
| Tipo | Descrição |
|---|---|
| Objeto | Um mapa de pares de chave-valor de atributo de sessão que foram definidos no objeto CTIOperationResponse associado. Este mapa é de forma livre e definido pelas necessidades do manipulador de operação. |
var request = new sn_cti_core.CTIOperationRequest('origin');
var parms = request.getSessionAttributes();
for(var key in parms) {
gs.info(key + '=' + parms[key]);
}
CTIOperationRequest - getSubStepNotFoundBehaviour
Retorna o comportamento de manipulação de uma subseção quando o manipulador de operação de uma subetapa não é encontrado.
Use subetapas para executar ações como inicialização e validação antes de processar uma operação. Ao contrário dos manipuladores de operação que devem ser genéricos e usados por todos os provedores de CTI, as subetapas são específicas do provedor de CTI e usam terminologia e convenções de nomenclatura que são específicas do provedor de CTI.
Se o manipulador de operação de subetapa solicitado não puder ser encontrado pela estrutura ServiceNow Voz, ele tentará usar o "comportamento de etapa não encontrada". Esse comportamento é normalmente definido pelo transformador de mensagem quando uma operação é solicitada inicialmente.
| Nome | Tipo | Descrição |
|---|---|---|
| Nenhum |
| Tipo | Descrição |
|---|---|
| OperationNotFoundBehaviours | O comportamento/manipulação a ser executado quando um manipulador de operação não pode ser encontrado para a combinação de operação/subetapa (<operation_name>.SubStep>). Se não estiver definido, retornará nulo. Valores possíveis:
|
var request = new sn_cti_core.CTIOperationRequest('origin');
var behavior = request.getSubStepNotFoundBehaviour();
CTIOperationRequest - setAuthToken(cadeia de caracteres id)
Define um token de autenticação no objeto CTIOperationRequest atual.
Este token é usado pela estrutura ServiceNow Voz para autenticar o usuário ServiceNow Voz atual antes de executar o manipulador de operação solicitado se o sinalizador auth_required do manipulador estiver definido como verdadeiro. O sinalizador auth_required é um campo na tabela Operation Handler [sn_cti_operation_handler]. A vida útil de um token de autenticação deve ser a vida útil da sessão de chamada, mas é determinada pelo provedor de CTI.
Você pode definir qualquer manipulação de autenticação/autorização necessária para sua implementação criando seu próprio manipulador de operação de autenticação. Independentemente de como o token de autenticação é gerado, o tradutor de mensagens deve passar o token de volta na carga útil de CTI. Além disso, o provedor de CTI deve armazenar este token de autenticação localmente e passá-lo em cada solicitação de operação que requer autenticação.
Se estiver usando o manipulador de operação de autenticação fornecido pela instância, o manipulador iniciará a criação do token de autenticação com base em um PIN de quatro dígitos inserido pelo usuário. Em seguida, ele define o token de autenticação no objeto "sessionAttributes" do objeto CTIOperationResponse. O transformador de mensagem associado traduz o objeto "sessionAttributes" na carga específica de CTI e a envia para o provedor de CTI.
- Proxy do Amazon Web Services (AWS) Lambda (invocar a função do AWS Lambda)
- Bot do AWS Lex (obter entrada do cliente)
| Nome | Tipo | Descrição |
|---|---|---|
| id | Cadeia de caracteres | O token de autenticação para o usuário ServiceNow Voz associado. |
| Tipo | Descrição |
|---|---|
| vazio |
Exemplo de script do transformador de mensagem que salva o token de autenticação passado.
{
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(cadeia de caracteres Id)
Define o sys_id do registro de interação associado à solicitação de operação no objeto CTIOperationRequest atual.
Se você quiser manter as informações de interação do contato em um registro de interação específico do contato, o registro de interação sys_id deverá ser mantido para toda a sessão de chamada ServiceNow Voz.
Normalmente, um manipulador de operação cria um registro de interação quando uma nova chamada de contato é iniciada. Em seguida, ele define o registro de interação sys_id e o nome da tabela no objeto CTIOperationResponse associado como atributos de sessão usando o método CTIOperationRequest - setSessionAttribute(String key, Object value). O transformador de método associado traduz essas informações para a carga do provedor de integração de telefonia e computador (CTI) e as envia de volta para o provedor de CTI.
O provedor de CTI deve armazenar o sys_id do registro de interação para a sessão de contato localmente. Cada vez que o provedor de CTI interage com o ServiceNow Voz para esta sessão de contato, ele deve passar de volta o sys_id do registro de interação correspondente em sua carga útil. O transformador da mensagem de recebimento analisa a carga e usa o método CTIOperationRequest - setInteractionSysId() para definir o sys_id do registro de interação no objeto CTIOperationtRequest associado.
O método CTIOperationRequest - getInteractionRecord() usa este sys_id para obter o registro de interação correto para a sessão de contato. Os registros de interação estão localizados na tabela Interação [interação]. Para obter informações adicionais sobre registros de interação, consulte
| Nome | Tipo | Descrição |
|---|---|---|
| sys_id | Cadeia de caracteres | O sys_id do registro de interação a ser associado à solicitação. |
| Tipo | Descrição |
|---|---|
| vazio |
Exemplo de um script de transformador de mensagem que extrai o registro de interação sys_id da carga útil de entrada (passado como um parâmetro) e o define no objeto CTIOperationRequest associado.
{
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(cadeia de caracteres "languageCode")
Define o código de idioma ISO 639.1 a ser usado ao processar a operação associada em um objeto CTIOperationRequest.
Usar o idioma preferencial do cliente permite que você use os recursos de internacionalização e localização fornecidos pela plataforma para personalizar mensagens e outras comunicações com o solicitante associado. Normalmente, o transformador de mensagem define o idioma no objeto CTIOperationRequest.
| Nome | Tipo | Descrição |
|---|---|---|
| idiomaCódigo | Cadeia de caracteres | O código de idioma ISO 639.1 a ser usado ao processar a operação associada. |
| Tipo | Descrição |
|---|---|
| vazio |
{
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)
Define a versão principal do software do provedor do integrador de telefonia e computador (CTI) que faz a solicitação no objeto CTIOperationRequest associado.
Use este método se os provedores de CTI conectados à sua instância ServiceNow estiverem executando várias versões do software, pois versões diferentes do software podem exigir um comportamento de processamento diferente. Se o comportamento do processamento for apenas um pouco diferente entre as versões do software, pode fazer sentido ter apenas um manipulador de operação. Você pode lidar com as diferenças de processamento apenas verificando a versão do software que faz a solicitação e processa a solicitação/dados em seu manipulador de operação. Se o processamento necessário for significativamente diferente entre as versões, pode ser mais eficaz usar vários manipuladores de operação.
Normalmente, o transformador de mensagem define a versão do software no objeto CTIOperationRequest chamando este método e um manipulador de operação consome o valor definido usando o método CTIOperationRequest - getMajorVersion(). Você também pode obter/definir o valor da versão secundária do software de um provedor usando os métodos CTIOperationRequest - getMinorVersion() e CTIOperationRequest - setMinorVersion(Number minorVersion).
| Nome | Tipo | Descrição |
|---|---|---|
| majorVersion | Número | Versão principal do software do provedor de CTI que faz a solicitação de operação. Se este valor não tiver sido definido anteriormente, retornará 1. |
| Tipo | Descrição |
|---|---|
| vazio |
var request = new sn_cti_core.CTIOperationRequest('origin');
request.setMajorVersion(2);
CTIOperationRequest - setMinorVersion(Number minorVersion)
Define a versão secundária do software do provedor do integrador de telefonia e computação (CTI) que faz a solicitação no objeto CTIOperationRequest associado.
Use este método se os provedores de CTI conectados à sua instância ServiceNow estiverem executando várias versões do software, pois versões diferentes do software podem exigir um comportamento de processamento diferente. Se o comportamento do processamento for apenas um pouco diferente entre as versões do software, pode fazer sentido ter apenas um manipulador de operação. Você pode lidar com as diferenças de processamento apenas verificando a versão do software que faz a solicitação e processa a solicitação/dados em seu manipulador de operação. Se o processamento necessário for significativamente diferente entre as versões, pode ser mais eficaz usar vários manipuladores de operação.
Normalmente, o transformador de mensagem define a versão do software no objeto CTIOperationRequest chamando este método e um manipulador de operação consome o valor definido usando o método CTIOperationRequest - getMinorVersion(). Você também pode obter/definir o valor da versão principal do software de um provedor usando os métodos CTIOperationRequest - getMajorVersion() e CTIOperationRequest - setMajorVersion(Number majorVersion).
| Nome | Tipo | Descrição |
|---|---|---|
| minorVersion | Número | Versão secundária do software do provedor de CTI que faz a solicitação de operação. Se este valor não tiver sido definido anteriormente, retornará 0. |
| Tipo | Descrição |
|---|---|
| vazio |
var request = new sn_cti_core.CTIOperationRequest('origin');
...
request.setMinorVersion(3);
CTIOperationRequest - setOperationName(cadeia de caracteres name)
Define o nome da operação que o provedor de integração de telefonia e computação (CTI) está tentando executar no objeto CTIOperationRequest atual.
O nome da operação determina o manipulador de operação que é usado para processar a solicitação. Chame este método do transformador de mensagem associado.
| Nome | Tipo | Descrição |
|---|---|---|
| nome | Cadeia de caracteres | O nome da operação que o provedor de CTI está tentando executar. Este nome deve ser igual ao nome do manipulador de operação a ser usado para processar a solicitação. Caso contrário, será gerado um erro. Você pode localizar os manipuladores de operação disponíveis na tabela Operation Handler [sn_cti_operation_handler]. |
| Tipo | Descrição |
|---|---|
| vazio |
{
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(cadeia de caracteres name)
Define o nome da subetapa da operação no objeto CTIOperationRequest atual.
Use subetapas para executar ações como inicialização e validação antes de processar uma operação. Ao contrário dos manipuladores de operação que devem ser genéricos e usados por todos os provedores de CTI, as subetapas são específicas do provedor de CTI e usam terminologia e convenções de nomenclatura que são específicas do provedor de CTI.
- Tenta localizar o manipulador de operação associado à solicitação.
- Primeiro, verifica se há um manipulador de operação chamado
myOperation_SUFFX. - Se não for encontrado, verificará o manipulador de operação
myOperation. Se não for encontrado, os erros serão eliminados.
- Primeiro, verifica se há um manipulador de operação chamado
- Se o manipulador for encontrado, verificará o sinalizador auth_required no manipulador de operação. Se definido, ele verifica se um token de autenticação válido (obtido por meio do método getAuthToken() ) está presente na solicitação. Se presente e válido, continue processando, caso contrário, ocorrerá um erro.
- Pesquisa o manipulador de operação para a subetapa aprovada. Para este exemplo, vamos supor
subStepName=SubStep.- Primeiro, verifica se há um manipulador de operação chamado
myOperation_SUFFX.SubStep. Se encontrado, executa o manipulador. - Se não for encontrado, verificará o manipulador
myOperation.SubStep. Se encontrado, executa o manipulador. - Se não for encontrado, verificará se um
subStepNotFoundBehaviorfoi definido no objeto request. - Se definido, executará o comportamento, caso contrário, ocorrerá erros.
- Primeiro, verifica se há um manipulador de operação chamado
- Executa o manipulador de operação primário (
myOpersation_SUFFXoumyOperation.)
Você pode definir o comportamento padrão de uma subetapa chamando o método CTIOperationRequest - setSubStepNotFoundBehaviour(Object comportamento).
| Nome | Tipo | Descrição |
|---|---|---|
| nome | Cadeia de caracteres | O nome da subetapa que o provedor de CTI está tentando executar. |
| Tipo | Descrição |
|---|---|
| vazio |
(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(cadeia de caracteres chave, valor do objeto)
Define o par de chave-valor especificado no objeto de parâmetro do objeto CTIOperationRequest atual.
O uso dos métodos de parâmetro get/set permite a passagem de praticamente qualquer cadeia de caracteres ou valor numérico entre um transformador de mensagem e um manipulador de operação. O objeto de parâmetro pode conter zero ou mais pares de chave/valor de dados que se correlacionam diretamente à solicitação de operação atual. O manipulador de operação determina quais pares de chave/valor são necessários conforme ele consome esses valores. Normalmente, o transformador de mensagem define esses parâmetros no objeto CTIOperationRequest chamando este método e o manipulador de operação os consome usando o método CTIOperationRequest - getParameter(String key) ou CTIOperationRequest - getParameters().
operação JSON.parse(JSON.stringify(object)). Objetos que não atendem a esses critérios podem não se propagar corretamente por toda a cadeia de processamento da operação.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"}}
| Nome | Tipo | Descrição |
|---|---|---|
| chave | Cadeia de caracteres | Nome da chave sob a qual armazenar o valor associado. |
| valor | Objeto | Valor a ser armazenado. Tipos de dados válidos:
|
| Tipo | Descrição |
|---|---|
| vazio |
{
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(cadeia de caracteres chave, valor do objeto)
Define o par de chave-valor do atributo de sessão especificado no objeto CTIOperationRequest atual.
O uso dos métodos de atributo de sessão get/set permite a passagem de praticamente qualquer cadeia de caracteres ou valor de número entre um transformador de mensagem e um manipulador de operação. O objeto sessionAttribute pode conter zero ou mais pares de chave/valor de dados que são válidos para a duração de uma sessão definida pelo provedor de integração de telefonia computadorizada. Os atributos de sessão também podem ser acessados em um fluxo de contato. O manipulador de operação determina quais pares de chave/valor de atributo de sessão são necessários conforme ele consome esses valores. Normalmente, o transformador de mensagem define esses atributos no objeto CTIOperationRequest chamando este método e o manipulador de operação obtém os atributos usando o método CTIOperationRequest - getSessionAttribute(String key) ou CTIOperationRequest - getSessionAttribute().
operação JSON.parse(JSON.stringify(object)). Objetos que não atendem a esses critérios podem não se propagar corretamente por toda a cadeia de processamento da operação.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"}}
| Nome | Tipo | Descrição |
|---|---|---|
| chave | Cadeia de caracteres | Nome da chave sob a qual armazenar o valor associado. |
| valor | Objeto | Valor a ser armazenado. Tipos de dados válidos:
|
| Tipo | Descrição |
|---|---|
| vazio |
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(objeto de comportamento)
Define o comportamento a ser executado se o manipulador de operação da subetapa atual não for encontrado.
Este método deve ser chamado pelo transformador da mensagem de entrada.
| Nome | Tipo | Descrição |
|---|---|---|
| comportamento | OperationNotFoundBehaviours | Comportamento a ser usado se um comportamento de manipulação não for especificado para a subetapa. Este deve ser um comportamento definido no objeto CTIOperationRequest.OperationNotFoundBehaviours. Valores possíveis:
|
| Tipo | Descrição |
|---|---|
| vazio |
(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);