Google Cloud Speech-to-Text API返回400错误且无文本结果求助
问题分析与修复方案
核心错误:API请求URL格式错误
你的代码里的请求URL存在语法错误:
`https://speech.googleapis.com/v1/speech:recognizekey=${REACT_APP_GOOGLE_CLOUD_TEXT_TO_SPEECH_API_KEY}`
speech:recognize和key参数之间缺少了问号(?),正确的URL应该是:
`https://speech.googleapis.com/v1/speech:recognize?key=${REACT_APP_GOOGLE_CLOUD_TEXT_TO_SPEECH_API_KEY}`
这个格式错误直接触发了400状态码,因为API无法正确解析请求参数。
其他可能导致无文本返回的排查点
即使修复URL后仍无文本结果,检查以下几点:
- Base64内容是否纯净:确保
base64变量没有包含data:audio/wav;base64,这类前缀,API仅接受纯Base64编码的音频数据。 - 音频编码与采样率匹配:确认你的音频确实是
LINEAR16(PCM无压缩)格式,且采样率严格为16000Hz。如果实际是MP3等其他格式,需修改config.encoding为对应值(如MP3),或先转码为LINEAR16。 - 音频内容有效性:检查音频是否包含清晰语音,避免静音、杂音过大或时长过短(建议至少1秒以上有效语音)。
修复后的完整代码示例
import axios from 'axios'; import { REACT_APP_GOOGLE_CLOUD_TEXT_TO_SPEECH_API_KEY } from "@env"; async function SpeechToText({ base64 }) { // 移除base64前缀(如果存在) const cleanBase64 = base64.replace(/^data:audio\/\w+;base64,/, ''); const data = { "config": { "encoding": "LINEAR16", "sampleRateHertz": 16000, "languageCode": "ja-JP", // 可选:启用自动标点提升识别效果 "enableAutomaticPunctuation": true }, "audio": { "content": cleanBase64, }, }; try { console.log("Converting voice chat to text..."); const response = await axios.post( `https://speech.googleapis.com/v1/speech:recognize?key=${REACT_APP_GOOGLE_CLOUD_TEXT_TO_SPEECH_API_KEY}`, data ); console.log("Conversion result:", response.data); // 处理识别结果 if (response.data.results?.length > 0) { const transcript = response.data.results[0].alternatives[0].transcript; console.log("识别文本:", transcript); } else { console.log("未识别到有效语音内容"); } } catch (error) { // 打印更详细的API错误信息 console.error("Failed to convert speech to text:", error.response?.data || error.message); } }
额外建议
- 在catch块中打印
error.response.data,可以获取API返回的具体错误详情(如参数错误、音频格式不匹配等),比仅打印error更利于排查问题。
内容的提问来源于stack exchange,提问作者Samurai
相关产品推荐
相关产品推荐

