跳至主要内容

Customer conversations

Three apps, one queue, one owner per conversation

WhatsApp, Instagram and Messenger each have their own app, their own notification and their own person who happens to be watching. Merging them into one queue is the easy half. The half that matters is that each channel runs a different clock — and a conversation nobody is named against is a conversation everybody assumes somebody else has.

Triggers
Two
Runs
On every message
Stack
5 tools
Durable execution
Not required

The flow

Two webhook shapes in, one row shape out. The branch only asks one thing: does this conversation have a name against it yet.

Platform

A WhatsApp message

WhatsApp Cloud API

Orchestration

Normalise the payload

n8n · Make

Data

Write the queue row

Sheets · Airtable

Platform

An Instagram or Messenger message

Instagram · Messenger API

Orchestration

Look up the owner

n8n · Make

Orchestration

Nobody owns it yet?

n8n IF

Notify

Name an owner and tell them

Slack · WhatsApp

Orchestration

Leave the owner as is

Step by step

  1. 01

    A WhatsApp message

    WhatsApp Cloud API

    The Cloud API webhook, carrying the sender's WhatsApp id, their profile name and the message body. It also starts that channel's own 24-hour clock.

  2. 02

    Normalise the payload

    n8n · Make

    Map every channel onto one shape: who, which channel, what they said, when the reply is due by that channel's rule. The deadline is stored per channel because the three do not share one.

  3. 03

    Write the queue row

    Sheets · Airtable

    One row per conversation, not per message. Channel, customer, owner, and the deadline. This row is the queue — there is no second dashboard to keep in step with it.

  4. 04

    An Instagram or Messenger message

    Instagram · Messenger API

    The second webhook shape. Both arrive through Meta's platform but carry different windows and different rules about who may send first.

  5. 05

    Look up the owner

    n8n · Make

    Read the queue row for this customer on this channel and see whether anyone is already named against it.

  6. 06

    Nobody owns it yet?

    n8n IF

    One question, deliberately. Reassigning a live conversation because a new message arrived is how two people end up answering the same customer differently.

  7. 07

    Name an owner and tell them

    Slack · WhatsApp

    Assign from the roster and send that person the conversation with its channel deadline attached. An alert without a name on it is a notification, not an assignment.

What the platform will not allow

One queue does not mean one rule. Each channel keeps its own window, and the shared row has to store the difference rather than average it.

  • On WhatsApp, "when a WhatsApp user messages you or calls you, a 24-hour timer called a customer service window starts", it resets if they write again, and "when the window closes, you can only send pre-approved template messages".

    WhatsApp Cloud API — Send messages
  • On Messenger, "businesses have up to 24 hours to respond to a user"; outside that, message tags cover specific approved use cases, and the Human Agent tag "allows businesses to manually respond to user messages within a 7-day period". Messenger's escape hatch is far longer than WhatsApp's, and only for a human reply.

    Messenger Platform — Policy overview
  • On Instagram, "your app has 24 hours to respond to any message sent from an Instagram user to your app user", you cannot send until the user contacts you first, and "group messaging is not supported. An Instagram professional account can only converse with one customer per conversation."

    Instagram Platform — Messaging API
  • Messenger treats conversation ownership as a platform concept: the pass_thread_control callback "will occur when thread ownership for a user has been passed to your application".

    Messenger Platform — messaging_handovers webhook
  • Instagram has its own Conversation Routing controls. Meta documents the current thread owner, passing thread control, and the migration of Handover Protocol integrations into Conversation Routing, so Instagram ownership can be platform-backed too.

    Instagram Platform — Conversation Routing

When this is not worth building

Three cases where the upkeep costs more than the missed messages.

  • One person answers all three apps. A queue for one person is a written copy of what they already know, and it will drift out of date faster than they will forget anything.

  • The channels serve different businesses — retail on Instagram, wholesale on WhatsApp, warranty on Messenger. Merging them puts unlike work in one line, and each kind waits behind the other for no reason.

  • You will not keep a roster. One owner per conversation is a staffing decision; the workflow only records it. Without the roster, the assignment step picks a name at random and calls it accountability.

Related reading

联络我们

这些流程,你真正应该做哪一条?

我们每星期都在为香港的运营团队跑这些流程。告诉我们哪个环节正在耗你的时间,我们会告诉你自动化划不划得来。

开始对谈