Post Submissions to a Microsoft Teams or Discord channel
Add a webhook endpoint on a Form's Delivery tab, choose Teams message or Discord message and paste a webhook address you own. It is a payload format, not a native Teams or Discord integration.

FormFlow can post a short message to a Microsoft Teams channel or a Discord channel each time a Form receives a Submission. It does this through a webhook endpoint, the same mechanism that forwards Submissions to any URL you own; only the Send as choice differs. This is not a native Teams or Discord integration: there is no app to install and no channel picker. You paste a webhook address, and FormFlow sends a message shaped for that service to it. The Slack version of this setup is covered in Send Submissions to Slack through a webhook. The Teams and Discord formats arrived together in Release v1.73.12.
What you need first
A Form in your Team that you can edit.
For Teams: a Teams workflow created from the template "Post to a channel when a webhook request is received", with "Who can trigger" set to "Anyone". Build it in Teams by following Microsoft's own documentation; this post covers only the FormFlow side.
For Discord: the webhook URL from your channel's Integrations settings. Forum and media channels are not supported.
An https address. FormFlow refuses plain http for webhook endpoints.
Add the endpoint
Open the Form and go to its Delivery tab.
Find Webhook endpoints and choose Add endpoint.
In the field labelled Send as, choose Teams message or Discord message. The default is FormFlow JSON (signed), so this choice is the whole difference between a chat endpoint and a plain webhook.
The URL field is now labelled Incoming webhook URL. Paste the Teams workflow URL or the Discord webhook URL into it. The field is masked as you type, and you can reveal it to check what you pasted.
Leave Delivering switched on. It is on by default; switch it off to stop delivery to this endpoint.
Save the Form.
The helper text under Send as names the address to paste for the format you chose, and says it is stored encrypted and never sent back out by email. The collapsed row for the endpoint names the format rather than printing the address, so the URL does not sit in plain text across the page.
Send a test
Each endpoint row has a Send test action. It posts a single line, "FormFlow test — submissions from this form will arrive here.", to the address in the row: as a card on Teams, as a message on Discord. If the request succeeds you see Test delivered; if it fails you see Test delivery failed, with the receiver's own error text, cut to 300 characters.
Teams accepts the request before its workflow runs, so Test delivered means Teams took the request, not that a card has appeared. Check the channel after your first test send.
Two conditions apply. Save the Form first: an endpoint that has never been saved cannot be tested, and the action tells you so. And each person can send 20 test deliveries an hour, counting failed ones. A test is a button, not a gate; the endpoint delivers whether or not you pressed it.
What arrives in the channel
The message is a doorbell, not the record. Both formats say the same things in the syntax their service reads: the Form's name, up to five answers, how many fields were left out, and a link to the Submission in your panel.
On Teams
A card whose first line is "New submission — " followed by the Form's name.
Up to five answers, one per line, each as a bold label and a value.
A line such as "and 3 more fields" when the Form has more than five answers.
A View submission button that opens the Submission in your panel.
Every answer, label and Form name is sent as plain text. Teams would render markdown in a heading or a list of facts, so FormFlow does not use them for anything a Submitter typed: a Submitter cannot add a link to the card. No mention is ever sent either, so typing <at> in an answer pings nobody. Labels, values and the Form name are each cut at 200 characters.
On Discord
A bold first line: "New submission — " followed by the Form's name.
Up to five answers, one per line, each as a bold label and a value.
An italic line such as "and 3 more fields" when the Form has more than five answers.
A View submission link at the end, which opens the Submission in your panel.
Markdown characters in an answer are escaped, so a Submitter cannot make a bold label, a heading, a masked link or a code block. The message tells Discord to resolve no mentions, so an answer containing @everyone pings nobody, and it asks Discord not to show a link preview. Discord refuses a message over 2,000 characters; FormFlow cuts the answers short before that, so the link to the Submission is kept. This is the text FormFlow sends for a Form with two answers:
**New submission — Contact form**
**Name:** Ada Lovelace
**Message:** Can you send a quote
[View submission](<link to the Submission in your panel>)On both services, whitespace inside a value is collapsed, so a value is only ever one line.
Limits to know about
One-way. FormFlow sends; nothing in Teams or Discord flows back to FormFlow.
Five answers at most, 200 characters each. For the full Submission, use the link or the Submissions inbox.
Teams and Discord ignore the signature. Every webhook format is signed, but neither service checks it, so there is no signing secret to copy for these endpoints.
Submissions that FormFlow classes as spam are not forwarded. Only accepted, non-spam Submissions reach a webhook endpoint.
Retries, backoff and deactivation are shared with every webhook format. A receiver that keeps failing can have its endpoint deactivated, so check the row if messages stop arriving.
Discord forum and media channels are not supported.
The address is a credential. Anyone holding the Teams workflow URL or the Discord webhook URL can post to that channel. Treat it like a password, and create a new one in Teams or Discord if it leaks.
What this does not decide
It does not choose your channel, and it does not manage Teams or Discord for you: the address you paste fixes where messages land, and that is configured in the service. It does not turn chat into your inbox; reading, searching and exporting Submissions stay in FormFlow. And it does not make the message a copy of the data. If you need every field delivered as structured data, add a second endpoint with the default FormFlow JSON format instead, as described in Send Submissions to a webhook and retry what your receiver missed.