Which case is for you?
Case A – for a small e-shop with a simple helpdesk: every complaint becomes a ticket in Freshdesk.
Case B – for support teams in Intercom: every complaint becomes an internal ticket in Intercom.
Send a short survey after every purchase, and let every unhappy answer open a ticket for your support team on its own, with the order number and the customer's e-mail already filled in. Nobody has to read through responses to find the complaints.
This is the ticket your team gets in Freshdesk in Case A:
And this is the internal ticket your team gets in Intercom in Case B:
How this works. Your order confirmation e-mail links to a Survio survey with the order number and the customer's e-mail in the link. Survio sends each completed response to a webhook URL. An automation tool (we use n8n in this guide) checks whether the customer is unhappy and, if so, creates a ticket in your helpdesk.
New to webhooks in Survio? Start with Webhooks: send responses to your other tools in real time, then come back here.
What you'll build
In both cases, an unhappy response means a rating of 1 or 2 out of 5, or the answer Rather dissatisfied or Dissatisfied.
At a glance | Case A: Freshdesk | Case B: Intercom |
Result | A new ticket in Freshdesk | An internal back-office ticket in Intercom |
Tools | Survio, n8n, Freshdesk | Survio, n8n, Intercom |
Best for | A small e-shop with a simple helpdesk | A support team that already works in Intercom |
Before you start
A Survio survey on a paid plan. Webhooks and URL parameters aren't available on the Free plan, and each plan allows a set number of webhooks per survey (see the webhooks article).
An n8n account, n8n Cloud or self-hosted.
Your helpdesk: for Case A, a Freshdesk account; for Case B, an Intercom workspace where you can manage ticket types and create an app in the Developer Hub.
In this guide we use a short customer satisfaction survey: a star rating, an "Overall, how satisfied are you?" choice question, a "How did you shop with us this time?" choice question and an open comment.
Step 1 — Put the order and the e-mail into the survey link
Open your survey, go to Get responses → URL parameters and create two parameters:
emailandorder-id. Parameter names can't contain underscores. See URL parameters.Add the survey link to your order confirmation e-mail and let your e-shop fill in both values for each customer.
The ticket needs the customer's e-mail. A helpdesk ticket always belongs to a customer, and the workflow takes the e-mail from the email parameter. Responses that arrive without it can't become tickets.
Step 2 — Create the webhook in n8n
In n8n, create a new workflow and add a Webhook node as the trigger.
Set HTTP Method to POST.
Switch to the Production URL tab and copy the address.
Click Publish. The production URL only accepts deliveries once the workflow is published.
Use the Production URL, not the Test URL. The Test URL only listens while the editor is waiting for a test event, so Survio's deliveries fail as soon as you close it. Survio retries a failed delivery for about a day, and after 5 days of failures it switches the webhook off.
Step 3 — Connect the survey in Survio
Open your survey and go to Get responses.
In the left sidebar under Automations & Integrations, select Webhooks and click + Add a webhook.
Paste the n8n Production URL into Webhook URL and click Save webhook. The webhook is switched on straight away.
Step 4 — Send a test response and find your question ids
Open your survey through a link with both parameters filled in and submit one complete response with a low rating.
In n8n, open the Executions tab. The delivery arrives within a few seconds.
Open the execution and click the Webhook node. Expand
body, thendata. The order and the e-mail are inparameters; underanswers, write down the id of each question.
Case A — Open a ticket in Freshdesk
Prepare Freshdesk
In Freshdesk, click your profile picture in the top right corner, choose Profile Settings and click View API key. Treat the key like a password. You'll also need your Freshdesk domain: the part of your helpdesk address before .freshdesk.com.
Build the workflow
Three steps follow the webhook: Unhappy? lets only unhappy responses through, Prepare ticket writes the subject and description, and Create ticket in Freshdesk opens the ticket.
Add an If node, rename it to
Unhappy?, and add three conditions combined with OR: the rating is less than or equal to 2, the satisfaction answer is equal to Rather dissatisfied, or it's equal to Dissatisfied. Pick the answers by question id, as in the table below.On the true output, add an Edit Fields (Set) node named
Prepare ticketwith three String fields:E-mail,TitleandDescription.After it, add a Freshdesk node named
Create ticket in Freshdeskand choose the resource Ticket and the operation Create. Create a Freshdesk credential with your API key, and enter only your domain, for exampleyourshopforhttps://yourshop.freshdesk.com.
Where | What to enter |
Unhappy?: rating |
|
Unhappy?: satisfaction |
|
Prepare ticket: E-mail |
|
Prepare ticket: Title |
|
Prepare ticket: Description | The rating, satisfaction, channel, comment, order and time, separated by |
Create ticket: requester | Requester Identification: Email, and in Value: |
Create ticket: status and priority | Status: Open, Priority: High, Source: keep Portal |
Create ticket: options | Under Options, click Add option and add Description |
If the e-mail doesn't belong to any contact in Freshdesk yet, Freshdesk creates the contact. Click Publish again; changes you make after publishing go live only when you publish again.
Freshdesk e-mails the customer about the new ticket. By default, Freshdesk sends the requester a "Ticket Received" e-mail with the ticket subject in it, so the customer would see "Unhappy customer: …". Either turn off New Ticket Created under Admin → Email Notifications → Requester Notifications, or change the Title in Prepare ticket to something you're happy for the customer to read.
Case B — Open a ticket in Intercom
Prepare Intercom
In Intercom, go to Settings → Inbox → Tickets and create a new ticket type, for example
Survey feedback, in the Back-office category. Back-office tickets are internal: the customer doesn't see them. See Intercom's guide How to set up ticket types.Find the ticket type's id: in Settings → Inbox → Tickets, open the Ticket types tab, find your type under Back-office ticket types and click the pencil icon. The id is the number at the end of the page address, for example
…/ticket-types/1234567. You'll paste it into the workflow.Create an access token: in the Intercom Developer Hub, open your app and go to Configure → Authentication. See Intercom's authentication guide. Treat the token like a password.
Build the workflow
Three steps follow the webhook: Unhappy? lets only unhappy responses through, Prepare ticket writes the title and description, and Create ticket in Intercom sends them to Intercom.
Add an If node, rename it to
Unhappy?, and add three conditions combined with OR: the rating is less than or equal to 2, the satisfaction answer is equal to Rather dissatisfied, or it's equal to Dissatisfied. Pick the answers by question id, as in the table below.On the true output, add an Edit Fields (Set) node named
Prepare ticketwith three String fields:E-mail,TitleandDescription.After it, add an HTTP Request node named
Create ticket in Intercom.
Where | What to enter |
Unhappy?: rating |
|
Unhappy?: satisfaction |
|
Prepare ticket: E-mail |
|
Prepare ticket: Title |
|
Prepare ticket: Description | The rating, satisfaction, channel, comment, order and time, one per line (see the ready-made workflow) |
Create ticket: Method and URL | POST, |
Create ticket: Authentication | Authentication: Generic Credential Type, Generic Auth Type: Bearer Auth, then create a Bearer Auth credential with your Intercom access token |
Create ticket: Header | Send Headers on, |
Create ticket: Body | Send Body on, Body Content Type: JSON, Specify Body: Using JSON, and in JSON: |
If the e-mail doesn't belong to anyone in Intercom yet, Intercom creates the contact. Click Publish again; changes you make after publishing go live only when you publish again.
Get the ready-made workflow
Instead of building Step 2 and your case by hand, start from our workflow. Download the file for your case from the attachments at the end of this article: survio-unhappy-responses-to-freshdesk-tickets.json for Case A, or survio-unhappy-responses-to-intercom-tickets.json for Case B. Then:
In n8n, create an empty workflow. Open the menu (three dots) next to the workflow name and choose Import, then From file. Pick the file you downloaded.
Open Unhappy? and Prepare ticket and replace the question ids with your own and Europe/Prague with your time zone.
Case A: open Create ticket in Freshdesk and connect your Freshdesk account with your API key and domain.
Case B: open Create ticket in Intercom, add your access token as a Bearer Auth credential and put your ticket type's id in place of
YOUR-TICKET-TYPE-ID.Open Survio Webhook, copy the Production URL into Survio (Step 3) and click Publish.
Test it end to end
Open the survey through a link with your own e-mail and a test order number, and submit a rating of 2.
Within seconds, a new ticket appears in Freshdesk (Case A) or a new back-office ticket in Intercom (Case B), with the order number in the subject.
Submit a rating of 5. No ticket is created.
Close the test ticket, and look at the Executions tab in n8n for both deliveries.
Troubleshooting
Symptom | Cause | Fix |
Nothing arrives in n8n | The Test URL is in Survio, or the workflow isn't published | Copy the Production URL into Survio and click Publish |
The Freshdesk credential doesn't connect | The domain is entered as the whole address, or the API key is wrong | Enter only the part before |
The Freshdesk ticket shows the whole response on one line | The Description uses plain line breaks | Separate the lines with |
Create ticket in Intercom fails with 401 | The access token is wrong or missing | Check the Bearer Auth credential in Create ticket in Intercom |
Create ticket fails because of the ticket type |
| Put your ticket type's id into the body |
Create ticket fails because of the requester or contact | The response had no | Make sure your order e-mail fills in the parameter |
Every response creates a ticket | Prepare ticket is on the false output, or the conditions are combined with AND | Connect it to the true output and combine the conditions with OR |
Your latest change has no effect | The workflow is published, but the change isn't (the Publish button shows a dot) | Click Publish again |
Survio switched the webhook off | The webhook URL failed for 5 days in a row | Fix the cause, then switch the webhook back on in Survio |
Good to know
Survio sends only completed responses, one message per response, within seconds.
Nothing is sent retroactively: not responses from before the webhook existed, and not responses from while it was paused.
A failed delivery is retried up to 8 times over roughly 27 hours, and each attempt waits up to 30 seconds for a reply.
If deliveries fail for 5 days in a row, Survio switches the webhook off and you need to switch it back on.
Pausing a webhook keeps its slot; deleting it is permanent.
Survio doesn't keep a delivery history in the app. The Executions tab in n8n is your log.
Sending responses to webhooks doesn't use up any extra responses from your plan.
Rather have us set it up? On the Webhooks page in Survio, click Get expert setup, tell us what you'd like to happen, and our team will build it, test it and hand you a working webhook.
