Robô

9 funções do TermoSell para robô.

// npm install termo_core --save-exact
import * as sell from "termo_core/sell";
// ou: import { sell } from "termo_core";
FunçãoRotaO que faz
buscar_paginador_roboGET /roboLista os robôs com paginação
criar_roboPOST /roboCadastra um robô de atendimento
buscar_auto_complete_roboGET /robo/autocompleteLista básica de robôs para seleção
buscar_equipes_roboGET /robo/equipesLista as equipes do Chatwoot
buscar_pelo_filtro_roboGET /robo/filtroBusca robôs por filtro
buscar_modelos_roboGET /robo/modelosLista os modelos de IA que o robô pode usar
buscar_pelo_id_roboGET /robo/{id}Busca um robô pelo id
atualizar_pelo_id_roboPATCH /robo/{id}Atualiza um robô pelo id
deletar_pelo_id_roboDELETE /robo/{id}Exclui um robô pelo id

buscar_paginador_robo

GET/robo Exige credencial

Lista os robôs com paginação

Exige qualquer permissão da área configuracoes (qualquer ação liberada na área já libera a leitura). Ordena por nome. pagina começa em 1 (padrão 1; valores menores viram 1). A página tem sempre 50 itens: tamanho é aceito, mas ignorado. total conta todos os registros não excluídos.

function buscar_paginador_robo(
  credencial_de_acesso: CredencialDeAcesso,
  parametros: ParametrosDeBuscarPaginadorRobo = {},
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.PaginaRobo>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { buscar_paginador_robo } from "termo_core/sell";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_paginador_robo(credencial_de_acesso, { pagina: 1 });

Argumentos

Nome

Tipo

Retorno: Promise<tipos.PaginaRobo> · Rust: Result<tipos::PaginaRobo, ErroAoChamarServico> · veja PaginaRobo.

criar_robo

POST/robo Exige credencial

Cadastra um robô de atendimento

Exige a permissão criar da área configuracoes. nome é obrigatório (até 80 caracteres, único entre os robôs); modelo é a IA preferida do gateway do TermoAI, um provedor de GET /robo/modelos (opcional, até 80; vazio deixa o TermoAI escolher); descricao vai até 200 e prompt_base até 4000 (padrão vazio). Sem fluxo, o robô nasce só com a etapa de início. O robô nasce ativo, na versão 1. fluxo é o caminho do atendimento: nos (até 40 etapas, exatamente uma do tipo inicio; os outros tipos são inicio_contato_novo, instrucao, mensagem, botoes, atendimento e gatilho) e ligacoes (origem, destino e origem_saida, que é o id do botão ou da regra de onde a ligação sai, null no início e na mensagem). Cada etapa fora o início precisa de nome (até 60 caracteres); objetivo vai até 200, instrucao até 2000 e mensagem até 1000; ferramentas lista até 20 ids de ferramentas do robô. A instrucao precisa de 1 a 10 regras de saída (condicao até 200 caracteres); botoes precisa de 1 a 10 botões (rotulo até 20 caracteres) e de texto fixo em mensagem ou, com mensagem_por_ia, da instrucao para a IA escrever; mensagem também exige texto fixo ou mensagem_por_ia; atendimento encerra o robô, passa a conversa para a equipe do Chatwoot em equipe_id (opcional, de GET /robo/equipes) e não tem saída; gatilho (no máximo um, sem ligação de entrada nem de saída) é o gatilho de cliente sem resposta: minutos_sem_resposta (1 a 1440) e equipe_id opcional, e uma varredura a cada minuto passa para essa equipe toda conversa com o robô em que o cliente ficou esse tempo sem responder. Ids de etapas, botões e regras são únicos; nenhuma ligação volta ao início nem liga a etapa nela mesma, e cada saída tem no máximo uma próxima etapa. inicio_contato_novo (no máximo um, sem ligação de entrada) é o início de quem não está na lista de clientes: só vale com atender_contatos_novos ligado e, sem ele ou sem ligação, o contato novo sai pelo inicio. O texto fixo aceita marcadores como {{cliente.nome}} e {{ultimo_pedido.itens}}.

function criar_robo(
  credencial_de_acesso: CredencialDeAcesso,
  corpo_da_requisicao: tipos.RoboCriar,
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.Robo>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { criar_robo } from "termo_core/sell";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await criar_robo(credencial_de_acesso, corpo_da_requisicao);

Argumentos

Nome

Tipo

Retorno: Promise<tipos.Robo> · Rust: Result<tipos::Robo, ErroAoChamarServico> · veja Robo.

buscar_auto_complete_robo

GET/robo/autocomplete Exige credencial

Lista básica de robôs para seleção

Exige qualquer permissão da área configuracoes (qualquer ação liberada na área já libera a leitura). Devolve só id, nome e modelo, em ordem alfabética de nome. busca procura por trecho do nome, sem diferenciar maiúsculas. pagina começa em 1 (padrão 1) e tamanho tem padrão 10, sem máximo; valores menores que 1 viram 1. total conta os registros que casam com a busca.

function buscar_auto_complete_robo(
  credencial_de_acesso: CredencialDeAcesso,
  parametros: ParametrosDeBuscarAutoCompleteRobo = {},
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.PaginaRoboAutoComplete>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { buscar_auto_complete_robo } from "termo_core/sell";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_auto_complete_robo(credencial_de_acesso, { busca: "..." });

Argumentos

Nome

Tipo

Retorno: Promise<tipos.PaginaRoboAutoComplete> · Rust: Result<tipos::PaginaRoboAutoComplete, ErroAoChamarServico> · veja PaginaRoboAutoComplete.

buscar_equipes_robo

GET/robo/equipes Exige credencial

Lista as equipes do Chatwoot

Exige qualquer permissão da área configuracoes (qualquer ação liberada na área já libera a leitura). Consulta na hora a conta do Chatwoot ativa e devolve as equipes dela (id e nome), para escolher a equipe_id da etapa atendimento ou do gatilho do fluxo.

function buscar_equipes_robo(
  credencial_de_acesso: CredencialDeAcesso,
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<Array<tipos.EquipeChatwoot>>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { buscar_equipes_robo } from "termo_core/sell";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_equipes_robo(credencial_de_acesso);

Argumentos

Nome

Tipo

Retorno: Promise<Array<tipos.EquipeChatwoot>> · Rust: Result<Vec<tipos::EquipeChatwoot>, ErroAoChamarServico>

buscar_pelo_filtro_robo

GET/robo/filtro Exige credencial

Busca robôs por filtro

Exige qualquer permissão da área configuracoes (qualquer ação liberada na área já libera a leitura). Devolve todos os robôs que casam com o filtro, com o fluxo, sem paginação, em ordem alfabética de nome. nome e modelo procuram por trecho, sem diferenciar maiúsculas; ativo filtra pela situação. Sem filtro, devolve todos.

function buscar_pelo_filtro_robo(
  credencial_de_acesso: CredencialDeAcesso,
  parametros: ParametrosDeBuscarPeloFiltroRobo = {},
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<Array<tipos.Robo>>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { buscar_pelo_filtro_robo } from "termo_core/sell";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_pelo_filtro_robo(credencial_de_acesso, { nome: "..." });

Argumentos

Nome

Tipo

Retorno: Promise<Array<tipos.Robo>> · Rust: Result<Vec<tipos::Robo>, ErroAoChamarServico>

buscar_modelos_robo

GET/robo/modelos Exige credencial

Lista os modelos de IA que o robô pode usar

Exige qualquer permissão da área configuracoes (qualquer ação liberada na área já libera a leitura). Consulta na hora o gateway do TermoAI (GET /gateway/modelos, categoria texto_para_texto, com o token do aplicativo) e devolve as IAs com chave ativa lá: provedor (o valor que vai em modelo do robô), empresa, modelo, url_da_logo, logo_monocromatica, gratuito, aceita_ferramentas e chaves_ativas. O robô com modelo vazio deixa o TermoAI escolher; com um provedor, o TermoAI usa essa IA primeiro e só troca para outra quando ela falha.

function buscar_modelos_robo(
  credencial_de_acesso: CredencialDeAcesso,
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<Array<tipos.ModeloDoGateway>>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { buscar_modelos_robo } from "termo_core/sell";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_modelos_robo(credencial_de_acesso);

Argumentos

Nome

Tipo

Retorno: Promise<Array<tipos.ModeloDoGateway>> · Rust: Result<Vec<tipos::ModeloDoGateway>, ErroAoChamarServico>

buscar_pelo_id_robo

GET/robo/{id} Exige credencial

Busca um robô pelo id

Exige qualquer permissão da área configuracoes (qualquer ação liberada na área já libera a leitura). Devolve o robô com o fluxo completo. Robô excluído responde 404.

function buscar_pelo_id_robo(
  credencial_de_acesso: CredencialDeAcesso,
  id: string,
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.Robo>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { buscar_pelo_id_robo } from "termo_core/sell";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_pelo_id_robo(credencial_de_acesso, id);

Argumentos

Nome

Tipo

Retorno: Promise<tipos.Robo> · Rust: Result<tipos::Robo, ErroAoChamarServico> · veja Robo.

atualizar_pelo_id_robo

PATCH/robo/{id} Exige credencial

Atualiza um robô pelo id

Exige a permissão editar da área configuracoes. Atualização parcial: só os campos enviados mudam, com os mesmos limites do cadastro; descricao vazia apaga o valor ativo liga ou desliga o robô e atender_contatos_novos decide se o robô atende quem não está na lista de clientes (cliente cadastrado com o atendente desligado continua indo para a equipe). fluxo, quando enviado, substitui o fluxo inteiro. Enviar prompt_base ou fluxo sobe a versao em 1. fluxo é o caminho do atendimento: nos (até 40 etapas, exatamente uma do tipo inicio; os outros tipos são inicio_contato_novo, instrucao, mensagem, botoes, atendimento e gatilho) e ligacoes (origem, destino e origem_saida, que é o id do botão ou da regra de onde a ligação sai, null no início e na mensagem). Cada etapa fora o início precisa de nome (até 60 caracteres); objetivo vai até 200, instrucao até 2000 e mensagem até 1000; ferramentas lista até 20 ids de ferramentas do robô. A instrucao precisa de 1 a 10 regras de saída (condicao até 200 caracteres); botoes precisa de 1 a 10 botões (rotulo até 20 caracteres) e de texto fixo em mensagem ou, com mensagem_por_ia, da instrucao para a IA escrever; mensagem também exige texto fixo ou mensagem_por_ia; atendimento encerra o robô, passa a conversa para a equipe do Chatwoot em equipe_id (opcional, de GET /robo/equipes) e não tem saída; gatilho (no máximo um, sem ligação de entrada nem de saída) é o gatilho de cliente sem resposta: minutos_sem_resposta (1 a 1440) e equipe_id opcional, e uma varredura a cada minuto passa para essa equipe toda conversa com o robô em que o cliente ficou esse tempo sem responder. Ids de etapas, botões e regras são únicos; nenhuma ligação volta ao início nem liga a etapa nela mesma, e cada saída tem no máximo uma próxima etapa. inicio_contato_novo (no máximo um, sem ligação de entrada) é o início de quem não está na lista de clientes: só vale com atender_contatos_novos ligado e, sem ele ou sem ligação, o contato novo sai pelo inicio. O texto fixo aceita marcadores como {{cliente.nome}} e {{ultimo_pedido.itens}}.

function atualizar_pelo_id_robo(
  credencial_de_acesso: CredencialDeAcesso,
  id: string,
  corpo_da_requisicao: tipos.RoboAtualizar,
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.Robo>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { atualizar_pelo_id_robo } from "termo_core/sell";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await atualizar_pelo_id_robo(credencial_de_acesso, id, corpo_da_requisicao);

Argumentos

Nome

Tipo

Retorno: Promise<tipos.Robo> · Rust: Result<tipos::Robo, ErroAoChamarServico> · veja Robo.

deletar_pelo_id_robo

DELETE/robo/{id} Exige credencial

Exclui um robô pelo id

Exige a permissão deletar da área configuracoes. A exclusão é lógica: o robô some das consultas, o nome fica livre para um novo cadastro e não há como restaurar.

function deletar_pelo_id_robo(
  credencial_de_acesso: CredencialDeAcesso,
  id: string,
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<void>
Exemplo
import { CredencialDeAcesso } from "termo_core";
import { deletar_pelo_id_robo } from "termo_core/sell";

const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
await deletar_pelo_id_robo(credencial_de_acesso, id);

Argumentos

Nome

Tipo

Retorno: Promise<void> · Rust: Result<(), ErroAoChamarServico> · sem corpo na resposta.

Tipos

Tipos usados pelas funções desta página. O nome é o mesmo nos dois pacotes.

EquipeChatwoot

import type { EquipeChatwoot } from "termo_core/sell";

export interface EquipeChatwoot {
  id: number;
  nome: string;
}

ModeloDoGateway

import type { ModeloDoGateway } from "termo_core/sell";

export interface ModeloDoGateway {
  aceita_ferramentas: boolean;
  chaves_ativas: number;
  empresa: string;
  gratuito: boolean;
  logo_monocromatica: boolean;
  modelo: string;
  provedor: string;
  url_da_logo: string;
}

PaginaRobo

import type { PaginaRobo } from "termo_core/sell";

export interface PaginaRobo {
  itens: Array<PaginaRoboItensItem>;
  pagina: number;
  tamanho: number;
  total: number;
}

PaginaRoboAutoComplete

import type { PaginaRoboAutoComplete } from "termo_core/sell";

export interface PaginaRoboAutoComplete {
  itens: Array<PaginaRoboAutoCompleteItensItem>;
  pagina: number;
  tamanho: number;
  total: number;
}

PaginaRoboAutoCompleteItensItem

import type { PaginaRoboAutoCompleteItensItem } from "termo_core/sell";

export interface PaginaRoboAutoCompleteItensItem {
  id: string;
  modelo: string;
  nome: string;
}

PaginaRoboItensItem

import type { PaginaRoboItensItem } from "termo_core/sell";

export interface PaginaRoboItensItem {
  atender_contatos_novos: boolean;
  ativo: boolean;
  atualizado_em: string;
  criado_em: string;
  descricao?: string | null;
  fluxo: RoboFluxo;
  id: string;
  modelo: string;
  nome: string;
  prompt_base: string;
  versao: number;
}

Robo

import type { Robo } from "termo_core/sell";

export interface Robo {
  atender_contatos_novos: boolean;
  ativo: boolean;
  atualizado_em: string;
  criado_em: string;
  descricao?: string | null;
  fluxo: RoboFluxo;
  id: string;
  modelo: string;
  nome: string;
  prompt_base: string;
  versao: number;
}

RoboAtualizar

import type { RoboAtualizar } from "termo_core/sell";

export interface RoboAtualizar {
  atender_contatos_novos?: boolean | null;
  ativo?: boolean | null;
  descricao?: string | null;
  fluxo?: RoboFluxo | null;
  modelo?: string | null;
  nome?: string | null;
  prompt_base?: string | null;
}

RoboBotao

import type { RoboBotao } from "termo_core/sell";

export interface RoboBotao {
  id: string;
  rotulo: string;
}

RoboCriar

import type { RoboCriar } from "termo_core/sell";

export interface RoboCriar {
  descricao?: string | null;
  fluxo?: RoboFluxo | null;
  modelo?: string;
  nome: string;
  prompt_base?: string | null;
}

RoboFluxo

import type { RoboFluxo } from "termo_core/sell";

export interface RoboFluxo {
  ligacoes?: Array<RoboLigacao>;
  nos?: Array<RoboNo>;
}

RoboLigacao

import type { RoboLigacao } from "termo_core/sell";

export interface RoboLigacao {
  destino: string;
  id: string;
  origem: string;
  origem_saida?: string | null;
}

RoboNo

import type { RoboNo } from "termo_core/sell";

export interface RoboNo {
  botoes?: Array<RoboBotao>;
  equipe_id?: number | null;
  ferramentas?: Array<string>;
  id: string;
  instrucao?: string;
  mensagem?: string;
  mensagem_por_ia?: boolean;
  minutos_sem_resposta?: number | null;
  nome?: string;
  objetivo?: string;
  posicao: RoboPosicao;
  regras?: Array<RoboRegra>;
  tipo: string;
}

RoboPosicao

import type { RoboPosicao } from "termo_core/sell";

export interface RoboPosicao {
  x?: number;
  y?: number;
}

RoboRegra

import type { RoboRegra } from "termo_core/sell";

export interface RoboRegra {
  condicao: string;
  id: string;
}

Nesta página