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ção | Rota | O que faz |
|---|---|---|
buscar_paginador_robo | GET /robo | Lista os robôs com paginação |
criar_robo | POST /robo | Cadastra um robô de atendimento |
buscar_auto_complete_robo | GET /robo/autocomplete | Lista básica de robôs para seleção |
buscar_equipes_robo | GET /robo/equipes | Lista as equipes do Chatwoot |
buscar_pelo_filtro_robo | GET /robo/filtro | Busca robôs por filtro |
buscar_modelos_robo | GET /robo/modelos | Lista os modelos de IA que o robô pode usar |
buscar_pelo_id_robo | GET /robo/{id} | Busca um robô pelo id |
atualizar_pelo_id_robo | PATCH /robo/{id} | Atualiza um robô pelo id |
deletar_pelo_id_robo | DELETE /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>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>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>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>>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>>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>>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>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>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>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;
}