Skip to main content
The gateway now ships in the praisonai-bot package. praisonai serve gateway still works exactly as documented here; for a standalone install see praisonai-bot Migration.
Route bindings let one gateway send the right message to the right agent — by who sent it, what role they have, which channel it landed in, or which bot account received it. The user messages a channel; route bindings map that channel to the correct agent or workflow.

Quick Start

1

Send everyone to one agent (baseline)

Start with a single default route — no bindings needed.
2

Send one VIP user to a dedicated agent

Add a bindings: entry with peer: set to the user’s Telegram numeric id. The VIP agent handles that user; everyone else still goes to general.
3

Mix peer, role, channel, and chat-type

Stack multiple bindings — the most specific rule wins automatically.
A user with id 12345678 always gets vip. A support-role member who DMs the bot gets support (role beats chat type). The ops channel routes to the ops agent. All other DMs go to assistant. Everything else falls back to general.
4

Restrict tools by trust tier

Add trust: to any binding to scope the toolset the model sees — strangers get a safe subset, your operator keeps full power.
See Gateway Tool Policy for the full security reference.
5

Isolate tenants with a per-route profile

Add profile: to any binding to enter a per-route isolation scope — the same support agent serves two customers with completely separate memory and secrets.
The wrapper reads RouteMatch.profile and enters that scope for the turn — keying its memory namespace, secret scope, and home off the name. An unmatched route carries profile=None and stays unscoped, so misrouted traffic never leaks into another tenant.

How It Works

The gateway resolves the target agent in four deterministic steps:

Routes vs Bindings


Configuration Options

Each entry in the bindings: list is a RouteBinding: All non-None conditions in a binding must match the inbound message for that binding to apply. A binding with no conditions always matches. Specificity weights — when two bindings both match, the one with the higher total specificity wins: Ties on (priority, specificity) are broken by declaration order — the first matching binding in your list wins.

Fail-Fast Validation

A typo in a routes: slot or a bindings.agent value is caught the moment the config is loaded — the gateway refuses to start with an error naming the channel, the bad target, and the closest valid agent id. A single mistyped target used to slip through as a WARNING and silently serve the wrong agent for the whole deployment. Now it stops the gateway before it starts.
Starting this config fails immediately with the closest-agent hint:
When no agent id is close enough, the hint is dropped but the valid list stays:
A bad bindings.agent fails the same way:
The check covers the default slot, any custom slot (dm, group, …), routing: overrides, and every bindings.agent. A blank target (dm: "") is rejected too — only omitted slots are skipped.
Validation runs only when agents: is declared (multi-agent configs). Single-bot configs — a top-level platform + token with no agents: map — are unaffected and behave exactly as before.
Run praisonai gateway doctor --config gateway.yaml to surface the same error before you start — catch the typo in CI or a pre-deploy check. See Gateway CLI → doctor.

Common Patterns

Multiplex tenants with a per-route profile
An unmatched route resolves to profile=None so the wrapper stays unscoped rather than falling back into another tenant’s namespace. VIP customer gets a dedicated agent
Support-role members (Discord) get the support agent; everyone else gets general
Force an override regardless of specificity using priority
The incident_responder binding has priority: 100 so it wins over the peer match for user 12345678, even though peer has higher specificity. Use this for incident-mode overrides. Lock down stranger DMs while keeping operator at full power
Strangers who DM the bot never see shell, file-mutation, delegation, or scheduling tools. Your operator (peer: "operator-123") retains the full toolset. See Gateway Tool Policy for the complete security reference.

Best Practices

Bindings are evaluated first, but routes.default is the safety net when nothing matches — always include it. In a multi-agent config (with an agents: map), a typo in the default target no longer falls through silently: it fails at load with a clear Fail-Fast Validation error naming the closest valid agent.
Let the resolver pick by specificity — peer beats role beats channel_id beats account beats chat_type. Reach for priority only when you genuinely need to override, such as an incident-mode binding that must win regardless of user identity.
Telegram numeric ids and Discord channel ids are stable. Display names and usernames change. Use the numeric id from the platform — never a username or handle.
If your list grows past ~10 entries, consider grouping users by role at the platform level and binding on role instead of individual peer ids. A long list of peer bindings is hard to audit and easy to break.
The same agent can serve many customers if each route carries its own profile. The wrapper reads RouteMatch.profile and enters that memory namespace / secret scope / home for the turn. Leaving profile off means the route is unscoped; a fallback match never inherits another tenant’s profile, so misrouted traffic can’t leak memory or credentials across customers.

Bot Message Routing

The simpler chat-type routing surface — route by dm, group, or channel.

Multi-Channel Bots

Run one bot per role on the same platform using multiple channel entries.

Gateway Tool Policy

Full reference for trust-tiered toolset scoping — keep stranger DMs from running shell on your server.

Approval

Second line of defence — require human confirmation before risky tools run.

Gateway Tenant Profiles

Isolate tenants per route with the profile: field — separate memory namespace and secret scope.

Gateway CLI

praisonai gateway doctor surfaces route/binding typos before you start.

Gateway Readiness

Pre-flight checklist — route/binding targets resolve to declared agents.