Pular para o conteúdo principal

Canal ao vivo

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

O canal é aberto uma vez por cotação. Depois dele vêm as demais etapas do atendimento: buscar o produto, incluir produto na cesta, receber produtos do Siprinho e fechar a cesta.

Headers​

Toda chamada do ERP para a API da Sipru leva os headers descritos em Visão geral. Authorization e X-Sipru-Partner-Id são obrigatórios; os demais identificam o ERP, a máquina e a loja de onde a chamada partiu.

Abrir o canal​

curl -X POST $SIPRU_BASE_URL/api/erp/channel \
-H "Authorization: Bearer $SIPRU_SECRET" \
-H "X-Sipru-Partner-Id: $SIPRU_PARTNER_ID" \
-H "X-ERP-Name: $ERP_NAME" \
-H "X-ERP-Version: $ERP_VERSION" \
-H "X-Local-MAC-Address: $DEVICE_MAC_ADDRESS" \
-H "X-Local-Machine-Name: $LOCAL_MACHINE_NAME" \
-H "X-CNPJ: $CNPJ_LOJA" \
-H "X-Codigo-Externo-Rede: $CODIGO_DA_REDE" \
-H "X-Codigo-Externo-Loja: $CODIGO_DA_LOJA" \
-H "Content-Type: application/json" \
-d '{
"tempQuoteId": "temp-12345",
"vendedor": {
"cpf": "<cpf-do-vendedor>",
"email": "<email-do-vendedor>",
"login": "<login-do-vendedor>",
"codigoExterno": "<codigo-do-vendedor-no-erp>"
},
"locationId": "07526557000100",
"pricingPolicy": "margem1"
}'

$SIPRU_BASE_URL é a URL base do ambiente Sipru: https://app.sipru.ai em produção ou https://dev.sipru.ai em homologação (ver Ambientes).

Em vendedor, envie pelo menos um identificador: cpf, email, login, codigoExterno ou qualquer outro com que o seu ERP trabalhe. É por eles que o Sipru encontra a conta do vendedor; se nenhum corresponder, a chamada falha com VENDEDOR_NOT_FOUND.

A resposta:

{
"channelId": "8f2b6c1e-4d3a-4b7e-9c21-5a6d7e8f9012",
"contextId": "0f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"url": "https://app.sipru.ai/erp/session?token=...",
"expiresAt": "2026-10-13T20:10:13.000Z",
"channelExpiresAt": "2026-10-14T08:00:13.612Z",
"endpoints": {
"product": "https://app.sipru.ai/api/erp/channel/8f2b6c1e-4d3a-4b7e-9c21-5a6d7e8f9012/product",
"cesta": "https://app.sipru.ai/api/erp/channel/8f2b6c1e-4d3a-4b7e-9c21-5a6d7e8f9012/cesta",
"orcamento": "https://app.sipru.ai/api/erp/channel/8f2b6c1e-4d3a-4b7e-9c21-5a6d7e8f9012/orcamento",
"stream": "https://app.sipru.ai/api/erp/channel/8f2b6c1e-4d3a-4b7e-9c21-5a6d7e8f9012/stream"
},
"vendedorStatus": "ready"
}

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).

Guarde os seguintes retornos dessa resposta para o resto da sessão, até o fechamento da cesta:

  • channelId
  • url
  • endpoints.product
  • endpoints.cesta
  • endpoints.orcamento

Abra a url para o vendedor: ela carrega a sessão no Siprinho, como descrito em Receber produtos do Siprinho. O canal fica válido durante todo o atendimento, mesmo depois de o token de entrada ter sido consumido.

O link é de uso único; o canal, não

A url expira em poucos minutos e só abre uma vez. O canal, porém, sobrevive à navegação: vale por ttlSec (padrão 12 h) e aguenta recarregar a página. Isso significa abrir a url uma vez por atendimento e reaproveitar a sessão até o fechamento da cesta — não abra a url de novo a cada produto.

Vendedor sem conta Sipru: o canal não devolve erro

Quando nenhum identificador enviado em vendedor corresponde a uma conta Sipru, a resposta continua sendo 201, com o mesmo formato: o que muda é vendedorStatus: "signup_required" e a url, que leva a uma página de cadastro em vez da tela do canal. Abra a url do mesmo jeito de sempre — não é preciso tratar nada de diferente no seu lado.

O vendedor preenche nome e senha e cai logado na tela, no canal que você já recebeu. O channelId e os endpoints da resposta já são os definitivos, mas só passam a responder depois que ele concluir: até lá as rotas do canal devolvem 404 CHANNEL_PENDING_SIGNUP. Neste caso expiresAt é a validade do link de cadastro (horas), não a do link de login.

O campo que você enviou aparece travado na tela e não pode ser alterado. Se você não mandou o cpf, o vendedor escolhe se identifica por CPF ou por e-mail — e esse dado é declaração dele, não sua. Quando ele se cadastra por CPF, é esse CPF que vira o seller_id do pedido; quando se cadastra por e-mail, a conta fica sem CPF e o seller_id passa a ser o próprio login. Mandar também o vendedor.cpf tira essa escolha da mão dele.