Webhooks

3 funções do TermoSell para webhooks.

// npm install termo_core --save-exact
import * as sell from "termo_core/sell";
// ou: import { sell } from "termo_core";
FunçãoRotaO que faz
receber_evento_chatwoot_webhooksPOST /webhooks/chatwootRecebe os eventos do Chatwoot
receber_evento_termo_webhook_webhooksPOST /webhooks/termowebhookRecebe as entregas do TermoWebhook
receber_evento_z_api_webhooksPOST /webhooks/z_apiRecebe as mensagens do WhatsApp pela Z-API

receber_evento_chatwoot_webhooks

POST/webhooks/chatwoot Pública

Recebe os eventos do Chatwoot

Pública, sem token do usuário: é chamada pelo robô de atendimento que o TermoSell cria na conta do Chatwoot, com o segredo da configuração no endereço. O corpo é o evento do Chatwoot como ele envia. Só message_created que não é nota privada e chega por uma caixa ligada a um número da Z-API é tratado: mensagem da equipe vai para o WhatsApp pela Z-API, e mensagem do cliente numa conversa pendente é respondida pelo robô em segundo plano, seguindo o fluxo do robô do número. O resto é ignorado com 200.

function receber_evento_chatwoot_webhooks(
  parametros: ParametrosDeReceberEventoChatwootWebhooks,
  corpo_da_requisicao: tipos.EventoDoChatwoot,
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<void>
Exemplo
import { receber_evento_chatwoot_webhooks } from "termo_core/sell";

await receber_evento_chatwoot_webhooks({ segredo }, corpo_da_requisicao);

Argumentos

Nome

Tipo

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

receber_evento_termo_webhook_webhooks

POST/webhooks/termowebhook Pública

Recebe as entregas do TermoWebhook

Pública, sem token do usuário: é chamada pelo TermoWebhook, o hub de eventos da Termotubos, para entregar os eventos que o TermoSell assina. A entrega é conferida pela assinatura Ed25519 do hub (chave pública em /.well-known/jwks.json do TermoWebhook), pela data e pelo destino, que precisa ser o próprio TermoSell. Eventos tratados: colaborador.criado e colaborador.atualizado, versões 1 e 2, publicados pelo TermoAuth: criam ou atualizam o colaborador e o acesso dele (a v2 também traz setor, cargo e função), descartando o evento mais antigo que o último aplicado. Qualquer outro tipo responde 200 sem fazer nada. Como o hub entrega pelo menos uma vez, repetir o mesmo evento é seguro.

function receber_evento_termo_webhook_webhooks(
  parametros: ParametrosDeReceberEventoTermoWebhookWebhooks,
  corpo_da_requisicao: tipos.EntregaDoTermoWebhook,
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<void>
Exemplo
import { receber_evento_termo_webhook_webhooks } from "termo_core/sell";

await receber_evento_termo_webhook_webhooks({ "X-TermoWebhook-Data": 1, "X-TermoWebhook-Chave": "...", "X-TermoWebhook-Destino": "...", "X-TermoWebhook-Assinatura": "..." }, corpo_da_requisicao);

Argumentos

Nome

Tipo

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

receber_evento_z_api_webhooks

POST/webhooks/z_api Pública

Recebe as mensagens do WhatsApp pela Z-API

Pública, sem token do usuário: é chamada pela Z-API, com o segredo do número no endereço. O corpo é o evento da Z-API como ela envia; o instanceId dele precisa ser o da instância do número dono do segredo. Mensagem recebida de conversa individual, num número ativo e ligado a uma caixa do Chatwoot, é registrada no Chatwoot (a mesma mensagem não é registrada duas vezes); grupos, canais, transmissões e ecos do próprio sistema são ignorados com 200.

function receber_evento_z_api_webhooks(
  parametros: ParametrosDeReceberEventoZApiWebhooks,
  corpo_da_requisicao: tipos.EventoDaZApi,
  opcoes_da_chamada?: OpcoesDaChamada,
): Promise<void>
Exemplo
import { receber_evento_z_api_webhooks } from "termo_core/sell";

await receber_evento_z_api_webhooks({ segredo }, corpo_da_requisicao);

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.

EntregaDoTermoWebhook

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

export interface EntregaDoTermoWebhook {
  dados: Record<string, unknown>;
  entidade_id: string;
  id: string;
  ocorrido_em: string;
  tipo: string;
  versao: number;
}

EventoDaZApi

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

export type EventoDaZApi = Record<string, unknown>;

EventoDoChatwoot

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

export type EventoDoChatwoot = Record<string, unknown>;

Nesta página