make-scenario-building
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseMake Scenario Building
Make 场景构建
This skill guides building a scenario in Make. A scenario is an automated workflow composed of modules connected together. Before building anything, Phase 1 below MUST be completed.
本技能指导如何在Make中构建场景。场景是由相互连接的模块组成的自动化工作流。在开始构建之前,必须完成以下第一阶段的内容。
Phase 1: Understand the Business Need & Identify Modules
阶段1:理解业务需求并确定模块
Phase 1 has three steps. Do not skip or rush any of them.
阶段1包含三个步骤,请勿跳过或仓促完成任何一步。
Step 1: Clarify the Business Use Case
步骤1:明确业务用例
The first job is to understand exactly what the user wants to automate. Use an adaptive interview approach:
-
Start conversational. Ask 1-2 focused questions about what they want to achieve:
- What task or process do they want to automate?
- Which systems or services are involved?
-
Drill deeper based on answers. Once the basics are clear, clarify:
- What triggers the automation? (time interval, webhook, manual execution)
- What data moves between systems and in which direction?
- Are there any conditions, branching logic, or error handling needs?
-
If answers are vague, get structured. Ask explicitly:
- "What is the source system and what data are you pulling from it?"
- "What is the destination system and what should happen there?"
- "Should this run on a schedule, on-demand, or when an event occurs?"
CRITICAL — Provider disambiguation (MUST follow): When the user mentions a generic category OR describes a capability without naming a specific app, the agent MUST ask which provider/service they use BEFORE proceeding to Step 2. Never assume a provider.
Common ambiguous categories and their possible providers (non-exhaustive — apply the same logic to any category not listed):
- Forms/surveys: Google Forms, Typeform, JotForm, Tally, Microsoft Forms, SurveyMonkey, ...
- AI/LLM: OpenAI, Anthropic, Google AI, Make AI, Azure OpenAI, Cohere, ...
- Email: Gmail, Outlook, SendGrid, Mailchimp, SMTP, ...
- Calendar: Google Calendar, Outlook Calendar, Calendly, ...
- Cloud storage: Google Drive, Dropbox, OneDrive, Box, ...
- CRM: Salesforce, HubSpot, Pipedrive, Zoho CRM, ...
- Databases: Airtable, Google Sheets, PostgreSQL, MySQL, MongoDB, ...
- Project management: Jira, Asana, Monday.com, Trello, ClickUp, Linear, ...
- Messaging/chat: Slack, Discord, Microsoft Teams, Telegram, ...
This also applies when the user describes a capability rather than naming an app. Words like "summarize", "analyze sentiment", "feedback form", "send a notification", or "store data" describe what they want to do — not which service to use. Ask.
Bad: User says "list responses from my feedback form and post a sentiment summary into Discord." Agent assumes Google Forms and OpenAI and proceeds. Good: Same request. Agent asks: "Which form tool holds your responses — Google Forms, Typeform, JotForm, or something else? And for sentiment analysis, do you want to use OpenAI, Anthropic, Make AI, or another AI service?"
Different providers have different modules, capabilities, and connection requirements — guessing wastes time and produces wrong blueprints.
Continue until the use case can be clearly articulated in one paragraph. Every app in the scenario must be explicitly identified by name — if any app is still a generic category or implied by a capability description, ask before proceeding. Do NOT proceed to Step 2 until the business need is fully understood.
首先要准确理解用户想要自动化的内容。采用自适应访谈方法:
-
以对话形式开场。提出1-2个聚焦于目标的问题:
- 他们想要自动化哪些任务或流程?
- 涉及哪些系统或服务?
-
根据回答深入挖掘。在明确基础信息后,进一步确认:
- 自动化的触发条件是什么?(时间间隔、webhook、手动执行)
- 数据在系统间如何流转,方向是什么?
- 是否存在条件判断、分支逻辑或错误处理需求?
-
若回答模糊,采用结构化提问。明确询问:
- "源系统是什么?您要从中提取哪些数据?"
- "目标系统是什么?在该系统中需要执行什么操作?"
- 「此自动化应该按计划运行、按需运行,还是在事件发生时运行?"
关键要求——供应商歧义消除(必须遵守):当用户提及通用类别或描述功能但未指定具体应用时,Agent必须先询问他们使用的供应商/服务,再进入步骤2。切勿假设供应商。
常见歧义类别及可能的供应商(非 exhaustive——对未列出的类别应用相同逻辑):
- 表单/调查:Google Forms、Typeform、JotForm、Tally、Microsoft Forms、SurveyMonkey等
- AI/LLM:OpenAI、Anthropic、Google AI、Make AI、Azure OpenAI、Cohere等
- 邮件:Gmail、Outlook、SendGrid、Mailchimp、SMTP等
- 日历:Google Calendar、Outlook Calendar、Calendly等
- 云存储:Google Drive、Dropbox、OneDrive、Box等
- CRM:Salesforce、HubSpot、Pipedrive、Zoho CRM等
- 数据库:Airtable、Google Sheets、PostgreSQL、MySQL、MongoDB等
- 项目管理:Jira、Asana、Monday.com、Trello、ClickUp、Linear等
- 消息/聊天:Slack、Discord、Microsoft Teams、Telegram等
这一要求同样适用于用户描述功能而非指定应用的情况。诸如"总结"、"情感分析"、"反馈表单"、"发送通知"或"存储数据"等词汇描述的是要执行的操作,而非使用的服务。此时必须询问用户。
错误示例:用户说"列出我反馈表单的回复,并将情感分析结果发布到Discord"。Agent假设使用Google Forms和OpenAI并继续操作。 正确示例:相同请求下,Agent询问:"您的回复存储在哪个表单工具中——Google Forms、Typeform、JotForm还是其他工具?对于情感分析,您希望使用OpenAI、Anthropic、Make AI还是其他AI服务?"
不同供应商的模块、功能和连接要求各不相同——猜测会浪费时间并生成错误的蓝图。
继续沟通,直到可以用一段话清晰描述用例。场景中的每个应用都必须明确指定名称——如果任何应用仍为通用类别或通过功能描述隐含,请在进入步骤2前询问用户。在完全理解业务需求前,切勿进入步骤2。
Step 2: Identify Make Modules
步骤2:确定Make模块
Once the use case is clear, map it to Make modules using the MCP tools available from the Make MCP server:
-
Find relevant apps. Use thetool (or a similarly named tool if unavailable) with a description of the user's need. This returns recommended Make apps for the involved systems.
apps_recommend- One app per call. Never batch multiple apps in a single call. Call separately for each distinct app/service. These calls can run in parallel.
apps_recommend
- One app per call. Never batch multiple apps in a single
-
List available modules. For each relevant app, use thetool (or similarly named) to see what modules (triggers, actions, searches, transformers) are available. Pass the
app_modules_listreturned byappVersion.apps_recommend -
Get app documentation. For each app, callusing the exact
app_documentation_getvalue returned byappName(do not abbreviate or modify it). This returns detailed capabilities and module descriptions. Call once per app, not per module.apps_recommend -
Select modules. Pick the specific modules needed:
- Trigger module — what starts the scenario (e.g., Watch New Rows, Webhook, Schedule)
- Action modules — what the scenario does (e.g., Create Record, Send Message, Update Row)
- Utility modules — if needed for data transformation, iteration, aggregation, routing, or error handling
If a tool is not found by exact name, search for similarly named tools on the Make MCP server. The key capability needed is: recommending apps and listing their modules.
Module name verification: Never guess module names. Always verify via . Case and spelling must match exactly.
app_modules_listNo scheduler module: There is no scheduler module in Make. Scheduling is a scenario-level setting, not a module. The scenario always starts with the first module (trigger or action). Scheduling is configured separately via the tool.
scenario_scheduling_updateIMPORTANT: As modules are identified, record the following details from the tool responses — they are needed in subsequent phases:
- App name (exact name as returned by the tool)
- App version (exact version as returned by the tool)
- Module name (exact technical name/slug of each module you plan to use)
明确用例后,使用Make MCP服务器提供的MCP工具将其映射到Make模块:
-
查找相关应用。使用工具(若不可用则使用名称类似的工具),传入用户需求描述。该工具会返回与涉及系统对应的推荐Make应用。
apps_recommend- 每次调用仅针对一个应用。切勿在单次调用中批量处理多个应用。针对每个不同的应用/服务单独调用,这些调用可以并行执行。
apps_recommend
- 每次调用仅针对一个应用。切勿在单次
-
列出可用模块。对于每个相关应用,使用工具(或名称类似的工具)查看可用的模块(触发器、操作、搜索、转换器)。传入
app_modules_list返回的apps_recommend。appVersion -
获取应用文档。对于每个应用,使用返回的准确
apps_recommend调用appName(请勿缩写或修改)。该工具会返回详细的功能和模块描述。每个应用调用一次,而非每个模块调用一次。app_documentation_get -
选择模块。挑选所需的特定模块:
- 触发模块——启动场景的条件(例如:Watch New Rows、Webhook、Schedule)
- 操作模块——场景要执行的操作(例如:Create Record、Send Message、Update Row)
- 实用模块——如需进行数据转换、迭代、聚合、路由或错误处理则使用
若未找到名称完全匹配的工具,请在Make MCP服务器上搜索名称类似的工具。核心需求是:推荐应用并列出其模块。
模块名称验证:切勿猜测模块名称。始终通过验证。大小写和拼写必须完全匹配。
app_modules_list无调度模块:Make中没有调度模块。调度是场景级别的设置,而非模块。场景始终从第一个模块(触发器或操作)开始。调度通过工具单独配置。
scenario_scheduling_update重要提示:在确定模块时,记录工具返回的以下详细信息——后续阶段需要这些信息:
- 应用名称(工具返回的准确名称)
- 应用版本(工具返回的准确版本)
- 模块名称(计划使用的每个模块的准确技术名称/别名)
Step 2.5: Look Up Reference Templates
步骤2.5:查找参考模板
Once apps and modules are identified, search the Make public template library for similar scenarios. Studying an existing template's blueprint reveals canonical module versions, mapper shapes, and aggregator/feeder bindings that aren't visible from alone.
app-module_getRecommended whenever the planned flow includes:
- An aggregator (,
util:TextAggregator, etc.)builtin:BasicAggregator - A Make AI Tools module or any AI provider module
- An app you haven't configured earlier in this session
- Multi-module composition (more than 2-3 modules, branching, iteration)
Skip allowed for single-module trigger → single-action flows with well-known apps and no aggregation/AI.
How:
- with
public-templates_listandname: <use-case keywords>usedApps: <app slugs from Step 2> - If matches found, pick the highest-one with the most app overlap
usage - to fetch the full structure
public-templates_get-blueprint - Use as STRUCTURAL reference — NOT as the literal blueprint to copy. Templates often implement a slightly different pattern (e.g., per-item loop vs digest-style aggregation). Note diffs and present them to the user in Step 3.
If returns "Organization-bound request can't be used outside of the Organization Context", retry once; if it persists, reconnect the Make MCP server ( reauth) and retry. If still failing, proceed without — the template is a nice-to-have reference, not a requirement.
public-templates_get*/mcpSee Templates Lookup for search patterns, blueprint-diffing tips, and MCP workarounds.
确定应用和模块后,在Make公共模板库中搜索类似场景。研究现有模板的蓝图可以发现规范的模块版本、映射器结构以及聚合器/馈线绑定,这些信息无法仅通过获取。
app-module_get建议在以下情况使用:
- 计划的流程包含聚合器(、
util:TextAggregator等)builtin:BasicAggregator - 包含Make AI Tools模块或任何AI供应商模块
- 包含您在本次会话中尚未配置过的应用
- 多模块组合(超过2-3个模块、分支、迭代)
可跳过的情况:单模块触发器→单操作流程,涉及知名应用且无聚合/AI功能。
操作方法:
- 使用,参数为
public-templates_list和name: <用例关键词>usedApps: <步骤2中的应用别名> - 若找到匹配项,选择最高且应用重叠最多的模板
usage - 使用获取完整结构
public-templates_get-blueprint - 将其作为结构参考——而非直接复制的字面蓝图。模板通常实现略有不同的模式(例如:逐项循环vs摘要式聚合)。记录差异并在步骤3中向用户展示。
若返回"Organization-bound request can't be used outside of the Organization Context",重试一次;若仍失败,重新连接Make MCP服务器(重新授权)并再次重试。若依旧失败,则无需模板继续操作——模板是可选参考,非必需项。
public-templates_get*/mcp有关搜索模式、蓝图差异对比技巧和MCP解决方法,请参阅模板查找。
Step 3: Present the Module Composition & Get Confirmation
步骤3:展示模块组合并获取确认
Present the proposed module sequence to the user using flowchart notation:
Linear flow:
Trigger: Google Sheets - Watch New Rows → Slack - Send Message → Google Drive - Upload FileBranching flow (with If-Else + Merge) — mutually exclusive branches that converge:
Trigger: Webhook → HTTP - Make a Request → If-Else
├─ If (status = "success"): Slack - Send Message
└─ Else: Email - Send Error
→ Merge → Google Sheets - Log ResultBranching flow (with Router) — multiple branches can fire, no convergence:
Trigger: Webhook → HTTP - Make a Request → Router
├─ Route A (status = success): Slack - Send Message
└─ Route B (priority = high): Email - Send AlertFlow with iteration:
Trigger: Schedule → Google Sheets - Search Rows → Iterator → Slack - Send Message (for each row)For each module in the sequence, briefly note:
- The app and module name
- What it does in this scenario (1 sentence)
Then ask the user: "Does this module composition achieve what you need? Should I adjust any steps?"
Do NOT proceed beyond Phase 1 until the user confirms the composition is correct. The literal scenario layout and module configuration will be handled in subsequent phases.
使用流程图符号向用户展示提议的模块序列:
线性流程:
Trigger: Google Sheets - Watch New Rows → Slack - Send Message → Google Drive - Upload File分支流程(含If-Else + Merge)——互斥分支汇合:
Trigger: Webhook → HTTP - Make a Request → If-Else
├─ If (status = "success"): Slack - Send Message
└─ Else: Email - Send Error
→ Merge → Google Sheets - Log Result分支流程(含Router)——多个分支可触发,无需汇合:
Trigger: Webhook → HTTP - Make a Request → Router
├─ Route A (status = success): Slack - Send Message
└─ Route B (priority = high): Email - Send Alert含迭代的流程:
Trigger: Schedule → Google Sheets - Search Rows → Iterator → Slack - Send Message (for each row)对于序列中的每个模块,简要说明:
- 应用和模块名称
- 该模块在本场景中的作用(1句话)
然后询问用户:"此模块组合是否满足您的需求?是否需要调整任何步骤?"
在用户确认组合正确前,切勿进入阶段1之后的内容。场景的实际布局和模块配置将在后续阶段处理。
Phase 1 Output
阶段1输出
Once the user confirms, produce a Scenario Plan summary to carry into subsequent phases. This is the working reference — do not lose it.
undefined用户确认后,生成场景计划摘要,用于后续阶段。这是工作参考文档——请勿丢失。
undefinedScenario Plan
场景计划
Use case: <one paragraph summary>
Trigger type: <schedule | webhook | manual | event-based>
用例:<一段话摘要>
触发类型:<schedule | webhook | manual | event-based>
Modules
模块
| # | App | App Version | Module (slug) | Module Label | Role in scenario |
|---|---|---|---|---|---|
| 1 | ... | ... | ... | ... | ... |
| 2 | ... | ... | ... | ... | ... |
| # | 应用 | 应用版本 | 模块(别名) | 模块标签 | 在场景中的角色 |
|---|---|---|---|---|---|
| 1 | ... | ... | ... | ... | ... |
| 2 | ... | ... | ... | ... | ... |
Flow
流程
<flowchart notation from Step 3>
This table is the source of truth for which apps and modules will be used. Subsequent phases will reference it directly.
**CRITICAL — Plan adherence:** Once the user confirms the Scenario Plan, treat it as a binding contract. If during Phase 2 a reason emerges to change the module composition, flow structure, or branching pattern (e.g., switching from If-Else + Merge to Router, adding or removing modules, changing the trigger type), STOP and present the proposed change to the user with a clear explanation of why, along with an updated plan summary highlighting what has changed. Do NOT silently deviate from the confirmed plan.
---<步骤3中的流程图符号>
该表格是将使用的应用和模块的权威来源。后续阶段将直接参考此表格。
**关键要求——遵守计划**:用户确认场景计划后,将其视为具有约束力的约定。若在阶段2中出现需要更改模块组合、流程结构或分支模式的情况(例如:从If-Else + Merge切换为Router、添加或删除模块、更改触发类型),**立即停止**并向用户展示提议的更改,清晰说明原因,并提供突出显示更改内容的更新计划摘要。切勿擅自偏离已确认的计划。
---Phase 2: Configure, Deploy & Verify
阶段2:配置、部署与验证
Once the user confirms the module composition from Phase 1, proceed through these steps:
用户确认阶段1的模块组合后,执行以下步骤:
Step 1: Secure Connections (REQUIRED — never auto-select)
步骤1:安全连接(必填——切勿自动选择)
CRITICAL — STOP and ask before proceeding. This is an interactive checkpoint. For EVERY app that needs a connection — even if only one matching connection exists — list the options and ask the user which connection to use. Do NOT auto-select a connection. Do NOT call any module-specific RPCs ( for spreadsheet lists, channel lists, folder lists, etc.) until the user has explicitly confirmed a connection for every app. This is a hard gate: no confirmation, no RPCs.
rpc_execute-
Extract connection requirements. Before checking connections, callwith the unconfigured blueprint (all modules placed, parameters empty). This returns the authoritative list of: which modules need connections, the connection type for each, and the required OAuth scopes. Use this output — not manual inspection of the Scenario Plan — as the definitive checklist. Builtin modules (
extract_blueprint_components,builtin:BasicRouter,builtin:BasicFeeder, etc.) do NOT need connections. AI agent modules (json:ParseJSON) are NOT builtin — they require an AI provider connection viaai-local-agent:RunLocalAIAgent.makeConnectionId -
Check existing connections (with scope verification). Callwith the target
connections_list. List all connections without a type filter first, then match byteamIdin the results — theaccountNamefilter matchestype, NOT the Make app name (e.g., Google Sheets usesaccountName, Gmail uses"google", Slack uses"google-email"or"slack2")."slack3"Scope verification (CRITICAL for OAuth connections): For each matching connection, compare its scopes against the required scopes from. A connection that authenticates successfully but lacks a required scope will cause 403/permission errors at runtime. If a matching connection exists but its scopes are insufficient, do NOT attempt to use it — either expand its scopes (seeextract_blueprint_componentsskill, connections reference, Step 3a) or create a new connection with the correct scopes.make-module-configuring -
Ask the user to pick. For each app, present a numbered list and WAIT for the user's reply:
- If matching connections exist (even just one), list ALL of them with name, ID, metadata (email, workspace), and scope status (sufficient / insufficient). Always include "Create a new connection" as the last option:
Even if there is only one match, still ask. Connections with insufficient scopes should be listed but flagged — offer scope expansion or new connection creation for those.
I found these existing Google connections: 1. "Google - Marketing" (ID: 12345, email: marketing@acme.com) — scopes: sufficient 2. "Google - Personal" (ID: 12346, email: me@gmail.com) — scopes: insufficient (missing Google Drive file access) 3. Create a new connection Which one should I use for Google Sheets? - If no matching connection exists, inform the user and create a credential request via , including the required scopes from
credential_requests_create.extract_blueprint_components
- If matching connections exist (even just one), list ALL of them with name, ID, metadata (email, workspace), and scope status (sufficient / insufficient). Always include "Create a new connection" as the last option:
-
Confirm all connections are ready. Do NOT proceed to Step 2 until every required connection has a user-confirmed connection ID.
关键要求——停止操作并询问用户。这是一个交互式检查点。对于每个需要连接的应用——即使只有一个匹配的连接——列出所有选项并询问用户使用哪个连接。切勿自动选择连接。在用户明确确认每个应用的连接前,切勿调用任何模块特定的RPC(用于电子表格列表、频道列表、文件夹列表等的)。这是硬性要求:未确认连接,禁止调用RPC。
rpc_execute-
提取连接要求。在检查连接前,使用未配置的蓝图(所有模块已放置,参数为空)调用。该工具会返回权威列表:哪些模块需要连接、每个模块的连接类型以及所需的OAuth权限范围。使用此输出——而非手动检查场景计划——作为最终检查清单。内置模块(
extract_blueprint_components、builtin:BasicRouter、builtin:BasicFeeder等)无需连接。AI Agent模块(json:ParseJSON)不属于内置模块——它们需要通过ai-local-agent:RunLocalAIAgent连接AI供应商。makeConnectionId -
检查现有连接(含权限范围验证)。使用目标调用
teamId。先列出所有无类型筛选的连接,然后根据结果中的connections_list匹配——accountName筛选匹配的是type,而非Make应用名称(例如:Google Sheets使用accountName,Gmail使用"google",Slack使用"google-email"或"slack2")。"slack3"权限范围验证(OAuth连接必填):对于每个匹配的连接,将其权限范围与返回的所需权限范围进行对比。成功认证但缺少所需权限范围的连接会在运行时导致403/权限错误。若存在匹配的连接但权限范围不足,切勿尝试使用——要么扩展其权限范围(参阅make-module-configuring技能的连接参考步骤3a),要么创建具有正确权限范围的新连接。extract_blueprint_components -
请用户选择。对于每个应用,提供编号列表并等待用户回复:
- 若存在匹配连接(即使只有一个),列出所有连接的名称、ID、元数据(邮箱、工作区)以及权限范围状态(充足/不足)。始终将"创建新连接"作为最后一个选项:
即使只有一个匹配项,也必须询问。权限范围不足的连接应列出并标记——为这些连接提供扩展权限范围或创建新连接的选项。
我找到以下现有Google连接: 1. "Google - Marketing"(ID: 12345,邮箱:marketing@acme.com)——权限范围:充足 2. "Google - Personal"(ID: 12346,邮箱:me@gmail.com)——权限范围:不足(缺少Google Drive文件访问权限) 3. 创建新连接 您要为Google Sheets使用哪个连接? - 若无匹配连接,告知用户并通过创建凭证请求,包含
credential_requests_create返回的所需权限范围。extract_blueprint_components
- 若存在匹配连接(即使只有一个),列出所有连接的名称、ID、元数据(邮箱、工作区)以及权限范围状态(充足/不足)。始终将"创建新连接"作为最后一个选项:
-
确认所有连接已准备就绪。在每个所需连接都获得用户确认的连接ID前,切勿进入步骤2。
Step 2: Configure Each Module
步骤2:配置每个模块
Configure modules left to right (upstream to downstream) following the skill:
make-module-configuring- Read the module interface (with instructions format)
app-module_get - Load dynamic field options via RPCs (now that connections are confirmed)
- Fill parameters and mapper
- Validate each module individually ()
validate_module_configuration
按照技能从左到右(上游到下游)配置模块:
make-module-configuring- 读取模块接口(使用指令格式调用)
app-module_get - 通过RPC加载动态字段选项(现在已确认连接)
- 填写参数和映射器
- 单独验证每个模块()
validate_module_configuration
Step 3: Validate the Blueprint
步骤3:验证蓝图
Call on the complete blueprint JSON to catch structural issues before submission.
validate_blueprint_schema对完整的蓝图JSON调用,在提交前发现结构问题。
validate_blueprint_schemaStep 4: Create the Scenario
步骤4:创建场景
Call with the validated blueprint. The blueprint must include a top-level object — see Blueprint Construction — Deployment Checklist for the required structure.
scenarios_createmetadataScheduling type for webhook/instant trigger scenarios: When the first module is a webhook or instant trigger (), always uselistener: trueas the scheduling type when calling{"type": "immediately"}. Never usescenario_scheduling_updatefor webhook scenarios — it causes scenario activation to fail with "Invalid interval." Scheduled (polling) scenarios should use"indefinitely"with an interval; webhook scenarios must use"indefinitely"."immediately"
使用验证后的蓝图调用。蓝图必须包含顶层对象——有关所需结构,请参阅蓝图构建——部署清单。
scenarios_createmetadataWebhook/即时触发场景的调度类型:当第一个模块是webhook或即时触发器()时,调用listener: true时始终使用scenario_scheduling_update作为调度类型。切勿对webhook场景使用{"type": "immediately"}——这会导致场景激活失败,提示"Invalid interval"。计划(轮询)场景应使用"indefinitely"并设置间隔;webhook场景必须使用"indefinitely"。"immediately"
Step 5: Activate the Scenario
步骤5:激活场景
Newly created scenarios are inactive by default. Call before attempting to run. Skipping this step causes to fail.
scenarios_activatescenarios_run新创建的场景默认处于未激活状态。在尝试运行前调用。跳过此步骤会导致失败。
scenarios_activatescenarios_runStep 6: Run & Verify
步骤6:运行与验证
Run the scenario and confirm it succeeds before handing off to the user.
-
Execute. Callto trigger an immediate run.
scenarios_run -
Check the result. Callfor the scenario, then
executions_liston the most recent execution. Inspect theexecutions_getfield:status- = success — proceed to Step 7.
1 - = error — continue to step 3.
3
-
Diagnose the failure. Readand
error.messagefrom the execution result. Common runtime issues that pass schema validation:error.causeModule- Mapped fields resolving to or
undefinedat runtime (e.g.,nullwhen the upstream module produced no output for that field){{2.mimeType}} - Type conversion errors on optional parameters left at defaults
- Missing or expired connection tokens
- Mapped fields resolving to
-
Fix and retry. To update the scenario after diagnosis:
- Call on the scenario
scenarios_deactivate - Call with the corrected blueprint
scenarios_update - Call to re-enable
scenarios_activate - Call again and repeat from step 2
scenarios_run
- Call
Repeat the diagnose-fix-retry cycle until the execution succeeds or the issue requires user intervention (e.g., missing input data, external service unavailable). If user action is needed, explain the error and what to do before retrying.
运行场景并确认成功后再交付给用户。
-
执行。调用触发立即运行。
scenarios_run -
检查结果。调用获取场景执行记录,然后对最新的执行记录调用
executions_list。检查executions_get字段:status- = 成功——进入步骤7。
1 - = 错误——继续步骤3。
3
-
诊断失败原因。读取执行结果中的和
error.message。常见的通过架构验证但运行时出现的问题:error.causeModule- 映射字段在运行时解析为或
undefined(例如:上游模块未生成该字段的输出时使用null){{2.mimeType}} - 留空默认值的可选参数出现类型转换错误
- 连接令牌缺失或过期
- 映射字段在运行时解析为
-
修复并重试。诊断后更新场景:
- 对场景调用
scenarios_deactivate - 使用修正后的蓝图调用
scenarios_update - 调用重新启用
scenarios_activate - 再次调用并从步骤2重复
scenarios_run
- 对场景调用
重复诊断-修复-重试循环,直到执行成功或问题需要用户干预(例如:缺少输入数据、外部服务不可用)。若需要用户操作,解释错误并告知解决方案后再重试。
Step 7: Provide the Scenario URL
步骤7:提供场景URL
Always give the user the scenario URL after creation: (uses team ID, not organization ID).
https://<zone>.make.com/<teamId>/scenarios/<scenarioId>创建场景后,务必向用户提供场景URL:(使用团队ID,而非组织ID)。
https://<zone>.make.com/<teamId>/scenarios/<scenarioId>Core Concepts Reference
核心概念参考
When composing scenarios, consult these feature docs to understand how Make's building blocks work. Read the relevant files before using these features in a module composition.
组合场景时,请查阅这些功能文档以了解Make构建块的工作原理。在模块组合中使用这些功能前,请阅读相关文件。
Foundational
基础
- Bundles — The unit of data flowing between modules. Understand bundle multiplicity before composing flows.
- Mapping — Connecting data between modules. Field mapping, data types, collections, arrays, functions/formulas.
- Connections — Authenticating modules with external services. OAuth, API keys, connection reuse.
- Bundles——模块间流转的数据单元。在组合流程前,请理解bundle的多样性。
- Mapping——模块间的数据连接。字段映射、数据类型、集合、数组、函数/公式。
- Connections——模块与外部服务的认证。OAuth、API密钥、连接复用。
Triggers & Scenario Composition
触发器与场景组合
- Scheduling & Triggers — How scenarios start: instant triggers, polling triggers, schedules, manual/on-demand.
- Webhooks — Instant triggers via HTTP endpoints. Custom webhooks and app-specific webhooks.
- Subscenarios — Parent/child scenario composition. Sync and async calls, inputs/outputs, reuse.
- Scheduling & Triggers——场景启动方式:即时触发器、轮询触发器、计划、手动/按需。
- Webhooks——通过HTTP端点实现的即时触发器。自定义webhook和应用特定webhook。
- Subscenarios——父/子场景组合。同步和异步调用、输入/输出、复用。
Data Flow Patterns
数据流模式
- Iterations — Processing arrays item-by-item. Implicit iterators, explicit Iterator, specialized iterators, Repeater.
- Aggregations — Collapsing multiple bundles into one. Array, Text, Numeric, and Table aggregators.
- Data Stores — Persistent key-value storage across scenario runs. Deduplication, state, cross-scenario data sharing.
- Iterations——逐项处理数组。隐式迭代器、显式Iterator、专用迭代器、Repeater。
- Aggregations——将多个bundle合并为一个。数组、文本、数值和表格聚合器。
- Data Stores——跨场景运行的持久键值存储。去重、状态、跨场景数据共享。
Flow Control
流程控制
- Routing — Router module: multiple routes, multiple can fire, cannot merge back. Fallback routes.
- Branching — If-Else module: mutually exclusive branches, can merge back.
- Merging — Merge module: converges If-Else branches into single flow.
- Filtering — Input filters: pass/block bundles on conditions. Includes filter-vs-router decision guide.
- Routing——Router模块:多个路由,可同时触发,无法汇合。 fallback路由。
- Branching——If-Else模块:互斥分支,可汇合。
- Merging——Merge模块:将If-Else分支汇合为单一流程。
- Filtering——输入过滤器:根据条件通过/阻止bundle。包含过滤器vs路由器决策指南。
Router vs If-Else Decision Guide
Router vs If-Else决策指南
Choose If-Else + Merge when:
- Branches are mutually exclusive (only one should run per bundle)
- Branches need to converge into shared downstream modules (e.g., update a record, send a confirmation)
- The logic follows an "if A, do X; else if B, do Y; else do Z" pattern
Choose Router when:
- Multiple routes can fire for the same bundle (e.g., log to Sheets AND alert on Slack)
- Routes are independent endpoints with no shared follow-up steps
- You need parallel processing paths that don't converge
选择If-Else + Merge的情况:
- 分支是互斥的(每个bundle仅应运行一个分支)
- 分支需要汇合到共享的下游模块(例如:更新记录、发送确认)
- 逻辑遵循"如果A则执行X;否则如果B则执行Y;否则执行Z"的模式
选择Router的情况:
- 同一bundle可触发多个路由(例如:记录到Sheets并在Slack上发出警报)
- 路由是独立端点,无共享后续步骤
- 需要无需汇合的并行处理路径
Advanced
进阶
- AI Agents — Make AI Agents (New) with tool-calling. Module tools, scenario tools, MCP tools. Non-deterministic logic.
- Error Handling — Error handlers per module (Break, Commit, Ignore, Resume, Rollback). Throw module. Only suggest when user explicitly asks.
- Blueprint Construction — Guidelines for building scenario blueprints programmatically via MCP.
- Quick Patterns — Compressed MCP call chains for common one-shot scenarios (Slack message, Google Sheets, Airtable, email).
- AI Agents——Make AI Agents(新版),支持工具调用。模块工具、场景工具、MCP工具。非确定性逻辑。
- Error Handling——每个模块的错误处理程序(Break、Commit、Ignore、Resume、Rollback)。Throw模块。仅在用户明确询问时建议使用。
- Blueprint Construction——通过MCP以编程方式构建场景蓝图的指南。
- Quick Patterns——常见一次性场景的压缩MCP调用链(Slack消息、Google Sheets、Airtable、邮件)。
Common App Gotchas
常见应用陷阱
High-frequency configuration mistakes that cause silent failures or hard-to-diagnose runtime errors. Check these before finalizing module configuration in Phase 2 Step 2.
高频配置错误会导致静默失败或难以诊断的运行时错误。在阶段2步骤2中完成模块配置前,请检查这些内容。
Google Sheets: valueInputOption
Required for Write Modules
valueInputOptionGoogle Sheets:写入模块需要valueInputOption
valueInputOptionaddRowupdateRow"valueInputOption": "USER_ENTERED"400: INVALID_ARGUMENT — 'valueInputOption' is requiredjson
"mapper": {
"valueInputOption": "USER_ENTERED",
"values": { "0": "{{1.name}}", "1": "{{1.email}}" }
}validate_module_configurationaddRowupdateRow"valueInputOption": "USER_ENTERED"400: INVALID_ARGUMENT — 'valueInputOption' is requiredjson
"mapper": {
"valueInputOption": "USER_ENTERED",
"values": { "0": "{{1.name}}", "1": "{{1.email}}" }
}调用会捕获此问题——这正是每个模块都必须验证的原因。
validate_module_configurationGoogle Sheets: Spreadsheet IDs from listSpreadsheets
RPC
listSpreadsheetsGoogle Sheets:listSpreadsheets
RPC返回的电子表格ID
listSpreadsheetsIDs returned by the RPC (e.g., ) must be prefixed with when placed in the parameter for / modules:
listSpreadsheets1abc123def456/spreadsheetIdmode: "select"from: "drive"- Correct:
"/1abc123def456" - Wrong:
"1abc123def456"
Only applies to select-mode. Map-mode accepts the raw ID.
listSpreadsheets1abc123def456mode: "select"from: "drive"spreadsheetId/- 正确:
"/1abc123def456" - 错误:
"1abc123def456"
仅适用于选择模式。映射模式接受原始ID。
Webhook Scenarios: Scheduling Type
Webhook场景:调度类型
When the first module is a webhook ( or any instant trigger), always use for scheduling. Using causes scenario activation to fail with "Invalid interval." See Step 4 above.
gateway:CustomWebHook{"type": "immediately"}"indefinitely"当第一个模块是webhook(或任何即时触发器)时,调度类型必须使用。使用会导致场景激活失败,提示"Invalid interval"。请参阅上述步骤4。
gateway:CustomWebHook{"type": "immediately"}"indefinitely"Gmail / Google Email: accountName
Is "google-email"
, Not "google"
accountName"google-email""google"Gmail / Google Email:accountName
为"google-email"
,而非"google"
accountName"google-email""google"The app (Gmail) uses a different connection type than Google Sheets, Calendar, and Drive. When filtering :
google-emailconnections_list- Google Sheets / Calendar / Drive:
accountName: "google" - Gmail ():
google-emailaccountName: "google-email"
A generic OAuth connection will NOT work for Gmail modules (, ). It lacks the required Gmail scopes and uses a different connection type entirely. Always verify via that you have the correct connection type — do not assume all Google apps share one connection.
"google"google-email:sendAnEmailgoogle-email:TriggerNewEmailextract_blueprint_componentsgoogle-emailconnections_list- Google Sheets / Calendar / Drive:
accountName: "google" - Gmail():
google-emailaccountName: "google-email"
通用的 OAuth连接无法用于Gmail模块(、)。它缺少所需的Gmail权限范围,且使用完全不同的连接类型。始终通过验证是否使用了正确的连接类型——切勿假设所有Google应用共享一个连接。
"google"google-email:sendAnEmailgoogle-email:TriggerNewEmailextract_blueprint_componentsIML Date Boundaries: No endOfDay()
/ startOfDay()
Functions
endOfDay()startOfDay()IML日期边界:无endOfDay()
/ startOfDay()
函数
endOfDay()startOfDay()IML does not have , , , or similar boundary functions. Attempting to use them produces an "Unknown function" error. To construct day boundaries, use to extract the date portion and concatenate a literal time:
endOfDay()startOfDay()beginningOfDay()formatDateStart of day: {{formatDate(now; "YYYY-MM-DD")}}T00:00:00Z
End of day: {{formatDate(now; "YYYY-MM-DD")}}T23:59:59ZThis is the one valid use of date + literal time concatenation. The general rule "never concatenate separate date and time strings" (see IML Expressions) applies to full ISO 8601 datetimes where both parts are dynamic — it does not prohibit combining a date-only result with a fixed literal time component.
formatDateIML没有、、或类似的边界函数。尝试使用这些函数会产生"Unknown function"错误。要构造日期边界,请使用提取日期部分并拼接固定时间:
endOfDay()startOfDay()beginningOfDay()formatDateStart of day: {{formatDate(now; "YYYY-MM-DD")}}T00:00:00Z
End of day: {{formatDate(now; "YYYY-MM-DD")}}T23:59:59Z这是日期+固定时间拼接的唯一有效用法。通用规则"切勿拼接单独的日期和时间字符串"(参阅IML表达式)适用于日期和时间部分均为动态的完整ISO 8601日期时间——不禁止将的仅日期结果与固定时间分量组合。
formatDateMake AI Tools (ai-tools:Ask
): Model Is Required, No Default
ai-tools:AskMake AI Tools(ai-tools:Ask
):模型为必填项,无默认值
ai-tools:AskThe parameter in (and other Make AI Toolkit modules) is required — there is no default value. Omitting it causes a 400 error at runtime. When using Make's AI Provider ( connection), use tier slug names: , , or . (Older docs mention — these are stale; the runtime rejects them with .) Only is empirically verified for v2 as of 2026-05; the others follow Make UI conventions but should be confirmed via the Module dropdown. The dropdown labels surface as e.g. "SmallModel: gpt-5-nano. Reasoning: minimal." — match those slugs. Do not use provider-specific model IDs (e.g., ) with the Make AI Provider — they are not valid tier names and will fail. The RPC currently fails through the MCP server (org-context bug), so the model list cannot be queried programmatically — inspect the UI dropdown if unsure. See make-mcp-reference — Known MCP server bugs for the org-context bug.
modelai-tools:Askai-provider"small""medium""large"low/medium/highModel X not allowed for Make AI Providersmallai-tools:Summarize"gpt-4o-mini"RpcGetModelsNo Make AI Provider connection? If the user has no connection and cannot create one, check for alternative AI provider connections (, , ) and use the corresponding app-specific module instead of . These modules accept provider-specific model IDs. See Blueprint Construction — AI Tools for details.
ai-providerconnections_listopenai-gpt-3anthropic-claudegemini-ai-*ai-tools:Askai-tools:Askmodelai-provider"small""medium""large"low/medium/highModel X not allowed for Make AI Providersmallai-tools:Summarize"gpt-4o-mini"RpcGetModels无Make AI Provider连接?:若用户没有连接且无法创建,请检查中的替代AI供应商连接(、、),并使用相应的应用特定模块替代。这些模块接受供应商特定的模型ID。有关详细信息,请参阅蓝图构建——AI工具。
ai-providerconnections_listopenai-gpt-3anthropic-claudegemini-ai-*ai-tools:AskOfficial Documentation
官方文档
Related Skills
相关技能
- make-module-configuring — HOW to configure each module: parameters, connections, mapping, webhooks, data stores, IML expressions, validation
- make-mcp-reference — MCP server configuration, scopes, access control, and troubleshooting
- make-module-configuring——如何配置每个模块:参数、连接、映射、webhook、数据存储、IML表达式、验证
- make-mcp-reference——MCP服务器配置、权限范围、访问控制和故障排除