Submit any customer support call recording URL along with the agent name, customer details, issue category, call date, and product name and the workflow transcribes and analyzes the full call automatically. WayinVideo's Transcription API returns a speaker-labeled timestamped transcript which GPT-4o-mini reads to extract 10 structured fields — ticket subject, issue summary, root cause, resolution given, follow-up actions, key customer quotes, sentiment, priority, CSAT prediction, and tags. A Zendesk ticket is created via the REST API with the customer as the requester and the full structured summary as the ticket body, and every call is logged to Google Sheets with the Zendesk Ticket ID and URL. Built for customer support teams, customer success managers, and QA teams who record support calls and want structured tickets created automatically without manually listening to recordings after every call.
⚠️ WayinVideo API key appears in 2 steps — replace
YOUR_WAYINVIDEO_API_KEYin both 2. WayinVideo — Submit Transcription and 4. WayinVideo — Get Transcript Results. Missing either one will cause the workflow to fail.
⚠️ Three Zendesk placeholders in node 11 — replace
YOUR_ZENDESK_SUBDOMAINin both the URL and the Ticket URL column,YOUR_ZENDESK_EMAIL, andYOUR_ZENDESK_API_TOKENin the Authorization header of 11. HTTP Request — Create Zendesk Ticket.
Estimated Setup Time: 25–30 minutes
Import the workflow — Open n8n → Workflows → Import from JSON → paste the workflow JSON → click Import
Get your WayinVideo API key — Log in to your WayinVideo account → go to Account Settings → copy your API key
Add your WayinVideo API key to node 2 — Open node 2. WayinVideo — Submit Transcription → find the Authorization header value Bearer YOUR_WAYINVIDEO_API_KEY → replace YOUR_WAYINVIDEO_API_KEY with your actual key
Add your WayinVideo API key to node 4 — Open node 4. WayinVideo — Get Transcript Results → find the same Authorization header → replace YOUR_WAYINVIDEO_API_KEY with the same key
Connect OpenAI — Open node 9. OpenAI — GPT-4o-mini Model → click the credential dropdown → add your OpenAI API key → test the connection
Get your Zendesk API token — Log in to Zendesk Admin Center → go to Apps and Integrations → APIs → Zendesk API → click Add API token → give it a name → copy the token (you can only see it once)
Get your Zendesk subdomain — Your Zendesk subdomain is the part before .zendesk.com in your Zendesk URL — for example if your URL is mycompany.zendesk.com then your subdomain is mycompany
Configure Zendesk credentials in node 11 — Open node 11. HTTP Request — Create Zendesk Ticket → in the URL, replace YOUR_ZENDESK_SUBDOMAIN with your actual subdomain → in the Authorization header value, replace YOUR_ZENDESK_EMAIL with the email address of your Zendesk agent account, replace YOUR_ZENDESK_API_TOKEN with the token you copied in step 6
Create your Google Sheet tab — Open your Google Sheet → add a tab named exactly Support Call Log → add these 19 column headers in row 1: Call Date, Agent Name, Customer Name, Customer Email, Product, Issue Category, Issue Summary, Root Cause, Resolution Given, Follow-up Required, Sentiment, Priority, CSAT Prediction, Tags, Zendesk Ticket ID, Zendesk Ticket URL, Call Duration (min), Recording URL, Created On
Get your Google Sheet ID — Open your Google Sheet in a browser → copy the string between /d/ and /edit in the URL
Connect Google Sheets — Open node 12. Google Sheets — Log Support Record → click the document field → replace YOUR_GOOGLE_SHEET_ID by selecting your spreadsheet or entering the Sheet ID manually → also replace YOUR_ZENDESK_SUBDOMAIN in the Zendesk Ticket URL formula in this step → click the credential dropdown → add Google Sheets OAuth2 → authorize access
Activate the workflow — Toggle the workflow to Active → copy the Form URL from node 1. Form — Support Call + Details → open it in a browser to submit your first call
Step 1 — Form: Support Call + Details
Your support agent opens the form URL and fills in seven fields: the call recording URL (Zoom, Loom, Google Meet, or any direct link), the agent name, the customer name, the customer email, the issue category (e.g. Billing, Technical Issue, Onboarding), the call date, and the product or service name. Submitting the form starts the workflow.
Step 2 — HTTP: WayinVideo — Submit Transcription
The call recording URL is sent to WayinVideo's Transcription API using the /v2/transcripts endpoint. WayinVideo accepts the job and returns a task ID. The transcription returns speaker-labeled segments — each with a speaker name, start time, end time, and spoken text.
Step 3 — Wait: 90 Seconds
The workflow pauses 90 seconds before the first status check, giving WayinVideo time to transcribe the full call.
Step 4 — HTTP: WayinVideo — Get Transcript Results
A GET request checks the transcription results endpoint using the task ID from step 2. It returns the current status and, once complete, the full transcript array with each speaker-labeled segment.
Step 5 — IF: Transcription Complete?
This is the polling gate. If the status equals SUCCEEDED (YES path), the transcript is ready and the workflow moves forward to formatting. If still processing (NO path), the workflow routes to 6. Wait — 30 Seconds Retry which pauses 30 seconds then loops back to step 4. This repeats until SUCCEEDED.
Step 6 — Wait: 30 Seconds Retry
When the transcript is not yet ready, the workflow waits 30 seconds then returns to step 4 for another check.
Step 7 — Code: Format Transcript
Each transcript segment is formatted as [Speaker | MM:SS] Spoken text and joined into a single readable block. Total call duration in minutes, unique speakers, and transcript word count are also calculated. All seven form inputs are packaged alongside the formatted transcript for the GPT prompt.
Step 8 — AI Agent: Extract Support Summary
GPT-4o-mini receives the full formatted transcript as the main input and the call context (agent, customer, product, category, date, duration, recording URL) in the system prompt. It extracts 10 labeled sections: TICKET_SUBJECT (a specific 60–80 character subject line), ISSUE_SUMMARY (2–3 sentences of what the customer reported), ROOT_CAUSE (why it happened or "Under investigation"), RESOLUTION_GIVEN (what was done or "Unresolved — escalation required"), FOLLOW_UP_REQUIRED (specific actions or "None"), KEY_QUOTES (the most important things the customer said), SENTIMENT (one of five levels), PRIORITY (one of four levels based on tone and severity), CSAT_PREDICTION (a number 1–5), and TAGS (5–8 lowercase comma-separated tags).
Step 9 — OpenAI: GPT-4o-mini Model
This is the language model powering the support analysis.
Step 10 — Code: Parse Support Output
All 10 labeled sections are extracted from the GPT output using regex. The priority text is mapped to the exact Zendesk API priority value using a lookup table (urgent → urgent, high → high, normal → normal, low → low). A structured Zendesk ticket body is assembled with clear section headers — SUPPORT CALL SUMMARY, ISSUE SUMMARY, ROOT CAUSE, RESOLUTION GIVEN, FOLLOW-UP REQUIRED, KEY QUOTES FROM CUSTOMER, CALL INTELLIGENCE (sentiment, priority, CSAT), and TAGS — each on separate lines so the ticket is immediately readable in Zendesk.
Step 11 — HTTP: Create Zendesk Ticket
A POST request creates the ticket in Zendesk via the REST API. The ticket includes the subject, the structured body, the customer's name and email as the requester, the mapped Zendesk priority, the type set to "problem", and the tags array parsed from the GPT output. Zendesk returns the new ticket's ID and other metadata.
Step 12 — Google Sheets: Log Support Record
One row is appended to your Support Call Log tab with all 19 columns. The Zendesk Ticket ID comes from the API response. The Zendesk Ticket URL is constructed directly in the sheet formula as https://YOUR_ZENDESK_SUBDOMAIN.zendesk.com/agent/tickets/TICKET_ID so every row has a clickable link to the ticket. All other fields come from the parsed GPT output and form inputs.
✅ Speaker-labeled transcript passed to GPT — Each segment includes the speaker name and timestamp so GPT can distinguish between what the customer said and what the agent said when extracting quotes and sentiment
✅ CSAT prediction per call — Every ticket includes a predicted satisfaction score based on how the call ended — allowing your team to prioritize follow-ups before survey results come in
✅ Structured ticket body with section headers — The Zendesk ticket body is formatted with labeled sections so any agent opening the ticket can read the summary, root cause, and follow-up in seconds
✅ Customer set as ticket requester automatically — The ticket is opened with the customer's email as the requester — not the agent's — so Zendesk email threading works correctly from the first reply
✅ Priority mapped to Zendesk API values — GPT's priority label is automatically converted to the exact lowercase value Zendesk expects in the API body — no manual conversion needed
✅ Zendesk Ticket URL in every sheet row — The log row includes a direct clickable link to the Zendesk ticket so QA and managers can jump from the sheet to the ticket in one click
✅ Tags parsed from GPT output and sent to Zendesk — The tags field from GPT is split, trimmed, and sent as a proper array in the Zendesk API body — making the ticket filterable immediately
Add a retry limit to stop infinite polling — Before node 6. Wait — 30 Seconds Retry, add a Set step that increments a poll counter, then add a second IF check to stop after 15 polls and send a Gmail error notification to the agent instead of looping indefinitely.
Send a Slack notification when a high-priority ticket is created — After node 11. HTTP Request — Create Zendesk Ticket, add an IF check that triggers only when priority equals "urgent" or "high", then add a Slack step that posts the ticket subject, customer name, and Zendesk URL to a #support-escalations channel.
Send a confirmation email to the agent — After node 12. Google Sheets — Log Support Record, add a Gmail step that sends the agent a plain-text email with the Zendesk ticket subject, ID, URL, and predicted CSAT so they have a record without opening the sheet.
Add a Zendesk assignee — In the JSON body of node 11. HTTP Request — Create Zendesk Ticket, add "assignee_id": YOUR_ZENDESK_AGENT_ID inside the ticket object to automatically assign every created ticket to a specific agent or team — get the agent ID from your Zendesk Admin Center.
Change the ticket type — In node 11. HTTP Request — Create Zendesk Ticket, change "type": "problem" to "type": "incident", "question", or "task" depending on the nature of the support calls you are logging — this affects how Zendesk categorizes and reports on the tickets.
Form submission not starting the workflow:
WayinVideo API key errors:
YOUR_WAYINVIDEO_API_KEY in node 2. WayinVideo — Submit Transcription is replaced with your actual key — this workflow uses the /v2/transcripts endpoint, confirm the URL in node 2 is correctWorkflow stuck in the polling loop:
Zendesk ticket not being created:
YOUR_ZENDESK_SUBDOMAIN in the URL of node 11. HTTP Request — Create Zendesk Ticket is replaced with just your subdomain (e.g. mycompany) — not the full URLYOUR_ZENDESK_EMAIL is the email address of your Zendesk agent account — it must be an active agent email with API accessYOUR_ZENDESK_API_TOKEN is replaced with the token generated in Admin Center → APIs — tokens can only be viewed once at creation; if lost, generate a new oneGoogle Sheets not saving the row:
YOUR_GOOGLE_SHEET_ID in node 12. Google Sheets — Log Support Record is replaced with your actual Sheet IDYOUR_ZENDESK_SUBDOMAIN in the Zendesk Ticket URL formula in node 12 is also replaced — this is a second occurrence of the placeholderNeed help setting this up or want a custom version built for your team or agency?
📧 Email: [email protected]
🌐 Website: https://isawow.com/