观测云故障中心 × 飞书联动:群内触发 OnCall 故障闭环最佳实践

    banner.png

    背景与价值

    在客户服务群中,客户反馈问题后,真正关键的不是“群里有人看见了”,而是系统能够把这条反馈快速转成一次标准 OnCall 响应:自动创建故障、电话通知当前值班人,并在无人确认时按照升级策略继续通知二线、三线,直到有人接手处理。

    通过飞书机器人联动观测云,客户或一线同学只需要在飞书群里 @机器人并描述问题,Func 会把消息推送到观测云外部事件。真正的故障响应由观测云故障中心承接:它会创建标准 Incident,关联值班表,触发 OnCall 电话通知,并在无人确认或需要更高层级介入时按升级策略继续通知二线、三线。飞书交互卡片负责把状态同步回原群,让协作入口保持轻量,而故障处理、升级和复盘沉淀在观测云内统一完成。

    本文围绕三个部分展开:

    部分 职责 结果
    观测云 接收外部事件,生成故障,执行电话通知和升级策略 形成标准 Incident 和 OnCall 升级闭环
    Func 连接飞书与观测云,承接事件回调、按钮回调和升级回调 完成消息解析、故障创建、状态修改和卡片刷新
    飞书 群内触发、卡片展示、值班人确认和状态同步 让一线协作留在原群内完成

    观测云

    观测云是这套方案里的 OnCall 承载平台。Func 将飞书群里的客户反馈转成外部事件后,观测云故障中心会基于事件创建 Incident,并将它纳入统一的故障生命周期管理。

    故障中心不仅负责记录故障状态,也负责把故障真正通知到人:当故障进入待分配状态后,可以按照值班表和升级策略进行电话通知;如果一线值班人未在预期时间内确认,系统会继续升级到二线、三线,直到有人接手处理。

    飞书机器人不替代故障中心,而是把群内自然语言反馈接入故障中心,并把故障状态回写到飞书群里。这样既保留观测云的电话告警和升级能力,也让客户群里的协作状态保持透明。

    能力 说明
    外部事件接入 将飞书群内 @机器人消息转成观测云事件
    故障中心 根据外部事件生成 Incident,并维护故障状态、处理人和确认时间
    电话告警 按值班策略对当前值班人发起电话通知,确保故障不是只停留在群消息里
    升级策略 当一线未确认或需要升级时,继续通知二线、三线值班人
    通知对象 将升级动作回调到 Func API,刷新飞书群卡片
    OpenAPI 支持查询故障、修改故障状态、读取值班策略

    故障中心在方案中的定位:飞书负责把客户群里的反馈变成入口,Func 负责做协议转换和回调编排,观测云故障中心负责把入口事件变成可响应、可升级、可分析、可复盘的标准故障流程。

    故障中心能力如何支撑 OnCall 闭环

    能力 在本实践中的作用 带来的价值
    值班表 维护一线、二线、三线的当日值班人与通知顺序 减少人工判断当前该找谁,保证责任人明确
    OnCall 升级 按确认超时、未接听或升级规则继续通知下一层级 避免故障停留在单个值班人,提升关键问题触达率
    故障生命周期 统一维护待分配、处理中、已解决等状态 让群内反馈进入标准 Incident 管理,而不是散落在聊天记录中
    通知对象 在故障升级或状态变化时回调 Func 让飞书卡片能够跟随故障状态和当前值班层级同步刷新
    故障分析看板 沉淀故障量、级别分布、响应效率、升级次数和处理结果 支持团队复盘 OnCall 质量,识别高频问题和流程瓶颈

    Func

    Func 是飞书与观测云之间的连接层,建议拆成两个函数 API,分别处理飞书回调和观测云故障升级回调。

    Func API 用途 配置位置
    oncall-event 接收飞书事件回调和卡片按钮回调 飞书开放平台事件与回调
    oncall-incident-hook 接收观测云故障升级 Webhook 观测云故障中心通知对象

    两个 API 的职责必须区分清楚:

    • 飞书开放平台的 URL Verification、群消息事件、卡片按钮回调,都配置到 oncall-event
    • 观测云故障升级通知对象的 Webhook,配置到 oncall-incident-hook
    • 两个地址不要混用,否则会出现 URL Verification 不返回、卡片无法刷新或升级回调无法处理的问题。

    关键实现可以抽象为以下伪代码:

    def oncall_event(request):
        # 入口 1:飞书开放平台会先做 URL Verification,用于确认回调地址可用。
        event = parse_feishu_callback(request)
        if event.type == "url_verification":
            return {"challenge": event.challenge}
    
        # 入口 2:用户点击飞书卡片按钮,例如“待分配”或“处理中”。
        if event.type == "card.action.trigger":
            action = parse_card_action(event)
            check_oncall_permission(action.operator)  # 只允许当前值班人操作。
            update_guance_incident_status(action.incident_uuid, action.target_status)
            return update_feishu_card(action.message_id)  # 更新同一张卡片,不重复发新卡片。
    
        # 入口 3:飞书群里有人 @机器人,并描述客户问题。
        if event.type == "im.message.receive_v1":
            message = normalize_message(event)
            if not mentioned_target_bot(message):
                return skip("bot mention not found")  # 普通 @成员或普通聊天不创建故障。
    
            payload = build_guance_external_event(message)  # 生成观测云外部事件。
            incident = push_event_and_resolve_incident(payload)  # 推送事件并反查 Incident。
            return send_feishu_incident_card(message.chat_id, incident)
    
    
    def oncall_incident_hook(request):
        # 入口 4:观测云故障中心升级策略触发后,通过通知对象回调这里。
        incident = parse_guance_incident_webhook(request)
        card_state = load_card_state(incident)  # 找到这次故障对应的飞书卡片。
        latest = query_guance_incident(incident.uuid)  # 以观测云 Incident 最新状态为准。
        return update_feishu_card(card_state.message_id, latest)
    

    这段逻辑的重点不是代码量,而是三件事:只处理真正 @目标机器人的消息、用观测云 Incident 作为状态源、始终更新同一张飞书卡片。

    飞书

    飞书侧负责用户触发和状态展示。用户只需要在目标群中 @机器人并描述问题,后续故障创建、状态流转和升级刷新由 Func 与观测云自动完成。

    飞书机器人至少需要具备以下能力:

    能力 用途
    接收群内 @机器人消息 识别用户是否在目标群触发故障
    发送消息 向原群发送故障交互卡片
    更新消息 在状态变化或故障升级后更新同一张卡片
    读取必要用户标识 判断卡片按钮操作者是否为当前值班人

    生产环境建议只保留必要权限,不要一次性开放文档、云盘、通讯录全量权限。

    示例场景

    用户在指定飞书群中发送:

    @TW bot 线上登录接口异常,多个客户反馈无法登录,请协助排查
    

    系统应自动完成以下动作:

    1. 判断消息来自目标群,并且确实包含目标机器人 @ 信息;
    2. 将消息摘要推送为观测云外部事件;
    3. 解析外部事件对应的故障和 Incident ID;
    4. 在原群发送故障交互卡片;
    5. 值班人点击卡片按钮,将状态从待分配推进到处理中,再推进到已解决;
    6. 如果故障升级到二线或三线,观测云升级 Webhook 回调 Func API,刷新飞书群里的同一张卡片。

    推荐卡片内容如下,避免暴露观测云内部敏感字段:

    Incident:INC-20260525-0501
    级别:P0
    来源:飞书:Oncall测试
    当前值班人:一线:xxx
    摘要:线上登录接口异常,多个客户反馈无法登录,请协助排查
    状态:待分配
    确认时间:待确认
    关联ID:ONCALL-6635095FC0C1
    

    操作流程

    整体链路可以理解为三条闭环:消息触发闭环、卡片操作闭环和故障升级刷新闭环。

    闭环 流程
    消息触发闭环 飞书群消息 -> Func 事件回调 -> 观测云外部事件 -> Incident -> 飞书群卡片
    卡片操作闭环 值班人点击按钮 -> Func 卡片回调 -> 修改 Incident 状态 -> 更新飞书卡片
    升级刷新闭环 观测云故障升级 -> 通知对象 Webhook -> Func 升级回调 -> 更新飞书卡片值班层级

    必须特别注意触发条件:只有消息中包含目标机器人 @,才允许触发外部事件。普通 @群成员、@其他机器人、或者没有 @目标机器人的消息,都应该被跳过。

    应该触发:@TW bot 客户反馈登录异常
    不应触发:@guance 客户反馈登录异常
    不应触发:客户反馈登录异常
    

    推荐配置模板

    生产环境建议把配置分为三类:观测云配置、Func 运行配置、飞书机器人配置。以下示例只展示变量结构,不展示真实密钥和真实 Webhook。

    观测云配置

    # 必填:观测云 OpenAPI Key,用于查询/修改 Incident、读取值班策略等。
    DF_API_KEY=<观测云 OpenAPI Key>
    
    # 必填:观测云外部事件 Webhook,Func 会把飞书群消息推送到这里创建故障。
    GUANCE_WEBHOOK_URL=<观测云外部事件 Webhook>
    
    # 可选:观测云 OpenAPI 地址,私有化或海外站点时再调整。
    GUANCE_OPENAPI_BASE_URL=https://openapi.guance.com
    

    Func 运行配置

    # 必填:允许触发故障的机器人名称,只有消息中 @这个机器人 才会创建外部事件。
    ONCALL_TRIGGER_BOT_NAMES=["TW bot"]
    
    # 推荐:限制哪些飞书群可以触发故障,避免其他群误触发。
    ONCALL_TARGET_CHAT_IDS=<允许触发故障的飞书群 ID 列表>
    
    # 必填:观测云账号与飞书用户 ID 的映射,用于判断谁可以点击卡片按钮。
    ONCALL_GUANCE_ACCOUNT_MAP=<观测云账号到飞书用户 ID 的映射>
    
    # 展示用:卡片中“当前值班人”的显示文案,不参与真实权限判断。
    ONCALL_LEVEL1_DISPLAY=一线:xxx
    ONCALL_LEVEL2_DISPLAY=二线:xxx
    ONCALL_LEVEL3_DISPLAY=三线:xxx
    
    # 推荐开启:开启后,只有映射中的当前值班人可以操作卡片按钮。
    ONCALL_STRICT_CARD_PERMISSION=true
    

    飞书机器人配置

    # 必填:飞书应用 App ID,用于获取 tenant_access_token、发送和更新卡片。
    FEISHU_APP_ID=<飞书应用 App ID>
    
    # 必填:飞书应用 App Secret,请作为敏感变量保存,不要写入文档正文或日志。
    FEISHU_APP_SECRET=<飞书应用 App Secret>
    
    # 可选:飞书事件回调 Verify Token;如果配置了,Func 会校验回调来源。
    FEISHU_VERIFY_TOKEN=<飞书事件回调 Verify Token,可选>
    
    # 默认即可:飞书开放平台地址,私有化环境才需要调整。
    FEISHU_OPENAPI_BASE_URL=https://open.feishu.cn
    

    其中 ONCALL_LEVEL1_DISPLAYONCALL_LEVEL2_DISPLAYONCALL_LEVEL3_DISPLAY 只负责卡片展示,不参与真实权限判断。真实权限仍应以 ONCALL_GUANCE_ACCOUNT_MAP 中的用户标识为准。

    系统会自动完成什么

    用户只需要在飞书群里 @机器人描述问题,后续动作由 Func 脚本和观测云自动完成。

    自动动作 说明
    创建标准故障 外部事件进入观测云后,故障中心自动生成 Incident,记录级别、来源、关联 ID 和当前状态。
    匹配值班表 系统按照当前值班表确定一线值班人,避免临时人工确认今天该找谁。
    电话通知与升级 故障进入待分配后触发电话通知;若未及时确认,按 OnCall 升级策略继续通知二线、三线。
    同步处理状态 值班人确认、处理中、已解决等动作回写到观测云,并同步刷新飞书卡片。
    沉淀分析数据 故障中心分析看板可用于观察故障量、响应效率、升级次数和处理闭环情况。

    本次实践的验证结果

    当前飞书侧已经完成端到端闭环验证,建议在文档中保留以下几张效果图,读者可以直观看到故障从触发到升级再到解决的全过程。

    这些验证结果不只是飞书卡片的展示效果,也能体现观测云故障中心的关键能力:自动创建 Incident、按值班表触达当前值班人、按 OnCall 策略升级到二线和三线,并把状态流转沉淀为后续分析和复盘数据。

    待分配状态

    客户在飞书群中 @机器人后,观测云故障中心创建 Incident,并通过 OnCall 策略电话通知当前一线值班人。此时飞书卡片展示为待分配,提示值班人需要确认。

    处理中状态

    值班人点击卡片按钮后,Func 调用观测云 OpenAPI 将故障状态更新为处理中,并刷新飞书群内同一张卡片,表示故障已经有人接手。

    已解决状态

    故障处理完成后,值班人再次通过卡片更新状态。观测云 Incident 进入已解决状态,飞书卡片同步展示最终结果,不再提供继续流转按钮。

    升级通知与卡片刷新

    当故障未被及时确认或触发升级策略时,观测云会继续通知二线、三线值班人,并通过通知对象回调 Func,刷新飞书卡片中的当前值班层级。

    用户需要检查什么

    上线前建议按以下清单验收。

    1. 检查观测云配置

    2. 检查 Func 配置

    3. 检查飞书配置

    最佳实践

    为了让飞书 × 观测云 OnCall 联动流程稳定运行,建议遵循以下原则。

    原则 建议做法 价值
    值班表先行 在观测云中维护一线、二线、三线值班表,Func 只读取结果或接收回调。 让当天责任人由平台统一管理,减少脚本和人工维护成本。
    升级策略明确 将未确认、未处理、超时等升级条件配置在观测云 OnCall 策略中。 确保电话通知和层级升级可配置、可审计、可复用。
    状态口径收敛 以观测云故障中心的 Incident 状态作为唯一事实源,飞书卡片只做展示和操作入口。 避免群消息、脚本状态和故障状态不一致。
    通知对象解耦 用观测云通知对象回调 Func,再由 Func 刷新飞书卡片。 让升级、状态变化和群内反馈保持同步,但不把业务规则写死在机器人里。
    看板复盘 定期查看故障中心分析看板,关注故障量、升级次数、响应耗时和解决效率。 从一次性处理走向持续优化 OnCall 质量和客户响应体验。

    总结

    通过飞书机器人联动观测云外部事件,可以把群内自然语言反馈转化为标准 OnCall 故障,并通过观测云完成电话通知和升级策略,通过飞书交互卡片完成确认、处理、解决和状态同步。

    对用户来说,使用方式保持简单:在目标飞书群中 @机器人描述问题。对运维和客户成功团队来说,后续的故障创建、值班通知、状态流转、升级刷新和权限校验都由系统自动完成。

    这套实践的核心不是单个机器人能力,而是用观测云故障中心把飞书群里的客户反馈转化为可触达、可升级、可追踪、可分析的标准 OnCall 流程。飞书负责让触发入口足够轻,Func 负责连接两端,观测云负责承载值班表、电话通知、升级策略、故障状态和分析看板,最终形成可运营、可复盘的故障响应闭环。

    联系我们

    加入社区

    微信扫码
    加入官方交流群

    立即体验

    在线开通,按量计费,真正的云服务!

    立即开始

    选择观测云版本

    代码托管平台