Deixe a Orian com a sua cara.
A conversa com a Orian IA precisa da chave da Anthropic; a busca funciona sem ela.
O contrário da chave de API: em vez de o seu sistema perguntar à Orian, a Orian avisa o seu sistema no instante em que algo acontece. Um negócio ganho, uma proposta aberta, um contato novo — cada evento vira um POST no endereço que você escolher.
Quais eventos
A URL do seu webhook não é secreta: ela aparece em log de proxy, em ferramenta de monitoramento, no histórico de quem a configurou. Sem conferir a assinatura, qualquer pessoa que descubra o endereço consegue inventar um evento no seu sistema.
Cada pedido da Orian traz o cabeçalho X-Tino-Assinatura: t=<instante>,v1=<hmac>. O que é assinado é instante.corpo — o instante entra na conta justamente para um pedido capturado não poder ser reenviado depois.
const [t, v1] = cabecalho.split(",").map(p => p.split("=")[1]);
const esperado = crypto.createHmac("sha256", SEGREDO)
.update(`${t}.${corpoCru}`).digest("hex");
// tempo constante — nunca ===
if (!crypto.timingSafeEqual(Buffer.from(esperado), Buffer.from(v1))) recusar();
if (Math.abs(Date.now()/1000 - Number(t)) > 300) recusar(); // reenvioUse o corpo cru, antes de qualquer conversão para JSON: reserializar muda espaços e ordem de campos, e a assinatura deixa de bater.
X-Tino-Entrega, então dá para deduplicar do seu lado sem comparar conteúdo.