Discord
Post real-time Rovenue revenue, subscription, funnel-session, and credit-ledger events to a Discord channel via an incoming webhook.
Discord
The Discord integration posts a short, human-readable message to a Discord channel for every Rovenue event you enable — revenue events (purchases, trial conversions, renewals, refunds, cancellations), subscription-lifecycle events (trials, grace period, billing issues, plan changes), funnel-session events (started, advanced, paid, completed, abandoned, dismissed, custom actions), and credit-ledger events. It's a notification channel, not a data pipeline — like Slack, it subscribes to all four Rovenue fanout topics and every one of the 30 public event keys, since there's no reason to scope a Discord alert to a single event family the way an analytics or attribution tool would. The message builder is the exact same one Slack uses (buildChatMessageText), so both channels format events identically — only the outer envelope differs ({ "text": "..." } for Slack, { "content": "..." } for Discord).
1. Create an incoming webhook in Discord
- In Discord, open the server settings for the channel you want events posted to, go to Integrations → Webhooks, and click New Webhook (or reuse an existing one) — see Discord's Execute Webhook documentation if you haven't done this before.
- Name the webhook and confirm the target channel.
- Click Copy Webhook URL — it looks like
https://discord.com/api/webhooks/123456789012345678/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Treat this URL as a secret: anyone who has it can post messages to your channel.
2. Add the integration in Rovenue
- In the Rovenue dashboard, navigate to Apps (left sidebar).
- Find Discord under Communication & alerts and click it.
- The side drawer opens. Fill in the Credentials step:
- Incoming webhook URL — paste the URL from step 1.
- Click Validate.
Validate posts a real message. Unlike a zero-footprint credential check, Rovenue confirms a Discord incoming webhook by actually posting
Rovenue connected ✅to the configured channel — the same way you'd confirm a Discord integration by hand. This is intentional (it's the standard way to prove a Discord webhook works) but it means clicking Validate again posts the message again; it is not deduplicated the way Amplitude's/Mixpanel's credential probes are.
- Choose which events to forward, optionally review the mapping step, then activate.
3. Event mapping
Discord has no vendor-specific event vocabulary of its own — every one of Rovenue's 30 public event keys, including the seven funnel.session.* keys, maps to itself. The mapping step exists only if you want to relabel what shows up in the connection's Delivery Log; it has no effect on the Discord message content.
4. Message format
Each event becomes a single Discord message ({ "content": "..." }, no embeds), prefixed with an emoji per event family:
| Event family | Prefix | Example |
|---|---|---|
revenue.* | :moneybag: | :moneybag: revenue.RENEWAL — 9.99 USD · prod_gold · subscriber sub_… |
subscription.* (+ subscriber.identified) | :repeat: | :repeat: subscription.trial.started · subscriber sub_… |
credit.ledger.appended | :coin: | :coin: credit.ledger.appended · subscriber sub_… |
funnel.session.* | :footprints: | :footprints: funnel.session.started · subscriber sub_… |
The subscriber segment shows only the first 4 characters of the Rovenue subscriber id, followed by an ellipsis — enough to recognize repeat activity from the same subscriber in a channel, without printing an identifier a reader could act on. A funnel.session.* message never shows an amount, even for .paid (money is only ever reported on revenue.*), and the subscriber segment follows the webhook's subscriberId. A native (device) event shows it whenever the device sent its Rovenue id, identified or anonymous. A web event shows it on funnel.session.completed only. A GDPR-erased subject's events never show it.
No PII ever appears in a Discord message. The message builder only ever reads the event key, amount, currency, product id, and (masked) subscriber id off the event — it never reads identityContext (email, phone, IP, user agent) or subscriber attributes (arbitrary host-app-set key/values), regardless of what a subscriber's profile carries.
5. At-least-once delivery and duplicate messages
Like Slack, Discord has no consumer-side dedup key, so the pipeline's at-least-once delivery can rarely duplicate a message (a crash between POST and status write) — accepted for a notification channel.
6. Verify events are arriving
- Trigger a real event from your app (a purchase, a trial start, a funnel session) and check the configured Discord channel — messages typically arrive within a few seconds.
- If messages are not appearing:
- Check Apps → Discord → Delivery Log in Rovenue for HTTP status codes and error messages.
- A
404response (Discord's "Unknown Webhook") means the webhook was deleted in Discord — recreate it and update the connection's credentials. - A
401or403response means the webhook's token is invalid or revoked — recreate the webhook and update the connection's credentials. - A
400response means the request was malformed; this indicates a bug rather than a misconfiguration and should not recur on retry. - A
429response means Discord is rate-limiting the webhook; Rovenue's delivery queue retries automatically with backoff. - Ensure the event type you're sending is included in the connection's enabled events.
- Rovenue only ever POSTs to
https://discord.com/api/webhooks/...orhttps://discordapp.com/api/webhooks/...— a webhook URL hosted anywhere else, or at any other path, is rejected at both credential-validation time and delivery time.
Singular
Forward Rovenue revenue and subscription-lifecycle events into Singular as Server-to-Server (S2S) events, so you can attribute revenue back to ad campaigns.
Outbound Webhooks
Receive Rovenue subscription, revenue, funnel, and credit-ledger events on your own HTTPS endpoint — payload shape, signature verification, retries, and idempotency.