Skip to content

Comandos Serverless · Desenvolvedores

Escreva e execute código JavaScript serverless diretamente no Dailybot. Construa comandos personalizados sem implantar infraestrutura própria.

Comandos de Código Serverless

Os comandos de código serverless permitem que você escreva e execute código JavaScript diretamente dentro do Dailybot — sem necessidade de infraestrutura de servidor. Seu código roda no ambiente seguro do Dailybot e pode fazer requisições HTTP, acessar armazenamento persistente e retornar respostas interativas.

Executar um Comando

Os comandos serverless podem ser disparados de três formas:

  1. Disparo no Chat — Os usuários digitam o comando diretamente em DMs ou canais
  2. Disparo por Workflow — O código roda em resposta a eventos ou agendamentos via Workflows do Dailybot
  3. Agendador de Comandos — Use o SDK do Dailybot para agendar uma execução futura do comando

Entrada do Comando

Quando um comando é disparado, seu código recebe um objetoevent com contexto sobre a execução.

Query String

O texto adicional digitado após o nome do comando fica disponível como event.query. Por exemplo, digitar/growth_rate Julho, Agosto torna "Julho, Agosto"disponível via event.query.

Variáveis de Contexto

  • event.data.intent — O nome do comando disparado
  • event.data.user_full_name — Nome do usuário que disparou o comando
  • event.data.targetChannel — Objeto do canal de chat onde o comando foi executado
Parse da entrada do comando
// Fazer parse da entrada do query string
let query = event.query;
let month = null;
if (query) {
  let parts = query.split(" ");
  if (parts[0]) {
    month = parts[0];
  }
}

return `Gerando relatório para ${month || 'este mês'}...`;

Usar Código Serverless em Workflows

Quando o mesmo código roda como um passo dentro de umWorkflow (Automação) do Dailybot, o contexto de execução é diferente do de um comando de chat. Em vez dos campos do event de chat, seu código lê os dados da automação através de um objetoworkflow.

  • workflow.prev_step — Dados retornados pelo passo anterior (ex. workflow.prev_step.result, workflow.prev_step.ai_response)
  • workflow.action1workflow.actionN — Dados retornados por um passo em uma posição específica (ex. workflow.action1.result)
  • workflow.context — Metadados desta execução (workflow_uuid, workflow_name, organization_uuid, …)

O valor que você devolver com return viraprev_step.result (e actionN.result) para os passos seguintes.

Ler dados dos passos do workflow
// Ler a saída dos passos anteriores e passar um valor adiante
const previous = workflow.prev_step.result;
const aiText = workflow.action1.ai_response;

return `O passo anterior disse: ${previous}`;

Info

Não existe um objeto automation — sempre leia os dados dos passos através de workflow. Dentro de um workflow, o armazenamento do DailybotSDK fica automaticamente no escopo do workflow, então você não precisa chamarsetAPIKey.

Fazendo Requisições HTTP

A variável request está disponível no seu código e encapsula a bibliotecasuperagentpara fazer requisições HTTP.

Requisições HTTP com superagent
// Requisição GET
const response = await request.get('https://api.example.com/data');
const data = response.body;

// Requisição POST com corpo JSON
const response = await request
  .post('https://api.example.com/submit')
  .send({ name: 'Dailybot', type: 'automation' })
  .set('Authorization', 'Bearer your-token');

Retornar Resultados

Resposta String

Retorne uma string simples para exibir como resposta do comando:

javascript
return "Olá mundo!";

Resposta JSON com Botões Interativos

Retorne um objeto JSON com uma mensagem e botões interativos:

Resposta com botões interativos
return {
  "message": "As vendas da semana passada aumentaram 15% 📈",
  "buttons": [
    {
      "label": "Mês passado",
      "label_after_click": "Buscando vendas do mês passado...",
      "value": "sales last month",
      "button_type": "Command"
    },
    {
      "label": "Trimestre passado",
      "label_after_click": "Buscando relatório trimestral...",
      "value": "sales last quarter",
      "button_type": "Command"
    }
  ]
};

Tip

Os valores dos botões podem referenciar o mesmo comando com parâmetros de consulta diferentes, habilitando fluxos de trabalho interativos de múltiplos passos a partir de um único comando.

Dailybot SDK

O objeto DailybotSDK está disponível no seu código e fornece acesso a armazenamento persistente chave-valor.

Inicialização

Inicialização do SDK
DailybotSDK.setAPIKey("sua_api_key");

Armazenamento Chave-Valor

Armazene objetos JSON em chaves no escopo do usuário. Os dados são associados ao usuário que fez a requisição.

Operações de armazenamento chave-valor
// Gravar dados
await DailybotSDK.Storage.write('preferences', {
  theme: 'dark',
  notifications: true
});

// Ler dados
let prefs = await DailybotSDK.Storage.read('preferences');
// prefs = { theme: 'dark', notifications: true }

// Deletar dados
await DailybotSDK.Storage.delete('preferences');

Exemplos

Reserva de Sala de Reuniões

Comando de reserva de sala
// Uso: /book-room conference-a 2026-02-15 14:00
const parts = event.query.split(" ");
const roomName = parts[0];
const date = parts[1];
const time = parts[2];

if (!roomName || !date || !time) {
  return "Uso: /book-room <nome-sala> <data> <hora>";
}

// Reservar a sala via API externa
const response = await request
  .post('https://rooms.company.com/api/book')
  .send({ room: roomName, date, time });

return `Sala ${roomName} reservada em ${date} às ${time}. Confirmação: ${response.body.id}`;

Buscador de Notícias Tech

Comando buscador de notícias tech
// Buscar as últimas manchetes tech
try {
  const response = await request
    .get('https://newsapi.org/v2/top-headlines')
    .query({ category: 'technology', pageSize: 5, apiKey: 'your_api_key' });

  const headlines = response.body.articles
    .map((a, i) => `${i + 1}. ${a.title}`)
    .join('\n');

  return `Manchetes Tech de Hoje:\n${headlines}`;
} catch (error) {
  return "Não foi possível obter as notícias. Tente novamente mais tarde.";
}

Padrões Avançados

  • Use o armazenamento do SDK para construir fluxos com estado entre múltiplas invocações
  • Faça parse de event.query para aceitar subcomandos (ex., /tool help, /tool status)
  • Encadeie comandos usando botões interativos para processos de múltiplos passos
  • Trate erros com elegância e retorne mensagens úteis aos usuários
  • Use o agendador para configurar busca recorrente de dados ou relatórios