提交报名
submit_signup【需要登录】【何时用】用户说「帮我报这场」时调它。只传这次要新填/要改的答案:handler 先读一遍全部现值(上一版提交 + 跨表单复用层 + 主页/公司/产品推导),打上补丁后提交全集。
【组合链】get_signup_activity(slug) 看 viewer.missingRequired → 问用户 → 本工具 answers=[{key,value}] 提交 → 之后用 list_my_signups 跟进 reviewStatus。撞「已截止」时返回体自带替代场次(exits[].detail.alternatives)。
【口径/坑】① 省略 ≠ 清空(客户端有确认页、agent 没有,所以不继承服务层「传了 answers 就以它为全集」那条语义)。真要清空某题,把 key 放进 clearKeys——它会连跨表单复用层那一行一起删(否则下次报别的表又被解析回来;文件行不删)。② type=file 的附件题(BP/营业执照)agent 传不了,会整键省略以保住已传文件,绝不许拿文件名或链接当答案。③ 合并后仍缺必填项时不提交,返回 missing_required_fields + 逐条要问什么,问完再调一次。④ 返回 delivery.kind='webview' 时报名还没投到主办方源站,站内只存了留资和代填答案——此时逐字禁止对用户说「已报名成功」,必须说「站内已留档,还要在主办方表单上完成提交」,并把 delivery.url 给他。⑤ 重提会以合并全集覆盖上一版。证件号这类敏感题明文是加密存的、读不回来:上版填过而这次没给值会直接拒(sensitive_answer_would_be_wiped,提交上去就抹成空且不可恢复)——按 exits 让用户重说一遍,或放进 clearKeys。⑥ channel 恒为 'agent',主办方看得见这笔是代提的。⑦ 挂了报名协议的场必须先 get_activity_agreement 念全文、拿到明确同意,再带 agreement={versionId,accept:true};这会落签署记录与审计日志,绝不许你替用户勾。不带就撞 activity_agreement_required(自带出口)。⑧ requiresAppActivation=true 的场只拿得到 App 激活预留位、不落报名单,返回 signup_reserved_pending_app_activation 而不是「已提交」。
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 活动 slug | |
| answers | No | 这次要新填/要改的答案。没传的题**不会被清空**(自动沿用现值) | |
| agreement | No | 报名协议确认,可选。versionId 取自 get_activity_agreement;**只有把协议全文念给用户、他明确说同意之后才许带**(这是会留签署记录与审计日志的法律行为) | |
| clearKeys | No | 要显式清空的题目 key(用户明说「把微信号删掉」才用;不传就一个都不清) |