2026-05-19

Telegram chatroom reply macros vs Replyer auto-reply, 5 differences operators actually hit

Telegram chatroom reply macros vs Replyer auto-reply, 5 differences operators actually hit

"I ran a chatroom reply macro for a few days and members caught the pattern almost immediately. How is Replyer different?"

This comes up often in operator channels. Both tools [automate replies] so they look like the same category, but in day-to-day ops they sit in different ones. This post walks through the limits of macro-style auto-reply and how Replyer behaves differently in the same place, across five axes.

5-axis comparison at a glance

A radar of macro-style auto-reply vs Replyer on five operator axes. Input variety, output variation, review depth, locality / cost, sending naturalness. Scores are simulated from an operator-experience POV, not from quantitative measurement.

1. What goes into the input

Macros have a simple shape. You register a keyword (or regex) paired with a fixed reply, and when a new message contains the keyword, the macro fires that phrase.

# Macro-style rules (example)
rules:
  - match: "price|how much"
    reply: "Please check the announcement channel for pricing."
  - match: "refund"
    reply: "Please open a 1:1 ticket for refunds."

The catch is that chatroom members ask the same thing in many different ways. "how much is this", "what is the cost", "yo what's the price" can all mean the same thing, and a macro keyword matrix needs 30+ lines to even try to catch them all.

Replyer's persona does not match keywords. It feeds recent chatroom context plus the operator's tone instructions into the LLM on every call. The system prompt from agents/templates/*.yaml, recent history from storage.recent_messages, and the operator's own style examples all flow into a single generation step.

2. Is the reply text the same every time

Macros, by definition, repeat the same phrase. In a chatroom of 50, the first five members who get the same line spot the [copy-paste pattern] immediately. Even with a natural-sounding operator tone, the second firing already leaks the automation.

Replyer relies on the LLM's natural variation plus per-account tone slots (the R29 account_variant work). Same intent, different phrasing each time. The same account stays in one slot for consistency, and different accounts get different slots so multi-account ops do not converge on identical text. This is the first line of defense for not-looking-like-a-bot.

For how the slots actually map, see why two accounts auto-replying to the same chatroom expose themselves.

Sending cadence - the moment members spot the pattern

How the same chatroom + question flow looks under macro vs Replyer, drawn on a timeline. Blue dots = operator / bot send, grey dots = member messages. Macros expose [exact 0.5s offset, identical length, same time of day] within a minute.

Macro - exact 0.5s offset, identical length Members notice the pattern within ~1 min +0.5s +0.5s +0.5s +0.5s +0.5s Member messages Macro fire (exact cadence) Replyer - variable typing + split + quiet hours Members don't notice / much later ·skip· +3.8s split×2 +5.2s +2.1s Member messages Replyer fire (variable / split / skip)

3. Where operator review sits

Macros are reviewed once, at registration time. After that, every keyword match fires unconditionally. You usually only find out about a bad reply [after it went out].

Review and decision

Replyer puts a [manual queue mode] in that same slot. When a new message arrives, the LLM generates one candidate reply, and the operator decides on the Queue page whether to send, skip, or edit. When time is tight, switch to auto mode. For sensitive chatrooms, stay in manual mode. The operator owns the timing directly.

Even in auto mode, every fired reply lands in the Logs page, and Diagnostics shows keyword, tone, and skip-reason breakdowns. Post-fire review is still possible.

4. External dependencies and cost

Most macro tools have some external server or API in the loop. The variant that calls an external LLM (OpenAI / Claude) to dress up the canned reply means every reply costs API tokens, and chatroom messages flow through someone else's servers.

Replyer is local-LLM-only. Gemma 3 / Gemma 4 GGUF runs inside the operator's PC, with zero external API calls. Chatroom messages never leave the local machine. Use cfg.model_repo / cfg.model_filename to pick the model directly, and after the first ~5GB download, replies keep going even with no internet.

Cost-wise, 100 replies or 10,000 replies cost the same. Chatroom traffic does not push operating cost up linearly.

5. Human-shaped sending

Macros fire within zero to one second of the keyword match. When chatroom members notice [someone just finished talking and the answer landed in one second], suspicion of automation is essentially certain.

Replyer's sender.send_humanlike mirrors how operators actually reply. human_send.typing_chars_per_sec produces variable typing time, long replies split into two or three messages, and 0.4-1.0 second pauses (hesitation) sit between sentences. At late-night hours the response probability itself drops, avoiding the [24-hour always-responding chatroom] pattern.

Which scenario suits which

Macros are a better fit when:

  • The chatroom has five or fewer fixed response patterns (e.g., pricing, refunds, business hours only)
  • The chatroom is explicitly labeled as auto-responded, so members already know
  • Message volume is so low that running a local LLM is unjustified

Replyer is a better fit when:

  • The operator wants replies in their own tone for a community chatroom
  • Member questions show many phrasings that no keyword matrix can fully catch
  • A single operator runs multiple accounts on the same chatroom (account_variant slot routing matters)
  • The operator does not want chatroom messages flowing through external company servers
  • The flow regularly switches between auto and manual modes

FAQ

Q. Can macros and Replyer run side by side?

Yes. A common operator setup is: macros handle [fixed announcements (pricing, refunds, business hours)], and Replyer handles free-form conversation and community replies. Configure keyword-based skip rules in Replyer (hard-banned phrases, specific keyword skip) so the two tools do not race on the same message.

Q. Can Replyer not do keyword-driven replies at all?

A strict keyword → fixed phrase 1:1 mapping does not fit Replyer's flow, but you can describe [if a specific keyword shows up, reply in X shape] inside the persona system prompt in natural language. For harder keyword routing, putting a macro tool in front and handing the rest to Replyer is cleaner.

Q. With a local LLM, what happens if the operator's PC is off?

Replies stop while the PC is off. Operators who need 24-hour auto-reply often keep a dedicated mini-PC, an always-on laptop, or a Mac mini for this. Removing external server dependency comes with running your own little box.

Conclusion

Macro-style auto-reply and Replyer share the [automate replies] starting point and diverge on every other axis: input, output, review, dependencies, and sending. If chatroom messages come in many shapes and operator tone consistency matters, Replyer carries less daily operating cost. If the patterns are very narrow and disclosure is upfront, a macro is lighter.

For a decision flow when picking automation tools, see automation tool decision checklist. For deeper persona drafting, see agent system prompt writing.

To try it on your chatroom, grab the build for your OS from the Replyer download page and follow the usage manual starting from the Wizard step.