Ação: Executar script 19 de março de 2025 18:22 Atualizado Índice: Definindo variáveis de entradas Criando um script Javascript Salvando o Retorno Ação: Executar Script 2.0" A ação de executar um script permite maior flexibilidade e dinamismo na hora de criar um fluxo de conversa. Através dela é possível criar lógicas, tratar variáveis e valores, construir conteúdos dinâmicos e muitas outras opções. Definindo variáveis de entrada É possível passar variáveis como parâmetros de entrada para o script. Elas podem ser as de sistema, pré-definidas, ou as criadas por você. As variáveis serão tratadas no script na mesma ordem em que forem passadas na Ação. Para isso, é preciso selecionar (ou digitar) todas as variáveis desejadas no campo correspondente, conforme mostra a imagem: Criando um script Javascript O BLiP permite a criação de um script Javascript ES5, com a possibilidade de até 1000 operações por script. Ele terá a seguinte estrutura: function run(inputVariable1, inputVariable2) { return "Hello BLiP"; } A função run é a que será executada como principal. Os parâmetros inputVariableX são as variáveis definidas como variáveis de entradas e o return é o que será enviado para a variável definida como retorno. Observações: Todas as variáveis de entrada devem ser passadas como parâmetros da função; Objetos recebidos como parâmetro devem ser transformados em um objeto JSON. Ex.: JSON.parse(inputVariable1); Objetos retornados devem ser transformados em string. Ex.: JSON.stringify(inputVariable1); Salvando o retorno Após a execução do script, pode ser interessante salvar o retorno em alguma variável, para que seja usada no seu fluxo conversacional. Para isso, basta definir um nome para a variável, como no exemplo abaixo: Nova ação: ‘Executar Script 2.0’ A nova versão da ação Executar Script 2.0 traz melhorias significativas em relação à versão anterior. Agora, a execução dos scripts JavaScript utiliza o motor ClearScript V8, permitindo o uso de definições mais recentes do ECMAScript, com menos restrições e maior compatibilidade com padrões modernos. A nova implementação mantém o comportamento da versão anterior, garantindo que a transição seja fluida para os usuários que já utilizam a funcionalidade. Novidades na nova versão: 01 - Características e limitações Time Manipulation Embora a nova implementação suporte funções de manipulação de tempo mais recentes, como dateVariable.toLocaleString('pt-BR', { timeZone: 'America/Sao_Paulo' }), temos algumas limitações com o ‘Executar Script 2.0’. Limitações: Diferentemente do ExecuteScriptAction, não definimos o fuso horário local para o mecanismo de script com base no fuso horário configurado do bot. Modificamos três funções do protótipo do date para usar o fuso horário do bot: Date.prototype.toDateString, Date.prototype.toTimeStringe e Date.prototype.toString. Ele usará o fuso horário do bot quando disponível (builder:#localTimeZone na configuração do fluxo). Esta é uma limitação do mecanismo ClearScript + V8. Exemplo: // Instead of this:const date = new Date('2021-01-01T00:00:10'); // will use server's local timezone// use this:const date = time.parseDate('2021-01-01T00:00:10'); // will use bot's timezone or fixed America/Sao_Paulo if not available. ParseDate time.parseDate(string date, object? options) Função para transformar uma string em data. Caso seja possível, é analisada uma sequência de datas em um objeto DateTime. Ele recebe dois parâmetros, sendo o último opcional. Exemplo:const date = time.parseDate('2021-01-01T19:01:01.0000001+08:00');const date = time.parseDate('01/02/2021', {format: 'MM/dd/yyyy'});const date = time.parseDate('2021-01-01 19:01:01', {format:'yyyy-MM-dd HH:mm:ss', timeZone: 'America/New_York');const date = time.parseDate('01/01/2021', {format: 'dd/MM/yyyy', culture: 'pt-BR'}); DateToString time.dateToString(Date date, object? options) Função para converter um objeto Date em uma string usando o fuso horário configurado do bot ou America/Sao_Paulo se não estiver definido. Sleep time.sleep(int milliseconds) Função auxiliar para suspender a execução do script por um determinado período de tempo. Exemplo:time.sleep(50); 02 - Contexto Set Variable context.setVariableAsync(string name, object value, TimeSpan? expiration) Função assíncrona para definir variável para o contexto. Deve ser usada em contexto assíncrono. Exemplo:async function run() { await context.setVariableAsync('myVariable', 'myValue'); // Variable value: 'myValue' await context.setVariableAsync('myVariable', 'myValue', TimeSpan.fromMinutes(5)); // Variable value: 'myValue' await context.setVariableAsync('myVariable', 100, TimeSpan.fromMilliseconds(100)); // Variable value: '100' await context.setVariableAsync('myVariable', {'complex': true}, TimeSpan.fromMilliseconds(100)); // Variable value: '{"complex":true}'} Get Variable context.getVariableAsync(string name) Função assíncrona para obter a variável de contexto. Deve ser usada em contexto assíncrono. Exemplo:async function run() { await context.setVariableAsync('myVariable', 'myValue'); // Variable value: 'myValue' await context.setVariableAsync('myVariable', 'myValue', TimeSpan.fromMinutes(5)); // Variable value: 'myValue' await context.setVariableAsync('myVariable', 100, TimeSpan.fromMilliseconds(100)); // Variable value: '100' await context.setVariableAsync('myVariable', {'complex': true}, TimeSpan.fromMilliseconds(100)); // Variable value: '{"complex":true}'} Delete Variable context.deleteVariableAsync(string name) Função assíncrona para excluir variável do contexto. Deve ser usada em contexto assíncrono. Exemplo:async function run() { await context.setVariableAsync('myVariable', 'myValue'); await context.deleteVariableAsync('myVariable'); const myVariable = await context.getVariableAsync('myVariable'); // myVariable: ''} 03 - HTTP Requests Foi adicionada uma nova API de busca para permitir que os usuários façam solicitações HTTP dentro do script. Fetch API request.fetchAsync(string url, object? options) Uma função Async para fazer requisições HTTP dentro do script. Deve ser usada em contexto assíncrono. Exemplo:async function run() { const response = await request.fetchAsync('https://jsonplaceholder.typicode.com/todos/1'); /* response example: { status: 200, headers: { 'key1': ['value1', 'value2'] }, body: '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}', success: true } */ const json = await response.jsonAsync(); // json: { userId: 1, id: 1, title: 'delectus aut autem', completed: false }} Acesse a documentação completa com todos os exemplos e propriedades da ação ‘Executar Script 2.0’ no repositório público do Github Para mais informações, acesse a discussão sobre o assunto em nossa comunidade ou os vídeos no nosso canal. 😃 Artigos relacionados Ação: Requisição HTTP Ação: Processar Comando Variáveis do Builder Como configurar horário de atendimento através de script Como enviar notificações WhatsApp via API do Blip