提交审核
- 一个小程序同时只能有一个待审版本。
- 审核员看到的是代码 diff、
readme.md、你申请的权限,以及超出当前已授权范围的部分(高亮)。 - 批准和授权是两件事:审核员可以放行代码而不扩大权限。所以只申请真正需要的 scope——多要会让审核变慢。
- 驳回一定附理由,你会收到通知。
投放进帖子
审核通过后,打开小程序详情页/apps/<slug>,贴上你自己帖子的链接(或帖子编号),一键完成——嵌入标签会自动写进帖子,不用手工复制。
placement 为 many 的小程序,任何成员都可以把它放进自己的帖子;single 只有作者和 staff 能投放。装到节点
没有界面的机器人不进帖子,而是装到一个范围上。节点主可以自己把它装进自己的节点——在小程序详情页点「安装」,选节点,填好它声明的设置。装到全站则是管理员的事。 装好之后在 /apps/nodes 管理:改设置、停用。停用只是让它闭嘴,它存下来的东西还在。 设置表单的字段由小程序自己声明,不是一个让你手写 JSON 的框:
配额与限制
常见问题
这个 app 已经有一个待审版本
这个 app 已经有一个待审版本
等审核结果,或让审核员先驳回。
沙箱里 fetch 失败
沙箱里 fetch 失败
沙箱没有网络,这是设计,将来也不会变。要访问外部服务,返回一个
http.fetch effect,由站点代为请求,结果作为一次单独的 onFetch 调用送回来。见机器人。E_HTTP_DOMAIN_DENIED
E_HTTP_DOMAIN_DENIED
那个主机不在这个小程序已批准的域名列表里。在
app.json 的 domains 里申请,重新提交审核。只能写精确主机名,不能用通配符、协议或路径。E_MOD_OUT_OF_SCOPE / E_MOD_DENIED / E_MOD_PROTECTED
E_MOD_OUT_OF_SCOPE / E_MOD_DENIED / E_MOD_PROTECTED
分别是:动到了安装范围之外、机器人账号本身在那里没有权限、以及对象是 staff 或本节点的版主(这条永远拒绝)。
E_POST_QUOTA / E_POST_TOPIC_QUOTA
E_POST_QUOTA / E_POST_TOPIC_QUOTA
这个小程序今天的发帖额度用完了,或者这个主题今天的机器人发帖额度用完了(后者跨所有小程序合计)。
机器人装上了但一直不动
机器人装上了但一直不动
只靠定时任务干活的机器人必须导出
onInstall 并在里面注册第一个 schedule.add,否则 onSchedule 永远不会被触发。另外确认订阅的事件对得上:主题的首帖只发 topic_created,不发 post_created。Not signed in. Run nodeloc-apps login first.
Not signed in. Run nodeloc-apps login first.
没登录,或换了机器。跑一次
nodeloc-apps login。E_SCOPE_DENIED
E_SCOPE_DENIED
你返回的某个 effect 需要的 scope 没被授予。用
nodeloc-apps logs 看是哪次调用,然后在 app.json 的 scopes 里申请并重新提交审核。E_INVALID_BLOCKS
E_INVALID_BLOCKS
组件树里有未知的类型或属性,或者超了 500 节点 / 32 层 / 256 KB 上限。
E_APP_TIMEOUT / E_APP_OUT_OF_MEMORY
E_APP_TIMEOUT / E_APP_OUT_OF_MEMORY
沙箱掐掉了这次调用。handler 要算得快、占得少。
webview 的 window.community 是 undefined
webview 的 window.community 是 undefined
小程序没有被授予
webview 权限,或站点没有开启 webview 支持。客户端报 X is not defined
客户端报 X is not defined
页面 JS 是源码注入、不是闭包,模块级常量要一并注入。见编写 handler。
小程序只能投放到一处
小程序只能投放到一处
你的
placement 是 single——这对帖子和节点同样生效。确实需要多处就改成 many,但先想清楚共享区会被劈开;跨安装要共享的东西用 kv.app。