Chat channels
Set up Zulip
A Zulip bot your team DMs or @mentions — created as an “outgoing webhook” bot in Zulip's own settings, nothing else to run. Zulip delivers each message to the assistant and reads the reply straight out of the response, so there are no outbound credentials at all.
Before you start
- A Zulip “outgoing webhook” bot and its token: Personal settings → Bots (“Your bots”) → Add a new bot, type “Outgoing webhook”, interface “Generic”. About two minutes. The token Zulip shows for that bot is the only credential this channel needs.
- Chat channels → Zulip: paste the Bot token and choose the behaviour “When @mentioned in a stream”. Create, then Test — Test confirms the token is saved (“Token stored”); the proof is the first message.
- Open the channel's checklist for the webhook URL and, on the bot in Zulip, set its endpoint URL to it.
- DM the bot in Zulip, or @mention it in a stream — the checklist ticks “First message received”.
How people use it
Zulip forwards the bot only direct messages and @mentions, nothing else. Direct messages are always personal and private; /new starts a fresh conversation, /help lists the commands. In a stream the bot answers when @mentioned and everyone in the stream sees the reply. “When @mentioned in a stream” decides what those answers use — the asker's own access (visible to the whole stream), guest access groups only, or off, which ignores stream mentions entirely. Stream answers are standalone; a linked asker finds a copy in their own web chat. Replies carry the answer's short form with its [n] markers, cut at 8,000 characters.
Access
Senders arrive with their Zulip account email attached and are matched against the accounts already set up here automatically — usually nobody needs setting up by hand. Someone without a matching account can be assigned in the people list (Manage people) after their first message, or link themselves with a one-time code from “Link messaging apps” in the web chat, sent to the bot as a DM (valid ten minutes). Someone unmatched is told how to link in a direct message, unless guest access groups are open on this channel — then they read from those groups; in a stream an unmatched sender is simply not answered.
Every delivery carries the bot's token, checked against the one stored here — a delivery with any other token is ignored. Test only confirms a token is saved; if the bot stays silent, re-check the endpoint URL on the bot in Zulip. Replies ride Zulip's own webhook response, so there is nothing to rotate on this side — the one channel here with no outbound credential. Disabling the channel stops answers at once and keeps its setup and history.
Last updated 20 Sep 2026