Skip to main content
Este guia monta, com exemplos sintéticos, o que uma loja de moda liga na Niadra para um assistente de compras que trabalha no WhatsApp e no app: o estado dos itens, o que a cliente quer e recusa, o que o agente pode afirmar sobre preço e estoque, a coordenação com o agente de pós-venda e a medição do que o assistente vendeu. Cada parte é uma funcionalidade do espaço, ligada por si; nada aqui depende de tudo estar ligado.

O que o setor pede

  • Um item tem preço e estoque que mudam por minuto, e um agente que afirma “temos no seu tamanho” precisa de um valor de segundos atrás.
  • A cliente diz o que não quer (“nada em preto”), e uma busca que ignora isso desperdiça a conversa.
  • O mesmo carrinho passa por dois agentes e pelo checkout da loja, e o pedido chega horas depois: a venda precisa ser ligada ao cartão exato que o assistente mostrou.
  • Um agente de pós-venda e um de campanha contatam a mesma pessoa; um deles precisa esperar.

1. Os tipos: item, pedido e o estado do assistente

O item de loja é um tipo compartilhado: existe na Niadra enquanto alguém o vê, interage com ele ou o observa. O preço e a disponibilidade vêm ao vivo da plataforma de e-commerce; um snapshot da busca pode ser mostrado, nunca afirmado. Derive o tipo da tabela de variantes com niadra types derive e complete o que só a loja sabe:
O pedido é um tipo do cliente (ownership: subject), com as linhas, os estados de sucesso (delivered, kept) e o carimbo do token de exposição em cada linha, que a medição de desfechos lê. O estado de trabalho do assistente é um tipo com ownership: agent: o passo do atendimento, a oferta mostrada e uma nota do carrinho marcada pii, com teto de 16 KB e retenção de 30 dias (Memória de trabalho). Com os tipos no documento object-types e a funcionalidade state ligada, a plataforma envia o estado por POST /v1/objects/push e um worker de resolução lê de novo o que a Niadra pede.

2. O turno do assistente

Cada resposta do assistente é um turno gravado: a leitura do contexto com o bloco de restrições e o estado, a busca de itens, o que a lista mostrou, a resposta.
“Nada em preto” e “tamanho 40” viram, pelos sinais, uma restrição rígida e um atributo declarados; no turno seguinte, o bloco de restrições já os traz, renderizados para search_products pela vinculação (exclude_colors: ["black"], size: "40"), e a Niadra mede, chamada a chamada, se a busca honrou o que recebeu. Em TypeScript, as interações de exposição vão como itens do lote (a aba cURL da página de sinais).

3. O contrato de afirmação

O assistente afirma preços, promoções e disponibilidade. O contrato de varejo confere cada número contra o que a busca devolveu, no processo do agente, sem modelo:
“De R299,90porR 299,90 por R 199,90”: os dois números têm papel (price_list e price_sale, pelos termos “de” e “por”), e cada um é conferido contra o valor do mesmo papel que a busca mostrou, dentro dos 15 segundos de claim_max_age. Um preço que ficou velho no chat é reescrito só quando é inequívoco (uma cópia literal do campo, com o valor fresco no turno); “está esgotado” sem uma busca no turno é no_evidence, marcado. “Separei o 40 para você” sem uma chamada de reserve_item é uma promessa sem ação. “Quer que eu separe por cor?” nunca dispara: está no corpus negativo, que o niadra contract test do CI mantém. Veja Afirmações.

4. Coordenação: uma despedida, um orçamento

Dois agentes falam com a mesma cliente: o assistente, na conversa, e o de campanha, que manda uma oferta dias depois. O documento coordination da loja declara a finalidade marketing com orçamento de 2 contatos por 7 dias e token exigido, o canal whatsapp com janela de 24 horas e modelo pago fora dela, e o gateway de WhatsApp da loja. A despedida da conversa é um efeito com chave, então sai uma vez, seja qual for o agente que a tenta:
O gateway de WhatsApp da loja confere o token sem falar com a Niadra e deixa a oferta sair uma vez (Gateways). A terceira oferta na semana recebe deny com budget_exhausted e a hora em que a próxima libera; uma cliente que pediu para não receber ofertas está na lista de supressão, que o agente de campanha honra até com a Niadra fora do alcance.

5. A venda, pedido por pedido

O pedido chega da plataforma como evento de sistema, com o token de exposição que o app copiou em cada linha do carrinho. O documento measurement declara o desfecho:
Uma linha com token válido é atribuída ao cartão exato, de forma determinística (line); uma sem token, ao mesmo item com que a cliente interagiu na janela de 7 dias (identity, provável, com a confiança do método ao lado do valor). Uma linha devolvida por tamanho vira um atributo inferido, que só se aplica quando a cliente pede “o meu tamanho”. GET /v1/measure/attribution soma por dia, agente e método, e POST /v1/measure/reconcile confere o total contra o CSV do BI da loja. Antes de rodar um experimento sobre o bloco de restrições, niadra counterfactual --tool search_products --element hard diz, dos turnos gravados, se a busca muda de fato o que devolve quando o bloco entra. Veja Desfechos e atribuição.

O que fica desligado

Tudo acima começa desligado. Uma loja que só quer o contexto e a memória de cada cliente não liga nada; uma que quer ver por que o assistente disse o que disse liga turns; state, signals, claims, coordination e measurement entram cada um quando o time tem o tipo, o contrato, o gateway ou a definição de receita prontos.

Próximos passos

Tipos de objeto e estado

o item compartilhado, o conjunto de trabalho e as releituras.

Sinais e restrições

“nada em preto” nas ferramentas do agente.

Agentes de WhatsApp

a conversa em si: turnos, verificação e transferência.

Desfechos e atribuição

do cartão ao pedido, e o contrafactual.