跳至主要内容

Customer conversations

Route a message to someone who reads that language

A Hong Kong shop selling into the region receives Chinese, English and Thai in the same inbox, and the person who opens it reads two of the three. The routing itself is a classification and a lookup. What decides whether it is worth building is whether anyone is on shift for the third language — and once you leave the service window, every language you support is a separate template and a separate approval.

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

The flow

The top track works out what language arrived. The bottom track knows who is working, and the branch asks whether those two facts meet.

Platform

A message arrives

WhatsApp Cloud API

Orchestration

Classify the language

OpenAI · Anthropic

Data

Record the classification

Sheets · Airtable

Orchestration

Hourly shift refresh

n8n 排程

Orchestration

Match language to a person

n8n · Make

Orchestration

Anyone on shift reads it?

n8n IF

Notify

Hand it to that person

Slack · WhatsApp

Notify

Send to the default queue, flagged

Slack · WhatsApp

Step by step

  1. 01

    A message arrives

    WhatsApp Cloud API

    The webhook carries the message body and the sender's profile name. Neither tells you the language reliably — a Thai customer may open in English.

  2. 02

    Classify the language

    OpenAI · Anthropic

    Classification only: which language, and how sure. The model does not translate, does not reply, and does not decide who gets it — a mistranslated reply sent automatically is worse than a slow correct one.

  3. 03

    Record the classification

    Sheets · Airtable

    Conversation, detected language, confidence. After a month this table tells you which language you are actually staffed for, which is usually not the one you assumed.

  4. 04

    Hourly shift refresh

    n8n 排程

    Read who is working and which languages they read. Routing to a name is not routing to a person unless that person is on shift.

  5. 05

    Match language to a person

    n8n · Make

    Intersect the detected language with the current shift. Where two people qualify, prefer whoever already owns a conversation with this customer.

  6. 06

    Anyone on shift reads it?

    n8n IF

    The question that actually matters. Low confidence counts as no — an uncertain classification sent to the wrong desk arrives as silence.

  7. 07

    Hand it to that person

    Slack · WhatsApp

    Pass the original text untranslated. The person receiving it reads the language; a machine translation in front of the original only adds something to distrust.

  8. 08

    Send to the default queue, flagged

    Slack · WhatsApp

    Mark it as unrouted rather than hiding it. The count of these is the staffing case — it is the only honest measure of the gap.

What the platform will not allow

Inside the service window language costs you nothing. Outside it, and on Instagram, each language has a separate price.

  • "While the window is open, you can send any of the service message types listed below to the user", with no advance approval. A person replying in Thai inside the 24-hour window needs nothing prepared; the same reply the next day does.

    WhatsApp Cloud API — Send messages
  • A template is tied to one language — you assign a language code at creation, and "if you create multiple templates with the same name but with different languages, each template counts against your template limit". Supporting four languages outside the window means four separate approvals for what you think of as one message.

    WhatsApp Business Management API — Message templates
  • Instagram caps a text message at "UTF-8, max 1000 bytes" — bytes, not characters. Chinese and Thai characters take three bytes each in UTF-8, so the same reply runs out of room roughly three times sooner than its English version, and a reply drafted to the English limit will be rejected in Chinese.

    Instagram Platform — Messaging API

When this is not worth building

Three cases where the upkeep costs more than the mis-sent messages.

  • Everyone on the team reads every language you receive. Routing then adds a hop and a failure mode to a queue that was already correct.

  • You hold no shift information. Routing to a name without knowing whether that person is working sends the message to an empty desk, and it looks routed, which is worse than looking unhandled.

  • The second language is a trickle rather than a stream. A language that appears twice a week is handled by forwarding the message, and a classifier that is wrong once a month on a base that small is not measurably better.

Related reading

联络我们

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

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

开始对谈