DooTask 机器人机制完全指南:系统机器人、自建机器人与 Webhook 接入
后端前端协同办公即时通讯企业应用【免费下载链接】dootaskDooTask是一款开源在线项目任务管理工具提供各类文档协作工具、在线思维导图、在线流程图、项目管理、任务分发、即时IM文件管理等工具同时消息功能使用非对称加密技术让你的沟通更安全。项目地址https://gitcode.com/gh_mirrors/do/dootask点击查看免费下载机器人是 DooTask 中一类以虚拟账号形态存在、可收发消息却无法登录 UI 的特殊用户承担着自动通知、外部系统接入和 AI 对话等核心职责。本文以 机器人概念文档 为主线结合 UserBot 模型 与 BotReceiveMsgTask 任务 等源码系统讲解机器人的三类形态、内置机器人清单、创建与邀请流程、 触发规则、Webhook 回调协议以及权限边界帮助你彻底搞懂并实际使用 DooTask 的机器人能力。机器人是什么一个不能登录的特殊用户在 DooTask 中机器人bot / robot本质上就是一种特殊用户账号在用户表users中以bot 1字段标记见 User.php 模型 中的botGetOrCreate()创建逻辑。它与普通用户的关键区别在于不能登录前端 UI机器人没有网页/客户端登录入口不能像真人一样操作界面只能通过 token 调用 API 或被 触发机器人拥有独立的userid、token、头像和昵称外部代码拿到 token 后可代它发消息可以像普通用户一样加入会话能被邀请进群聊邀请机器人进群能收发消息也能被 邮箱统一以bot.system结尾这是识别机器人身份尤其系统机器人的重要标记后端通过str_ends_with($email, bot.system)判断见 UserBot.php#L136-L139 的isSystemBot()。由于机器人拥有独立 token它天然适合三类场景场景说明自动通知任务被分配、截止时间临近、会议开始等系统事件由机器人推送消息外部系统接入拿机器人 token 调用 DooTask API由外部代码代发消息AI 对话在单聊或群聊中 AI 机器人获得大模型问答能力三类机器人能力依次递增DooTask 把机器人分为三类从系统内置到外部可编程能力逐级增强1. 内置系统机器人system bot邮箱以bot.system结尾由系统创建并维护名单写死在 UserBot::systemBotName() 的match分支里不支持自助新增类型。典型成员包括「任务提醒」「审批」「签到打卡」「AI 助手」「会议通知」等。普通用户不能新建或删除仅管理员可修改设置删除系统机器人会报「系统机器人不能删除」校验逻辑见 bot__delete 接口部分机器人依赖对应插件已安装AI、审批等否则不出现。2. 用户自建机器人UserBot任何登录用户都可在「应用 → 我的机器人」里创建创建用户机器人用于把外部系统消息推进 DooTask拿到 token 后由外部代码代发消息。自建机器人在数据库中通过user_bots表关联创建者核心字段见 UserBot.php 模型注释userid所属人、bot_id机器人用户ID、clear_day消息自动清理天数、webhook_url消息webhook地址、webhook_eventsWebhook事件配置。3. Webhook 接入自建机器人配置webhook_url后收到的群消息 / 触发 / 成员变更等事件会被 POST 到该地址外部服务可据此回复详见后文「Webhook 接入」一节与 机器人 Webhook 概念文档。内置系统机器人清单DooTask 自带一组系统机器人邮箱统一以bot.system结尾完整名单见 系统机器人清单文档对应源码中的systemBotName()映射UserBot.php#L146-L174通知/提醒类邮箱名称用途system-msgbot.system系统消息系统公告、登录提醒、版本通知task-alertbot.system任务提醒任务被分配、截止时间临近、状态变更todo-alertbot.system待办提醒个人待办到期提醒meeting-alertbot.system会议通知会议邀请、开始/结束提醒需会议插件okr-alertbot.systemOKR 提醒OKR 周期推进、KR 更新需 OKR 插件approval-alertbot.system审批审批待办、结果通知需审批插件互动/办公类邮箱名称用途check-inbot.system签到打卡单聊里发指令打卡支持手动 / 定位 / 路由器 MAC / 人脸anon-msgbot.system匿名消息在他人单聊里以匿名身份发消息bot-managerbot.system机器人管理用/list/newbot/setname等斜杠指令管理自建机器人这类机器人的快捷菜单由 UserBot::quickMsgs() 动态生成——例如签到机器人会根据checkinSetting的开启状态与模式manual/locat渲染「手动签到」「定位签到」按钮会议机器人在客户端版本 ≥ v0.39.89 时提供「新会议」「加入会议」机器人管理机器人固定提供/help、/api、/list三个快捷指令。AI 对话类邮箱名称ai-openaibot.systemChatGPTai-claudebot.systemClaudeai-deepseekbot.systemDeepSeekai-geminibot.systemGeminiai-grokbot.systemGrokai-ollamabot.systemOllamaai-zhipubot.system智谱清言ai-qianwenbot.system通义千问ai-wenxinbot.system文心一言AI 机器人需要在「系统设置 → AI 设置」里配置对应 API Key 才能启用AI 机器人配置文档。后端在 BotReceiveMsgTask.php#L514-L516 检查api_key为空时直接抛出「机器人未启用。」未安装 ai 插件时则报「应用『AI Assistant』未安装」BotReceiveMsgTask.php#L450-L452。未配置的 AI 机器人会以「机器人未启用」提示拒绝响应。注意系统机器人的指令、行为由后端写死无法自定义回复逻辑AI 机器人在群聊里必须 才回复私聊不需要 。用户自建机器人创建流程与字段详解入口桌面端左侧栏「应用」→「我的机器人」卡片 → 右上角「添加机器人」指令入口在「机器人管理」bot-managerbot.system单聊里发/newbot 名称创建后端调用UserBot::newBot()UserBot.php#L566-L602。操作步骤在「我的机器人」面板点「添加机器人」填写「机器人名称」2-20 字符必填源码中strlen($botName) 2 || strlen($botName) 20会直接拒绝可选上传头像推荐 512×512可选设置「保留消息天数」clear_day1-999默认 90 天可选填写webhook_url并勾选要订阅的事件message/dialog_open/member_join/member_leave点「保存」对应后端接口api/users/bot/editbot__edit见 UsersController.php#L2794-L2897。字段说明字段必填说明name是机器人昵称2-20 字符超出范围报「机器人名称由2-20个字符组成」avatar否头像 URL留空用默认session否0/1是否开启「新会话/历史会话」菜单仅新建时生效创建后不能改clear_day否消息保留天数 1-999超期自动清理编辑接口用min(max(intval($data[clear_day]), 1), 999)收敛范围webhook_url否必须以http://或https://开头最长 255 字符webhook_events否事件列表见「Webhook 接入」一节从源码看session参数在创建时决定机器人类型前缀开启会话则使用user-session-前缀否则使用user-normal-前缀UserBot.php#L578因此创建后无法再切换该开关只能重建机器人。创建之后在「我的机器人」列表点「开始聊天」进入和机器人的单聊把机器人邀请到群里见邀请机器人进群拿 token在「机器人管理」单聊发/token bot_id或/revoke重置重置会重新生成机器人密码与加密串见 BotReceiveMsgTask.php#L278-L301删除列表里点「删除」要求填写删除备注≤ 255 字符源码在 bot__delete 中校验。不支持不能跨账号转让机器人DooTask 自身没有「过户」功能不能把已有的普通用户改成机器人反之亦不能。邀请机器人进群与 触发规则邀请机器人进群机器人在系统里等同于一个用户可在群成员管理里像加普通成员一样添加邀请机器人进群桌面端群聊右上角「群信息」→ 成员列表「」→ 搜索机器人昵称或bot.system关键字 → 勾选 → 确定移动端群聊右上角菜单 →「群信息」→「」添加成员 → 搜索机器人 → 确定。邀请后的行为机器人加入即视为群成员看得到群里所有消息但不会主动回复群里只有 机器人时才触发回复AI 机器人额外会把最近 15 条群聊记录作为上下文带给模型自建机器人会通过webhook_url把消息推送出去如订阅了message事件。单聊 vs 群聊的触发差异场景触发方式单聊直接发任意消息即可触发AI 机器人会回复内容签到/隐私机器人按指令处理自建机器人通过 webhook 转给外部群聊必须 机器人才会触发否则机器人当作背景消息只看不回具体怎么 桌面端在输入框输入弹出成员候选输入机器人名前几个字回车选中即可移动端同样打弹出候选或长按机器人头像选「TA」。引用回复机器人的某条消息也算交互会作为reply_text上下文带给对方详见触发机器人。不响应的情况群聊里没 机器人只 了「所有人」所有人 不算 机器人客户端版本过低AI 机器人要求 ≥ v0.41.11否则抛「当前客户端版本低所需版本≥v0.41.11」BotReceiveMsgTask.php#L446-L448AI 机器人未配置 API Key报「机器人未启用」AI 插件没装报「应用『AI Assistant』未安装」用户自建机器人收到/...开头的指令源码中明确判断str_starts_with($sendText, /)时用户机器人直接忽略BotReceiveMsgTask.php#L533-L536斜杠指令只对系统机器人有效机器人之间互相发的消息会被忽略——BotReceiveMsgTask.php#L80-L82 检查消息发送者$msg-user-bot为真则直接 return避免机器人互触发造成死循环。AI 机器人的额外规则群聊里 AI 机器人会把当前对话最近 15 条记录作为上下文带给模型群聊会自动设before_clear 1清掉旧上下文避免跨群污染BotReceiveMsgTask.php#L503-L505模型名可在「选择模型」菜单里临时切换或在消息里用模型名 - thinking触发思考模式源码兼容think/thinking/reasoning后缀并映射为 medium 思考档位见 BotReceiveMsgTask.php#L476-L497。系统机器人会话的差异系统机器人推送的消息与真人消息有本质区别系统机器人会话文档维度真人消息机器人消息发送者真实 useridbot1 的虚拟账号撤回时限受msg_rev_limit控制无限制可自行撤回 提醒计入 mention 统计不计入机器人 Webhook 接入Webhook 是把「机器人收到的事件」用 HTTP POST 推到外部服务的地址。外部服务回{code:200,message:...}时DooTask 会把message作为机器人的文本回复发回会话回复逻辑见 BotReceiveMsgTask.php#L595-L602。可订阅事件事件常量定义在 UserBot.php#L50-L53完整事件列表事件 key触发时机message机器人收到消息单聊任意消息群聊需 机器人dialog_open用户首次打开和机器人的会话member_join群聊里机器人或他人加入member_leave群聊里成员离开默认行为不勾任何事件时默认按[message]处理。源码中normalizeWebhookEvents()UserBot.php#L626-L640会对配置做过滤只保留合法事件若过滤后为空且启用 fallback则回落为[message]。事件派发链路message事件由 BotReceiveMsgTask::handleWebhookRequest() 在机器人收到消息后触发先经shouldDispatchWebhook()校验再 POSTdialog_open用户首次打开会话时触发DialogController.php#L486member_join/member_leave由 WebSocketDialog::dispatchMemberWebhook() 在群成员加入/离开时向群内所有自建机器人派发payload 中包含member成员与operator操作者信息。shouldDispatchWebhook()的触发条件UserBot.php#L91-L100已配置webhook_urlwebhook_url匹配/^https?:\/\//——必须以http://或https://开头否则不发送该事件在webhook_events列表中。event message时的请求体字段后端组装的数据结构见 BotReceiveMsgTask.php#L551-L578字段说明eventmessagetext用户的纯文本指令reply_text若是引用回复被引用消息的文本token机器人当次有效的 API token可调 DooTask API 代发消息dialog_id/dialog_type/session_id会话标识开启session的机器人才会有session_idmsg_id/msg_uid/mention消息 ID、发送者 ID、是否被 mention为 1 表示被 bot_uid机器人 useridmsg_user发送方信息userid / email / nickname / profession / lang / 临时 tokenextrasJSON 字符串含timestamp等version当前 DooTask 版本设置方式在「我的机器人」编辑面板填webhook_url并勾选事件或在单聊「机器人管理」里发/webhook bot_id url源码见 BotReceiveMsgTask.php#L327-L345URL 超过 255 字符报「webhook地址最长仅支持255个字符」。Webhook 的限制不支持鉴权签名如 HMAC请使用 HTTPS 服务端校验token字段调用超时 30 秒超时不重试失败仅在后端 info 日志记录见 UserBot::dispatchWebhook() 的 catch 分支不支持失败重试 / 死信队列不能区分消息来自哪个具体群成员之外的额外字段。权限模型与边界机器人相关的权限由后端硬性判断机器人权限 FAQ前端隐藏按钮不等于绕过校验。核心规则自建机器人只有创建者user_bots.userid与当前用户一致才能查看 / 修改 / 删除否则报「不是你的机器人」系统机器人bot.system邮箱仅userIsAdmin管理员可改昵称/头像任何人都不能删除删除报「系统机器人不能删除」数量上限每个用户最多创建50 个自建机器人超出报「超过最大创建数量」——校验在 UserBot::newBot() 中通过 joinuser_bots表计数实现名称长度机器人名 2 字符或 20 字符报「机器人名称由2-20个字符组成」删除要求删除自建机器人必须填写删除备注≤ 255 字符同时会清掉关联会话。常见操作指引想删自建机器人 → 用创建者本人账号在「我的机器人」列表点「删除」并填写备注想改系统机器人 → 联系系统管理员普通成员所有写操作都会被拦想接管他人机器人 → 不支持可让原主人/token取走凭证后提供给你但 DooTask 无「过户」功能创建满 50 个 → 先删一些不用的机器人删除会同时清掉关联会话通过「机器人管理」单聊用/list查看自己拥有哪些机器人后端take(50)限制一次最多返回 50 个见 BotReceiveMsgTask.php#L197-L214。底层实现速览如果把上面所有行为串起来机器人系统的核心调用链是账号层User::botGetOrCreate()app/Models/User.php#L1022-L1055按{key}bot.system邮箱查重并创建 bot 用户自建场景额外写入user_bots归属记录API 层bot__list/bot__info/bot__edit/bot__delete四个接口app/Http/Controllers/Api/UsersController.php#L2694-L2947完成机器人的增删改查与权限校验消息处理层BotReceiveMsgTaskapp/Tasks/BotReceiveMsgTask.php接管机器人收到的消息——先忽略机器人发来的消息防死循环再按类型分发系统机器人走斜杠指令 / 快捷回复AI 机器人走/ai/chat网关自建机器人走 webhook 推送Webhook 层UserBot::shouldDispatchWebhook()dispatchWebhook()app/Models/UserBot.php#L91-L129完成事件过滤与 HTTP POST成员类事件由 WebSocketDialog::dispatchMemberWebhook() 派发。从源码结构看机器人机制的定位是「消息层可插拔、账号层统一管理」无论系统机器人还是自建机器人都复用同一套用户与会话体系差异主要体现在回复逻辑写死 vs 可编程与触发方式上。理解了这一点你就能根据自己的场景选择合适形态需要固定业务通知用系统机器人需要外部系统联动就用自建机器人 Webhook。赞分享后端前端协同办公即时通讯企业应用【免费下载链接】dootaskDooTask是一款开源在线项目任务管理工具提供各类文档协作工具、在线思维导图、在线流程图、项目管理、任务分发、即时IM文件管理等工具同时消息功能使用非对称加密技术让你的沟通更安全。项目地址https://gitcode.com/gh_mirrors/do/dootask点击查看免费下载相关推荐如何用Typer快速构建强大的机器人命令行接口从入门到精通如何用Typer快速构建强大的机器人命令行接口从入门到精通 Typer是一个基于Python类型提示的命令行接口CLI构建工具它让开发者能够轻松创建功能CLIOpenVLA机器人控制实战3步构建智能机器人系统OpenVLA机器人控制实战3步构建智能机器人系统 想要让机器人真正理解把桌上的杯子拿过来这样的自然语言指令吗 OpenVLA作为开源的视觉语言动作人工智能大模型具身智能机器人多模态微调LoRA预训练math-as-code与机器人安全机器人系统的数学编码指南math as code与机器人安全机器人系统的数学编码指南 你是否曾因学术论文中的复杂数学符号而却步是否在机器人开发中遇到过因数学实现不当导致的安全隐患教程上一篇Windows 11 LTSC也能拥有完整应用商店一键恢复微软商店的完整指南下一篇DRG存档编辑器完整指南5分钟快速掌握《深岩银河》资源修改技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考