语音消息处理是微信机器人的进阶能力。用户发语音,机器人要能听懂(语音转文字),理解(AI处理),回复(文字或语音)。全链路是语音接收、语音识别、AI处理、回复发送四个环节。每个环节都有工程要点——接收要格式兼容,识别要准确率,处理要上下文,回复要自然。
一、语音接收与格式转换——拿到可识别的音频
微信语音是silk或amr格式,ASR服务可能不支持,要先转换。接收的工程要点是格式识别和下载。格式识别——按消息类型判断是语音,提取语音URL。下载——异步下载语音文件,不阻塞消息接收。转换的工程要点是格式兼容和音质保持。格式兼容——silk转wav,amr转mp3,转成ASR支持的格式。音质保持——转换不能损失太多音质,否则识别准确率下降。
接收和转换的工程实现是下载器+格式转换器。下载器——异步下载语音文件。格式转换器——ffmpeg或pydub转换格式。转换的价值是兼容性——不管什么格式,转成ASR能识别的。
二、语音识别——语音变文字
格式转换后的音频送ASR服务识别。识别的工程要点是服务选择和置信度判断。服务选择——阿里云、腾讯云、讯飞,各有优势。置信度判断——识别结果带置信度,低于阈值要处理。识别失败或置信度低,不能硬用错误结果,要回复"听不清请重说"或转文字输入。
识别的工程实现是ASR客户端+结果校验。ASR客户端——封装识别服务调用。结果校验——置信度低于阈值标记,后续处理考虑识别可能不准。识别的价值是自动化——语音不用人工听,机器自动转文字。
三、AI处理与回复发送——文字变智能回复
识别出的文字送AI处理,AI回复文字。回复可以直接发文字,也可以转语音发语音。回复的工程要点是上下文管理和回复方式选择。上下文管理——语音对话也要连贯,历史对话要保留。回复方式选择——简单回复发文字,复杂或情感化回复发语音。
AI处理和回复的工程实现是上下文缓存+回复合成。上下文缓存——用户历史对话缓存,AI处理时带入。回复合成——文字回复直接发,语音回复TTS合成后发。回复的价值是自然——语音对话像人和人对话,不是机器机械回复。
语音消息处理流程对照
环节 | 核心动作 | 工程要点 | 价值 |
|---|---|---|---|
语音接收 | 下载+格式转换 | 异步+兼容 | 可识别 |
语音识别 | ASR转文字 | 置信度判断 | 自动化 |
AI处理 | 上下文+智能回复 | 连贯性 | 智能 |
回复发送 | 文字/语音选择 | 自然度 | 体验好 |
语音消息转文字与回复实现
class VoiceMessageProcessor: def __init__(self): self.asr = ASRClient() # 语音识别 self.tts = TTSClient() # 语音合成 self.contexts = {} # 上下文缓存 def on_voice(self, raw): # 接收:下载语音 audio = self.download(raw.voice_url) # 转换:silk→wav audio = self.convert_format(audio) # 识别:语音转文字 text = self.asr.transcribe(audio) if text.confidence < 0.7: return self.reply_text(raw, "没听清,请发文字") # AI处理:带上下文 history = self.contexts.get(raw.wxid, []) reply = self.ai.process(text.content, history) # 更新上下文 history.append((text.content, reply)) self.contexts[raw.wxid] = history[-10:] # 保留最近10轮 # 回复:简单发文字,复杂发语音 if len(reply) < 50: return self.reply_text(raw, reply) voice = self.tts.synthesize(reply) return self.reply_voice(raw, voice) def convert_format(self, audio): # 格式转换:silk→wav return self.converter.silk_to_wav(audio)落地建议
语音处理从文字回复做起——先把语音转文字跑通,回复用文字,跑通了再加语音回复。格式转换不能省——silk格式ASR可能不支持,必须转wav或mp3。置信度判断必须有——识别不准时回复"听不清",别硬用错误结果。上下文管理要做——语音对话也要连贯,用户不用重复说。微信侧的语音接收、格式转换和回复发送由Eyun这类个人微信API平台 提供,ASR/TTS和AI处理在自建服务实现,接口字段以平台开发文档为准。