Saltar a contenido

JS Code block

Nombre del elemento: JavaScript Code block (Caja de código JavaScript)

Categoría: Módulo de acción

Descripción: funcionalidad avanzada, compuesta de un campo de entrada para estructuración de código JavaScript, posee nombre personalizable.

Funcionalidad: Permite la ejecución de un hilo de acciones en una secuencia compleja. Está orientada a la ejecución de pequeños scripts de código, por lo que no pretende ser una instancia de programación para un flujo complementario de Lynn. Para estructuración se pueden usar la mayoría de los recursos de programación JavaScript estable, adicionalmente se incluyen métodos preconfigurados que permitirán interactuar con los recursos de Lynn.

Es importante tener en cuenta los siguientes parámetros de operación segura:

  • El máximo explotable de memoria de ejecución es de 10MB por lo que debe tener en cuenta el peso de las entidades dentro del Code Block.

  • El tiempo máximo de ejecución de un JS Code Block está limitado a 5 segundos, esto es una medida de protección, al superar este tiempo un “perro guardián” tipificara un error de seguridad. Tenga en consideración que cada acción de datos contra CORE Lynn para gestión de entidades toma aproximadamente 3-5 ms.

  • Existe un límite máximo de recursividad, establecido en 10. Evite bucles innecesarios y de existir asegúrese de no superar este umbral.

  • El tamaño máximo de líneas de ejecución es de 1000 en tiempo de ejecución, superar este límite puede causar degradación o incrementos significativos en los tiempos de ejecución en el JS Code Block.

  • Esta funcionalidad esta soportada sobre ECMAScript 3 and ECMAScript 5 incluyendo ES5.

Trabajando con la Acción JS Code Block

Definición de Variables de Sistema

VARIABLE DEFINICION
BotName Nombre de Bot o aplicativo
ClientName Nombre de cliente que inicializa la interacción (Puede estar asociado al criterio según el canal)
AgentName Nombre del agente que atiende la interacción, la actualización de esta variable depende de la tecnología de centro de contacto implementada.
ConversationId ID único de conversación.
SessionId ID único de sesión.
Tenant Identificador de tenant (entero)
ActionId Identificador de numerador de acción ejecutada (entero).
CreationDate Hora de inicio de sesión.
ChannelId Identificador de canal (entero).

Nota: Puede consultar la lista de variables o entidades de sistema actualizada directamente en el visor de entidades del editor de flujos de Lynn.

Funciones o métodos incluidos para trabajar con Lynn

FUNCION DEFINICION
GetEntityValue(string name) Obtiene el valor de una entidad
GetGlobalEntityValue(string name) Obtiene el valor de una entidad Global
InduceMessage(string text, string voiceText, string audio, bool availableByVoice, bool availableByText) Presenta un dialogo simple como burbuja de texto.
InduceDataEvent(string name, string value) Envía un evento de tipo dato a Lynn. Este evento no se muestra como dialogo y es especialmente útil en implementaciones por API de Lynn para indicar o transmitir marcadores.
ClearEntityByName(string name) Limpia el valor establecido de una entidad local.
SetEntityByName(string name, string value) Establece el valor de una entidad local especificando el nombre de esta.
RemoveEntityByName(string name) Elimina una entidad local especificando el nombre de esta.
ClearGlobalEntityByName(string name) Limpia el valor establecido de una entidad global.
SetGlobalEntityByName(string name) Establece el valor de una entidad global especificando el nombre de esta.
RemoveGlobalEntityByName(string name) Elimina una entidad global especificando el nombre de esta.
ExecuteDialogActionById(int id) Ejecuta un dialogo configurado como acción especificando su ID. A ejecutar al finalizar el código en el bloque
AddActionById(int id) Similar ExecuteDialogActionByID, agrega la ejecución de una acción especificando su ID. A ejecutar al finalizar el código en el bloque
GetUnrecognizedText() En caso de una evaluación cognitiva retorna el texto no reconocido. Ejemplo: Soy Alberto y quiero consultar mi saldo de cuenta corriente. Se detectara intención: Saldo, Entidad: Cuenta Corriente, Y texto no reconocido: Alberto o todo aquel texto que no sea reconocido en la evaluación cognitiva.
GetEvaluationText() Retorna el texto ingresado por cliente motivo de evaluación.
GetBaseConfiguration(string key) Recupera el valor de un parámetro de configuración de aplicativo. Nota: Pueden usarse como Constantes.
GetConfiguration(int actionId, string key) Retorna el valor de un parámetro de configuración asociado a un ID de acción. La Key está asociada a cada campo configurable de acción.
StartChatConversation(int actionId, string from) Transfiere a motor de chat (Este método requiere que se establezca la configuración del motor chat en la configuración del aplicativo y solo admite una por aplicativo)
FinalizeConverzation() Finaliza la conversación actual. Ejemplo en un desborde de cola.
FinalizeChatConverzation() Finaliza la conversación y devuelve un booleano que indica que se ha finalizado dicha conversación.
IsOnChatConversation() Regresa un booleano que indica si la conversación se encuentra en chat con ejecutivo.
GetHistoric(string level) Retorna información histórica asociada a un nivel especifico de registro. Valores: Audit/Debug/Error/Dialog. El valor retornado es un string en formato Json, asociado a la sesión vigente.

Importante:

  • Los métodos de ejecución de manipulación de variables tomaran efecto al finalizar la ejecución de la acción.

  • Preste especial atención a la validación del código ingresado “;” de cierre y “{}” en condiciones y bucles. Recomendamos utilizar validador de sintaxis JS para este propósito, existen gran variedad de forma gratuita en la web.

Campos de configuración de acción

[Nombre] Descriptor único de caja de configuración con fines de identificar la misma en el flujo.

[Implementación de código] Espacio de entrada de código para implementar lógica en JavaScript .

[Manejador de errores] Caja de selección donde se identifica la intención que se activara en caso de presentarse un error en Code block. Al ejecutarse un desborde de error la entidad Code_Block_Error será cargada con el detalle de error si el mismo se encuentra disponible.

Ejemplos de implementación JS Code Block

Ejemplo 1: Uso de condiciones e iteraciones. (if / for)

-- Entrada JS Code block:

 var count = GetEntityValue('NumberMessagesPrint'); 
 if(count > 10){  
    InduceMessage(You entered in number +count+, I'm going to limit the number of iterations to only 10, '', '', true, true);   
    count =10; 
    } 
    else 
    {  
        InduceMessage(Now I am going to repeat the message 'Hello World Lynn' +count + times, '', '', true, true); 
    } 
    for (var i = 1; i \<= count; i++)
    {   
        InduceMessage('Hello World Lynn -\>' + i, '', '', true, true);  
    }  
    InduceMessage('\*---\*', '', '', true, true);

-- Resultado 1. Precondición> NumberMessagesPrint --> 3:

    Now I am going to repeat the message 'Hello World Lynn' 3 times 
    13:29:27 
    Hello World Lynn ->1 
    13:29:27 Hello World Lynn ->2 
    13:29:27 Hello World Lynn ->3 
    13:29:27 *---*

Tenga en cuenta que cada mensaje de dialogo corresponde a una burbuja de texto>

-- Resultado 2. Precondición>NumberMessagesPrint --> 11:

 You entered in number 11, I'm going to limit the number of iterations to only 10 
 13:31:52 
 Hello World Lynn ->1 
 13:31:52 
 Hello World Lynn ->2 
 13:31:52 
 Hello World Lynn ->3 
 13:31:52 
 Hello World Lynn ->4 
 13:31:52 Hello 
 World Lynn ->5 
 13:31:52 
 Hello World Lynn ->6 
 13:31:52 
 Hello World Lynn ->7 
 13:31:52 
 Hello World Lynn ->8 
 13:31:52 
 Hello World Lynn ->9 
 13:31:52 
 Hello World Lynn ->10 
 13:31:52 
 *---* |

Ejemplo 2: Formateando Json provenientes de servicios Web de clima y transformando unidades.

-- Entrada JS Code block:**

try {  
    var JsonResponse = GetEntityValue('JsonWebRequestResult');    
    if(JsonResponse != null)  
    {  
        var obj = JSON.parse(JsonResponse);   
        var weatherWindSpeed = obj.wind.speed;  
        var weatherTemp = Number(obj.main.temp).toPrecision(2)-Number('273.15');  
        var weatherPressure = obj.main.pressure;  
        var weatherHumidity = obj.main.humidity;  
        var weatherCodeResponse = obj.cod;    
        if(weatherCodeResponse == 200)
        {  
            InduceMessage('Wind speed: ' + weatherWindSpeed + 'm/s', '', '', true, true); 
            InduceMessage('Temperature: ' + weatherTemp.toPrecision(2) + ' Celsius', '', '', true, true);  InduceMessage('Pressure: ' + weatherPressure + 'mbar', '', '', true, true);  
            InduceMessage('Humidity: ' + weatherHumidity + '%', '', '', true, true);  
        }  
    }  
    SetEntityByName('JsonWebRequestResult', '');  
    SetEntityByName('WeatherCityToFind', '');  
    JsonResponse = null;  
    }
    catch (error) 
    {  
        InduceMessage('City not found', '', '', true, true);
    }

-- Resultado. Precondición>Json de entrada>JsonWebRequestResult

    { 
     coord:
    {  
        lon: -70.6483, 
        lat: -33.4569  
    }, 
    weather: [  
    {  
        id: 804,
        main: Clouds,  
        description: overcast clouds,  
        icon: 04d  
    } 
    ],  
    base: stations,  
    main: 
    {  
        temp: 288.35,  
        feels_like: 287.34,  
        temp_min: 283.84,  
        temp_max: 290.92,  
        pressure: 1024,  
        humidity: 54  
    },  
    visibility: 7000,  
    wind: {  
        speed: 2.06,  
        deg: 260  
    }, 
    clouds: {  all: 100  },  
    dt: 1662053921,  
    sys: {  
        type: 2, 
         id: 2075413, 
          country: CL, 
          sunrise: 1662030043, 
          sunset: 1662071095 
        },  
        timezone: -14400, 
         id: 3871336,  
         name: Santiago, 
         cod: 200 
    }

Salida:

Wind speed: 2.06m/s 
13:48:34 
Temperature: 17 Celsius 
13:48:34 
Pressure: 1024mbar 
13:48:34 
Humidity: 54%

Observe que se ha tomado la información proveniente del Json Respuesta de un WS, y se ha dado formato a la misma para su presentación, incluyendo transformaciones de unidades de temperatura Fº a Cº.

Interfaz de usuario gráfica, Texto, Aplicación, Chat o mensaje de texto
Descripción generada
automáticamente

Funciones Avanzadas

No declaradas