Secure DM Pairing:AI 机器人的安全私信访问方案
在开发基于 LLM 的聊天机器人(如 Telegram、WhatsApp Bot)时,如何控制谁能与机器人对话是一个核心安全问题。直接开放访问可能导致 Token 滥用,而手动配置白名单又过于繁琐。
OpenClaw 提供了一套优雅的解决方案,称为'Secure DM Pairing'(安全私信配对)。这套机制平衡了安全性与便捷性,下面深入解析其运作流程及底层实现逻辑。
什么是 Secure DM Pairing?
这是 OpenClaw 网关默认的一种访问控制策略。当一个未授权的用户首次通过私信联系机器人时,系统不会直接拒绝,而是拦截消息并生成一个临时的 8 位配对码(Pairing Code)。用户将此码发送给机器人管理员,管理员在服务器端通过 CLI 指令批准该码,从而完成用户身份的绑定与授权。
核心优势:
- 安全性:有效防止未经授权的 API 调用。
- 便捷性:无需管理员手动查找用户的长 ID(如 Telegram User ID),通过简短的配对码即可完成鉴权。
- 交互性:用户能得到明确的反馈,知道系统处于'待授权'状态。
完整交互流程演示
假设你的机器人部署在 Telegram 上,整个流程如下:
1. 用户触发
陌生用户(UserA)向机器人发送消息:'你好,我想使用服务。'
2. 系统拦截与回复
OpenClaw 检测到 UserA 不在白名单中,且策略配置为 pairing。机器人自动回复:
OpenClaw: access not configured.
Your Telegram user id: 773988xxxx
Pairing code: 2B9VQY42
Ask the bot owner to approve with:
openclaw pairing approve telegram 2B9VQY42
3. 管理员批准
管理员在运行 OpenClaw Gateway 的服务器终端执行以下指令:
查看待处理请求(可选):
openclaw pairing list telegram
批准配对(核心指令):
openclaw pairing approve telegram 2B9VQY42
执行结果:
Approved telegram sender 773988xxxx.
此时,UserA 的 ID 被正式写入系统的白名单,之后的所有消息都将正常透传给 LLM 处理。
核心代码实现解析
这套机制是如何通过代码实现的?我们可以从 OpenClaw 的源码中一探究竟。
消息拦截与逻辑判断
核心逻辑位于 bot-message-context.js 中。系统在处理每一条入站消息时,会检查 dmPolicy。
代码位置:dist/telegram/bot-message-context.js
// dist/telegram/bot-message-context.js
if (!isGroup && !allowed) {
if (dmPolicy === 'pairing') {
// 生成临时配对码
const code = generatePairingCode();
// 发送提示消息给用户
await sendDM(user, `access not configured.\nYour Pairing code: ${code}`);
return; // 拦截后续处理
}
}
这里的关键在于 return 语句。一旦匹配到配对模式,函数立即终止,不再将消息传递给后续的 LLM 处理逻辑,从而确保只有经过管理员批准的会话才能继续流转。这种设计既保证了安全边界,又避免了复杂的权限校验嵌套。

