SynapseOrch 2.0 is a release candidate; the stable release is 1.9.3. How to try 2.0

Messaging

SynapseOrch can connect to messaging platforms so agents can receive messages and send responses directly in your team's chat tools. Set up a channel once and users can chat with your agents without opening the SynapseOrch UI.

The screens, step by step: Schedules and channels, in the Guides. For phone calls, see Phone.

Supported platforms

PlatformReceive modesAuth
TelegramPolling (default) or webhookBot token
DiscordPolling (default) or webhookBot token + App ID
SlackPolling (default) or webhookBot token + app token, or signing secret
Microsoft TeamsWebhook onlyAzure app credentials
WhatsAppWebhook onlyAccess token + app secret + verify token (Meta's Cloud API)

Receive modes

Three platforms can deliver messages two ways, and the choice matters more than it looks.

Polling is the default and needs no public URL — the right mode for a laptop, a LAN install, or anything behind NAT. The adapter holds a connection out to the platform: Telegram long-polls, Discord holds the gateway websocket, Slack holds a Socket Mode websocket.

Webhook holds nothing open. The platform posts to your install, so it needs a publicly reachable HTTPS URL: the Webhook address on the Channels screen (messaging_webhook_base_url) — the public address of the Synapse app, not its backend port; a tunnel URL works for local testing. A Telegram, Discord or Slack channel then shows its Delivery URL, <address>/api/messaging/<platform>/webhook/<channel id>, to paste into the platform. Every delivery is verified before it is trusted — a secret-token header for Telegram, an Ed25519 signature for Discord (its Public Key), the signing secret for Slack.

Discord webhook mode gives up ambient messages

Discord only pushes interactions over HTTP, so a webhook-mode bot answers its slash command and nothing else — no DMs, no @-mentions. If you want the bot to respond to ordinary conversation, use polling.

A Telegram bot can only be in one mode at a time

Telegram refuses getUpdates while a webhook is set. A bot token shared between two installs will fight over this, and the symptom is messages arriving in the wrong place or not at all. One token, one install.

Sending is identical in both modes — plain REST either way.

Enabling messaging

Set messaging_enabled: true in settings (this is the default). Without it, the messaging adapters won't start.

Configuring a channel

Self-hosted, open Channels and press New channel. On Cloud, Connect a channel offers Slack, Telegram and Discord: Slack and Discord go straight to the platform's own authorize page, and Telegram asks for its bot token.

Fields

FieldDescription
Platformtelegram, discord, slack, teams, whatsapp
Channel nameA name for the channel
CredentialsPlatform-specific tokens and secrets (see below)

Start and Stop, on the channel's row in the list, start and stop its adapter.

A saved secret is never shown again: its field reads Saved — leave blank to keep. A channel that cannot start — a bad token, say — is saved anyway and says so (⚠️ Saved, but it did not start: …); its status reads Error and the reason stays under Last error.

You can also ask Synapse AI to connect a channel. It answers with a card, and pressing it does what the Channels screen does; the model never sees a token. Self-hosted, the card asks for the platform's fields, and for Teams and WhatsApp it then shows the address to paste into the platform. On Cloud, as with Connect a channel, it connects Telegram by its bot token and Slack and Discord through their own sign-in.

A channel is standalone — it is a connection, not an agent's property. You then assign one or more agents to it, and mark one as the default: the agent that answers a plain message.

The same agent can serve several channels, and a channel can front several agents.


Telegram

  1. Create a bot via @BotFather → /newbot
  2. Copy the bot token
  3. In SynapseOrch, add a Telegram channel with the bot token
  4. Enable the channel → the bot comes online
  5. Send a message to your bot — the assigned agent responds

Credentials:

FieldDescription
bot_tokenToken from BotFather (format: 123456789:ABCdef...)

Discord

  1. Go to discord.com/developers → New Application
  2. Create a bot, enable Message Content Intent
  3. Invite the bot to your server with bot + applications.commands scopes
  4. Copy the bot token and Application ID

Credentials:

FieldDescription
bot_tokenBot token from Discord Developer Portal
channel_idOptional — restrict to a specific channel
application_idWebhook mode — Developer Portal → General Information. Registers the /ask command
public_keyWebhook mode — Developer Portal → General Information. Verifies each interaction Discord sends

Slack

  1. Create a Slack App at api.slack.com/apps
  2. Enable Event Subscriptions and subscribe to message.channels, app_mention
  3. Add OAuth scopes: channels:read, chat:write, app_mentions:read
  4. Install the app to your workspace

Credentials:

FieldDescription
bot_tokenOAuth Bot Token (starts with xoxb-)
app_tokenPolling mode — an App-Level Token (xapp-) with connections:write, from Enable Socket Mode
signing_secretWebhook mode — the Signing Secret (Basic Information → App Credentials); verifies each delivery

Microsoft Teams

Teams uses the Bot Framework webhook model. You need an Azure Bot registration.

  1. Create an Azure Bot in the Azure Portal
  2. Set the messaging endpoint to https://<your Synapse address>/api/messaging/teams/webhook/<channel id> — the public address of the Synapse app, not the backend port
  3. Enable the Microsoft Teams channel
  4. Copy the App ID and client secret

Credentials:

FieldDescription
app_idAzure App ID — Azure Bot resource → Configuration → Microsoft App ID
app_passwordApp Password / Client Secret — Azure Bot → Certificates & Secrets

Teams requires SynapseOrch to be publicly accessible via HTTPS for the webhook to work.


WhatsApp

WhatsApp connects through Meta's WhatsApp Cloud API only: a Meta Business account and a verified number.

  1. Create a Meta Developer App at developers.facebook.com, of type Business
  2. Add the WhatsApp product, and pick a test or production number under Phone Numbers
  3. Under WhatsApp → Configuration, set the webhook URL to https://<your Synapse address>/api/messaging/whatsapp/webhook/<channel id> — the public address of the Synapse app, not the backend port
  4. Type a verify token of your choice there and in Synapse, and subscribe to the messages webhook field
  5. Copy the phone number ID, an access token, and the App Secret (App settings → Basic) into the channel

Credentials:

FieldDescription
phone_number_idWhatsApp phone number ID
access_tokenMeta access token
app_secretApp settings → Basic. Meta signs every delivery with it, and a delivery without a matching signature is refused — as is every delivery while no App Secret is saved
verify_tokenYour chosen webhook verify token — set the same value in your Meta app

WhatsApp Web was removed in 2.0

1.x could also sign in to WhatsApp Web by scanning a QR code. Synapse 2.0 removed it. A 1.x channel that used it is kept, switched off, and says WhatsApp Web sign-in was removed in Synapse 2.0; reconnect this channel through the WhatsApp Cloud API. Enter the Cloud API fields above on that channel to bring it back.


How agents respond

When someone messages a connected channel, SynapseOrch identifies the message as addressed to the bot, routes it to the active agent for that conversation, runs the ReAct loop, and replies in the same place.

Session continuity is per user — each person gets their own session id, so an agent remembers the conversation across messages.

Who the senders are

Everyone who messages this bot is a workspace user is on by default: the channel's agents run for a sender as they would for you. With it on, the screen warns who can do what — Anyone who can message this bot can use …, naming the tools and any agent's memory.

Turned off, senders are visitors, as on a chat widget: the agents use only the tools ticked under What senders can use, never their memory, and a sender's reply does not answer a workflow waiting on the channel. Visitors reach an agent's knowledge bases only where the base allows visitors and search_knowledge is ticked. A reply never carries [K#] labels, whoever the sender is.

Nobody on a channel can answer an approval card, so a call that would ask a person does not wait for one. A remember that would ask is refused with its reason, and the agent is told to report the point in its answer instead. A Team member's call that needs approval is not run, and the lead is told and carries on.

If the agent's turn fails — its model refuses or cannot be reached, or an Orchestrator agent's run fails — the reply is "⚠️ Something went wrong answering that. Please try again." The error itself is in the server log and, for someone in the app, on the conversation, which keeps the question answered (The workflow failed before answering.) for a failed run.

Switching agent mid-conversation

Where a channel has more than one agent assigned, two commands work in any chat:

CommandDoes
/agentsList the agents this channel offers, default first
/agent <name>Switch this conversation to that agent

The switch is per conversation, not per channel, so one person changing agent does not change what anyone else is talking to. It resets to the channel default.

/agent is scoped to the channel's own agents

It can only switch to an agent actually assigned to that channel, so the agents listed on the channel's settings are the only ones its users can reach.

Orchestrator agents

An Orchestrator agent on a channel runs its workflow with the message as the input, and the reply is the workflow's output. If the run fails, the reply is the fixed line above. If it pauses for a person, the reply is the question followed by "Answer it in SynapseOrch (run <id>)" — or nothing more, when that Human step already asked its question in this same channel, where a reply answers it.

Human steps

A human gate with Notify messaging channel set posts its question to that channel when the run pauses, and a reply in the channel answers it and resumes the run. While a run waits on a channel, the next message sent to the bot there is taken as the answer, not passed to an agent. Teams replies do not answer a waiting run, and Teams and WhatsApp questions are posted only when the API server is running the channel's adapter. See Human Gates → Messaging notification.

Testing a channel

After starting a channel, click Test on the channel, under Channels (on Cloud, Send test, once the bot has been messaged). For Telegram and Discord, this verifies the bot token is valid. For Teams and WhatsApp, this validates the webhook credential fields.

On this page