CTIOperationRequest - escopo, global
. CTIOperationRequest A inclusão de script fornece métodos para definir e obter dados no objeto CTIOperationRequest atual.
Você usa objetos CTIOperationRequest para passar informações entre um transformador de mensagem e um manipulador de operação no ServiceNow Serviços de voz estrutura.
Normalmente, um transformador de mensagem é responsável por analisar uma carga específica de CTI de entrada e definir os dados da carga 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 Lambda da Amazon Web Services (AWS) (invocar função do AWS Lambda)
- AWS Lex Bot (obter entrada do cliente)
Uma carga é passada para um ServiceNow Instância de uma origem externa, como de um provedor de integração de telefonia por computador (CTI) que está fazendo uma solicitação de operação. Quando uma solicitação é recebida, um transformador de mensagem analisa a carga e usa os métodos de conjunto CTIOperationRequest para definir valores de carga, como o nome do manipulador de operação, em uma operação e objeto CTIOperationRequest específico do contato.
Por exemplo, o script do transformador de mensagem a seguir analisa a carga JSON passada 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, o. ServiceNow Serviços de voz o framework instancia o manipulador de operação especificado. O manipulador operacional usa o. CTIOperationResponse Métodos GET de inclusão de script 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 Configure um fluxo de contato para uma interação automatizada do chamador .
Esta inclusão de script é executada no sn_cti_core namespace. Antes de acessar CTIOperationRequest inclusão de script, o. ServiceNow Serviços de voz(sn_cti_core) deve ser ativado. Para obter informações sobre como ativar ServiceNow Serviços de voz, consulte Instale as aplicações de voz da ServiceNow .
Para obter informações adicionais sobre ServiceNow Serviços de voz, consulte ServiceNow Voice .
CTIOperationRequest - CTIOperationRequest (origem da cadeia de caracteres)
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 por computador. 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 pelo ServiceNow Serviços de voz estrutura para autenticar o atual ServiceNow Serviços de voz usuário antes de executar o manipulador de operação solicitada, se for o manipulador auth_requiredo sinalizador está definido como verdadeiro. . auth_requiredO sinalizador é um campo na tabela Manipulador de operações [sn_cti_operation_handler]. A vida útil de um token de autenticação deve durar 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 mensagem deve passar o token de volta na carga de CTI. Além disso, o provedor de CTI deve armazenar esse 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 do CTI e o envia para o provedor de CTI.
- Proxy Lambda da Amazon Web Services (AWS) (invocar função do AWS Lambda)
- AWS Lex Bot (obter entrada do cliente)
| Nome | Tipo | Descrição |
|---|---|---|
| Nenhum |
| Tipo | Descrição |
|---|---|
| Cadeia de caracteres | O token de autenticação associado ao atual ServiceNow Serviços de voz usuário. |
(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 do cliente de assistência feita por bate-papo, chamada telefônica ou pessoalmente. As interações podem ser roteadas para filas para atribuição ou atribuídas aos agentes diretamente. Os registros de interação são armazenados na tabela Interaction [interaction] 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 CTIOperationRequest - setInteractionSysId(ID da cadeia de caracteres) método. Normalmente, este método é chamado pelo transformador de mensagem e deve ser chamado antes de chamar o. GetInteractionRecord() método.
| Nome | Tipo | Descrição |
|---|---|---|
| Nenhum |
| Tipo | Descrição |
|---|---|
| GlideRecord | Objeto GlideRecord de interação associado ao objeto CTIOperationRequest atual. Se o sys_id do registro de interação 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.
. CTIOperationRequest - setInteractionSysId(ID da cadeia de caracteres) o método 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 recursos de internacionalização e localização fornecidos pela plataforma para personalizar mensagens e outras comunicações com o chamador associado.
Normalmente, um manipulador de operações chama o método getLanguage() e o transformador de mensagem define o idioma no objeto CTIOperationRequest chamando CTIOperationRequest - setLanguage(String languageCode) método.
| 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á pt-br . |
O exemplo a seguir mostra uma chamada de manipulador de operação 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 de computador (CTI) definido no objeto CTIOperationRequest atual.
Use este método se os provedores de CTI estiverem conectados ao seu ServiceNow as instâncias estão executando várias versões de seu software, pois diferentes versões de software podem exigir comportamento de processamento diferente. Se o comportamento de processamento for apenas um pouco diferente entre as versões de software, pode fazer sentido ter apenas um manipulador de operação. Em seguida, você pode lidar com as diferenças de processamento verificando a versão do software que faz a solicitação e processar a solicitação/dados no manipulador de operações. 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 CTIOperationRequest - setMajorVersion(Number majorVersion) e um manipulador de operação consomem 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 CTIOperationRequest - getMinorVersion() e. CTIOperationRequest - setMinorVersion(Number minorVersion) métodos.
| 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 de computador (CTI) associado a um objeto CTIOperationRequest.
Use este método se os provedores de CTI estiverem conectados ao seu ServiceNow as instâncias estão executando várias versões de seu software, pois diferentes versões de software podem exigir comportamento de processamento diferente. Se o comportamento de processamento for apenas um pouco diferente entre as versões de software, pode fazer sentido ter apenas um manipulador de operação. Em seguida, você pode lidar com as diferenças de processamento verificando a versão do software que faz a solicitação e processar a solicitação/dados no manipulador de operações. 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 CTIOperationRequest - setMinorVersion(Number minorVersion) CTIOperationRequest - setMinorVersion(Number minorVersion) e um manipulador de operação consomem 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 CTIOperationRequest - getMajorVersion() CTIOperationRequest - getMajorVersion() e. CTIOperationRequest - setMajorVersion(Number majorVersion) CTIOperationRequest - setMajorVersion(Number majorVersion) métodos.
| 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 por computador (CTI) está solicitando a execução.
O nome da operação determina o manipulador de operação usado para processar uma solicitação. Normalmente, o transformador de mensagem define o nome da operação no objeto CTIOperationRequest usando CTIOperationRequest - setOperationName(nome da cadeia de caracteres) método.
| Nome | Tipo | Descrição |
|---|---|---|
| Nenhum |
| Tipo | Descrição |
|---|---|
| Cadeia de caracteres | O nome da operação que o provedor de CTI está solicitando a execução. 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 - getOperationSubStep Name()
Retorna o nome do manipulador de 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 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, verifica o manipulador de operação
MyOperation. Se não for encontrado, haverá erros.
- Primeiro verifica se há um manipulador de operação chamado
- Se o manipulador for encontrado, verificará auth_requiredsinalizador no manipulador de operação. Se definido, ele verificará se um token de autenticação válido (obtido por meio de GetAuthToken() ) está presente na solicitação. Se estiver presente e válido, continue o processamento, caso contrário, gerará um erro.
- Pesquisa o manipulador de operação para o passado na subetapa. Para este exemplo, vamos presumir
SubstepName: Subetapa.- Primeiro verifica se há um manipulador de operação chamado
MyOperation_SUFFX.subetapa. Se encontrado, executa o manipulador. - Se não for encontrado, verifica o manipulador
MyOperation.substep. Se encontrado, executa o manipulador. - Se não for encontrado, verifica se é um
SubStepNotFoundBehavorfoi definido no objeto de solicitação. - Se definido, executa o comportamento, caso contrário, há 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 CTIOperationRequest - setOperationSubStep Name(nome da cadeia de caracteres) método. Você pode substituir esse comportamento se estiver criando seu próprio transformador chamando CTIOperationRequest - setSubStepNotFoundBehabior(comportamento do objeto) método.
| 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 ele não existir, retornará nulo. |
var request = new sn_cti_core.CTIOperationRequest('origin');
var name = request.getOperationSubStepName();
CTIOperationRequest - getParameter(chave de cadeia de caracteres)
Retorna o valor de uma chave especificada anteriormente definida 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 com a solicitação de operação atual. O manipulador de operação determina quais pares de chave/valor são necessários, pois consome esses valores. Normalmente, o transformador de mensagem define esses parâmetros no objeto CTIOperationRequest chamando CTIOperationRequest - setParameter(chave de cadeia de caracteres, valor do objeto) e o manipulador de operação os consome usando este 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 com a solicitação de operação atual. O manipulador de operação determina quais pares de chave/valor são necessários, pois consome esses valores. Normalmente, o transformador de mensagem define esses parâmetros no objeto CTIOperationRequest chamando CTIOperationRequest - setParameter(chave de cadeia de caracteres, valor do objeto) e o manipulador de operação os consome usando este 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(chave de cadeia de caracteres)
Retorna o valor de um conjunto de chaves de atributo de sessão especificado no objeto CTIOperationRequest atual.
Usar os métodos de atributo de sessão 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 sessionAttribute pode conter zero ou mais pares de chave/valor de dados válidos pela duração de uma sessão definida pelo provedor de integração de telefonia de 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, pois consome esses valores. Normalmente, o transformador de mensagem define esses atributos no objeto CTIOperationRequest chamando CTIOperationRequest - setSessionAttribute(chave de cadeia de caracteres, valor do objeto) método. 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 de chave-valor de todos os atributos de sessão definidos no objeto CTIOperationRequest atual.
Usar os métodos de atributo de sessão 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 sessionAttribute pode conter zero ou mais pares de chave/valor de dados válidos pela duração de uma sessão definida pelo provedor de integração de telefonia de 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, pois consome esses valores. Normalmente, o transformador de mensagem define esses atributos no objeto CTIOperationRequest chamando CTIOperationRequest - setSessionAttribute(chave de cadeia de caracteres, valor do objeto) método. 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 - getSubStepNotFoundBehavor
Retorna o comportamento de manipulação de um subsep 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 específicas do provedor de CTI.
Se o manipulador de operação de subetapa solicitada não puder ser encontrado pelo ServiceNow Serviços de voz, ele tenta usar o "comportamento de etapa não encontrada". Normalmente, esse comportamento é definido pelo transformador de mensagem quando uma operação é solicitada inicialmente.
| Nome | Tipo | Descrição |
|---|---|---|
| Nenhum |
| Tipo | Descrição |
|---|---|
| OperationNotfoundBehavors | 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>.Subetapa>). Se não estiver definido, retornará nulo. Valores possíveis:
|
var request = new sn_cti_core.CTIOperationRequest('origin');
var behavior = request.getSubStepNotFoundBehaviour();
CTIOperationRequest - setAuthToken(ID de cadeia de caracteres)
Define um token de autenticação no objeto CTIOperationRequest atual.
Este token é usado pelo ServiceNow Serviços de voz estrutura para autenticar o atual ServiceNow Serviços de voz usuário antes de executar o manipulador de operação solicitada, se for o manipulador auth_requiredo sinalizador está definido como verdadeiro. . auth_requiredO sinalizador é um campo na tabela Manipulador de operações [sn_cti_operation_handler]. A vida útil de um token de autenticação deve durar 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 mensagem deve passar o token de volta na carga de CTI. Além disso, o provedor de CTI deve armazenar esse 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 do CTI e o envia para o provedor de CTI.
- Proxy Lambda da Amazon Web Services (AWS) (invocar função do AWS Lambda)
- AWS Lex Bot (obter entrada do cliente)
| Nome | Tipo | Descrição |
|---|---|---|
| id | Cadeia de caracteres | O token de autenticação do associado ServiceNow Serviços de voz usuário. |
| Tipo | Descrição |
|---|---|
| vazio |
Exemplo de script transformador de mensagem que salva o token de autenticação aprovado.
{
try {
var jsonPayload = httpRequest.body.data;
if (jsonPayload) {
var event = jsonPayload.event;
if (event) {
var details = event.Details;
if (details) {
operationRequest.setOperationName(details.Parameters['sn_operation']);
var contactData = details.ContactData;
if(contactData) {
// Call id should be surfaced in openframe call log so it can be tied to transcription later
operationRequest.setParameter('contact.call_id', contactData.ContactId);
for(var ck in contactData.CustomerEndpoint) {
operationRequest.setParameter('contact.' + ck, contactData.CustomerEndpoint[ck]);
}
operationRequest.setParameter('contact.id', contactData.ContactId);
operationRequest.setParameter('contact.phone', contactData.CustomerEndpoint.Address);
}
var parameters = details.Parameters;
if (parameters) {
for (var pk in parameters) {
switch(pk) {
case 'interactionId':
operationRequest.setInteractionSysId(parameters[pk]);
break;
case 'authToken':
operationRequest.setAuthToken(parameters[pk]);
break;
case 'language':
operationRequest.setLanguage(parameters[pk]);
break;
case 'statusCode':
case 'message':
break;
default:
operationRequest.setParameter(pk, parameters[pk]);
}
}
}
}
}
}
} catch(e) {
ctx.setError(e);
}
})(httpRequest, operationRequest, ctx);
CTIOperationRequest - setInteractionSysId(ID da cadeia de caracteres)
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 de contato em um registro de interação específico do contato, o sys_id do registro de interação deverá ser mantido para todo o ServiceNow Serviços de voz sessão de chamada.
Normalmente, um manipulador de operação cria um registro de interação quando uma nova chamada de contato é iniciada. Em seguida, ele define o sys_id do registro de interação e o nome da tabela no objeto CTIOperationResponse associado como atributos de sessão usando CTIOperationRequest - setSessionAttribute(chave de cadeia de caracteres, valor do objeto) método. Em seguida, o transformador de método associado traduz essas informações na carga útil do provedor de integração de telefonia de computador (CTI) e as envia de volta ao 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 ServiceNow Serviços de voz para esta sessão de contato, ela deve passar de volta o sys_id do registro de interação correspondente em sua carga útil. Em seguida, o transformador de 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.
. CTIOperationRequest - getInteractionRecord() o método usa este sys_id para obter o registro de interação correto para a sessão de contato.
| Nome | Tipo | Descrição |
|---|---|---|
| sys_id | Cadeia de caracteres | Sys_id do registro de interação a ser associado à solicitação. Tabela: Interação [interaction] |
| Tipo | Descrição |
|---|---|
| vazio |
Exemplo de um script transformador de mensagem que extrai o sys_id do registro de interação da carga 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(String 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 recursos de internacionalização e localização fornecidos pela plataforma para personalizar mensagens e outras comunicações com o chamador associado. Normalmente, o transformador de mensagem define o idioma no objeto CTIOperationRequest.
| Nome | Tipo | Descrição |
|---|---|---|
| LanguageCode | 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 de computador (CTI) que faz a solicitação no objeto CTIOperationRequest associado.
Use este método se os provedores de CTI estiverem conectados ao seu ServiceNow as instâncias estão executando várias versões de seu software, pois diferentes versões de software podem exigir comportamento de processamento diferente. Se o comportamento de processamento for apenas um pouco diferente entre as versões de software, pode fazer sentido ter apenas um manipulador de operação. Em seguida, você pode lidar com as diferenças de processamento verificando a versão do software que faz a solicitação e processar a solicitação/dados no manipulador de operações. 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 CTIOperationRequest - getMajorVersion() método. Você também pode obter/definir o valor da versão secundária do software de um provedor usando CTIOperationRequest - getMinorVersion() e. CTIOperationRequest - setMinorVersion(Number minorVersion) métodos.
| 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 de computador (CTI) que faz a solicitação no objeto CTIOperationRequest associado.
Use este método se os provedores de CTI estiverem conectados ao seu ServiceNow as instâncias estão executando várias versões de seu software, pois diferentes versões de software podem exigir comportamento de processamento diferente. Se o comportamento de processamento for apenas um pouco diferente entre as versões de software, pode fazer sentido ter apenas um manipulador de operação. Em seguida, você pode lidar com as diferenças de processamento verificando a versão do software que faz a solicitação e processar a solicitação/dados no manipulador de operações. 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 CTIOperationRequest - getMinorVersion() método. Você também pode obter/definir o valor da versão principal do software de um provedor usando CTIOperationRequest - getMajorVersion() e. CTIOperationRequest - setMajorVersion(Number majorVersion) métodos.
| 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(nome da cadeia de caracteres)
Define o nome da operação que o provedor de integração de telefonia por computador (CTI) está tentando executar no objeto CTIOperationRequest atual.
O nome da operação determina o manipulador de operação usado para processar a solicitação. Chame este método a partir 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 no momento. Este nome deve ser igual ao nome do manipulador de operação a ser usado para processar a solicitação. Se não estiver, um erro será gerado. Você pode localizar os manipuladores de operação disponíveis na tabela Manipulador de operações [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 - setOperationSubStep Name(nome da cadeia de caracteres)
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 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, verifica o manipulador de operação
MyOperation. Se não for encontrado, haverá erros.
- Primeiro verifica se há um manipulador de operação chamado
- Se o manipulador for encontrado, verificará auth_requiredsinalizador no manipulador de operação. Se definido, ele verificará se um token de autenticação válido (obtido por meio de GetAuthToken() ) está presente na solicitação. Se estiver presente e válido, continue o processamento, caso contrário, gerará um erro.
- Pesquisa o manipulador de operação para o passado na subetapa. Para este exemplo, vamos presumir
SubstepName: Subetapa.- Primeiro verifica se há um manipulador de operação chamado
MyOperation_SUFFX.subetapa. Se encontrado, executa o manipulador. - Se não for encontrado, verifica o manipulador
MyOperation.substep. Se encontrado, executa o manipulador. - Se não for encontrado, verifica se é um
SubStepNotFoundBehavorfoi definido no objeto de solicitação. - Se definido, executa o comportamento, caso contrário, há 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 CTIOperationRequest - setSubStepNotFoundBehabior(comportamento do objeto) método.
| 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(chave de cadeia de caracteres, 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 com a solicitação de operação atual. O manipulador de operação determina quais pares de chave/valor são necessários, pois 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 CTIOperationRequest - getParameter(chave de cadeia de caracteres) ou CTIOperationRequest - getParameters() método.
JSON.parse(json.stringify(objeto)) operação. 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(chave de cadeia de caracteres, valor do objeto)
Define o par chave-valor do atributo de sessão especificado no objeto CTIOperationRequest atual.
Usar os métodos de atributo de sessão 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 sessionAttribute pode conter zero ou mais pares de chave/valor de dados válidos pela duração de uma sessão definida pelo provedor de integração de telefonia de computador. 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, pois 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 CTIOperationRequest - getSessionAttribute(chave de cadeia de caracteres) ou CTIOperationRequest - getSessionAttribute() método.
JSON.parse(json.stringify(objeto)) operação. 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 - setSubStepNotFoundBehabior(comportamento do objeto)
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 de mensagem de entrada.
| Nome | Tipo | Descrição |
|---|---|---|
| comportamento | OperationNotfoundBehavors | 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.OperationNotFoundBehavors. 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);