Install
openclaw skills install @legionspace-hackathon/fetch-legionclaw-invite-codeFetches Tongfudun LegionClaw usage-permission invite codes by POSTing JSON with userId set to the agentid (second colon-delimited segment) parsed from a LegionClaw session handle. Obtain the session handle from runtime injection or by querying the LegionClaw host or model; do not default to asking the user to paste it. Handles long session-handle forms (e.g. agent, agentid, openai-user, user suffix). Supports multiple codes per request by calling the API repeatedly; returns all codes in chat by default (files only if user explicitly asks). Designed for LegionClaw-hosted agents. Use when the user needs Tongfudun LegionClaw access invite codes, asks for fetch-legionclaw-invite-code, or says things like 邀请码, 要邀请码, 获取邀请码, 申请邀请码, 生成邀请码, 给我邀请码, 帮我生成邀请码, 发我邀请码, 多个邀请码, LegionClaw 邀请码, 通付盾邀请码, or LegionClaw 使用权限.
openclaw skills install @legionspace-hackathon/fetch-legionclaw-invite-code调用固定接口,获取通付盾 LegionClaw 使用权限对应的邀请码。传入 JSON {"userId":"..."}。其中字段 userId 取值为 LegionClaw 会话标识串(规范格式见「从会话标识解析 agentid」)按 : 拆分后的第二段 agentid(不要把第二段误称为「会话 id」——整串是会话相关标识,第二段是代理 id)。解析规则见下文。成功后在遵守保密与合规的前提下,按固定模板在对话正文中向用户展示邀请码(见「回复用户的格式」)。
数量:接口不限制「每个用户只能领一个」;用户要 N 个邀请码时,用同一 userId(agentid) 连续调用接口 N 次(每次一次 POST),将各次成功得到的 data.inviteCode 汇总后一次性回复给用户。未指定数量时默认 1 次。
交付方式(默认):在对话消息中输出 Markdown 文本,便于用户复制;默认不要写入本地/临时文件,不要以附件、下载链接或「请打开某文件查看」等形式交付邀请码。例外:仅当用户明确要求需要文件(如导出 txt、保存到文件、发附件等)时,再生成并交付文件;仍可在消息正文中同时给出便于复制的邀请码。
常见触发说法(不限于此):申请邀请码、生成邀请码、给我邀请码、帮我生成邀请码、发我邀请码、要邀请码、获取/领取邀请码、要 3 个邀请码、多个邀请码、LegionClaw 或通付盾邀请码等。
本技能面向 在 LegionClaw 内执行的 Agent:邀请码与当前任务所绑定的 agentid(会话标识第二段)对应,用于开通/校验 LegionClaw 侧权限,不是通用「在请求体中随意填写 userId」的开放接口封装。
agent:<agentid>:<渠道>:<用户 id>。渠道为空时为三段 agent:<agentid>:<用户 id>(无 ::);有渠道时为四段起。拆段后 请求体字段 userId 的值仅允许为第 2 段 agentid(由会话串解析得到);三段形态下勿把第 3 段(用户 id)误当 agentid。更短的历史形态仍适用「第二段为 agentid」。code == "000000" 且 data.inviteCode 非空 为准;HTTP 状态码为 2xx 不代表业务成功(仍可能 code != "000000")。curl 或等价请求须在 LegionClaw 下发任务时的运行环境中发起(该环境需能访问通付盾接口域名);网络类报错对用户说明「当前运行环境无法访问服务器」即可,不要在对外文案中写具体域名、IP、端口(见下文安全要求)。agentid,除非用户明确要求排查;默认勿生成或引用文件,除非用户明确要求需要文件。https://legion.tongfudun.com/userInvite/claimIndustryInviteCodePOSTapplication/jsonWeb-RedPackage: webRedPackage{ "userId": "<agentid,与下表第二列相同>" }
响应为 JSON,按以下结构解析:
| 字段 | 含义 |
|---|---|
code | 业务状态码;成功体中为字符串 "000000" 表示成功;其他值或数值型 code(如 404)表示失败(见下文错误体) |
message | 业务提示信息(失败时优先用于友好提示;部分错误体使用 msg 见下文) |
data.inviteCode | 邀请码 |
data.userName | 用户名(用于问候语) |
示例:
{
"code": "000000",
"message": "成功",
"data": {
"inviteCode": "INV-QP-TEST04",
"userName": "18762097213",
"expireTime": "2027-12-31 23:59:59",
"id": 4,
"industryType": 1
}
}
在响应 JSON 中 code == "000000" 且 data.inviteCode 非空时,在同一条用户可见消息中输出问候语与邀请码;默认不要写文件、不要附 .txt/.md 等路径(用户明确要求要文件时除外)。
邀请码片段写法(单个与多个共用):** + 反引号 + inviteCode 的值 + 反引号 + **(粗体等宽,便于拖选复制)。
结构为:{userName}您好,邀请码已获取,请妥善保管: + 上述邀请码片段。
data.userName 原样填入称呼(勿改写);将 data.inviteCode 作为邀请码。若多次调用且 userName 一致,用最后一次即可。张三您好,邀请码已获取,请妥善保管:**`A12345678`**
data.userName 缺失或为空字符串:以「您好」开头,即:您好,邀请码已获取,请妥善保管: 后接邀请码片段。用户明确要求数量 N(或「多个」「再来几个」等且可推断为 N > 1)时:对同一 userId 调用接口 N 次;每次成功则收集一个 data.inviteCode。全部成功调用结束后一条消息汇总回复:
data.userName,缺失则用「您好」)。1. ** + 邀请码 + **(序号从 1 递增;每行仅一个码,便于逐条复制)。多码示例(3 个):
张三您好,邀请码已获取,共 3 个,请妥善保管:
1. **`INV-001`**
2. **`INV-002`**
3. **`INV-003`**
code 不为字符串 "000000"(含数值型 code)、或 data.inviteCode 缺失/为空:该次调用按下文失败口径处理;若批量请求中部分失败,已成功码仍按上表格式列出,并对失败次数给出简短说明(不暴露 URL/IP/端口)。出现以下任一情况时,按以下优先级返回(对用户不要暴露 URL/IP/端口,见文末安全要求):
无权限等价形态(固定结构):若响应 JSON 同时满足:
code 为数值 404,或可规范为 404 的字符串(如 "404");data 为 null;msg 字段且 msg 为非空字符串(例如 Unexpected error occurred);msg 里的英文技术短句当作对外结论的唯一依据。对用户输出与「无权限」同一类友好说明(可与下方示例同向,如「当前账号暂无操作权限,请联系管理员处理」或「暂无领取邀请码权限,请联系管理员」)。若响应中存在非空 message 字段,且未命中上一条:基于 message 原意做简短、友好的用户提示(可适度润色,但不得改变事实含义)。
若未命中第 1 条,且存在非空 msg 而无可用 message:可基于 msg 原意做简短友好提示(不改变含义)。
若无可用 message 与 msg(或二者均无法用于提示):返回固定回复 获取邀请码失败,请联系管理员。
适用场景包括但不限于:
code 不为 "000000" 的业务失败(含字符串错误码与数值型 code)code == "000000" 但 data.inviteCode 缺失、为空或不可用错误返回示例(message 字段):
{
"code": "500",
"message": "无权限",
"data": null
}
无权限等价形态示例(按上条第 1 款处理,等同无权限):
{
"code": 404,
"msg": "Unexpected error occurred",
"crypto": false,
"data": null
}
友好化示例(仅示例,不限此模板):
message:无权限当前账号暂无操作权限,请联系管理员处理。msg + data:null 时:优先采用与上句同向的权限类说明,避免仅以 Unexpected error occurred 作为最终话术。不要依赖用户手动粘贴整串会话标识作为默认流程。
OPENCLAW_SESSION_ID)。agent:...)。不要把「请用户手动粘贴整串会话标识」作为默认或首选步骤。userId 值时,校验非空后可直接作为请求体 userId(不要求 agent: 前缀);这不替代从 LegionClaw 自动取会话标识的常规流程。LegionClaw 会话标识串的语义为:
agent:<agentid>:<渠道>:<用户 id>
渠道省略(为空)时,实际传输格式为三段(不会用 :: 占位),第三段直接是用户 id:
agent:<agentid>:<用户 id>
有渠道时为四段(第三段为渠道名,第四段为用户 id),例如:
agent:<agentid>:openai-user:<用户 id>
按英文冒号 : 拆段后:
| 形态 | 段数(典型) | 第 1 段 | 第 2 段 agentid(= userId) | 第 3 段 | 第 4 段 |
|---|---|---|---|---|---|
| 有渠道 | 4 | agent | agentid,只取此段 | 渠道 | 用户 id |
| 无渠道 | 3 | agent | agentid,只取此段 | 用户 id(不是渠道占位) | — |
与旧规则一致:无论三段或四段,agentid 一律为拆段后的第 2 段;不要把第 3 段(无渠道时的用户 id)误当 agentid。
典型示例(有渠道,四段):
agent:fe535f475db6471d81cf0a1fcd5566bd1684487565205:openai-user:703f56dd37f84fa682266a8471f26984agentid(= 请求体 userId):fe535f475db6471d81cf0a1fcd5566bd1684487565205渠道为空(三段,无双冒号):
agent:fe535f475db6471d81cf0a1fcd5566bd1684487565205:703f56dd37f84fa682266a8471f26984agentid(= 请求体 userId):fe535f475db6471d81cf0a1fcd5566bd1684487565205解析规则:将整串按 : 拆分;若第一段为 agent 且至少两段(NF >= 2)且第二段非空,则 agentid = 第二段,请求体里 userId 字段填该 agentid 字符串(JSON 中须为 userId,大小写与后端一致)。否则视为无效格式,不要猜测;应**重新按「获取会话标识串」**从 LegionClaw 侧取得合法串后再解析。若用户主动提供了可与 userId 同用的 agentid 值,校验非空后可直接用作请求体(不再要求 agent: 前缀)。
更多示例:
| 会话标识串(整串) | agentid(= 请求体 userId) |
|---|---|
agent:fe535f475db6471d81cf0a1fcd5566bd1684487565205:openai-user:703f56dd37f84fa682266a8471f26984 | fe535f475db6471d81cf0a1fcd5566bd1684487565205 |
agent:fe535f475db6471d81cf0a1fcd5566bd1684487565205:703f56dd37f84fa682266a8471f26984 | fe535f475db6471d81cf0a1fcd5566bd1684487565205 |
agent:test_001:main | test_001 |
agent:alice:worker | alice |
userId 取值(即同一串 agentid),可直接采用。再按上文规则解析出 agentid,作为 JSON 里的 userId 发送。COUNT:用户未说明数量时为 1;说明要 N 个(或等价表述)时为 N(N 为正整数;若表述含糊,按用户意图取合理正整数,必要时可确认一次)。i = 1 .. COUNT,各执行一次下方 curl(同一 AGENTID)。单次 curl 示例(将 AGENTID 替换为解析结果;若含 " 或 \ 等字符,需先做 JSON 字符串转义):curl -sS -X POST "https://legion.tongfudun.com/userInvite/claimIndustryInviteCode" \
-H "Content-Type: application/json" \
-H "Web-RedPackage: webRedPackage" \
-d "{\"userId\":\"${AGENTID}\"}"
可用一行从环境变量中的会话标识串解析 agentid(示例变量名 OPENCLAW_SESSION_ID,以实际运行时提供的变量名为准;若变量名不同,以从 LegionClaw 取到的整串为准):
AGENTID=$(echo "${OPENCLAW_SESSION_ID}" | awk -F: '$1=="agent" && NF>=2 && length($2)>0 {print $2; exit}')
message/msg 时使用固定文案。msg + data:null 形态(见「失败返回口径(统一规则)」);命中则按无权限等价输出。否则:若 code 为字符串 "000000" 且 data.inviteCode 非空,记入成功列表;否则按失败口径记录该次结果。COUNT 次调用结束后:若仅 1 个成功码,按「单个邀请码」回复;若多个成功码,按「多个邀请码」在一条消息中汇总输出。默认不把结果写入文件或作为附件交付;用户明确要求要文件时再生成。agent、第二段非空。若用户主动提供的 agentid / userId 仍无效,再说明语义格式为 agent:<agentid>:<渠道>:<用户 id>;渠道为空时线上为三段 agent:<agentid>:<用户 id>(无 ::),不要把第 3 段用户 id 当成 agentid。userId(实为 agentid)是否为空或含非法字符。msg + data:null 按无权限等价、message/msg 友好化、固定文案)。通用安全输出要求:
若 URL、字段名、成功响应 JSON 结构或会话标识格式变更,请同步更新本文件,避免 agent 与真实服务不一致。