[2026-05-23 13:28:11.467] [Core] [INFO] [result_decorate.stage:301]: TTS 结果: /As...

2026年05月23日 13:28 21.81 秒 success

错误信息

[2026-05-23 13:28:11.467] [Core] [INFO] [result_decorate.stage:301]: TTS 结果: /AstrBot/data/temp/mimo_tts_api_89d7fe6e-9796-476d-82de-e00ed41267d7.wav [2026-05-23 13:28:11.468] [Core] [INFO] [respond.stage:183]: Prepare to send - o9cq80x-L-W8zf-xN-xXOXd39XXo@im.wechat/o9cq80x-L-W8zf-xN-xXOXd39XXo@im.wechat: [ComponentType.Record] [2026-05-23 13:28:11.468] [Core] [WARN] [v4.23.6] [weixin_oc.weixin_oc_adapter:1637]: weixin_oc(deepseek): outbound message ignored, no supported segments

AI 解决方案

1. 🌐 错误翻译


原文:outbound message ignored, no supported segments
译文:发送消息被忽略,没有支持的段。

2. 🎯 原因分析


  • 根本原因:在使用 weixin_oc 适配器(可能是为微信公众号或企业微信设计的)向客户端(如微信)发送消息时,尝试发送了一种不被该客户端支持的消息类型。

  • 具体分析:根据日志,前序步骤成功生成了TTS(文本转语音)音频文件(.wav),并准备发送一个 Record 类型的组件(即语音消息)。但最终的适配器 weixin_oc.weixin_oc_adapter 在处理出站消息时,发现该消息内容没有其支持的段落类型(segments),因此忽略了这条消息。这表明该微信接口可能不支持直接发送文件/语音,或者适配器配置为仅支持特定的消息格式(如纯文本、图文等)。
  • 3. 💡 解决方案


    您需要修改代码逻辑,将语音消息转换为该平台支持的消息格式,或者使用支持发送语音的接口。

    方案一:将语音内容转为文字发送

    # 伪代码示例:在调用发送前,将Record组件转为Text组件
    if message.component_type == ComponentType.Record and platform == "weixin_oc":
        # 假设有方法可以获取语音对应的文本
        text_content = get_text_from_tts_result(tts_result_path) 
        message = create_text_message(text_content)
    

    方案二:检查并使用正确的接口
    如果目标是企业微信(可能支持文件),请确认:

  • weixin_oc 适配器是否正确地配置了企业微信的 corpidagentid 等参数以获得多媒体消息发送权限。

  • 参考企业微信官方文档,确认发送语音/文件消息所需的正确媒体类型和接口。代码可能需要使用 upload_media 先上传文件,再通过 media_id 发送。
  • 4. 🛡️ 预防措施


  • 查阅官方文档:在集成任何第三方平台(如微信)API时,务必首先查阅其官方开发文档,明确了解其支持的消息类型(文本、图片、语音、视频、文件、图文等)和发送限制。

  • 增强代码健壮性:在发送消息前,可以加入对消息类型与目标平台兼容性的检查与适配逻辑,对不支持的类型进行优雅降级(如转为文字)或明确提示,避免静默失败。

  • # 简单的兼容性检查逻辑示例
    def is_message_type_supported(component_type, platform):
        supported_types = {
            "weixin_oc": [ComponentType.Text, ComponentType.Image],
            # 其他平台...
        }
        return component_type in supported_types.get(platform, [])