Recipients and routing

Recipients decide where alerts arrive: a Telegram chat, an e-mail address, a Discord server or your own system. Routing decides which recipient gets which alert.

Last updated: Sep 30, 2026

Recipients in short

You manage recipients in Wallet Center → Watchdog → Notification channels. Each recipient has a name, a channel and a status: Active, Not tested, Verification pending, Unreachable or Off. You can have up to 20 recipients. Add recipient opens a dialog with all channels; Discord has its own Connect Discord button.

The notification bell on ftso.app is always there. The switch Alerts in the notification bell decides whether signal alerts also appear there; account and system messages always do.

Each recipient allows 5 tests per hour, and each wallet 20 tests per hour. Creating recipients and changing their target share a limit of 10 per hour.

Setting up each channel

Telegram (private chat)

  1. Choose Add recipient, then Telegram, and enter a name.
  2. Press Create link. The link is valid for 10 minutes and works once.
  3. Open the link yourself, or send it to the person who should get the alerts.
  4. Telegram opens the FTSOBest Watchdog bot. Press Start.
  5. Back in the Watchdog, the recipient shows as Connected. Send a test.

If the link has expired, simply create a new one. If you later block the bot, the recipient becomes Unreachable.

Telegram group

  1. Choose Add recipient, then Telegram group, and press Create link.
  2. Open the link in Telegram and choose the group.
  3. Add the bot as a member. It needs no admin rights, but the person connecting it must be an admin of the group.
  4. The group appears as a recipient. Send a test; every member of the group sees it.

Group alerts are not held during quiet hours. That makes a group a good place for alerts your whole team should see.

Discord (direct message)

  1. Press Connect Discord. Discord opens and asks you to authorize the FTSOBest Watchdog app.
  2. You are added to the FTSOBest Discord server and brought back to the Watchdog.
  3. Complete the verification on the server. Until then the recipient shows Verification pending.
  4. Press Check again. When the verification is found, alerts are active.

There is one Discord recipient per wallet. If we could not add you to the server, join it manually and connect again.

E-mail

  1. Choose Add recipient, then E-mail, and enter the address.
  2. We send a confirmation e-mail. Open it and press Confirm address. The link is valid for 48 hours.
  3. The recipient shows E-mail confirmed — alerts are active.

If the e-mail does not arrive, check your spam folder and use Resend e-mail. To protect addresses from abuse, a wallet can trigger at most 10 confirmation e-mails per day, and each address receives at most 3 per day. If a link has expired, save the address again to get a new one.

Webhook

For your own system, bot or integration. The Watchdog sends every alert as a signed JSON POST.

  1. Choose Add recipient, then Webhook, and enter your endpoint URL.
  2. Save. The signing secret is shown once, right after saving. Store it safely; it cannot be shown again.
  3. Press Send test. The recipient becomes active after a successful test.

The URL must use public HTTPS on port 443 or on a port from 1024 upwards. Private and internal addresses are rejected.

Every request carries the headers X-Watchdog-Signature, X-Watchdog-Timestamp and X-Watchdog-Payload-Version. The signature is sha256= followed by the HMAC-SHA256 of timestamp, a dot and the raw body, keyed with your secret. Compare it in constant time and reject old timestamps to block replays. The field list is in the webhook schema, and code examples are in the API documentation.

Discord webhook

Posts alerts into a channel of your own Discord server. You need the permission to manage webhooks on that server.

  1. In Discord, open Server Settings → Integrations → Webhooks and choose New Webhook.
  2. Pick the channel and press Copy Webhook URL.
  3. In the Watchdog, choose Add recipient, then Discord webhook, and paste the URL.
  4. Save and press Send test.

If someone deletes the webhook in Discord, the recipient becomes Unreachable. Create a new webhook and paste the new URL.

Slack webhook

  1. Open api.slack.com/apps and choose Create New App, then From scratch. Enter a name and pick your workspace.
  2. Open Incoming Webhooks and switch it on.
  3. Choose Add New Webhook to Workspace, pick the channel and allow it.
  4. Copy the URL. It starts with https://hooks.slack.com/services/.
  5. In the Watchdog, choose Add recipient, then Slack webhook, paste the URL, save and press Send test.

Workflow webhooks, whose URL contains /triggers/, are not supported. Use an Incoming Webhook.

Default recipients and routing

A recipient marked Default recipient receives all watches that use the default. Your first Telegram, Discord or e-mail recipient becomes a default recipient automatically; webhooks and groups do not.

In section 4. Recipients of the watch editor you choose:

  • Use default recipients: the watch reaches the bell and all default recipients.
  • Your own selection: untick Use default recipients and tick the recipients for this watch. Only active recipients can be ticked.
  • Different recipients for signal groups: send single groups somewhere else, for example FDC alerts only to your team's Telegram group. This option appears for watch types with several signal groups, such as the provider watch.

Example: you have an e-mail recipient as default and a Telegram group for your team. For your provider watch you keep the default and set the groups FDC and Offences to the Telegram group. FDC and Offences alerts now reach the team, and everything else keeps reaching your e-mail.

If a watch reaches nobody, the editor shows This watch currently reaches nobody.

Unreachable — what to do?

A recipient becomes Unreachable when the target permanently refuses delivery. Examples are a blocked bot, a removed group or a deleted Discord or Slack webhook. Alerts to that recipient then fail, and the Alert history shows the error.

  1. Open the Alert history, filter Failed only and open the latest alert. The delivery line of that recipient shows the error.
  2. Fix the cause: unblock the bot, add it to the group again, or create a new webhook URL.
  3. Press Send test. A successful test clears the status.
  4. If the target is gone for good, remove the recipient. The dialog shows how many watches are affected.

All channels at a glance

  • In-app notifications: Every alert appears in your notification bell on ftso.app. Keeps delivering during quiet hours.
  • Webhook: HMAC-signed JSON POST to your own https endpoint — for bots and integrations. Keeps delivering during quiet hours.
  • Telegram: Alerts as a direct message from the FTSOBest Watchdog bot. Held during quiet hours.
  • Telegram group: Alerts visible to every member of a Telegram group. Keeps delivering during quiet hours.
  • Discord: Alerts as a direct message from the FTSOBest Watchdog bot on our Discord. Held during quiet hours.
  • E-mail: Alerts by e-mail to an address you confirm once. Held during quiet hours.
  • Discord webhook: Posts alerts into a channel of your own Discord server via its webhook URL. Keeps delivering during quiet hours.
  • Slack webhook: Posts alerts into a channel of your Slack workspace via an incoming webhook URL. Keeps delivering during quiet hours.