We turned Asana into a true two-way helpdesk or ticket system. The workflow has been running for months now. For my team, it’s a game changer. We no longer switch between work management and our email suite (or CRM for that matter).
To this day auto-forwarding emails to Asana burns a paid seat for a bot that does only that. When the email finally becomes a task, you cannot reply directly to the requester. Worse: If they send a follow-up, the system creates duplicates.
As much as I love Asana, the email part breaks our flow.
For internal communication things got a lot better thanks to native Request Tracking through forms. You can reply from within Asana - but only if the form is restricted to your own domain. Which fails for external clients obviously. Even Asana’s own support team uses Zendesk for this AFAIK.
Asana’s integrations with GMail or Outlook require manual steps taken before an email becomes a task. Sluggish loading times kill productivity. They fail at scale. – So another showstopper for support management in many cases.
You could then turn to third-party extensions all of which require extra seats and fees. And honestly, so does the workaround I am proposing here. But no-code/low-code platforms help with a lot of other stuff, too. So maybe some of you already have a subscription with Make or N8N.
Or your favorite vibe coding assistant can help you clone the following ideas. Anyway, this is how we have solved it for us:
Part 1: Inbound Routing
Make monitors a support Gmail inbox. – We also run an external intake form with a mandatory email field, I’ll get back to that in a minute. – Filter incoming emails to drop auto-responders. Try to:support@yourdomain.com`` -(``from:support@yourdomain.com`` OR from:noreply OR subject:bounce) for starters and extend from there.
Anything new gets added to Asana and an automatic reply goes out including a unique identifier as a reference. Like a value from your favorite custom ID field. Or, why not, the actual task ID. Prefix the ID with a distinct text string not used in natural language (e.g., HLPDSKID).
- If a new email already has it: add this email as a comment to the existing task.
- If a new email does not have it: create a new task and send out the initial answer with the HLPDSKID.
Also list and download attachments from the email. Attach it to the task.
And inject the emails of requesters and CC’d recipients in respective fields, too.
That’s about it for the treatment of incoming mails. For requests from our intake form, just the requester’s email is enough to use the very same workflow structure: With our initial response comes the same HLPDSKID, and follow-ups get routed to the original ticket.
Part 2: Outbound Routing
- The Proxy Project We maintain an empty Asana project named “Dispatch Emails”. Whether an agent drafts the reply for an external client or we write the draft up individually – there’s a dedicated Custom Field where the email text has to go. To send the message, a rule multi-homes the ticket into the Dispatch project.
- The Webhook Filter The Make webhook for sending out emails watches only this dispatch project. We apply a strict filter:
Action = added,Resource Type = task,Parent = project. The webhook triggers the workflow exactly once. - Global Threading We use Make’s “Reply to an email” module with the reply mode set to “specific recipients”. This gives us the Gmail threadId for correct threading while letting us control To and CC manually — which prevents the system from accidentally replying to itself instead of the customer. Subject lines and RFC headers (In-Reply-To, References) are handled automatically by Gmail.
- CC Formatting Make outputs CC recipients as a raw data array. We skip complex iterators. We use a simple inline formula directly inside the Asana module to document CCs cleanly in the task comment:
join(map(CC; "email"); ", ").
Part 3: Housekeeping
The workflow cleans up after itself to maintain focus. At the end of the Make scenario, the automation executes three steps:
- Make logs the sent reply as a permanent comment in the task history.
- It clears the text from the draft Custom Field.
- An Asana rule removes the ticket from the project. The system resets instantly for the next interaction.
Bottom line
Yes, this took a couple of hours … testing more than setting up. Now it runs smoothly. And I am honestly glad I don’t have to consider a dedicated helpdesk tool anymore.
What do you think, can a bi-directional email flow be helpful to some of your Asana use cases, too? Glad to answer questions about details I have forgotten to include.
Cheers
Daniel