DEV Community

Cover image for Stop Building Chatbots. Start Building Message-Driven Systems
Seryl Lns
Seryl Lns

Posted on • Originally published at dev.to

Stop Building Chatbots. Start Building Message-Driven Systems

Most teams building on WhatsApp are building chatbots. Multi-turn conversations, intent trees, fallback loops — the whole nine yards.

But here's the thing: most of them don't actually need a chatbot.

They need a system that turns incoming messages into backend actions.


The Chatbot Trap

A hotel guest sends:

"Can I get extra towels in room 312?"

The typical chatbot approach:

Bot: Hi! How can I help you?
Guest: I need towels
Bot: Which room?
Guest: 312
Bot: How many towels?
Guest: ...just some towels
Bot: I didn't understand. How many towels would you like?
Enter fullscreen mode Exit fullscreen mode

3 round-trips to extract 2 fields. The guest is annoyed. The developer is maintaining a conversation state machine. Everyone loses.

Messages Are Not Conversations

Here's the insight: most inbound messages already contain everything you need. You don't need to ask follow-up questions — you need to extract what's already there.

The shift is simple:

Message
  ↓
Analysis (single LLM call)
  ↓
Structured payload
  ↓
Backend action
Enter fullscreen mode Exit fullscreen mode

One message in, one structured payload out. No conversation state. No dialog trees. No "I didn't understand."

See it in action →

What This Looks Like in Practice

The same message — "Can I get extra towels in room 312?" — processed as a message-driven system:

{
  "intent": "room_service_request",
  "confidence": 0.97,
  "actions": [
    {
      "type": "housekeeping.task.create",
      "payload": {
        "room": "312",
        "item": "extra towels"
      }
    }
  ],
  "suggested_reply": "Of course! Extra towels are on the way to room 312."
}
Enter fullscreen mode Exit fullscreen mode

Your backend receives this via webhook. You create the task in your PMS. You send the reply. Done.

One message. One payload. One action.

The Architecture

Here's the full flow — from WhatsApp message to backend action:

WhatsApp (inbound message)
  ↓
Pre-filter (spam, noise — no LLM cost)
  ↓
Router (classify + route to the right agent)
  ↓
Agent (LLM call → structured output)
  ↓
Webhook (HMAC-signed payload to your app)
  ↓
Your backend (create task, update booking, send reply)
Enter fullscreen mode Exit fullscreen mode

Each step is deterministic. The LLM is used once, for extraction — not for conversation. The output is a structured JSON payload your backend can trust.

Code, Not Config

Here's what triggering an agent looks like with the Ruby SDK (same way with TypeScript or Python SDK):

require "whatsrb"

client = WhatsRB::Client.new(api_key: "wrb_live_xxx")

run = client.agents.run(
  agent_id: "agt_abc123",
  input: "Cancel booking #BK-4521"
)

puts run.output
# => { "intent" => "cancel_booking", "actions" => [...] }
Enter fullscreen mode Exit fullscreen mode

Or with a simple curl:

curl -X POST "https://api.whatsrb.com/v1/agents/agt_abc123/runs" \
  -H "Authorization: Bearer wrb_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"input":"Cancel booking #BK-4521"}'
Enter fullscreen mode Exit fullscreen mode

You get back a structured payload. Every time. No conversation state to manage.

When Chatbots Make Sense (And When They Don't)

Use case Chatbot? Message-driven?
Customer FAQ with branching logic Yes No
"Book a table for 4 at 8pm" No Yes
"Cancel my order #12345" No Yes
"AC broken in room 204" No Yes
Guided product recommendation Yes No
"Where's my shipment TRK-789?" No Yes

If the message already contains the intent and the data — you don't need a chatbot. You need a message-to-action pipeline.

Real Results

With this approach:

  • No conversation state to maintain
  • Single LLM call per message (~1-2s latency)
  • Deterministic outputs your backend can trust
  • 90%+ accuracy on intent + field extraction out of the box

This Is What We're Building

WhatsRB Cloud is a platform that turns WhatsApp messages into structured, actionable webhooks. No chatbot framework. No dialog trees. Just messages in, actions out.

We're opening the beta on March 31, 2026 to a limited group of early adopters.

Get early access →

Check out the API docs to see how it works under the hood.

Follow me on X for updates
GitHub


Built with Ruby, Rails, and a healthy distrust of chatbots.

Top comments (1)

Collapse
 
c_nguynnh_85e04737d profile image
Info Comment hidden by post author - thread only accessible via permalink
Đức Nguyễn ĐÌnh

Quick personal review of AhaChat after trying it
I recently tried AhaChat to set up a chatbot for a small Facebook page I manage, so I thought I’d share my experience.
I don’t have any coding background, so ease of use was important for me. The drag-and-drop interface was pretty straightforward, and creating simple automated reply flows wasn’t too complicated. I mainly used it to handle repetitive questions like pricing, shipping fees, and business hours, which saved me a decent amount of time.
I also tested a basic flow to collect customer info (name + phone number). It worked fine, and everything is set up with simple “if–then” logic rather than actual coding.
It’s not an advanced AI that understands everything automatically — it’s more of a rule-based chatbot where you design the conversation flow yourself. But for basic automation and reducing manual replies, it does the job.
Overall thoughts:
Good for small businesses or beginners
Easy to set up
No technical skills required
I’m not affiliated with them — just sharing in case someone is looking into chatbot tools for simple automation.
Curious if anyone else here has tried it or similar platforms — what was your experience?

Some comments have been hidden by the post's author - find out more