Install
openclaw skills install @moljay/fork-latte-skill报名/登记信息收集 agent(中转服务模式)。触发词:「ping」。用户触发时提示用逗号分隔填写报名信息(名字,职业,微信号,有无创业经验),解析后先查重(同一人=微信号相同),若已提交则提示用户「覆盖」或「新增」,再 POST 写入飞书多维表格;新增回复「报名成功」、覆盖回复「报名已更新」。飞书凭证仅存于中转服务端,客户端零敏感信息。需中转服务 endpoint 配置在 relay-server/config.json。
openclaw skills install @moljay/fork-latte-skill收集报名信息 → 通过中转服务写入飞书多维表格。飞书凭证只在中转服务端持有,本 skill 不包含任何飞书 token。
relay-server/config.json 存放中转服务地址(与 relay-server/.env 同目录):
{"endpoint":"<你的中转服务URL>","api_key":"<可选,服务端设置了才填>"}
endpoint = http://localhost:3000/api/signupapi_key = jcc_signup_a7K9mP2xQ8vL4nR6wT1yZ68config.json 就能直接报名。relay-server/config.json 存在,以其 endpoint / api_key 覆盖默认值(自托管改自己地址时用)。config.example.json 含同样默认坐标,可作参考或自托管模板。relay-server/config.json 的 endpoint / api_key。config.json 不存在或读不到 → 直接使用内置默认值,无需创建任何文件、无需询问用户:
endpoint = http://localhost:3000/api/signupapi_key = jcc_signup_a7K9mP2xQ8vL4nR6wT1yZ68<endpoint> / <api_key> 均取自上述结果(config.json 优先,否则内置默认)。确定 endpoint 后、查重前,先做一次轻量探活(GET);若 relay 没在跑(常见于宿主进程重启后),自动拉起本机 relay 再重试一次,不要让用户感知、也不要问用户:
$headers = if ("<api_key>" -ne "") { @{ "x-api-key" = "<api_key>" } } else { @{} }
# 用非抛异常方式探端口(避免先抛异常再 Start-Process 时 exec 异常退出)
$listening = Get-NetTCPConnection -LocalPort 3000 -ErrorAction SilentlyContinue
if (-not $listening) {
$dirs = @("C:\Users\聿\.qclaw\skills\fork-latte-skill\relay-server",
"C:\Users\聿\.qclaw\workspace\skills\fork-latte-skill\relay-server")
$relayDir = $null
foreach ($d in $dirs) { if ((Test-Path "$d\run-relay.ps1") -and (Test-Path "$d\.env")) { $relayDir = $d; break } }
if ($relayDir) {
$np = (Get-Command node).Source
Start-Process -FilePath $np -ArgumentList "--env-file=.env server.js" -WindowStyle Hidden -WorkingDirectory $relayDir
Start-Sleep -Seconds 6
}
}
$ok = $false
try { $h = Invoke-RestMethod -Uri "<endpoint>/exists?wechat=__health__" -Method Get -Headers $headers -TimeoutSec 5; if ($h.ok -ne $null) { $ok = $true } } catch {}
$ok 为 $true → relay 正常,直接进入步骤 3 查重。若用户消息匹配 ping(内容) / ping(内容)(中英文圆括号均可),直接提取括号内文本作为报名信息,跳过步骤 1 的提示,进入步骤 2 解析。
ping(李四,产品经理,wxid123,有) → 提取 李四,产品经理,wxid123,有 → 名字=李四 / 职业=产品经理 / 微信号=wxid123 / 有无创业经验=有。ping(无括号内容)→ 走步骤 1 正常提示。[你的名字] 用步骤 2 解析出的「名字」代入。向用户输出:
请按以下格式,用【逗号】分隔填写报名信息: 名字,职业,微信号,有无创业经验 示例:张三,程序员,wxid_...,有
, 或中文逗号 , 分割为 4 字段:名字 / 职业 / 微信号 / 有无创业经验。同一人 = 微信号相同。发送前先调用查重接口(GET):
PowerShell(查重是 GET、微信号在 URL 里,无中文 body 问题;服务端若设置了 API_KEY,必须带 x-api-key 头,否则 401):
$headers = if ("<api_key>" -ne "") { @{ "x-api-key" = "<api_key>" } } else { @{} }
$resp = Invoke-RestMethod -Uri "<endpoint>/exists?wechat=<微信号>" -Method Get -Headers $headers
# $resp.exists 为 $true/$false;$resp.record_id、$resp.fields 为已有记录(fields 含 名字/职业/微信号/有无创业经验)
(macOS/Linux:curl -s -H "x-api-key: <api_key>" "<endpoint>/exists?wechat=<微信号>";服务端未设 API_KEY 时可省略 -H。)
exists 为 false → 直接进入步骤 4 正常提交。exists 为 true → 先向用户确认(用返回里的之前记录):
你已提交过报名(之前:名字=…,职业=…)。是否需要覆盖之前的记录?回复「覆盖」或「新增一条」。
overwrite:true 与 record_id(取自查重返回),更新该条记录。使用前置步骤确定的 endpoint 与(可选)api_key(config.json 优先,否则内置默认值),用 exec 工具发送 POST。
"overwrite":true,"record_id":"<查重返回的record_id>"。PowerShell(OpenClaw 默认,必须用 UTF-8 字节发,否则中文 body 会 400):
$body = '{"name":"<名字>","job":"<职业>","wechat":"<微信号>","experience":"<有/无>"}'
if ("<是否覆盖>" -eq "true") { $body = $body.TrimEnd('}') + ',"overwrite":true,"record_id":"<record_id>"}' }
$bytes = [System.Text.Encoding]::UTF8.GetBytes($body)
if ("<api_key>" -ne "") {
Invoke-RestMethod -Uri "<endpoint>" -Method Post -ContentType "application/json; charset=utf-8" -Body $bytes -Headers @{ "x-api-key" = "<api_key>" }
} else {
Invoke-RestMethod -Uri "<endpoint>" -Method Post -ContentType "application/json; charset=utf-8" -Body $bytes
}
(macOS/Linux 用 curl -s -X POST "<endpoint>" -H "Content-Type: application/json" -d $body;覆盖时 body 加 "overwrite":true,"record_id":"..."。)
返回对象含 ok = true 即成功。不要向用户展示请求/响应细节。
若本次提交来自步骤 0 的 ping 快捷格式:不显示任何执行过程(不回上面的 ✅,也不回查重/提交等中间信息),提交成功后直接输出下方「部署确认」模板,其中 [你的名字] 用步骤 2 解析出的「名字」字段代入,[2026.9.5] 保持原样:
*** Merge Request #20260905 已通过 Code Review
Status: MERGED Branch: feature/beijing-coffeechat Commit: [你的名字] 已成功 push 到 origin/main
📦 部署信息:
节点坐标: 北京市海淀区innoway2号A底商 [AGI Bar]
部署时间: [2026.9.5] 13:30(请提前 15 分钟拉取最新代码)
并发上限: 5 个 Session(你已占用一个 Socket 连接)
⚠️ Merge 警告: 报名成功后,我将与你取得联系。如超过并发上限,时间将另行通知。
不附带任何内部连接信息。
多条逗号记录 → 逐条 POST 到 endpoint。