Pular para o conteúdo principal

Canal ao vivo

No handoff simples, o vendedor entra no Sipru e busca o produto lá. No canal ao vivo ele não busca duas vezes: continua digitando no ERP, e o produto aparece sozinho na tela do Sipru, já com substitutos, cross-sell e upsell.

O canal é o handoff mais dois canos: um do ERP para o Sipru (empurrar produto) e outro do Sipru para o ERP (o webhook de carrinho).

1. Abrir o canal

Mesmo corpo do handoff, mais os campos de callback e o TTL:

curl -X POST https://app.sipru.ai/api/erp/channel \
-H "X-Sipru-Partner-Id: seu-partner-id" \
-H "Authorization: Bearer $SIPRU_PARTNER_SECRET" \
-H "Content-Type: application/json" \
-d '{
"tempQuoteId": "TMP-90321",
"vendedor": { "cpf": "12345678909" },
"locationId": "07526557000100",
"environment": "dev",
"cartCallbackUrl": "https://erp.parceiro.com.br/sipru/carrinho",
"cartCallbackAuth": { "mode": "bearer", "token": "..." },
"ttlSec": 14400
}'
{
"channelId": "8f2b...",
"contextId": "0f1c...",
"url": "https://app.sipru.ai/erp/session?token=...",
"expiresAt": "2026-08-31T18:42:11.000Z",
"channelExpiresAt": "2026-08-31T22:32:11.000Z",
"endpoints": {
"product": "https://app.sipru.ai/api/erp/channel/8f2b.../product",
"stream": "https://app.sipru.ai/api/erp/channel/8f2b.../stream"
}
}

Repare que há duas expirações, e elas servem a coisas diferentes:

  • expiresAt — a URL de entrada. Curta (minutos) e de uso único.
  • channelExpiresAt — o canal em si. Longa, até 24 h (ttlSec, máximo 86400).

Redirecione o vendedor para url como no handoff. O canal fica válido durante todo o atendimento, mesmo depois de o token de entrada ter sido consumido.

2. Empurrar produtos

A cada item que o vendedor lança no ERP, chame o endpoint product do canal:

curl -X POST https://app.sipru.ai/api/erp/channel/$CHANNEL_ID/product \
-H "X-Sipru-Partner-Id: seu-partner-id" \
-H "Authorization: Bearer $SIPRU_PARTNER_SECRET" \
-H "Content-Type: application/json" \
-d '{ "productCode": "72411", "quantity": 4 }'
{
"seq": 7,
"product": { "sku": "72411", "name": "Argamassa AC-III 20kg", "price": 34.9, "coinsReward": 12 },
"recommendations": { "substitutes": 3, "crossSell": 5, "upsell": 1 }
}

O termo pode vir de três formas, e a precedência é productCodeeanquery: o código do parceiro é o mais determinístico, e o texto livre é o último recurso — ele cobre justamente o caso de o código não existir no catálogo Sipru.

quantity é opcional: valor ausente ou inválido vira 1, e acima de 9999 é truncado.

Estados do canal

HTTPcodeSignificado
404CHANNEL_NOT_FOUNDCanal inexistente — ou pertencente a outro parceiro.
404PRODUCT_NOT_FOUNDO termo não achou nada no catálogo daquela loja.
409CHANNEL_CLOSEDO atendimento já foi fechado.
410CHANNEL_EXPIREDPassou do channelExpiresAt. Abra um canal novo.

Fechamento do atendimento

O vendedor fecha o atendimento na tela do Sipru, como venda ou como orçamento. Os dois coexistem para a mesma cotação — converter um orçamento em venda depois é o fluxo normal, e refechar o mesmo tipo sobrescreve os itens em vez de recusar.

No canal ao vivo, o fechamento não gera uma segunda gravação do pedido: cada item já foi empurrado para o seu ERP no clique de "adicionar", via webhook de carrinho. O fechamento é o registro do Sipru sobre o que foi fechado.