Skip to content

飞书里 @ Bot 不回:需要先分清是连接器没开 app 模式、应用缺群 @ 事件权限,还是被 owner 门挡住 #2795

Open

Description

@Birfy

Written-by: Chief

用户 2026-11-10 16:37(Asia/Shanghai)= 08:37Z 报:在飞书里 @ 这个 Bot 不会回复(实例:用户自己的 flybot98b8ecba)。原话到这里截断("不会回复,然后"),细节待补。

代码今天怎么走(main 3d1165f6 读)

  • 入站:core/src/host/feishu-inbound.js 的 readEvent 只接受 message_type === "text";正文里 @_user_\d+ 占位符会被剥掉再交给 remote-chat.deliver。
  • 谁能起 turn:只允许 owner 的 open_id 与连接器行上 Allow 过的 open_id,其余记 refused(行上可见"被拒的人")。
  • 出站:core/src/host/connectors.js 的 feishuReply 按 handle feishu:oc_… 用 app token 发回同一个 chat;webhook 模式没有 chat id,只能发到 webhook 指向的那个群。
  • 连接器行有四种状态:off / connecting / ready / error(STATES)。

所以 @ 不回可能落在四类之一

  1. 连接器只连了 webhook(第一期),没配 App ID/Secret 开 app 模式 —— 没有长连接,@ 根本不会到进程里,本地面板也不会有事件。
  2. app 模式已连,但飞书应用那边没订阅 im.message.receive_v1,或缺群消息/@机器人权限(im:message.group_at_msg)—— 私聊能收、群里 @ 收不到,这类在飞书控制台的"事件与回调"里看得出。
  3. 长连接状态不是 ready(error),或发言人的 open_id 不在 owner/allowed 名单 → 被 refused。
  4. 只发了一个 "@机器人" 没有其它文字:readEvent 先判 text.trim() 非空,再把占位符剥掉,剥完剩空串 —— 这种消息起不了有意义的一轮。

需要补的事实(补上就能判是配置还是缺陷)

  • 私聊里能回吗?群里 @ 不回还是两边都不回?
  • 设置里飞书连接器行现在是什么状态(off / connecting / ready / error,error 后面那句话)?
  • 是在哪种会话里 @ 的:单聊、群(Bot 在群里吗)、还是话题?
  • @ 之后发了什么文字(是否只有 @ 和空白)?

补到之后:若是配置/权限,写清飞书控制台要点哪几项;若是代码缺陷,按 03 口径派实现线并带红先。

Activity

  1. added
    bugSomething isn't working
    needs-infoWaiting for the reporter or a maintainer decision
    area:socialFriends, invites, grants, Bot Social
    on Nov 10, 2026
  2. Birfy commented on Nov 10, 2026

    @Birfy
    CollaboratorAuthor

    Written-by: Chief

    用户 2026-11-10 16:44(上海)/ 08:44Z 回答:只在群里试过 @,还没试过私聊。

    所以现在按这个顺序缩小范围:

    1. 私聊机器人发一句「你好」(单聊不需要 @)——能回=入站通道通,问题落在群消息那条路上(应用要订阅 im.message.receive_v1、要有「获取群组中 @ 机器人消息」的权限、机器人本身要在群里);不回=连接器没开 app 模式(只有 webhook 就没有长连接)或长连接状态是 error。
    2. 设置页飞书那一行的状态是 off / connecting / ready / error 哪一个,error 后面那句话。

    顺带记两个已知的坑(不是这次报的事,但会影响判读):

    • 群里只发「@机器人」不带任何文字时,readEvent 会先判非空、再把 @_user_N 占位符剥掉,剥完是空串 —— 这种消息起不了一轮(代码现状,不是配置问题)。
    • 仓库里没有任何飞书接入文档:README.md / README.zh.md / docs/ 都没有 guild 级说明「要订阅哪个事件、要开哪个权限、机器人怎么进群」,只有连接器行上一个指向飞书官方文档的外链。等这次定位完,无论结论是配置还是缺陷,都该补一页 docs/(或 README 一节),把这几条写死。
  3. Birfy commented on Nov 10, 2026

    @Birfy
    CollaboratorAuthor

    Written-by: Chief

    用户 16:47(上海)/ 08:47Z 补了截图,结论已经能定:

    截图里的机器人是「自定义机器人(Custom Bot)」

    描述行写着 Push Custom Service Messages to Feishu Via webhook,群里还有一条 FlyBot is connected. —— 那正是连接器 connect 时的测试消息(FEISHU_TEST_TEXT)。也就是说飞书行现在是 webhook 模式。

    • webhook 模式只有出、没有进:自定义机器人拿不到任何事件,飞书不会把群里的 @ 投给它,所以"@ 不回"是必然的;
    • 自定义机器人没有单聊,所以"没办法私聊"也是这个模式决定的,不是缺陷。

    要 @ 有回复,只能换 app 模式

    1. 飞书开放平台建自建应用,拿 App ID / App Secret;
    2. 应用里开事件订阅(长连接方式,事件 im.message.receive_v1);
    3. 加权限:读群里的 @ 消息(im:message.group_at_msg 这类)+ 发消息(im:message:send_as_bot);
    4. 把应用机器人拉进群;
    5. 在 FlyBot 的飞书行里选 App (long connection),填 App ID + App Secret(secret 存 secrets.json,行上只显示 set/missing)。

    换过去之后还有一道门,现在没有界面

    进站只允许「owner 的 open_id」或行上 allowed 名单(connector-allow)。owner 的 open_id 来自 config 的 feishu.ownerOpenId,仓库里没有设置项能填它(只有 docs/subsystems/core-host.md 的叙述)。

    • 症状会是:长连接 ready,但每次 @ 都"没反应",行上出现一个 refused sender。
    • 绕法:把行上显示的那个 open_id 用 Allow 加进名单(等同放行自己);根上要补一个「设 owner open_id」的入口。

    所以这条 issue 建议这样收

    • 本条不是代码缺陷,属于文档 + 入口缺失:(a) 行上要写清「webhook 模式只能出、不能进,@ 回复需要 app 模式」;(b) 补 docs/ 一页,写死事件订阅、权限、拉群、owner open_id 四步;(c) 行上补 owner open_id 的填写/自动识别(例如 app 模式连上后由某次 connector-allow 反向写入)。
    • 等用户决定是否要改成 app 模式;要改的话,(a)(b)(c) 可以拆成一条 docs 单 + 一条 UI 单派出去。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:socialFriends, invites, grants, Bot SocialbugSomething isn't workingneeds-infoWaiting for the reporter or a maintainer decision

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions