@clisbot/频道-zalo
在repo Zalo官方账户(Bot API)频道垂直(目标分类账切片)
16) 从 extensions/zalo/src@5d8067a4483 看到了吗 upstream-sync.json 页:1
逐文件映射、偏差(D-ZL-0xx)和省略的内容.
Zalo船没有SDK:上游手卷其Bot API客户端 fetch 财务报告和审定财务报表
只取决于 zod (单位:千美元)4.4.3,上游版本),这就是这个软件包
也一样. undici 仅用于代理代理代理,在动态导入中
discord 垂直使用相同的形状.
这是 官方账户机器人 频道 (bot-api.zaloplatforms.com) (中文(简体) ). 扎罗
个人(zalouser,QR-login个人账户)是一个不同的上游账户
扩展和不同的切片(17).
枢纽接线器在后续片中落地. HUB-WIRING.MD (英语) 这是
交接文件是用Hub方面拥有的东西制作的,并保留着记录;
../../../docs/features/channels/README.md 描述平台为已建.
现场测试需要什么
自己提供这些,放回原地 .env。这个软件包永远不会
读取 .env 而这里没有价值是真正的证明——只有名字。 这个
ZALO_PERSONAL_TEST_* 已经输入的 ids .env 属于切片17,不是这个
频道.
Zalo 设置
- 创建(或使用)a 扎洛官方账户 时间 哦,扎罗,我。 。 。 .
- 单位 Zalo 瓶创建者 (单位:千美元)
bot.zaloplatforms.com为OA和 复制它的标志。 这个标志是整个证书——没有应用代码,没有 OAuth和没有签名密钥. - 跟着Zalo个人账户里的机器人 把它加进去 测试组,如果您想要分组案例.
- 投票模式不需要别的 Webhook 模式还需要一个公众 HTTPS 端点和您选择的秘密( 8–256 个字符) .
试验表面
| 新闻 var | 一定是这样 |
|---|---|
ZALO_BOT_TOKEN | 测试对象是Zalo Bot创造者 永远不要承诺. |
ZALO_TEST_CHAT_ID | 机器人和人类测试者之间的DM聊天id(a) message.*.received 事件显示它. |
ZALO_TEST_GROUP_ID | 增加了一个组,用于该组+提及案例. |
ZALO_TEST_BOT_ID | 机器人的自有身份证明getMe → result.id),用于自带信息过滤. |
ZALO_TEST_BOT_NAME | 那个机器人 account_name,这是一个群体提到的匹配. |
ZALO_TEST_IMAGE_URL | 用于输出的公开 HTTPS 图像 URL sendPhoto 案例. |
ZALO_WEBHOOK_URL | 仅Webhook模式:公开的HTTPS URL Zalo发布到. |
ZALO_WEBHOOK_SECRET | 只使用 Webhook 模式: 8–256- Char 符号在 x-bot-api-secret-token。 。 。 . |
ZALO_API_URL | 可选的 覆盖 API 基础(https://bot-api.zaloplatforms.com)用于假服务器. |
驱动程序/ bot- under - test 拆分是规则
(CLAUDE.md,"需要的Slack和Telegram E2E角色"):一个直接的 sendText 是一个
仅限外出抽烟测试. 所需要的证据是 外部发送方 运输方
代理翻转 ~ 在同一聊天中回复,然后读取匹配消息 id的回转
发送返回。 在Zalo上,外部发送者是一个 人类扎洛账户
给机器人发信息:机器人API 无法让一个机器人驱动另一个机器人,它
也没有回读终点( 无) getMessages,没有历史,所以读回
证据的一方是人类自己的客户 加上 message_id 发送
已经返回.
现场投票E2E今天可以投票 与 ZALO_BOT_TOKEN 一个人 韦伯克 E2E
在公共端点被屏蔽;见 HUB-WIRING.md 第6节。 。 。 .
最小账户配置
channel: zalo
accountId: main
connectionId: <hub connection id>
# webhookUrl absent → long polling, which is the mode a dev host can run.
mediaMaxMb: 5
botNames: ["<ZALO_TEST_BOT_NAME>"] # group mention aliases
routes:
- match: { kind: dm }
agent: <agent>
environment: <environment>
- match: { kind: channel, ids: ["<ZALO_TEST_GROUP_ID>"] }
agent: <agent>
environment: <environment>
机器人的标志 住在Hub连接的证书下 botToken中,没有
这个文件.
今天获得支持
入境 投票时间长(getUpdates)或HTTP webhook,两者都承认
在运输前:
message.text.received− a 个message转身,或command当身体转动时 是一个领先/verb。 。 。 .message.image.received− a 个message转过身来 照片下载到账户的媒体目录并折叠为[Attached files]。失败或过大下载保留上游[zalo image attachment unavailable]通知,所以代理仍然学习 图像已发送 .- 直接聊天和组. 一个DM总是
wasMentioned; 组消息是 提到它命名机器人时(D-ZL-012). - 机器人自己的信件和由机器人撰写的信件被过滤,除非
allowBots。 。 。 .
Webhook 请求以恒定时间认证
x-bot-api-secret-token 比较 在此之前 身体被读取 在上游的后面
速率限制 / 方法 / 内容类型 守护器, 200 则只写于
事件被持久地承认——一个失败的承认答案500,所以Zalo repelivers, a
错误的信封回答400 所以它不会.
投票没有抵消,也没有退缩(瓶子API最多返回一次) 更新并且永远不再保留它,所以循环在它发布之前就持久地承认了 下次拨打时,请重试一个失败的录入位置,然后以一个 只有在预算用完后(D-ZL-015)才会出错级行.
出境:带有上游2000-Char块和UTF-16-安全截取的文本;
hTTPS URL 的图像 sendPhoto (以文本为标题),后面
sSRF的主保镖.
信件工具动作数字 : send ——整个扎洛消息API.
不予支持
命名于此, 上面没有比它更多的内容 。 其中大部分是 平台限制,而不是端口缺口.
- 文件上传 ——Bot API没有上传端点.
sendMedia员额a 明显通知和报告mediaPosted: false(D-ZL-016) (中文(简体) ). 上游的风景 工作周期(outbound-media.ts,将文件托管在账户本身的 webhook上 来源)需要HTTPS的公用端点,而省略. - 编辑、删除、反应、针头、民调、按钮、原生命令、线程 —— 说
没有终点.
supportsAction拒绝他们 所以Hub回答unsupported_action而不是运输错误. - 回读/ 历史 没有终点。 送货由退回者确认
message_id只有这个. - 标签和不支持的信件类型 上游记录这些记录和 开始不转; 此端口保持了这一行为, 而不是创建一个机构 .
- 打字指标 —— 说
sendChatAction是在客户端并输出,但 没有什么能推动它:上游驱动它 从省略的答复管道 Hub的进步表面还没有Zalo运输. - 对等、许可列表、 dm/组政策执行 ——枢纽拥有接入权
(目标分类账23)。 账户的
dmPolicy编号 :allowFrom编号 :groupPolicy(b) 上游group-access.ts解析器被移植到枢纽处使用. - 设置/ 医生表面, 批准权限, 会话路径 ——"开放法"
巫师,
doctor树木、核准-自动能力和出站会话路线 建设者省略;枢纽自有上岗,审批和出行.
版式
src/
api.ts timeouts.ts ← upstream Bot API client + its deadlines
token.ts accounts.ts types.ts ← upstream token/account resolution
probe.ts proxy.ts group-access.ts ← upstream probe, proxy cache, group policy
send.ts actions.ts actions.runtime.ts ← upstream send path + message-tool adapter
webhook-spool.ts monitor.webhook.ts ← upstream envelope schemas + request handler
runtime-api.ts runtime.ts ← upstream host binding + runtime slot
channel-actions.ts outbound.ts ← Fusion: Hub drive surface
lifecycle/start-account.ts ← Fusion: L4 account lifecycle
fusion/ ← Fusion: every boundary, one per D-ZL-0xx
account-config.ts Hub account carrier → upstream account resolution
admission.ts durable admission before the ack / the next poll
inbound-adapter.ts update → ChannelInboundEvent (kind + facts)
polling-session.ts the getUpdates loop
webhook-session.ts the owned node:http listener
ssrf.ts the media-URL host guard
proxy-fetch.ts the proxy-agent fetch
secret-file.ts the credential-file reader