Automate Asana + Discord
Team tasks, due dates and the follow-through between them. Community chat with an automation-friendly API. Put an agent between them and the hand-off stops being manual: it reads, decides, acts, and shows its work.
Meeting Follow-Through is a ready-made agent built around Asana; point its last step at Discord to finish this hand-off.
Automations teams run
These are not field mappings. An agent reads the Asana side, works out what it means, and only then decides what — if anything — should happen in Discord.
When a task is created or completed in Asana…
…an agent can post channel messages in Discord — after reading the context and deciding it should.
When a due date nears in Asana…
…an agent can DM members in Discord — after reading the context and deciding it should.
When a project updates in Asana…
…an agent can publish digests in Discord — after reading the context and deciding it should.
When a message posts in a channel in Discord…
…an agent can create tasks with owners in Asana — with the reasoning recorded in the run’s receipt.
When a member joins in Discord…
…an agent can update status and comments in Asana — with the reasoning recorded in the run’s receipt.
When a keyword appears in Discord…
…an agent can roll up project summaries in Asana — with the reasoning recorded in the run’s receipt.
Asana to Discord, setup template
Start with a custom-api call to app.asana.com and the discord-api node. Configure the Asana source payload, the agent input, and the Discord operation. The sequential template does not implement conditional writes or approval by itself.
This is a schema-checked starting point, not an end-to-end tested automation. Replace every CONFIGURE_ value, choose the operations you intend, connect credentials and map source outputs into later inputs. An edge orders steps; it does not supply a condition, an approval gate or a field mapping. Add and test those controls explicitly before any write. Cloud APIs and model providers may receive data. Keep the workflow inactive until tested with fixtures.
{
"id": "27dc54fc-826c-42e2-a156-b2d8a464ba44",
"name": "Asana → Discord",
"nodes": [
{
"id": "d23a8ef8-858f-41ec-a2ae-5e28bf7983d4",
"text": "Run on a schedule",
"x": 512,
"y": 144,
"isEditing": false,
"type": "trigger-timer",
"icon": "connect",
"category": "trigger",
"isSelected": false,
"parameters": {
"fireOnStart": "No",
"scheduleType": "Interval",
"schedule": "Every 15 Minutes"
},
"description": "Setup template for Timer Trigger. This trigger node fires the workflow at specified intervals or at a specific time. Configure credentials, inputs and output mapping before use.",
"error": null,
"isActive": false,
"output": null,
"outputs": {}
},
{
"id": "6b3d2ee4-d1be-4fda-a3cd-90b403223d44",
"text": "Review source and draft",
"x": 512,
"y": 336,
"isEditing": false,
"type": "agnt-agent",
"icon": "connect",
"category": "action",
"isSelected": false,
"parameters": {
"agentId": "CONFIGURE_AGENTID",
"message": "Read the Asana item. Decide whether it warrants action in Discord, and explain why.\nSource input: CONFIGURE_SOURCE_INPUT. Produce a reviewable draft only; do not take external actions."
},
"description": "Setup template for Agent Chat. Chat with an AI agent from your agent library. Select an agent and send messages to interact with it within your workflow. Configure credentials, inputs and output mapping before use.",
"error": null,
"isActive": false,
"output": null,
"outputs": {}
},
{
"id": "0ce39396-35ef-4ddb-abe8-98757020e63a",
"text": "Configure destination in Discord",
"x": 512,
"y": 528,
"isEditing": false,
"type": "discord-api",
"icon": "connect",
"category": "action",
"isSelected": false,
"parameters": {
"action": "SEND_MESSAGE",
"recipientType": "channel",
"channelId": "CONFIGURE_CHANNELID",
"message": "CONFIGURE_MESSAGE",
"autoSplit": false,
"splitLimit": 1,
"splitDelayMs": 1,
"numberChunks": false
},
"description": "Setup template for Discord API. Interact with Discord to perform various operations such as sending messages, managing roles, and uploading files. Long messages are automatically split into multiple chunks (Discord caps a single message at 2000 characters); splitting is code-block aware and emoji-safe. Configure credentials, inputs and output mapping before use.",
"error": null,
"isActive": false,
"output": null,
"outputs": {}
}
],
"edges": [
{
"id": "0944b0f2-7306-4e8c-a1f8-a22e6970dc90",
"start": {
"id": "d23a8ef8-858f-41ec-a2ae-5e28bf7983d4",
"type": "output"
},
"end": {
"id": "6b3d2ee4-d1be-4fda-a3cd-90b403223d44",
"type": "input"
},
"startX": 800,
"startY": 168,
"endX": 512,
"endY": 360
},
{
"id": "7e032e60-3997-4547-a188-85cf7c128e6a",
"start": {
"id": "6b3d2ee4-d1be-4fda-a3cd-90b403223d44",
"type": "output"
},
"end": {
"id": "0ce39396-35ef-4ddb-abe8-98757020e63a",
"type": "input"
},
"startX": 800,
"startY": 360,
"endX": 512,
"endY": 552
}
],
"zoomLevel": 1,
"canvasOffsetX": 0,
"canvasOffsetY": 0,
"isTinyNodeMode": false
}
Configure Discord API
Interact with Discord to perform various operations such as sending messages, managing roles, and uploading files. Long messages are automatically split into multiple chunks (Discord caps a single message at 2000 characters); splitting is code-block aware and emoji-safe.
- action — The action to perform on Discord. RESOLVE_USER = look up a user by username or ID. TEST_DM = 5-stage diagnostic that verifies the bot can DM a user. ORCHESTRATOR_CHAT = bridge a message into AGNT's full orchestrator (the same engine that powers the main Annie chat) and return the reply + any generated image refs; conversationId (or channelId) keys persistent memory. DELETE_MESSAGE = delete the bot's OWN message(s) — one by messageId, or purge all/recent bot messages from a DM or channel (deleteMode='purgeMine'/'purgeRecent'). In a DM the bot can only delete its own messages (Discord platform rule). Only use this when you actually intend to delete something: mode='single' with no messageId is a safe no-op (deletes nothing). Current example:
SEND_MESSAGE. - recipientType — Where the action targets. 'channel' = guild text channel (uses channelId). 'user' = direct message to a Discord user (uses userId; bot must share at least one guild with the user). Applies to SEND_MESSAGE, UPLOAD_FILE, and DELETE_MESSAGE. Current example:
channel. - channelId — The ID of the Discord channel (for SEND_MESSAGE, UPLOAD_FILE, and DELETE_MESSAGE when recipientType='channel'). When recipientType='user' this field is ignored (use userId instead). Current example:
CONFIGURE_CHANNELID. - message — The message text. For SEND_MESSAGE: the Discord message to send (auto-split if over the 2000-char limit unless autoSplit is disabled). For UPLOAD_FILE: optional caption sent with the attachment. For ORCHESTRATOR_CHAT: the prompt sent to Annie's full orchestrator. Current example:
CONFIGURE_MESSAGE. - autoSplit — Automatically split messages that exceed the character limit into multiple sequential messages (for SEND_MESSAGE action). Splitting avoids breaking words, preserves fenced code blocks, and never slices emoji. Default: true. Set false to send as-is (Discord will reject content over 2000 chars). Current example:
false. - splitLimit — Maximum characters per message chunk when autoSplit is on (for SEND_MESSAGE action). Capped at Discord's 2000-char hard limit. Lower it for a safety margin. Default: 2000. Current example:
1. - splitDelayMs — Delay in milliseconds between sequential chunks when a message is split (for SEND_MESSAGE action). Keeps chunks in order and avoids Discord rate limits. Default: 350. Set 0 for no delay. Current example:
1. - numberChunks — Append a (n/N) counter to the end of each chunk when a message is split (for SEND_MESSAGE action). Default: false. Current example:
false.
Install Meeting Follow-Through
Meeting Follow-Through is a working agent built around Asana. Install it, point its last step at Discord, and you have this hand-off without building it from an empty canvas.
Runs on your own machine · See what it does
What building this looks like
- Get AGNT Community Core. Free, local, no sign-up needed to run a workflow.
- Add both connections to the vault — Asana takes one OAuth sign-in, Discord takes an API key pasted into the vault.
- Configure the nodes above, or start from a marketplace workflow and edit it. The agent in the middle is the part worth spending time on.
- Run it once with an approval gate in place. The receipt tells you what it read, what it concluded, and what it changed in Discord.
Asana and Discord — common questions
Can I connect Asana to Discord without writing code?
You can build it entirely from the canvas. Authorise Asana with one OAuth sign-in, Discord with an API key pasted into the vault, then tell the agent what meeting decisions become assigned tasks should look like once Discord is involved. Code is an option for the unusual cases, never a requirement for the common ones.
How is this different from a field-mapping Asana to Discord automation?
The difference shows up on the messy inputs. A rule chain needs every case enumerated in advance; an agent handles meeting decisions become assigned tasks the way a colleague would — reading the Asana context, judging it, then writing to Discord with the reasoning recorded.
Does my Asana and Discord data leave my machine?
Not to us. AGNT runs locally and both sets of credentials are encrypted on your own disk. Outbound traffic goes only to Asana, Discord and whichever model you chose — and pointing that at Ollama or LM Studio keeps everything on your hardware.
What does a Asana and Discord run leave behind?
A receipt: what was read in Asana, which tools ran with which arguments, what the agent concluded, and what it wrote to Discord. Anything consequential can sit behind an approval gate so a person signs off before it happens.