The Discord integration posts a compact, link-first message when Fillo accepts a new or updated response. Connect your server once, then pick a channel per form from a dropdown inside Fillo — one survey can post to #leads while another posts to #support.
Connect and turn on
- Open the form's Settings → Destinations → Discord and select Connect with Discord. Discord's consent screen asks which server and channel: Fillo's bot joins the server (it asks only for Manage Webhooks — it can't read messages), and your first channel is connected in the same step.
- Back in the form's Discord dialog, the channel dropdown lists your server's channels by name. Pick one and select Start sending to Discord.
- Optionally pick up to three answer fields to include; the default is a link-only message.
- Submit a test response and open it from the Discord message.
No bot in your server? Paste a webhook URL instead (always works): in Discord, open the channel's Integrations → Webhooks → Copy Webhook URL and paste it with a channel name like "#leads".
Channels are picked inside Fillo
Once a server is connected, every form's Discord dialog shows that server's channels in a dropdown — pick a different one per form, or switch a form's channel later, without touching Discord again. Fillo quietly creates (or reuses) the channel's webhook when you pick it. Connecting a second server is one more consent; after that its channels join the dropdown too. Pasted webhooks appear alongside by the name you gave them and can be renamed under Settings → Connections → Discord.
From the terminal or an agent
A coding agent with the Fillo CLI can set up the same destination without the dashboard:
| Command | What it does |
|---|---|
fillo discord connect | The one-consent server install through Discord's screen (needs Fillo's Discord app). |
fillo discord webhook | Paste a channel webhook URL at a hidden prompt, or pass FILLO_DISCORD_WEBHOOK_URL. |
fillo discord roles [guildId] | List a connected server's roles for enable --role. |
fillo discord enable <form> | Turn Discord on — --channel <channelId> aims the form at any channel of a connected server, plus fields, Early signal, or a role grant. |
fillo discord status <form> | Read-only: the pinned channel, enabled fields, Early signal progress, and the connected servers. |
fillo discord disable <form> | Turn the destination off. |
An agent following Fillo's setup guidance asks you by name before turning on Early signal or --auto-join — both send or do more than the standing setup.
What a message contains
| Fillo value | Discord output |
|---|---|
| New or updated response | "New response to" / "Updated response to" plus the form's name |
| Submit or update time | A Discord-native timestamp, shown in each reader's own timezone |
| Verified respondent | Optional "From:" line — only for identity your server verified, never a typed answer |
| Up to three chosen fields | Label (≤80 chars) and value (≤200 chars) per field |
| Early signal, while on | "response 3 of the first 10", then every answered field |
| Response link | A link back into Fillo, wrapped so Discord shows no preview |
A file-upload answer shows only its filename — file contents never leave Fillo. Everything not on the three-field allowlist stays out of Discord, except during Early signal.
Early signal: the first responses in full
Right after a form goes live, a bare link doesn't tell you whether people answer the way you hoped. Turn on Early signal and the first 5, 10, or 25 responses arrive with every answered field, then the destination reverts to your picked fields on its own. Because those messages carry every answer, it is a per-channel decision:
- Every answered field posts in form order, with the same 80/200-character caps; files stay filenames; mentions never ping.
- A response too long for Discord's 2,000-character limit drops trailing answers and says how many — never the link.
- The window counts what this channel already received: a form that has sent eight messages, with a window of ten, has two left. Edits and failed deliveries don't consume it.
- Re-pointing the form at a different channel turns Early signal off — consent was given for one room, and Fillo asks again for the next.
The dialog tracks the window ("3 of 10 sent") and shows "Done — back to your picked fields." when it closes.
Triage from Discord
Messages posted through a channel connected with Connect with Discord carry three buttons; a pasted webhook gets the identical message with none (Discord reserves buttons for webhooks its own application created).
| Button | What it does |
|---|---|
| Open in Fillo | Opens the response in your dashboard. |
| Claim | Adds "🙋 Claimed by Priya" — a note for the channel so nobody double-works it; nothing changes in Fillo. |
| Spam | Quarantines the response into Held for review, updates the message, and spends both buttons. |
Anyone who can see the channel can click — the channel is the trust boundary, exactly as for the webhook itself. Spam is reversible (release from Held for review and it delivers again), and already-posted messages are never retracted.
Grant a role after an accepted response
A form already sending to Discord can be your community's front door: respondents who verify with Discord get a role in your server when their response is accepted.
- In the form's Discord dialog, open Community role. If Fillo's bot isn't in your server, an Invite Fillo to your server link asks only for the two permissions role-granting needs.
- Pick the server and role. Roles Fillo can't grant yet show the fix: drag Fillo's role above them in Discord.
- Optionally turn on auto-join: verified people are added to your server with the role on them, after Discord asks each person's permission.
Verification stays optional — a submission without it is accepted normally and grants nothing. If a grant fails, you get one alert email a day naming the fix; the submission itself is unaffected.
Mentions are always off
Every message Fillo posts disables mentions: @everyone, @here, role and user mentions in answers render as plain text. There is no setting to turn this off.
Delivery, retries, and reconnecting
Delivery is at least once through the same durable outbox as every native destination, retrying on a fixed backoff (about 1 min, 5 min, 30 min, 2 h, 6 h — 6 attempts) before marking the delivery failed. Two failures skip retries because they can't self-heal: a webhook Discord no longer recognizes (deleted, or its channel removed) and an invalid or rotated token. Either marks the destination Reconnect and sends one alert email; paste a working webhook URL to resume. A rare crash between Discord accepting a post and Fillo recording it can repost one message — the same tradeoff the Slack integration makes.
Troubleshooting FAQ
Why is Discord showing "Reconnect"?
The webhook was deleted or its token rotated in Discord. Reconnect the channel (or paste its current webhook URL) from the form's Discord dialog, then retry the failed delivery from Activity.
Can a message include more than three fields, or a file's contents?
Only Early signal widens the message, and only for the first 5–25 responses. File contents never go to Discord in any mode. For a fuller payload — or embeds, mentions, or merged data — use Zapier or a signed webhook and build the message yourself.