AiOneChat
HubSpot CRM

Every WhatsApp chat, on one contact.

Conversations land on your HubSpot timeline as notes, against the contact that number belongs to. Not a second contact, not a merge job later - the same one, every time.

  • Keyed to a unique property
  • Notes on the timeline
  • One private-app token
The duplicate problem

Two messages, one minute apart, still one contact.

This is the failure every WhatsApp-to-HubSpot connector has to survive, and the one worth checking before you trust any of them with your portal.

Look it up, then write

HubSpot’s search index lags its own writes. Two messages close together both search, both find nothing, and both create.

Anjali PatelAnjali Patel
duplicate
Write against a unique id

The phone number is stored on a unique property, and the write goes through HubSpot’s own upsert keyed on it. HubSpot decides create-or-update, so there is no window to lose.

APAnjali Patelaionechat_wa_id · +919876543210
one contact
The ones you already had

A number you already have in HubSpot is adopted, not duplicated.

The first time a number comes through, we look for a contact that already carries it on phone or mobilephone and stamp our id onto that record. One lookup per number, ever - after that the upsert handles it. There is also a backfill button for the contacts that existed before you connected.

Your existing contact+Our id, stamped on
What lands in HubSpot

Three things, each with its own switch.

Nothing is ever deleted from HubSpot, and a name already set there is never overwritten. Turn any of these off and the rest keep working.

The contact

First name, last name and the number, on a contact keyed to that number. A name already set in HubSpot is never overwritten.

sync_contacts

A note per message

Every inbound WhatsApp message lands on that contact's timeline as a note, with the text and the time it arrived.

log_messages

Your replies too

The messages your team sends are written the same way, so the timeline reads as the conversation rather than half of it.

log_outbound
Setting it up

One token, and you are done.

  1. 1

    Make a Service Key

    In HubSpot: Settings → Integrations → Private Apps. Tick the three scopes and copy the token it gives you.

    contacts.readcontacts.writenotes.write
  2. 2

    Paste it in

    Open the HubSpot card in your dashboard, paste the token, and connect. We check it against your portal before saving.

    Connectedpat-na1-••••
  3. 3

    The property is made for you

    On connect we create the unique property the upsert is keyed on. Nothing to add by hand in HubSpot.

    aionechat_wa_idunique
Afterwards

A rotated token is loud, not silent.

The usual way a CRM sync dies is that someone rotates the key and nobody notices for a fortnight. Your HubSpot card keeps a count, and a row per write with the reason attached - so a 401 shows up against the exact contact it failed on.

  • contactthe contact was created or updated
  • messagea note was written on the timeline
  • backfillthe one-off push of contacts you already had

Numbers in the log are masked to their last four digits, and rows expire after 30 days on their own.

Usagelive
0123
Synced out
Written into HubSpot
01
Failed
With the reason kept
EventContact
outmessagefailedHubSpot answered 401 - the token was rotated•••• 4455
outmessagesynced•••• 3344
outcontactsynced•••• 2233
outmessagesynced•••• 3210

A rotated token shows up here as a 401 against the exact contact it failed on, rather than as silence.

Ready when you are

Put the conversation where the deal is.

Create a private-app token with three scopes, paste it in, and the next WhatsApp message lands on the contact.