Resposta rápida
Crie uma campanha de Disparo por API com Atraso e ligue a reentrada com 1 dia de espera. Sua loja chama /api/campaigns/trigger a cada mudança no carrinho e /api/campaigns/cancel quando o pedido fecha. Cada chamada reinicia a contagem, e o lembrete cancelado não sai nem conta como envio.
Quem deixou o carrinho recebe um lembrete com o próprio nome e o produto que ficou para trás, na hora que você escolher. Quem comprou antes não recebe nada.
O que você precisa
- Uma conta na BIP (o plano gratuito envia por e-mail)
- Acesso ao servidor da sua loja, onde o carrinho e o pedido acontecem
- O nome e o e-mail do cliente assim que ele se identifica no carrinho (o telefone, para WhatsApp)
- Uma chave de API com Disparo de Campanhas e Escrita de Contatos
- Para WhatsApp: plano pago, número conectado e um template aprovado
O que você vai conseguir
- Um lembrete para quem deixou o carrinho, com o primeiro nome e o produto que ficou para trás.
- Nenhuma mensagem para quem ainda está comprando: cada mudança no carrinho reinicia a contagem.
- Nenhum lembrete para quem já comprou: o pedido cancela o envio, e o envio cancelado não conta no seu saldo.
- No máximo um lembrete a cada 24 horas por pessoa, a cada carrinho que ela abandonar.
- Contatos novos criados na mesma chamada, sem duplicar quem já está na BIP.
Como funciona
- 1Sua loja chama a BIP sempre que o carrinho muda
- 2A BIP espera o atraso e reinicia a contagem se a pessoa voltar
- 3Comprou, a loja cancela; não comprou, o lembrete sai
A campanha usa o Disparo por API no modo Atraso. Na prática:
- Sua loja chama
/api/campaigns/triggera cada mudança no carrinho de um cliente identificado. A BIP agenda o lembrete para daqui a uma hora (ou o tempo que você definir). - Uma nova chamada para a mesma pessoa reinicia a contagem. Cada pessoa tem no máximo um lembrete esperando nesta campanha.
- Quando o pedido fecha ou o carrinho é esvaziado, a loja chama
/api/campaigns/cancel. O lembrete pendente é descartado, não sai e não conta como envio. - Se a hora chega sem compra, a BIP confere a Janela de Reentrada do Lead e monta o e-mail com os dados mais recentes do contato. Se a pessoa trocou de produto, o lembrete mostra o carrinho atualizado.
Passo a passo
1. Crie os campos do carrinho
O lembrete fica mais forte quando cita o produto. Para isso, a loja grava o produto num campo do contato a cada chamada.
- Em Configurações → Geral, vá até Campos e clique em Adicionar Campo.
- Em Tipo de Campo, escolha String. Em Nome do Campo, digite Produto do carrinho e clique em Salvar.
- Para a versão por WhatsApp, crie também o campo Código do carrinho, do tipo String. Ele leva a pessoa direto ao carrinho dela.

Captura de tela em breve
2. Crie a chave de API
- Em Configurações, abra a aba Chaves de API e clique em Adicionar Nova Chave de API.
- Em Nome, digite Loja Horizonte — carrinho.
- Em Escopos, ligue Disparo de Campanhas e Escrita de Contatos. O segundo deixa a loja mandar o contato como objeto: a BIP cria ou atualiza o contato e agenda o lembrete na mesma chamada.
- Clique em Salvar e copie a Chave de API. Guarde a chave no servidor da loja, numa variável de ambiente, e nunca no código do site.

Captura de tela em breve
3. Monte o e-mail do lembrete
- Em Modelos de Email, clique em Novo Modelo.
- Clique em Configurações e preencha Nome, Idioma (Português), Assunto e Pré-visualização. Os textos estão em Pronto para copiar.
- Monte os blocos: logo, cabeçalho, texto, botão para o carrinho e redes sociais.
- No texto, digite
@Produtoe escolha "Produto do carrinho" field value. Clique na etiqueta e preencha o Valor de Fallback comalguns produtos. - No bloco de botão, preencha URL do Link com a página do carrinho da sua loja.
- Clique em Salvar.

Captura de tela em breve
4. Crie a campanha com atraso
- Em Campanhas, clique em Nova Campanha.
- Em Nome da Campanha, digite Carrinho abandonado — e-mail e escolha o emoji 🛒.
- Em Tipo de Agendamento, escolha Disparo por API.
- Em Modo de Disparo, escolha Atraso. Em Atraso (Segundos), digite
3600(uma hora). - Em Canal, escolha Email e, em Modelo de E-mail, ligue o modelo do passo 3.
Campanhas por API não têm seção de segmentos: cada chamada da loja diz quem recebe.

Captura de tela em breve
5. Ligue a reentrada
Quem abandona um carrinho hoje pode abandonar outro no mês que vem. Com a Janela de Reentrada do Lead desligada (o padrão), cada contato recebe a campanha uma vez só, para sempre: o segundo carrinho da Marina não ganharia lembrete.
- Em Janela de Reentrada do Lead, ligue Permitir Reentrada do Lead.
- Em Período de Espera (Dias), digite
1.
Com 1 dia, cada pessoa recebe no máximo um lembrete a cada 24 horas, mesmo que abandone vários carrinhos no mesmo dia. A BIP confere a janela quando o atraso termina. Um lembrete barrado pela janela aparece como Rejeitado nas estatísticas e não conta como envio. Não deixe em 0: sem período de espera, a mesma pessoa pode receber vários lembretes no mesmo dia.

Captura de tela em breve
6. Teste e ative
- Clique em Salvar → Salvar Rascunho.
- Clique em Testar Campanha, digite o seu e-mail e clique em Enviar Teste. Se você ainda não é contato, crie-se antes em Contatos → Criar Contato.
- Confira o e-mail. O teste sai na hora, sem esperar o atraso, e não consome envios. Se o seu contato não tem o campo Produto do carrinho, aparece o fallback
alguns produtos. - Clique em Salvar → Salvar e Ativar e confirme em Ativar Disparo por API. A campanha passa ao status Ativo e começa a aceitar chamadas.

Captura de tela em breve
7. Ligue a loja à BIP
- Na campanha, abra Integração via API. Os comandos já vêm com o ID da campanha, que também está no fim do endereço da página.
- Sempre que o carrinho de um cliente identificado mudar (produto adicionado, removido, quantidade alterada), chame
/api/campaigns/triggercom oleadcomo objeto:name,emaile os campos do carrinho. A resposta traz"mode": "delay". - Quando o pedido for concluído, ou o carrinho esvaziado, chame
/api/campaigns/cancelcom o mesmo e-mail. A resposta traz"cancelled": truequando havia um lembrete esperando. - Contato novo precisa de
namecom pelo menos 2 caracteres e de e-mail ou telefone. Telefone sempre com+e código do país:+5541998765432.
Os comandos prontos estão em Pronto para copiar.

Captura de tela em breve
Pronto para copiar
Campanha
| Opção | Valor |
|---|---|
| Nome da Campanha | 🛒 Carrinho abandonado — e-mail |
| Tipo de Agendamento | Disparo por API |
| Modo de Disparo | Atraso |
| Atraso (Segundos) | 3600 |
| Janela de Reentrada do Lead | Permitir Reentrada do Lead ligado, Período de Espera (Dias) 1 |
| Canal | |
| Modelo de E-mail | Carrinho abandonado · Loja Horizonte |
Atrasos comuns em Atraso (Segundos):
| Espera | Segundos |
|---|---|
| 30 minutos | 1800 |
| 1 hora | 3600 |
| 2 horas | 7200 |
| 4 horas | 14400 |
| 24 horas | 86400 |
Campos
| Nome do Campo | Tipo de Campo | Exemplo de valor | Onde aparece |
|---|---|---|---|
| Produto do carrinho | String | Camisa de Linho Areia | Texto do e-mail e do WhatsApp |
| Código do carrinho | String | LH8F3K2 | Botão do WhatsApp |
Com mais de um produto, mande um resumo: Camisa de Linho Areia e mais 2 itens.
Onde aparece [@primeiro nome], digite @first e escolha lead.firstName(). Onde aparece [@Produto do carrinho], digite @Produto e escolha o campo. Preencha cada Valor de Fallback conforme a tabela do fim desta seção.
[@primeiro nome], seu carrinho está esperando
Guardamos tudo na Loja Horizonte. Finalize quando quiser.
| Ordem | Bloco | Ajuste sugerido |
|---|---|---|
| 1 | Adicionar Imagem | Logo da Loja Horizonte, Largura Máxima (px) 160, URL do Link da loja |
| 2 | Adicionar Cabeçalho | Saudação com o primeiro nome |
| 3 | Adicionar Texto | O produto que ficou no carrinho |
| 4 | Adicionar Botão | Uma ação só, com Largura de 50 |
| 5 | Adicionar Divisor | Largura Máxima (px) 120, cor clara |
| 6 | Adicionar Texto | Ajuda com tamanho, frete e troca |
| 7 | Adicionar Redes Sociais | Só as redes que a loja usa |
[@primeiro nome], você esqueceu algo aqui
Você deixou [@Produto do carrinho] no carrinho da Loja Horizonte. Guardamos tudo para você: é só voltar e finalizar a compra.Os produtos do carrinho não ficam reservados. Se gostou, garanta o seu antes que o estoque acabe.
Voltar ao carrinho
https://lojahorizonte.com.br/carrinho?origem=bip-carrinho
Ficou com dúvida sobre tamanho, frete ou troca? Veja as respostas em lojahorizonte.com.br/ajuda.
| Variável | Onde | Valor de Fallback |
|---|---|---|
lead.firstName() | Assunto | Oi |
lead.firstName() | Cabeçalho | Ei |
"Produto do carrinho" field value | Texto | alguns produtos |
A loja sempre manda o nome de quem cria um contato, então o fallback do nome raramente aparece.
Para a versão por WhatsApp, crie o template na aba Templates da tela WhatsApp, com Categoria Marketing e Idioma Portuguese (BR).
horizonte_carrinho_lembrete · MARKETING
- Botão 1, URL:
https://lojahorizonte.com.br/carrinho/{{1}}, com o exemploLH8F3K2. - Botão 2, Resposta rápida: quem toca entra em Taxa de resposta, e a conversa continua no app WhatsApp Business.
- Amostras de variáveis do corpo:
{{1}}Marina,{{2}}Camisa de Linho Areia.
| Variável na campanha | Campo do contato | Valor de exemplo |
|---|---|---|
| Corpo · {{1}} | first name | Marina |
| Corpo · {{2}} | "Produto do carrinho" field value | Camisa de Linho Areia |
| Botão 1 · {{1}} | "Código do carrinho" field value | LH8F3K2 |
Para criar o template por Importar do JSON:
[
{
"name": "horizonte_carrinho_lembrete",
"category": "MARKETING",
"language": "pt_BR",
"components": [
{ "type": "HEADER", "format": "TEXT", "text": "Seu carrinho está esperando" },
{ "type": "BODY", "text": "Oi, {{1}}! Você deixou {{2}} no carrinho da Loja Horizonte. Guardamos tudo para você finalizar quando quiser. Toque no botão para voltar direto ao seu carrinho.", "example": { "body_text": [["Marina", "Camisa de Linho Areia"]] } },
{ "type": "FOOTER", "text": "Loja Horizonte · lojahorizonte.com.br" },
{ "type": "BUTTONS", "buttons": [
{ "type": "URL", "text": "Ver meu carrinho", "url": "https://lojahorizonte.com.br/carrinho/{{1}}", "example": ["https://lojahorizonte.com.br/carrinho/LH8F3K2"] },
{ "type": "QUICK_REPLY", "text": "Tenho uma dúvida" }
] }
]
}
]API
Troque SUA_CHAVE_DE_API pela sua chave e ID_DA_CAMPANHA pelo ID do painel Integração via API.
curl -X POST https://api.bip.marketing/api/campaigns/trigger \
-H "Content-Type: application/json" \
-H "x-bip-api-key: SUA_CHAVE_DE_API" \
-d '{
"campaignId": "ID_DA_CAMPANHA",
"lead": {
"name": "Marina Alves",
"email": "marina.alves@exemplo.com",
"phone": "+5541998765432",
"fields": [
{ "key": "Produto do carrinho", "value": "Camisa de Linho Areia" },
{ "key": "Código do carrinho", "value": "LH8F3K2" }
]
}
}'curl -X POST https://api.bip.marketing/api/campaigns/cancel \
-H "Content-Type: application/json" \
-H "x-bip-api-key: SUA_CHAVE_DE_API" \
-d '{"campaignId": "ID_DA_CAMPANHA", "lead": "marina.alves@exemplo.com"}'{"campaignId": "ID_DA_CAMPANHA", "leadId": "ID_DO_CONTATO", "mode": "delay"}{"campaignId": "ID_DA_CAMPANHA", "cancelled": true, "leadId": "ID_DO_CONTATO"}"cancelled": false quer dizer que não havia lembrete esperando: o atraso já tinha terminado ou nada foi disparado. Não é erro.
// No servidor da Loja Horizonte const API_KEY = process.env.BIP_API_KEY ?? 'SUA_CHAVE_DE_API'; const CAMPANHA_CARRINHO = 'ID_DA_CAMPANHA';type Carrinho = { codigo: string; cliente: { nome: string; email: string; telefone?: string }; // telefone com + e código do país itens: { nome: string }[]; };
async function bip(path: string, body: unknown) { const res = await fetch(
https://api.bip.marketing${path}, { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-bip-api-key': API_KEY }, body: JSON.stringify(body) }); const texto = await res.text(); if (res.ok) return JSON.parse(texto); // Cancelamento de quem nunca entrou na BIP: não havia nada para cancelar if (path.endsWith('/cancel') && res.status === 404 && texto.includes('Lead not found')) { return { cancelled: false }; } throw new Error(BIP ${res.status}: ${texto}); }const resumo = (itens: { nome: string }[]) => itens.length > 1 ?
${itens[0].nome} e mais ${itens.length - 1} ${itens.length === 2 ? 'item' : 'itens'}: itens[0].nome;// Produto adicionado, removido ou quantidade alterada: agenda ou reinicia o lembrete export const carrinhoMudou = (c: Carrinho) => bip('/api/campaigns/trigger', { campaignId: CAMPANHA_CARRINHO, lead: { name: c.cliente.nome, email: c.cliente.email, ...(c.cliente.telefone ? { phone: c.cliente.telefone } : {}), fields: [ { key: 'Produto do carrinho', value: resumo(c.itens) }, { key: 'Código do carrinho', value: c.codigo } ] } }); // { campaignId, leadId, mode: 'delay' }
// Pedido concluído ou carrinho esvaziado: cancela o lembrete pendente export const carrinhoFechado = (email: string) => bip('/api/campaigns/cancel', { campaignId: CAMPANHA_CARRINHO, lead: email }); // { cancelled: true | false }
Como medir
Em Campanhas, abra Estatísticas da Campanha (pelo ícone de gráfico na lista ou no topo da campanha).
- Processado (N execuções): lembretes que a BIP processou depois do atraso. Os disparos cancelados não aparecem: eles nunca chegaram a ser processados.
- Entregue, Taxa de Abertura e Taxa de Cliques: quantos lembretes chegaram, foram abertos e levaram a um clique.
- Links mais clicados: o link do botão, com o parâmetro
origem=bip-carrinho, mostra quantos cliques voltaram ao carrinho. - Interações do Destinatário: filtre por Clicado para ver quem voltou ao carrinho. Filtre por Rejeitado para ver quem a janela segurou, com o motivo O lead está dentro da janela de reentrada.
- Na versão por WhatsApp: Entregue, Taxa de leitura e Taxa de resposta (inclui os toques em Tenho uma dúvida).
No seu sistema, duas leituras completam o quadro:
- A resposta do cancelamento em cada pedido.
"cancelled": truequer dizer que a pessoa comprou antes da hora do lembrete, e nada saiu. Num carrinho que a loja disparou,"cancelled": falsequer dizer que o atraso já tinha terminado: a compra veio depois da hora do lembrete. Cruze com Interações do Destinatário para ver se ela recebeu e clicou. - O parâmetro
origem=bip-carrinhono endereço das visitas, para ligar os pedidos ao lembrete nos relatórios da loja.
No BIP Lite, o card Uso mostra quanto do saldo do mês os lembretes já usaram.
Variações
E-mail ou WhatsApp
- Só WhatsApp (planos pagos): siga os mesmos passos, mas no passo 4 escolha WhatsApp em Canal, o template
horizonte_carrinho_lembretee o mapeamento de variáveis de Pronto para copiar. A loja precisa mandar ophonedo cliente, com+e código do país. - Os dois canais: cada campanha usa um canal só. Crie uma campanha de e-mail e outra de WhatsApp, com atrasos diferentes, como
3600no e-mail e86400no WhatsApp. A loja chama trigger e cancel nas duas, com os dois IDs. Cada lembrete que sai conta como um envio.
Contato que já está na BIP
Se o cliente já é contato e você não usa os campos do carrinho, mande lead como texto, com o e-mail ou o telefone. Nesse caso, a chave precisa só de Disparo de Campanhas.
Perguntas frequentes
Quem compra antes da hora recebe o lembrete?
Não. Quando o pedido fecha, a loja chama /api/campaigns/cancel e o lembrete pendente é descartado. Ele não sai e não conta como envio.
E se a pessoa voltar e mexer no carrinho?
Cada nova chamada para a mesma pessoa reinicia a contagem. Com 3600 segundos, o lembrete sai uma hora depois da última mudança, uma vez só. E ele mostra o produto mais recente, porque a BIP monta a mensagem na hora do envio.
Preciso montar um segmento?
Não. Campanhas de Disparo por API não usam segmentos: cada chamada da loja diz quem recebe. Se a pessoa ainda não é contato, a mesma chamada cria o contato.
Quanto isso consome do meu plano?
No BIP Lite, cada lembrete processado usa um envio do mês. Lembretes cancelados e lembretes barrados pela Janela de Reentrada do Lead não contam. O plano gratuito tem 1.000 envios por mês, por e-mail.
Veja também
- Boas-vindas em uma chamada: do cadastro ao primeiro e-mail
- API da BIP: chaves, contatos, eventos e disparos
- Campanhas: única, recorrente e por API
- Editor de e-mail: blocos, variáveis e preview
- Templates de WhatsApp: criar, sincronizar e usar
- Planos e limites: envios, capacidade e preços
- Recuperação de carrinho abandonado no site da BIP
- BIP para e-commerce