使用Google Speech-to-Text API无法获取WhatsApp音频转录结果求助
我正在搭建工作流,使用Google Speech-to-Text API和N8N转录WhatsApp音频消息,因音频常超过60秒,故采用longrunningrecognize接口。通过Baileys API的webhook获取音频base64编码,发送以下POST请求启动转录:
{ "config": { "encoding": "LINEAR16", "sampleRateHertz": 16000, "languageCode": "pt-BR" }, "audio": { "content": "{{$node["Code1"].json.audio.content}}" } }
请求返回操作名称后,我向https://speech.googleapis.com/v1/operations/{{$json.name}}发送GET请求,响应显示操作成功但未返回转录内容:
[ { "name": "5289922065129560738", "metadata": { "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata", "progressPercent": 100, "startTime": "2025-01-17T15:02:45.872249Z", "lastUpdateTime": "2025-01-17T15:02:46.432154Z" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse", "totalBilledTime": "3s", "requestId": "5289922065129560738" } } ]
官方文档示例的响应包含results字段及转录内容,但我的响应里没有,请问问题出在哪里?
1. 音频编码与格式不匹配
你指定的编码是LINEAR16,但WhatsApp的音频默认是OPUS格式(.opus文件),直接将OPUS音频的base64编码按LINEAR16提交,API无法识别有效音频内容,自然不会返回转录结果。
- 解决:在提交前需将WhatsApp的OPUS音频转码为LINEAR16格式(16kHz、单声道、PCM编码)。可在N8N中添加FFmpeg命令行节点,执行转码命令:
再将转码后的WAV文件转为纯base64字符串,填入请求的ffmpeg -i input.opus -acodec pcm_s16le -ar 16000 -ac 1 output.wavaudio.content字段。
2. Base64编码处理错误
检查{{$node["Code1"].json.audio.content}}是否为原始音频文件的纯base64编码:如果包含data:audio/opus;base64,这类前缀,需要先移除前缀,仅保留纯base64字符串再提交给API。
3. 音频内容无法被识别
如果音频本身是静音、音量极低,或者实际语言与指定的pt-BR不匹配,API也会返回无results的成功响应。可下载音频文件本地播放验证内容,同时确认语言代码与音频实际语言一致。
4. 额外配置缺失(非核心但需检查)
若音频是立体声,需在config中添加audioChannelCount: 2参数;若需要标点,可添加enableAutomaticPunctuation: true,但核心问题仍集中在前两点。
内容的提问来源于stack exchange,提问作者Luiz Paes

