Section 10.6.2 : Building your first Make scenario step by step
🎯 Learning objective
Build an end-to-end functional Make scenario integrating ChatGPT to automate a concrete business task: automatic form processing. You'll learn the complete process from trigger to logging, including conditional routing.
The project: automatic form processing
Imagine: you receive 50 requests per day through a contact form. Each request needs to be read, categorized (support? quote? complaint?), an appropriate response drafted, and everything logged in a tracking sheet. Manually, this takes 4 hours per day. With Make + ChatGPT, it takes 0 minutes — everything is automatic.
Here's the scenario we'll build:
- →A Google Form is submitted → trigger
- →Make retrieves the data → automatic extraction
- →ChatGPT analyzes and categorizes the request → intelligence
- →A Router sends it down the right path → conditional logic
- →A personalized response email is sent → action
- →Data is saved to Google Sheets → logging
Prerequisites: preparing your tools
Before building, prepare:
- →A Google Form with 4 fields: Name, Email, Subject (dropdown: Technical Support / Quote Request / Complaint / Other), Message (long text)
- →A Google Sheet "Request Tracker" with columns: Date | Name | Email | Subject | AI Category | Urgency | Summary | Status
- →An OpenAI API key (from platform.openai.com → API keys)
- →A Slack account (optional, for urgent notifications)
Step 1: Configure the trigger
Module: Google Forms > Watch Responses
- →On the Make canvas, click the big
+in the center → search for "Google Forms" - →Select the "Watch Responses" action
- →Click "Add" to create a connection → authorize access to your Google account
- →Select your form from the dropdown
- →Limit: leave at 10 (max responses processed per execution)
- →Click "OK" to confirm
What this module produces: on each execution, it returns new responses as structured data — {{1.Name}}, {{1.Email}}, {{1.Subject}}, {{1.Message}}.
Trigger: Watch vs Instant
"Watch Responses" checks for new responses at regular intervals (5, 15, 60 min). For an immediate response, use a Webhook instead: Google Forms → Google Apps Script → send webhook to Make. More complex to set up, but the response is near-instant rather than waiting for the next polling cycle.
Step 2: Analyze with ChatGPT
Module: OpenAI > Create a Chat Completion
Add the module by clicking the small + to the right of the trigger. Detailed configuration:
- →Connection: click "Add" → paste your OpenAI API key
- →Model:
gpt-4o-mini(fast and affordable, ~$0.15/million tokens) - →Messages:
- →Role: System
- →Message Content (the system prompt, crucial for quality):
You are a customer request processing assistant for a digital services company. You receive client messages and must analyze them accurately.
INSTRUCTIONS:
1. Categorize the request among: technical_support, quote, complaint, information, partnership
2. Assess urgency: high (blocking issue / unhappy customer), medium (standard request), low (simple question)
3. Summarize the request in ONE sentence
4. Write a professional, empathetic, personalized response (use the client's first name)
RULES for the response:
- Use informal tone if the client's message is casual, formal tone otherwise
- If complaint: start by acknowledging the problem and apologizing
- If quote: thank them and indicate a sales rep will follow up within 24h
- If support: provide a first troubleshooting suggestion if possible
RETURN STRICTLY as valid JSON, with no text before or after:
{
"category": "...",
"urgency": "high|medium|low",
"summary": "...",
"suggested_response": "...",
"sentiment": "positive|neutral|negative"
}
- →Add a second message with Role: User and Message Content:
Name: {{1.Name}}
Email: {{1.Email}}
Subject: {{1.Subject}}
Message: {{1.Message}}
- →Temperature:
0(for deterministic and consistent results) - →Max Tokens:
500(sufficient for the JSON response) - →Response Format: select
json_object(forces the model to return valid JSON)
Why gpt-4o-mini and not GPT-5? For this standard categorization/writing task, gpt-4o-mini is ~20x cheaper and sufficiently capable. GPT-5 is reserved for complex reasoning tasks. At 50 requests/day, the difference: $0.25/month (mini) vs $5/month (GPT-5). Over a year: $3 vs $60.
Step 3: Parse the AI's JSON response
The OpenAI module returns a JSON string in {{2.choices[0].message.content}}. To use individual fields (category, urgency, etc.) in subsequent modules, you have two options:
Option A — parseJSON inline (what we use):
{{parseJSON(2.choices[0].message.content).category}}
{{parseJSON(2.choices[0].message.content).urgency}}
{{parseJSON(2.choices[0].message.content).suggested_response}}
Option B — JSON > Parse module (cleaner for complex scenarios): Add a "JSON > Parse JSON" module between OpenAI and the Router. It creates properly named variables.
Step 4: Route based on category and urgency
Module: Router
Add a Router after the OpenAI module (or JSON Parse). Create 3 routes:
Route 1 — High urgency (complaint or blocking bug):
- →Condition:
{{parseJSON(2.choices[0].message.content).urgency}}equalshigh - →Actions:
- →Slack > Send a Message → #client-alerts channel → message:
🚨 URGENT — {{1.Name}} ({{parseJSON(2.choices[0].message.content).category}}): {{parseJSON(2.choices[0].message.content).summary}} - →Gmail > Send an Email → immediate response (see Step 5)
- →Slack > Send a Message → #client-alerts channel → message:
Route 2 — Quote request:
- →Condition:
{{parseJSON(2.choices[0].message.content).category}}equalsquote - →Actions:
- →Gmail > Send an Email → thank-you email + "a sales rep will get back to you within 24h"
- →Google Sheets > Add Row → add to CRM (sheet "Prospects")
Route 3 — Other requests (fallback):
- →Condition: none (default route)
- →Actions:
- →Gmail > Send an Email → personalized standard response
Step 5: Send the response email
Module: Gmail > Send an Email
Configuration:
- →To:
{{1.Email}} - →Subject:
Re: {{1.Subject}} - →Content Type: HTML
- →Body:
<p>{{parseJSON(2.choices[0].message.content).suggested_response}}</p>
<br>
<p>Best regards,<br>The Support Team<br>
<em>This message was generated automatically. If you'd like to speak with a human, simply reply to this email.</em></p>
Important point: always add the "generated automatically" mention. It's a best practice both ethically and legally (AI transparency).
Step 6: Log to Google Sheets
Module: Google Sheets > Add a Row (present on ALL routes)
| Column | Mapping | Why |
|---|---|---|
| A — Date | {{formatDate(now; "MM/DD/YYYY HH:mm")}} | Timestamp |
| B — Name | {{1.Name}} | Identification |
| C — Email | {{1.Email}} | Contact |
| D — Subject | {{1.Subject}} | Context |
| E — AI Category | {{parseJSON(2.choices[0].message.content).category}} | Classification |
| F — Urgency | {{parseJSON(2.choices[0].message.content).urgency}} | Prioritization |
| G — Summary | {{parseJSON(2.choices[0].message.content).summary}} | Quick overview |
| H — Sentiment | {{parseJSON(2.choices[0].message.content).sentiment}} | Trends |
| I — Status | Processed automatically | Tracking |
This Google Sheet becomes your dashboard: you can create charts to track volume by category, average sentiment, urgency trends, etc.
Step 7: Add error handling
This is the step beginners forget — and it's what separates a prototype from a production tool.
Error Handler on the OpenAI module:
- →Right-click on the OpenAI module → "Add error handler"
- →Choose "Resume" → the scenario continues despite the error
- →Add a Gmail > Send an Email module in the handler: send yourself an alert email with error details
- →Add a Google Sheets > Add a Row module: log the error in an "Errors" tab with the date, error message, and form data (for manual reprocessing)
Common OpenAI module errors:
- →
429 Rate Limit Exceeded: too many simultaneous requests → add a Sleep module (2 seconds) before the OpenAI module - →
500 Internal Server Error: OpenAI outage → the error handler + automatic retry (configurable in scenario settings) - →
Invalid API Key: expired or revoked key → regenerate at platform.openai.com
Test the complete scenario
- →Click Run once (green button at the bottom)
- →Open your Google Form in another tab
- →Submit 3 test forms with different profiles:
- →Test 1: "My site has been down for 3 days, this is unacceptable" (high urgency, complaint)
- →Test 2: "Hello, I'd like a quote for an e-commerce website" (quote, low urgency)
- →Test 3: "Do you offer training courses?" (information, low urgency)
- →Return to Make → verify all 3 bubbles are green (success)
- →Click on each bubble to inspect input/output data
- →Verify: email received? Slack notified (if high urgency)? Google Sheet updated?
- →If everything works: activate scheduling → ON, interval: 15 minutes
Before activating in production
ALWAYS test with at least 5 varied scenarios before activating scheduling. Check specifically: cases where the form has empty fields, very short messages (3 words), very long messages (2000 characters), special characters (accents, emojis, URLs). Each of these edge cases can break the JSON or produce incorrect categorization.
Why use gpt-4o-mini rather than GPT-5 in an automated Make categorization scenario?
What should you do if the OpenAI module returns a 429 error (Rate Limit) in your Make scenario?