Conversa
8 funções do TermoSell para conversa.
// 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_conversa | GET /conversa | Lista as conversas com paginação |
criar_conversa | POST /conversa | Não cria conversa pela tela |
buscar_auto_complete_conversa | GET /conversa/autocomplete | Lista básica de conversas para seleção |
buscar_pelo_filtro_conversa | GET /conversa/filtro | Busca conversas por filtro |
buscar_pelo_id_conversa | GET /conversa/{id} | Busca uma conversa pelo id |
atualizar_pelo_id_conversa | PATCH /conversa/{id} | Atualiza uma conversa pelo id |
deletar_pelo_id_conversa | DELETE /conversa/{id} | Exclui uma conversa do histórico pelo id |
buscar_mensagens_conversa | GET /conversa/{id}/mensagens | Lista as mensagens de uma conversa |
buscar_paginador_conversa
GET/conversa Exige credencial
Lista as conversas com paginação
Exige qualquer permissão da área clientes (qualquer ação liberada na área já libera a leitura). Ordena da última mensagem mais recente para a mais antiga. pagina começa em 1 (padrão 1; valores menores viram 1). A página tem sempre 50 itens: tamanho é aceito, mas ignorado. status (opcional) limita a um status. total conta os registros não excluídos que casam com o status.
function buscar_paginador_conversa(
credencial_de_acesso: CredencialDeAcesso,
parametros: ParametrosDeBuscarPaginadorConversa = {},
opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.PaginaConversa>import { CredencialDeAcesso } from "termo_core";
import { buscar_paginador_conversa } from "termo_core/sell";
const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_paginador_conversa(credencial_de_acesso, { pagina: 1 });Argumentos
Nome
Tipo
Retorno: Promise<tipos.PaginaConversa> · Rust: Result<tipos::PaginaConversa, ErroAoChamarServico> · veja PaginaConversa.
criar_conversa
POST/conversa Exige credencial
Não cria conversa pela tela
Exige a permissão criar da área clientes, mas responde sempre 403: a conversa é registrada pelos webhooks do Chatwoot e da Z-API, que gravam toda mensagem visível que passa pela conta do Chatwoot. Sem corpo.
function criar_conversa(
credencial_de_acesso: CredencialDeAcesso,
opcoes_da_chamada?: OpcoesDaChamada,
): Promise<void>import { CredencialDeAcesso } from "termo_core";
import { criar_conversa } from "termo_core/sell";
const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
await criar_conversa(credencial_de_acesso);Argumentos
Nome
Tipo
Retorno: Promise<void> · Rust: Result<(), ErroAoChamarServico> · sem corpo na resposta.
buscar_auto_complete_conversa
GET/conversa/autocomplete Exige credencial
Lista básica de conversas para seleção
Exige qualquer permissão da área clientes (qualquer ação liberada na área já libera a leitura). Devolve só id, id da conversa no Chatwoot, nome e telefone do contato, em ordem alfabética do nome do contato. busca procura o trecho no nome do contato (sem diferenciar maiúsculas) ou no telefone. 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_conversa(
credencial_de_acesso: CredencialDeAcesso,
parametros: ParametrosDeBuscarAutoCompleteConversa = {},
opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.PaginaConversaAutoComplete>import { CredencialDeAcesso } from "termo_core";
import { buscar_auto_complete_conversa } from "termo_core/sell";
const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_auto_complete_conversa(credencial_de_acesso, { busca: "..." });Argumentos
Nome
Tipo
Retorno: Promise<tipos.PaginaConversaAutoComplete> · Rust: Result<tipos::PaginaConversaAutoComplete, ErroAoChamarServico> · veja PaginaConversaAutoComplete.
buscar_pelo_filtro_conversa
GET/conversa/filtro Exige credencial
Busca conversas por filtro
Exige qualquer permissão da área clientes (qualquer ação liberada na área já libera a leitura). Devolve até 500 conversas que casam com o filtro, da última mensagem mais recente para a mais antiga. cliente_id, robo_id, config_system_z_api_id e chatwoot_conversa_id comparam o valor exato; status compara o status exato; contato procura o trecho no nome do contato, na razão social do cliente ou nos dígitos do telefone; texto procura o trecho no conteúdo de qualquer mensagem da conversa; todos sem diferenciar maiúsculas. Sem filtro, devolve as 500 mais recentes. É por cliente_id que a guia "Histórico de conversas" do cliente lê o histórico.
function buscar_pelo_filtro_conversa(
credencial_de_acesso: CredencialDeAcesso,
parametros: ParametrosDeBuscarPeloFiltroConversa = {},
opcoes_da_chamada?: OpcoesDaChamada,
): Promise<Array<tipos.Conversa>>import { CredencialDeAcesso } from "termo_core";
import { buscar_pelo_filtro_conversa } from "termo_core/sell";
const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_pelo_filtro_conversa(credencial_de_acesso, { cliente_id: "..." });Argumentos
Nome
Tipo
Retorno: Promise<Array<tipos.Conversa>> · Rust: Result<Vec<tipos::Conversa>, ErroAoChamarServico>
buscar_pelo_id_conversa
GET/conversa/{id} Exige credencial
Busca uma conversa pelo id
Exige qualquer permissão da área clientes (qualquer ação liberada na área já libera a leitura). Devolve a conversa do histórico interno com o nome do número do WhatsApp, do cliente e do robô, o status espelhado do Chatwoot (pending com o robô, open com a equipe, resolved, snoozed), a etapa atual do fluxo, a última mensagem de cada lado, transferida_em/transferida_motivo (sem_resposta quando o gatilho passou a conversa para a equipe), quantidade_mensagens e chatwoot_endereco_conversa (link da conversa no painel do Chatwoot). Datas em RFC 3339. Conversa excluída responde 404.
function buscar_pelo_id_conversa(
credencial_de_acesso: CredencialDeAcesso,
id: string,
opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.Conversa>import { CredencialDeAcesso } from "termo_core";
import { buscar_pelo_id_conversa } from "termo_core/sell";
const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_pelo_id_conversa(credencial_de_acesso, id);Argumentos
Nome
Tipo
Retorno: Promise<tipos.Conversa> · Rust: Result<tipos::Conversa, ErroAoChamarServico> · veja Conversa.
atualizar_pelo_id_conversa
PATCH/conversa/{id} Exige credencial
Atualiza uma conversa pelo id
Exige a permissão editar da área clientes. Atualização parcial: só os campos enviados mudam. cliente_id vincula a conversa a um cliente, robo_id a um robô e status corrige o status gravado (pending, open, resolved ou snoozed) sem alterar nada no Chatwoot. As mensagens e os demais campos vêm só dos webhooks.
function atualizar_pelo_id_conversa(
credencial_de_acesso: CredencialDeAcesso,
id: string,
corpo_da_requisicao: tipos.ConversaAtualizar,
opcoes_da_chamada?: OpcoesDaChamada,
): Promise<tipos.Conversa>import { CredencialDeAcesso } from "termo_core";
import { atualizar_pelo_id_conversa } from "termo_core/sell";
const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await atualizar_pelo_id_conversa(credencial_de_acesso, id, corpo_da_requisicao);Argumentos
Nome
Tipo
Retorno: Promise<tipos.Conversa> · Rust: Result<tipos::Conversa, ErroAoChamarServico> · veja Conversa.
deletar_pelo_id_conversa
DELETE/conversa/{id} Exige credencial
Exclui uma conversa do histórico pelo id
Exige a permissão deletar da área clientes. A exclusão é lógica e leva junto as mensagens, na mesma transação: a conversa some do histórico interno e não há como restaurar. A conversa no Chatwoot não é alterada; uma mensagem nova dela cria um registro novo no histórico.
function deletar_pelo_id_conversa(
credencial_de_acesso: CredencialDeAcesso,
id: string,
opcoes_da_chamada?: OpcoesDaChamada,
): Promise<void>import { CredencialDeAcesso } from "termo_core";
import { deletar_pelo_id_conversa } from "termo_core/sell";
const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
await deletar_pelo_id_conversa(credencial_de_acesso, id);Argumentos
Nome
Tipo
Retorno: Promise<void> · Rust: Result<(), ErroAoChamarServico> · sem corpo na resposta.
buscar_mensagens_conversa
GET/conversa/{id}/mensagens Exige credencial
Lista as mensagens de uma conversa
Exige qualquer permissão da área clientes (qualquer ação liberada na área já libera a leitura). Devolve as mensagens gravadas no histórico interno, em ordem de envio, sem as notas privadas da equipe. autor é contato, atendente ou robo; etapa_id é a etapa do fluxo em que o robô mandou a mensagem; criada_em é a data de criação no Chatwoot, em RFC 3339. anexos lista os arquivos da mensagem (tipo do Chatwoot, nome, endereco no Chatwoot); cada um é copiado para o TermoBucket (arquivo privado do app spark-sell) logo depois do webhook e, quando já está lá, traz arquivo_id, tipo_mime, tamanho e url, o download assinado por 15 minutos. O que falhar é tentado de novo a cada 30 minutos, até 5 vezes.
function buscar_mensagens_conversa(
credencial_de_acesso: CredencialDeAcesso,
id: string,
opcoes_da_chamada?: OpcoesDaChamada,
): Promise<Array<tipos.ConversaMensagem>>import { CredencialDeAcesso } from "termo_core";
import { buscar_mensagens_conversa } from "termo_core/sell";
const credencial_de_acesso = CredencialDeAcesso.token_do_usuario_logado(token_do_usuario);
const resposta = await buscar_mensagens_conversa(credencial_de_acesso, id);Argumentos
Nome
Tipo
Retorno: Promise<Array<tipos.ConversaMensagem>> · Rust: Result<Vec<tipos::ConversaMensagem>, ErroAoChamarServico>
Tipos
Tipos usados pelas funções desta página. O nome é o mesmo nos dois pacotes.
AnexoDaMensagem
import type { AnexoDaMensagem } from "termo_core/sell";
export interface AnexoDaMensagem {
arquivo_id?: string | null;
endereco: string;
nome: string;
tamanho?: number | null;
tentativas?: number;
tipo: string;
tipo_mime?: string | null;
url?: string | null;
}Conversa
import type { Conversa } from "termo_core/sell";
export interface Conversa {
atualizado_em: string;
chatwoot_contato_id?: number | null;
chatwoot_conversa_id: number;
chatwoot_endereco_conversa?: string | null;
cliente_id?: string | null;
cliente_razao_social?: string | null;
config_system_chatwoot_id: string;
config_system_whatsapp_id?: string | null;
config_system_whatsapp_nome?: string | null;
config_system_z_api_id?: string | null;
config_system_z_api_nome?: string | null;
contato_nome: string;
contato_telefone: string;
criado_em: string;
etapa_id?: string | null;
id: string;
quantidade_mensagens: number;
robo_id?: string | null;
robo_nome?: string | null;
status: string;
transferida_em?: string | null;
transferida_motivo?: string | null;
ultima_mensagem: string;
ultima_mensagem_do_contato_em?: string | null;
ultima_mensagem_do_robo_em?: string | null;
ultima_mensagem_em?: string | null;
}ConversaAtualizar
import type { ConversaAtualizar } from "termo_core/sell";
export interface ConversaAtualizar {
cliente_id?: string | null;
robo_id?: string | null;
status?: string | null;
}ConversaMensagem
import type { ConversaMensagem } from "termo_core/sell";
export interface ConversaMensagem {
anexos: Array<AnexoDaMensagem>;
autor: string;
chatwoot_mensagem_id: number;
conteudo: string;
conversa_id: string;
criada_em: string;
etapa_id?: string | null;
id: string;
quantidade_anexos: number;
}PaginaConversa
import type { PaginaConversa } from "termo_core/sell";
export interface PaginaConversa {
itens: Array<PaginaConversaItensItem>;
pagina: number;
tamanho: number;
total: number;
}PaginaConversaAutoComplete
import type { PaginaConversaAutoComplete } from "termo_core/sell";
export interface PaginaConversaAutoComplete {
itens: Array<PaginaConversaAutoCompleteItensItem>;
pagina: number;
tamanho: number;
total: number;
}PaginaConversaAutoCompleteItensItem
import type { PaginaConversaAutoCompleteItensItem } from "termo_core/sell";
export interface PaginaConversaAutoCompleteItensItem {
chatwoot_conversa_id: number;
contato_nome: string;
contato_telefone: string;
id: string;
}PaginaConversaItensItem
import type { PaginaConversaItensItem } from "termo_core/sell";
export interface PaginaConversaItensItem {
atualizado_em: string;
chatwoot_contato_id?: number | null;
chatwoot_conversa_id: number;
chatwoot_endereco_conversa?: string | null;
cliente_id?: string | null;
cliente_razao_social?: string | null;
config_system_chatwoot_id: string;
config_system_whatsapp_id?: string | null;
config_system_whatsapp_nome?: string | null;
config_system_z_api_id?: string | null;
config_system_z_api_nome?: string | null;
contato_nome: string;
contato_telefone: string;
criado_em: string;
etapa_id?: string | null;
id: string;
quantidade_mensagens: number;
robo_id?: string | null;
robo_nome?: string | null;
status: string;
transferida_em?: string | null;
transferida_motivo?: string | null;
ultima_mensagem: string;
ultima_mensagem_do_contato_em?: string | null;
ultima_mensagem_do_robo_em?: string | null;
ultima_mensagem_em?: string | null;
}