Brevo Conversations
Connect the chat on your site so its conversations appear in StorePilot beside your leads. It takes one URL, pasted once, and no Brevo API key.
Connect it
- In StorePilot, open Settings → Integrations → Chat provider and press Connect Brevo Conversations. A webhook URL appears. It is shown once — copy it now.
- In Brevo, go to Conversations → Settings → Integrations → Webhooks and add a webhook pointing at that URL.
- Come back to the panel. Until the first webhook arrives it says waiting for the first webhook; once one has, it says when the last message came in. That line is how you know the URL landed in the right field — not the fact that you pressed a button.
The URL is the credential
Brevo does not sign its webhooks, so the key in the path is the whole credential. StorePilot stores only a SHA-256 of it, which is why the panel can never show it to you again.
- If it leaks, press Rotate key. The old URL stops working immediately and Brevo gets a 404 until you paste the new one. Conversations already received are kept.
- Disconnect stops new chats arriving and keeps everything already received — it is your shop's data, not the integration's.
What Brevo sends
Three events, all of which StorePilot understands:
| Event | When | What it carries |
|---|---|---|
conversationStarted | A visitor or an agent begins a chat | The first message, the visitor, the page it began on |
conversationFragment | After each message | Every message so far |
conversationTranscript | The conversation ends | The whole transcript; the chat is marked closed |
Because the second and third repeat messages already delivered, StorePilot stores each message once — keyed on the provider's own message id. Re-deliveries and Brevo's retries add nothing.
One conversation, several Brevo ids
Brevo ends a conversation when the visitor leaves your website, and gives their next message a brand-new conversation id. A shopper who asks a question on the product page, goes to the basket and asks another therefore produces two conversations in Brevo, minutes apart, each holding part of what they said.
StorePilot keeps them together. A new id from the same visitor within 24 hours of their last message joins the conversation already open for them, and the transcript marks where they left and came back. One chat, in order, however many pieces it arrived in — which also means the bell rings once, when the conversation starts, and not every time the visitor changes page.
Longer than that and it is a new conversation: a customer returning next week is asking something else, and their old thread should not go on collecting messages for ever.
The one exception is a reply from your own team. When an agent answers a visitor days later — a question asked on Saturday, answered on Monday — Brevo hands that answer a new conversation id too, because the visitor had left the site in between. An answer belongs with its question, so a conversation that begins with an agent's message joins that visitor's most recent conversation however long the pause was. The widget's automatic greeting is not a reply and does not do this: it is printed on every visit, and a visit is what the 24-hour rule tells apart.
About the responses StorePilot gives Brevo
Brevo discards a webhook on most error responses and retries only on 429, so the receiver is
built the other way round from most:
| Situation | Response |
|---|---|
| A valid key, a readable body | 200 |
| A valid key, a body we cannot read (a field Brevo added, say) | 200, and the delivery is skipped rather than thrown away by an error |
| An unknown or rotated-away key | 404 |
| A problem on our side | 429 — so Brevo retries and the transcript is not lost |
What StorePilot tells the widget
One thing, and it never passes through StorePilot's servers. Where the Brevo chat widget is on
your page, the StorePilot collector — running in the visitor's browser — hands the widget two
values through Brevo's own updateIntegrationData API:
| Key | Value |
|---|---|
STOREPILOT_VISITOR | The pseudonymous browser identifier StorePilot already keeps for that visitor |
STOREPILOT_SESSION | The identifier of the current visit |
Brevo shows them in the conversation's right pane and sends them back on every webhook, which is what lets a chat from somebody who never typed an email land on their visitor page, attach to their lead, and point at the recording of the visit. It happens only where tracking is allowed on your site — a visitor who refused consent is not announced — and nothing else is handed over: no name, no address, no page.
What StorePilot never does
It never calls Brevo. There is no API key to provide, no message is ever sent from here, and no data travels from StorePilot's servers to your chat provider. See Conversations for what happens to a transcript once it arrives, and the Privacy Policy for what is masked before it is stored.