automate-whatsapp

automate-whatsapp

热门

使用 Kapso 工作流构建 WhatsApp 自动化:配置 WhatsApp 触发器、编辑工作流图、管理执行、部署函数、搜索工作流日志,并调试自动化行为。在自动化 WhatsApp 对话和事件处理时使用。

144Star
19Fork
更新于 2026/7/29
SKILL.md
readonly只读
name
automate-whatsapp
description

使用 Kapso 工作流构建 WhatsApp 自动化:配置 WhatsApp 触发器、编辑工作流图、管理执行、部署函数、搜索工作流日志,并调试自动化行为。在自动化 WhatsApp 对话和事件处理时使用。

自动化 WhatsApp

使用时机

使用此技能来构建和运行 WhatsApp 自动化:工作流 CRUD、图编辑、WhatsApp 和项目事件触发器、项目事件发射、执行、函数管理、Webhook 工具和 MCP 工具。

设置

首选路径:

  • 已安装并认证 Kapso CLI(kapso login
  • 对于工作流和函数编辑,使用带有 kapso linkkapso pullkapso buildkapso push 的源代码管理项目
  • 对于工作流代码,使用 @kapso/workflows 并从 workflow.jsworkflow.ts 导出 Workflow 实例

备用路径:
环境变量:

  • KAPSO_API_BASE_URL(仅主机,不含 /platform/v1
  • KAPSO_API_KEY

操作方法

在本地编辑工作流

当用户正在本地仓库中工作或可以创建本地仓库时,首先使用此路径。

npm install -g @kapso/cli
npm install --save-dev @kapso/workflows
kapso login
kapso link --project <project-id>
kapso pull

使用 @kapso/workflows 编辑 workflows/<workflow-slug>/workflow.jsworkflow.ts

import { START, Workflow } from "@kapso/workflows";

const workflow = new Workflow("inbound-support", {
  name: "Inbound Support",
  status: "draft",
});

workflow.addTrigger({
  type: "inbound_message",
  phoneNumberId: "<phone-number-id>",
});

workflow.addNode(START, {
  position: { x: 100, y: 100 },
});

workflow.addNode("reply", {
  type: "send_text",
  message: "Thanks for reaching out.",
});

workflow.addEdge(START, "reply");

export default workflow;

构建并推送:

kapso build
kapso push --dry-run
kapso push workflow <workflow-slug>

使用 kapso push 推送所有本地函数和工作流。有关仓库布局、源文件行为和仅 JSON 编辑,请参阅 references/local-workflow-source.md

首先发现电话号码

首选路径:

  1. 检查项目状态:kapso status
  2. 列出已连接号码:kapso whatsapp numbers list --output json
  3. 需要时解析显示号码:kapso whatsapp numbers resolve --phone-number "<display-number>" --output json

备用路径:

  1. 列出触发器的号码配置:node scripts/list-whatsapp-phone-numbers.js

通过 API 脚本编辑工作流图

对于工作流编辑,优先使用本地源同步。这些脚本作为调试、直接图检查或仅 API 环境的备用方案。

  1. 获取图:node scripts/get-graph.js <workflow_id>(注意 lock_version
  2. 编辑 JSON(参见下面的图规则)
  3. 验证:node scripts/validate-graph.js --definition-file <path>
  4. 更新:node scripts/update-graph.js <workflow_id> --expected-lock-version <n> --definition-file <path>
  5. 重新获取以确认

对于小编辑,改用 edit-graph.js 并使用 --old-file--new-file

如果遇到 lock_version 冲突:重新获取,重新应用更改,使用新的 lock_version 重试。

管理触发器

  1. 列出:node scripts/list-triggers.js <workflow_id>
  2. 创建:node scripts/create-trigger.js <workflow_id> --trigger-type <type> --phone-number-id <id>
  3. 切换:node scripts/update-trigger.js --trigger-id <id> --active true|false
  4. 删除:node scripts/delete-trigger.js --trigger-id <id>

对于 inbound_message 触发器,优先使用 kapso whatsapp numbers resolve --phone-number "<display-number>" --output json 获取确切的 phone_number_id。当 CLI 不可用时,回退到 node scripts/list-whatsapp-phone-numbers.js

对于 project_event 触发器,当用户定义事件类型/模式时,首先注册或更新项目事件定义:

node scripts/project-event-definitions.js create \
  --name conversation.csat_scored \
  --description "Customer satisfaction score for a conversation" \
  --property-schema '{"score":{"type":"number"},"reason":{"type":"string"}}'

然后创建触发器:

node scripts/create-trigger.js <workflow_id> \
  --trigger-type project_event \
  --triggerable-attributes '{"event_name":"conversation.csat_scored","property_key":"score","operator":"gte","property_value":4}'

定义仅为元数据。除非用户明确接受该副作用,否则不要仅为注册名称而发出示例事件。

管理项目事件定义

使用定义来管理事件名称、描述和平面标量属性模式。发出的事件是由 POST /platform/v1/eventsemit_event 节点、函数节点 project_events 或代理节点 emit_event 创建的单独记录。

  1. 列出:node scripts/project-event-definitions.js list
  2. 按名称创建/更新:node scripts/project-event-definitions.js create --name <event.name> [--description <text>] [--property-schema <json>]
  3. 按 ID 更新:node scripts/project-event-definitions.js update --definition-id <id> [--name <event.name>] [--description <text>] [--property-schema <json>]

使用项目事件构建工作流

当工作流需要记住或响应持久业务事实时,使用此清单:

  1. 当用户引入新事件名称或模式时,首先定义事件。
  2. 当工作流应响应发出的事件时,使用 project_event 触发器。
  3. 对于确定性的工作流步骤发射,使用 emit_event 节点。
  4. 当发射取决于函数代码输出时,使用函数节点 project_events
  5. 仅当代理应决定是否/何时记录事实时,使用代理节点 emit_event。在依赖它之前,启用 emit_event 默认工具并配置允许的事件定义。

项目事件触发的工作流是观察者,不能发出项目事件。不要向从项目事件触发器启动的工作流添加事件发射。

调试执行

  1. 当你有执行 ID 时,首先搜索工作流日志:kapso logs search --query "<execution-id>" --source flow_event --filter flow_execution_id=<execution-id> --period 7d --limit 20 --output json
  2. 列出:node scripts/list-executions.js <workflow_id>
  3. 检查:node scripts/get-execution.js <execution-id>
  4. 获取值:node scripts/get-context-value.js <execution-id> --variable-path vars.foo
  5. 事件:node scripts/list-execution-events.js <execution-id>

创建和部署函数

  1. 使用处理程序签名编写代码(参见下面的函数规则)
  2. 创建:node scripts/create-function.js --name <name> --code-file <path> [--public-endpoint true]
  3. 部署:node scripts/deploy-function.js --function-id <id>
  4. 验证:node scripts/get-function.js --function-id <id>

当函数应通过 Kapso 托管的调用 URL 无需 X-API-Key 即可调用时,使用 --public-endpoint true。这仅适用于 Cloudflare 函数。
新函数默认使用 invoke_response_mode=passthrough,成功调用时直接返回函数体。旧版包装函数可以稍后使用 update-function.js 迁移。

设置带有远程沙箱仓库的代理节点

当代理需要在工作流运行期间检查或修改仓库文件的远程临时工作区时使用。

  1. 阅读 references/agent-remote-sandbox.md 了解执行模型和字段规则
  2. 查找模型:node scripts/list-provider-models.js
  3. 复制 assets/agent-remote-sandbox-github-repo-example.json 作为起点,或在 data.config 下编辑代理节点
  4. 设置 sandbox_enabled: true
  5. sandbox_network_mode 设置为 allow_allallow_list
  6. 如果使用 allow_list,在 sandbox_allowed_outbound_hosts 中添加额外的出站主机
  7. flow_agent_resources 中添加 GitHub 仓库,包含:
    • resource_type: "github_repository"
    • repo_url
    • branch
    • pat
  8. 编写系统提示,使其在进行更改之前明确从 /workspace/repos/<repo-slug> 读取
  9. 验证并更新图

注意:

  • 远程沙箱是测试版,测试期间免费
  • sandbox_enabled 控制远程工作区和沙箱工具是否可用
  • 即使稍后关闭沙箱访问,仓库资源仍保持配置
  • v1 仅支持 GitHub 仓库
  • 使用仓库根 URL,而不是 GitHub 文件 URL 或 tree/... URL
  • 仓库挂载到远程沙箱内的 /workspace/repos/<repo-slug>
  • 使用 references/agent-remote-sandbox.mdreferences/node-types.md 获取确切形状

图规则

  • 恰好一个起始节点,idstart
  • 永远不要更改现有节点 ID
  • 对于新节点 ID,使用 {node_type}_{timestamp_ms}
  • 非决策节点有 0 或 1 条出站 next
  • 决策边标签必须与 conditions[].label 匹配
  • 边键是 source/target/label(不是 from/to

有关完整模式详细信息,请参阅 references/graph-contract.md

函数规则

async function handler(request, env) {
  // 解析输入
  const body = await request.json();
  // 根据需要使用 env.KV 和 secrets
  return new Response(JSON.stringify({ result: "ok" }));
}
  • 不要使用 exportexport default 或箭头函数
  • 返回 Response 对象

执行上下文

始终使用此结构:

  • vars - 用户定义的变量
  • system - 系统变量
  • context - 渠道数据
  • metadata - 请求元数据

脚本

工作流

脚本 用途
list-workflows.js 列出工作流(仅元数据)
get-workflow.js 获取工作流元数据
create-workflow.js 创建工作流
update-workflow-settings.js 更新工作流设置

脚本 用途
get-graph.js 获取工作流图 + lock_version
edit-graph.js 通过字符串替换修补图
update-graph.js 替换整个图
validate-graph.js 在本地验证图结构

触发器

脚本 用途
list-triggers.js 列出工作流的触发器
create-trigger.js 创建触发器
update-trigger.js 启用/禁用触发器
delete-trigger.js 删除触发器
list-whatsapp-phone-numbers.js 列出用于触发器设置的电话号码

项目事件

脚本 用途
project-event-definitions.js 列出、创建或更新项目事件定义

执行

脚本 用途
list-executions.js 列出执行
get-execution.js 获取执行详情
get-context-value.js 从执行上下文读取值
update-execution-status.js 强制执行状态
resume-execution.js 恢复等待中的执行
list-execution-events.js 列出执行事件

函数

脚本 用途
list-functions.js 列出项目函数
get-function.js 获取函数详情 + 代码
create-function.js 创建函数,可选公共调用端点
update-function.js 更新函数代码、公共端点设置,或将旧版包装函数迁移到 passthrough
deploy-function.js 将函数部署到运行时
invoke-function.js 使用负载调用函数
list-function-invocations.js 列出函数调用

OpenAPI

脚本 用途
openapi-explore.mjs 探索 OpenAPI(搜索/操作/模式/位置)

安装依赖(一次):

npm i

示例:

node scripts/openapi-explore.mjs --spec workflows search "variables"
node scripts/openapi-explore.mjs --spec workflows op getWorkflowVariables

注意

  • 优先使用文件路径而不是内联 JSON(--definition-file--code-file
  • 在调试工作流以及 API 调用、Meta 事件或 webhook 投递时,使用 observe-whatsapp 进行跨源日志搜索。
  • 变量 CRUD(variables-set.jsvariables-delete.js)被阻止 - 平台 API 不支持

参考

编辑前阅读:

其他参考:

资产

文件 描述
workflow-linear.json 最小线性工作流
workflow-decision.json 最小分支工作流
workflow-agent-simple.json 最小代理工作流
workflow-customer-support-intake-agent.json 客户支持受理
workflow-interactive-buttons-decide-function.json 交互式按钮 + 决策(函数)
workflow-interactive-buttons-decide-ai.json 交互式按钮 + 决策(AI)
workflow-api-template-wait-agent.json API 触发器 + 模板 + 代理
function-decide-route-interactive-buttons.json 用于按钮路由的函数
agent-remote-sandbox-github-repo-example.json 带有远程沙箱 + GitHub 仓库资源的代理节点

相关技能

  • integrate-whatsapp - 入门、webhook、消息、模板、流程
  • observe-whatsapp - 调试、日志、健康检查

<!-- FILEMAP:BEGIN -->

[automate-whatsapp file map]|root: .
|.:{package.json,SKILL.md}
|assets:{agent-remote-sandbox-github-repo-example.json,function-decide-route-interactive-buttons.json,functions-example.json,workflow-agent-simple.json,workflow-api-template-wait-agent.json,workflow-customer-support-intake-agent.json,workflow-decision.json,workflow-interactive-buttons-decide-ai.json,workflow-interactive-buttons-decide-function.json,workflow-linear.json}
|references:{agent-remote-sandbox.md,execution-context.md,function-contracts.md,functions-payloads.md,functions-reference.md,graph-contract.md,local-workflow-source.md,node-types.md,triggers.md,workflow-overview.md,workflow-reference.md}
|scripts:{create-function.js,create-trigger.js,create-workflow.js,delete-trigger.js,deploy-function.js,edit-graph.js,get-context-value.js,get-execution-event.js,get-execution.js,get-function.js,get-graph.js,get-workflow.js,invoke-function.js,list-execution-events.js,list-executions.js,list-function-invocations.js,list-functions.js,list-provider-models.js,list-triggers.js,list-whatsapp-phone-numbers.js,list-workflows.js,openapi-explore.mjs,project-event-definitions.js,resume-execution.js,update-execution-status.js,update-function.js,update-graph.js,update-trigger.js,update-workflow-settings.js,validate-graph.js,variables-delete.js,variables-list.js,variables-set.js}
|scripts/lib/functions:{args.js,kapso-api.js}
|scripts/lib/workflows:{args.js,kapso-api.js,result.js}

<!-- FILEMAP:END -->