Docs
Documentation
How the relay works, how to set up a bot, what BotFerry stores, and how billing and your account behave.
How it works
You create a Slack app in your own workspace, and BotFerry drives it. Mentions of that app travel to a private operator channel your team controls, and operator replies travel back to the person who asked. You hold the app's credentials, both ends of the conversation stay inside your workspace, and BotFerry carries messages between them.
Mentions in
A relay starts with a mention. Someone writes @YourApp can you help? in a channel the app belongs to, Slack sends the event to your bot's webhook URL, and BotFerry posts the message into your operator channel with a link to the original. Each conversation gets its own thread there, and later mentions in the same source thread land in that same operator thread.
Replies out
Reply inside a forwarded thread and BotFerry delivers your words to the source thread, posted as the app itself. The requester sees the answer where they asked, from the bot they mentioned.
Both ends sit in the same workspace, so @user and #channel references work as they do in any Slack message, with no translation layer in between.
Rules the relay follows
- The app receives mentions from channels it is a member of. Mention it elsewhere and Slack offers to invite it; BotFerry needs no setup for that.
- A requester follow-up without a fresh
@mentiondoes not relay. Mentions inside a thread join the existing relay rather than opening a new one, so "please mention the app again" restores the flow. - Message edits and deletions do not sync in either direction.
- BotFerry ignores its own posts and those of other bots, so two bots cannot feed each other in a loop.
Set up
The setup wizard generates a Slack app manifest, checks your credentials against Slack, and tests the loop before the bot goes live. Budget about ten minutes, and make sure you can install apps in your workspace.
- Create the bot. Sign in, press New bot, and give it a name. BotFerry creates the bot with a webhook URL of its own and opens the wizard.
- Create the Slack app from the manifest. Open api.slack.com/apps, create a new app, and choose to build it from a manifest. Paste the one the wizard shows: it carries the app's name, permissions, events, and your webhook URL, so there is nothing to assemble by hand. Install the app to your workspace.
- Paste the credentials. Copy the Bot User OAuth Token (it starts with
xoxb-) and the Signing Secret from your app's pages on Slack into the wizard. BotFerry validates both with Slack before storing them. - Pick the operator channel. Create a private channel for your team and invite the app with
/invite @YourApp. The wizard lists the private channels the app belongs to; choose one. An empty list means the invite has not happened yet. - Test and go live. Send the test message, check it arrived in the operator channel, and confirm the billing step. From then on, mentioning the app anywhere it is a member forwards the message to your operators.
Permissions the app requests
The manifest asks for seven bot scopes. The wizard shows the same list next to the manifest, so whoever creates the app sees the reason for each permission.
| Scope | Used for |
|---|---|
app_mentions:read | receiving mention events |
chat:write | posting into the operator channel and replying to source threads |
groups:read | listing private channels for the operator-channel picker |
groups:history | receiving operator replies from the operator channel |
users:read | showing the bot's Slack name and avatar on your dashboard |
files:read | downloading files attached to relayed messages |
files:write | re-uploading those copies on the other side of the relay |
The operator channel
Operators work from one private channel. Each conversation arrives as its own thread, opened by a header that names the requester, the source channel, and a link to the original message.
- Reply in the thread. Thread replies relay to the requester. Top-level messages in the channel relay nowhere, so the channel stays usable for coordination between operators.
- Start with
//for internal notes. A reply that begins with//stays in the operator thread and skips the requester. - Attachments relay too. The bot copies a mention's files into the operator thread, and carries the files you attach to a reply back to the requester's thread. A file with no text relays on its own and counts as one relayed message. A
//caption keeps a file internal. A failed copy produces a warning in the operator thread. - Failures surface where you wrote. A reply that cannot go out, say because someone deleted the source channel, produces a warning in the operator thread with the reason. A failed reply leaves a trace instead of vanishing.
- Silence from the requester? Follow-ups without a fresh mention do not relay. If a requester says they replied and you see nothing, ask them to mention the app again inside their thread.
Managing your bots
The dashboard lists your bots with status, workspace, operator channel, and the latest relay threads. Each bot has a settings page and an activity log behind it.
- Rename. The label lives in BotFerry and touches nothing in Slack.
- Replace credentials. Reinstalling your Slack app rotates its token. Paste the new token and signing secret on the settings page; BotFerry validates them with Slack the same way the wizard does.
- Switch the operator channel. Invite the app to the new private channel first, then pick it in settings. Threads forwarded to the old channel stop relaying after the switch, so finish open conversations before you move.
- Disable and re-enable. A disabled bot acknowledges Slack and drops everything. Events that arrive while it is off are gone; re-enabling does not replay them. The activity log marks both moments.
- Delete. Deletion follows the billing cycle; see Subscriptions.
Logs, what we retain, and what we can read
Every bot has an activity log, linked from its dashboard card and its settings page. It exists to answer one question: did my message relay, and if not, why.
What a log entry contains
Three fields: an event type, a machine-readable reason code, and a timestamp. The columns are too narrow to hold anything else. Message text, Slack user ids, and channel names have no place in the schema, so a log entry cannot leak conversation content.
- Relayed mention, relayed reply. A message went through and counted against the bot's allowance.
- Dropped message. A message that would have relayed but did not, with the reason: bot disabled, quota exceeded, operator channel unavailable.
- Attachment failure. Files the bot could not copy across, with the reason. Any text alongside them still relayed.
- Connection error. A Slack-side failure that needs your attention, such as a revoked token. The bot's owner also gets an email, one per incident.
- Enabled and disabled markers. The moments the bot switched on or off, by your hand or by a billing event.
Routine filtering produces no entries: the bot's own posts, operator-channel chatter that is not a reply, and Slack's retry duplicates. Logging those would bury the entries you care about.
What BotFerry stores
Relayed text lives in Slack. For each conversation, BotFerry keeps routing metadata: channel and thread identifiers, timestamps, and a permalink to the original message. That list is also the ceiling on what we can read. Staff debugging a relay see identifiers, counters, and timestamps; your conversations stay inside your Slack workspace. Attachment bytes pass through BotFerry only while a relay runs; we discard them as soon as Slack accepts the copy and never write them to storage. The message itself passes through a processing queue for a few seconds on its way across, then leaves nothing behind. Our privacy policy lists every field we handle and why.
Retention
| Data | Kept |
|---|---|
| Activity log entries | 90 days; a nightly job removes older rows |
| Duplicate-delivery records (Slack retries) | 48 hours |
| Thread routing metadata | life of the bot, so late replies still find their thread |
| Message content | not stored at any point |
| Attachment contents | pass through during a relay; never stored |
Deleting a bot also deletes its logs, routing data, and credentials. There is no recovery for those.
Subscriptions
BotFerry bills one flat monthly price: Starter at 9€, Team at 19€, Business at 39€. One relayed message is one mention carried into your operator channel or one reply carried back.
Each plan includes a monthly message pool shared across all your bots, 5.000 on Starter, 20.000 on Team, 80.000 on Business. The pool resets each cycle. Plans also cap how many bots you run: 3, 10, or unlimited within fair use. The pricing page lists every tier and estimates the right one for your volume.
Running out
When you use up the monthly pool, every bot stops relaying until the cycle resets or you move up a plan. Each dropped message shows in the activity log as the allowance being used up, so you can see what was lost and when. Bots also stop relaying if your subscription is past due after a failed renewal, or cancelled; the sections below cover both.
Changing your plan
Upgrade or downgrade any time from your billing page while your subscription is active. The change takes effect immediately and is prorated for the rest of the month: an upgrade charges the difference to your card straight away and raises your allowance now, while a downgrade applies a prorated credit to your next invoice rather than paying out cash. If an upgrade's card charge is declined, your plan stays as it was.
Cancelling
Cancel from the billing page. Within 14 days of first subscribing, we cancel right away and refund your last payment in full; this money-back can be claimed once per account and once per card, and once you have claimed it, re-subscribing later does not start a new 14-day window. After 14 days, cancelling schedules the plan to stop at the end of the period you have paid for, so you keep full access until then with no further charge and no refund for the current period. While a cancellation is scheduled, Resume on the billing page keeps the plan.
When a payment fails
If a monthly renewal is declined, we email you and your bots stop relaying until it clears. Open your billing page and use Update payment method to fix the card; once the payment goes through your bots relay again and we email you to confirm. If it stays unpaid, the subscription is eventually cancelled.
Re-subscribing
If your subscription has fully ended, signing in takes you to the subscribe page to pick a plan and start again. Your account and its settings are still there; only billing had stopped.
Deleting a bot
Deleting a bot from its settings page stops it relaying at once and frees its slot in your plan's bot limit. The bot drops off your dashboard, but its activity log and routing data stay on file and are included in a data export if you request one. The messages it already relayed this month still count toward your plan.
Bot types
BotFerry ships one bot type today: the mention relay, described throughout these docs. It listens for mentions of your app, mirrors each conversation into a thread in your operator channel, and posts operator replies back as the app.
Direct messages to the app, slash commands, interactive buttons, and file transfer sit outside this bot type. New types will appear on this page when they ship.
Security
Your bot token and signing secret are the keys to your Slack app. BotFerry encrypts both at rest, shows at most their last four characters in the UI, and keeps them out of logs.
Slack signs each webhook delivery, and BotFerry verifies that signature before trusting a request, rejecting anything stale or signed with the wrong secret. Webhook URLs carry a random 128-bit identifier, so nobody can guess the endpoint for your bot.
BotFerry holds no message content, so there is no conversation store to breach. The retention section lists what does exist on our side.
Troubleshooting
Start with the bot's activity log. It records each drop that mattered, with a reason, so most delivery questions end there.
- Mentions stopped after you deleted and recreated a bot. Your Slack app still points at the old bot's webhook URL, which died with it. The support page walks through repointing it.
- The dashboard shows an error status. The bot hit a connection-level Slack failure, such as a revoked token, and you will have an email about it. Paste fresh credentials on the bot's settings page and BotFerry rechecks them with Slack.
- Mentioning the app in a channel does nothing. The app must be a member of that channel. Slack prompts to invite it when someone mentions a non-member app; accept the prompt and try again.
- A reply never reached the requester. Open the operator thread. BotFerry posts delivery failures there as a warning with the reason.
- The bot ignores everything. Confirm it is enabled and has messages left to spend. Both show on the dashboard, and the log names the reason for each drop.
Longer guides live on the support page.
Account management
Signing in
BotFerry has no passwords. Type your email and we send a message with a magic link and a 5-digit code; open the link, or enter the code on the page you started from. Your first sign-in creates the account.
Changing your email
Change it from the account settings page. We mail a confirmation link to the new address and a heads-up to the old one. Your address stays as it was until you click that link, so a typo costs nothing and cannot lock you out. The link expires after an hour, and you can revoke a pending change from the same page. Once you confirm, sign in again with the new address.
Data export
Ask for a copy of your data from the settings page. We build it in the background and email you a link to download it, good for 7 days.
Deleting your account
Request deletion from the settings page. We email you a link to confirm; once you confirm, we erase your account and all your bots 7 days later, and you can cancel any time before then from the banner on your dashboard. Deletion does not refund time remaining on a paid subscription; if you believe a refund applies to you, contact us before you send the request.
Your privacy rights
Under the GDPR you can see, correct, export, or delete the personal data we hold, and object to or restrict some of how we use it. The export and deletion above cover the everyday cases; the privacy policy lists every right and how to use it, and the cookie policy covers what we keep in your browser.