actions
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseActions
Actions
Three things share the name, and telling them apart is most of the work:
- An action is one operation of an integration against one object:
"NetSuite upsert customer", "Enrich name". The catalogue is the resource; each has an
actionsand anid.integrationName - An action column is an action wired into a table: which action, its
, and the
paramsmapping that says which of the row's columns feed it. It lives in the table'sinput(the tables skill covers adding and changing one).objectsColumns - An action run is one execution of one action column against one row.
Its status is one of ,
ACTIVE,DELAYED,WAITING,COMPLETED. Runs are kept for 14 days.FAILED
You reach them through the RevOS MCP server's generic tools:
| Call | What it does |
|---|---|
| the catalogue; add |
| one action: |
| list runs: |
| one run, with its |
| run an action column — see references/run.md first |
api_details({ resource: "action-runs" })三个概念都使用这个名字,而区分它们是这项工作的核心:
- action 是某个 integration 针对一个对象执行的一项操作:
“NetSuite upsert customer”、“Enrich name”。action 目录是 resource;每个 action 都有
actions和id。integrationName - action column 是接入 table 的 action:包括使用哪个 action、它的
,以及指定 table 中哪些列为其提供输入的
paramsmapping。它位于 table 的input中(添加和修改 action column 由 tables skill 负责)。objectsColumns - action run 是某个 action column 针对某一行的一次执行。
状态可以是 、
ACTIVE、DELAYED、WAITING、COMPLETED。执行记录会保留 14 天。FAILED
可以通过 RevOS MCP server 的通用工具访问它们:
| Call | What it does |
|---|---|
| action 目录;加上 |
| 单个 action: |
| 列出执行记录: |
| 单条执行记录,包含其 |
| 运行 action column——请先阅读 references/run.md |
api_details({ resource: "action-runs" })Something failed: start from the run
出现失败时:从 run 开始
Most questions here are "why did this fail". Work in levels and stop at
the first one that answers the question: a failure whose cause is already
named in the run's own result doesn't need the table's schema, and pulling
it anyway costs the user a slower answer buried in detail they didn't ask
for.
Find the run. The user may hand you a run id straight from the
action-run drawer in the UI. Otherwise list, without the payloads:
json
api_read { "resource": "action-runs",
"params": { "filter": "status == \"FAILED\" && modelId == \"<table id>\"",
"orderBy": "createdAt desc", "pageSize": 10,
"fields": "id,actionId,columnId,modelId,objectId,objectName,status,attemptsMade,createdAt" } }modelIdcolumnIdobjectIdRead the run by id. One call, and it carries the spine as well as both
payloads: , , , , ,
, , and .
actionIdcolumnIdmodelIdobjectIdobjectNamestatusattemptsMadeinputresultWhere the error lives. There is no separate error column.
holds the whole run result, a union discriminated by . On
a failure it carries:
resultmetadata.success- — the message to trust and to quote;
metadata.error.message - — a generated rewording, present only if the explain-error flow ran. Never present it as the system's own error;
metadata.error.aiMessage - — a normalized object with
error,message,code,detailsandisUnrecoverable.retryAfter
error.isUnrecoverable: trueA large share of failures are fully explained right here — credentials the
target system rejected, a rate limit, a permission, a validation message
that already names the field and the reason. When says something
the user can act on, that is the answer: quote it, say what to do, stop.
resultWhen the id doesn't resolve. A table cell goes on showing a failure
long after the run behind it was removed, so an id can name a run older
than the 14-day window. Say so and stop — no page of can
contain it. If the user quoted the error text, that text is still worth
reading back to them. Then offer what does work: re-run the action and
diagnose the fresh failure.
action-runsWhen the run alone doesn't answer — the error is about a value that was
missing, empty or malformed, or the user asks where a value should have
come from — go on to references/debug.md: the
mapping, the lineage, and how to say where the fault is.
这里的大多数问题都是“为什么失败了”。应逐层排查,并在第一个能够回答问题的层级停止:如果失败原因已经在 run 自身的 result 中明确指出,就不需要 table 的 schema;额外获取只会让答案变得更慢,并让用户淹没在并未询问的细节中。
查找 run。 用户可能会直接从 UI 的 action-run 抽屉中提供 run id。否则,在不获取 payload 的情况下列出记录:
json
api_read { "resource": "action-runs",
"params": { "filter": "status == \"FAILED\" && modelId == \"<table id>\"",
"orderBy": "createdAt desc", "pageSize": 10,
"fields": "id,actionId,columnId,modelId,objectId,objectName,status,attemptsMade,createdAt" } }modelIdcolumnIdobjectId按 id 读取 run。 只需一次调用,即可获得核心信息以及两个 payload:、、、、、、、 和 。
actionIdcolumnIdmodelIdobjectIdobjectNamestatusattemptsMadeinputresult错误位于何处。 没有单独的 error column。 保存完整的 run result,它是一个以 作为判别字段的联合类型。失败时,其中包含:
resultmetadata.success- ——应信任并直接引用的 message;
metadata.error.message - ——重新生成的措辞,仅在 explain-error flow 已运行时存在。绝不能将其表述为系统自身的错误;
metadata.error.aiMessage - ——一个规范化对象,包含
error、message、code、details和isUnrecoverable。retryAfter
error.isUnrecoverable: true很大一部分失败在这里已经得到充分解释——目标系统拒绝了凭证、触发了速率限制、缺少权限,或者校验消息已经指明了字段和原因。当 中包含用户可以据此采取行动的信息时,这就是答案:引用它,说明该做什么,然后停止。
result当 id 无法解析时。 在其背后的 run 被删除后,table cell 仍可能持续显示失败,因此 id 指向的 run 可能早于 14 天保留窗口。说明这一点并停止——任何 页面都不可能包含它。如果用户引用了 error 文本,仍应将这段文本读回给他们。然后提供可行的方案:重新运行 action,并诊断新产生的失败。
action-runs当仅凭 run 无法回答问题时——错误涉及缺失、空值或格式错误的 value,或者用户询问某个 value 应从哪里来——继续阅读 references/debug.md:其中介绍了 mapping、lineage,以及如何指出故障所在。
The organization's own instructions
组织自己的说明
Organizations write down how their integrations behave: what a particular
NetSuite error really means for them, who fixes what, how a link to their
CRM is built. These are served by the same MCP server as skills named
, at three breadths:
org/…- — applies to everything in this organization;
org/global - — everything involving that integration;
org/<integrationName> - — that one action.
org/<integrationName>/<actionId>
Take from the action ( on with the
run's ). Call , then on every one of
the three that exists for the run's scope. They add up rather than
override one another: the action-level text assumes you've read the
integration-level one.
integrationNameapi_readactionsactionIdskills_listskills_readRead them once you know which action is involved and before you tell the
user what to do. They are where a convention that makes your obvious
recommendation wrong lives, and they often map an error message straight to
its cause and fix. When they give wording, a link format, or an owner for
the fix, use theirs.
If the server has no tool, or lists nothing under ,
there are no such instructions; carry on without them.
skills_listorg/组织会记录其 integrations 的行为方式:某个特定的 NetSuite error 对他们而言实际意味着什么、由谁负责修复,以及如何构建指向 CRM 的链接。这些内容由同一个 MCP server 以名为 的 skills 提供,分为三个范围:
org/…- ——适用于该组织中的所有内容;
org/global - ——适用于与该 integration 有关的所有内容;
org/<integrationName> - ——适用于那一个 action。
org/<integrationName>/<actionId>
从 action 获取 (使用 run 的 对 执行 )。调用 ,然后对 run 范围内三个作用域中每一个存在的说明调用 。这些说明是叠加关系,而不是相互覆盖:action-level 文本默认你已经阅读了 integration-level 文本。
integrationNameactionIdactionsapi_readskills_listskills_read确定涉及的 action 后,在告诉用户该怎么做之前阅读这些说明。它们可能包含让显而易见的建议变得错误的内部约定,而且经常能把 error message 直接映射到原因和修复方法。当它们提供了特定措辞、链接格式或修复负责人时,应采用它们的内容。
如果服务器没有 工具,或者在 下没有列出任何内容,就表示不存在这类说明;直接继续即可。
skills_listorg/Running an action
运行 action
Running acts on connected systems — it creates and updates records in the
customer's CRM or ERP — so only do it when the user asks, and read
references/run.md before the first on
.
api_writeaction-runs运行 action 会操作已连接的系统——在客户的 CRM 或 ERP 中创建和更新 records——因此只有在用户明确要求时才能执行,并且在对 进行第一次 前,必须阅读 references/run.md。
action-runsapi_writeAdding or changing an action column
添加或修改 action column
That is a change to the table, not to the action: the tables skill, its
column reference. The catalogue here tells you which to use and,
through the action's , what input it expects.
actionIddescription这是对 table 的修改,而不是对 action 的修改:应使用 tables skill 及其 column reference。本目录说明应使用哪个 ,并通过 action 的 说明它需要什么 input。
actionIddescriptionReporting back
反馈结果
Lead with the cause in the user's terms, then what to do about it and who
does it. Quote verbatim when the fix involves a
third party — a paraphrased vendor error is worse than useless when the
user takes it to that vendor's support. Name the row by , not
by id. Don't dump or .
metadata.error.messageobjectNameinputresult先用用户能够理解的说法直接说明原因,然后说明该做什么以及由谁处理。当修复涉及第三方时,逐字引用 ——当用户将改写后的 vendor error 带给 vendor support 时,这种转述不仅没用,反而更糟。用 称呼该行,而不是使用 id。不要倾倒 或 。
metadata.error.messageobjectNameinputresult