Assistente da loja
Conversa com o assistente de compras da mini-loja, toca nos cartões do chat e lê as mensagens que um atendente da loja escreve no mesmo chat.
A mini-loja tem um chat com um assistente que ajuda a achar produtos, montar a sacola, fechar o pedido e tirar dúvidas, usando o catálogo e as regras da loja. O cliente conversa com ele em linguagem natural. As rotas abaixo são o que o chat chama.
O assistente só vê o que o próprio cliente (o dono do token) veria: a mesma sacola, o mesmo catálogo e os mesmos preços. O que ele faz na sacola aparece de verdade nela.
Quando um atendente da loja assume a conversa pelo painel, o assistente para de responder e as mensagens da pessoa chegam ao chat pela rota de leitura do atendimento.
Enviar uma mensagem
/api/v1/storefront/wa-coex/intelligence/{token}/assistPúblicaEnvia uma mensagem (ou um toque em cartão) ao assistente e recebe a resposta
Um "turno" é uma mensagem do cliente e a resposta do assistente. O histórico não fica guardado no servidor para o seu uso: o chat reenvia as mensagens anteriores em history (as 40 últimas valem) para o assistente manter o contexto. O servidor guarda cada turno para o painel da loja.
Dois modos de enviar:
- Mensagem:
messagecom o texto do cliente. - Toque em cartão:
action, quando o cliente toca num botão de um cartão que o assistente mostrou (escolher entrega, pagamento, endereço, confirmar o pedido). Roda direto, como um passo fixo, emessagenão é necessário.
Para receber a resposta aos poucos (texto provisório enquanto o turno roda), envie ?stream=1 ou Accept: text/event-stream. A resposta vira um fluxo de eventos (SSE): eventos de texto provisório, e por fim final (o mesmo corpo da resposta normal, mais stream.total_ms), error (em falha) e done. Ignore eventos que você não conhece.
Parâmetros de caminho
tokenstringobrigatórioParâmetros de consulta
streamstring11 pede a resposta em fluxo de eventos (SSE).Corpo da requisição
messagestringaction seja enviado.displaystringhistoryarrayrole (user ou assistant) e content. Só os 40 últimos são usados.page_contextobjectEm que tela o cliente está, para o assistente responder sobre o que ele vê.
kindstringhomesearchcategoryproductcartcheckoutordersorderprofileotherassistantidstringlabelstringroutestringproductobjectid, name, qty, options (mapa de opção para valor).cartobjectcount (quantidade de itens).checkoutobjectstep (address, delivery, payment ou review), shipping, payment, coupon e missing (o que falta).actionobjectToque num cartão do chat. Quando enviado, o assistente não usa message.
typestringobrigatórioconfirm_orderchoose_shippingchoose_paymentchoose_addressset_documentedit_stepcard_orderpayloadobjectcards. Campos usados conforme o tipo: summary_key (confirmar), option_id (entrega), method_id, plan_id e installments (pagamento), address_id ou address (endereço), document, terms_accepted, age_confirmed e cnpj, step (voltar a um passo) e order_id (pedido do cartão).O corpo aceita até 1 MB.
Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/storefront/wa-coex/intelligence/$TOKEN/assist" \
-H "Content-Type: application/json" \
-d '{
"message": "Coloca um Notebook Slim Rosa na minha sacola",
"history": [],
"page_context": {"kind": "home", "id": "", "label": "Início"}
}'Resposta
{
"reply": "Coloquei 1 Notebook Slim Rosa na sua sacola. Quer finalizar o pedido?",
"tool_calls": [],
"latency_ms": 1840,
"effects": [{ "type": "cart_updated" }],
"last_id": 42
}{ "reply": "", "tool_calls": [], "human": true, "last_id": 43 }Campos da resposta
replystringhuman é true.humanbooleantrue quando um atendente assumiu a conversa: o assistente não responde e o chat deve passar a ler as mensagens da pessoa (/inbox). Ausente nas respostas normais.tool_callsarrayeffects para saber o que atualizar na tela.latency_msintegercardsarrayaction.payload.actionsarraylabel, href (caminho dentro da mini-loja), variant e intent.effectsarraytype (cart_updated para reler a sacola, checkout_updated para reler o checkout, navigate com href, checkout_step com step).last_idintegerafter em /inbox.Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo ilegível, ou sem message e sem action. | {"error":"message required"} |
| 400 | action com tipo desconhecido ou dado obrigatório faltando. | {"error":"invalid_action","message":"..."} |
| 403 | A loja não fecha pedidos pelo chat e o toque era de checkout. | {"error":"assistant_checkout_disabled"} |
| 404 | card_order com um pedido que não é desta sessão. | {"error":"order_not_found"} |
| 502 | O assistente não conseguiu responder agora. | {"error":"<texto>"} ou {"error":"assistant_unavailable"} |
Ler as mensagens do atendente
/api/v1/storefront/wa-coex/intelligence/{token}/inboxPúblicaMensagens que um atendente escreveu no chat e se a conversa está com uma pessoa
O chat consulta esta rota de tempos em tempos (polling) para mostrar o que o atendente escreve e saber se a conversa continua com uma pessoa. A resposta nunca é guardada em cache.
Parâmetros de caminho
tokenstringobrigatórioParâmetros de consulta
afterintegerpadrão: 00, devolve só o cursor atual (o chat já tem o próprio histórico).Resposta
{
"human": true,
"last_id": 45,
"messages": [
{ "id": 44, "body": "Oi! Sou a Paula, vou te ajudar com o pedido.", "created_at": "2026-10-11T19:10:00Z", "from": "attendant" }
]
}Campos da resposta
humanbooleanlast_idintegerafter).messagesarrayid, body, created_at (RFC 3339) e from (attendant, uma pessoa da loja; ou assistant, um aviso do assistente quando ninguém da equipe respondeu a tempo). [] quando não há.