外观
抖音
抖音网页版私信(浏览器自动化驱动,参考 Douyin-mcp)。cookie 登录、有头模式更稳;只支持文本收发,需要本机有 Edge 或 Chrome 浏览器环境。
适配器类型:"douyin" 源码:src/adapter/douyin/ 协议:基于抖音网页版私信(/messages)的浏览器自动化。
抖音 web 接口普遍需要 a_bogus 签名(逆向 webmssdk.js),纯 HTTP 方案不稳定且易失效,故本适配器采用系统浏览器(Edge 或 Chrome)驱动网页版私信页实现 cookie 登录与私信收发。网页版自动化属于非官方方式,有账号风控风险,请自行评估使用。
说明
特点
- 浏览器自动化驱动网页版私信,无需逆向签名
- cookie 登录,持久化浏览器指纹降低验证码触发率
- 支持文本私信收发
- 内置反检测脚本 + 持久化浏览器指纹
原理
- 接收:打开网页版消息面板,轮询会话列表,检测"最后消息预览 + 时间"指纹变化即派发事件
- 发送:点击会话 → 注入 contenteditable 输入框 → 点发送按钮(兜底回车)
- 登录:将 config.cookie 写入浏览器上下文,检测 sessionid 确认登录态
前提
- 本机有 Edge 或 Chrome 浏览器(无需下载浏览器,playwright-core 驱动系统浏览器)
- 抖音网页版登录 cookie(须含 sessionid)
- 抖音对 headless 指纹有验证码风控,建议有头模式过验证一次后持久化指纹
安装
适配器安装
bash
van adapter install douyin依赖库
bash
npm install playwright-core配置
jsonc
{
"botId": "抖音",
"type": "douyin",
"cookie": "sessionid=xxx; sid_guard=yyy; ...",
"executablePath": "",
"headless": true,
"profileDir": "",
"sessionDir": "",
"pollInterval": 2500
}| 配置项 | 必填 | 说明 |
|---|---|---|
cookie | ✅ | 抖音网页版登录 cookie(须含 sessionid) |
executablePath | 可选 | 浏览器绝对路径(默认自动探测系统 Edge 或 Chrome) |
headless | 可选 | 无头模式,默认 true;被验证码拦截时设 false 用真实窗口过验证一次 |
profileDir | 可选 | 浏览器指纹持久化目录,默认 ./data/douyin_profile/<botId>/(不要删) |
sessionDir | 可选 | 登录态保存目录,默认 ./data/douyin_session |
pollInterval | 可选 | 接收轮询间隔毫秒,默认 2500 |
登录方式
从已登录抖音的浏览器按 F12 打开开发者工具,切换到 Console 控制台,输入 document.cookie 回车,复制输出的整段字符串填入配置的 cookie 字段即可。适配器会检测 sessionid 确认登录态。
cookie 有效期不固定,一般数天到数周。过期后日志会提示登录态无效,重新复制一份填入即可。
接收事件
| 场景 | 框架事件 | 标识 |
|---|---|---|
| 好友私信 | private_message | userId = 对方昵称 |
收到的是会话列表的最后一条消息预览(文本),统一转为 text 段;若预览是表情/图片占位,文本可能为空或呈现为占位,此时转 [未知消息]。
网页版消息能力已被抖音弱化,富媒体内容(图片/视频)读不到,只能拿到文本预览。
API 调用
| action | 说明 |
|---|---|
send_private_msg | user_id = 对方昵称,发送私聊 |
send_group_msg | group_id = 群名(当前网页版面板仅私聊会话,群聊暂不可用) |
send_msg | 有 group_id 走群聊,否则走私聊 |
get_contacts | 返回消息面板会话列表(昵称、最后消息预览、时间、是否群聊) |
ts
await bot.callApi("send_private_msg", { user_id: "Van.", message: "你好" })
await bot.callApi("send_msg", { user_id: "Van.", message: "在吗" })
const contacts = await bot.callApi("get_contacts")抖音没有数字 ID,user_id 这里填会话昵称,必须与消息面板里显示的一致。
能力集:text: true,其余均为 false。富媒体段会被内核降级逻辑自动丢弃或转文本。
常见问题
- 登录态无效:cookie 里没有 sessionid / 过期。从已登录抖音的浏览器复制
document.cookie填入。 - 验证码风控:headless 模式可能触发滑块验证码。把
headless改为false用真实窗口过验证一次,之后 profileDir 持久化指纹免验证。 - 收不到消息:确认日志出现"登录成功";适配器轮询消息面板会话列表,只有会话有新消息才派发事件。
- 发消息失败:昵称必须与消息面板里完全一致。
- 浏览器找不到:自动探测 Edge 或 Chrome 失败时,在
executablePath填浏览器绝对路径。 - 风控:高频轮询/发送可能触发抖音风控,建议
pollInterval不要低于 1500ms。
相关项目
- Douyin MCP Server(收发实现参考):https://github.com/Lozzi1910/Douyin-mcp
- 抖音 web 私信协议分析:https://juejin.cn/post/7653873632477462564
