出门问问API密钥申请与Python调用示例
出门问问API主要提供语音合成、语音识别等能力,调用前需要先在开发者平台创建应用并获取API Key。
本文按实际接入顺序,从账号准备、密钥配置到Python请求示例逐步说明,并给出失败时的检查方向。
调用前需要准备什么
接入出门问问API不依赖特定服务器环境,本地电脑或云服务器均可。
需要准备:
- 一个已注册的出门问问开发者账号,并完成实名认证(部分接口要求)。
- 在控制台创建应用后获得的 API Key 和 Secret Key(或平台下发的AppID)。不同产品线的密钥名称可能略有差异,以控制台实际显示为准。
- Python 3.8 及以上环境,以及
requests库:
pip install requests
如果使用云服务器调用,确保出站HTTPS(443端口)未被安全组或防火墙拦截。
在控制台获取密钥
登录出门问问开发者平台后,进入控制台的应用管理页面,创建新应用。
创建时按提示选择需要使用的语音能力,例如语音合成或语音识别。
应用创建完成后,在应用详情页可以看到类似 API Key、Secret Key 的字段。密钥只显示一次或有限次数,建议立即复制到本地密码管理器,不要直接写死在公开代码仓库中。
实际调用时通常有两种鉴权方式:一种是将API Key放在请求头中,另一种是用Key和Secret换取临时Token。
具体用哪种取决于所调用的接口文档,接入前先确认接口的鉴权说明。
Python请求示例
以下示例演示以请求头方式携带API Key发起一次语音合成请求。
接口地址、参数名和返回结构请以你控制台对应产品的文档为准,这里重点展示请求组织和错误处理思路。
import requests
import json
API_KEY = "你的API Key"
URL = "https://api.mobvoi.com/对应的接口路径" # 以官方文档为准
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"text": "你好,这是一段测试语音",
"voice": "默认发音人",
"format": "mp3"
}
try:
resp = requests.post(URL, headers=headers, data=json.dumps(payload), timeout=15)
print("状态码:", resp.status_code)
print("返回内容:", resp.text[:500])
resp.raise_for_status()
except requests.exceptions.Timeout:
print("请求超时,检查网络或接口地址")
except requests.exceptions.HTTPError as e:
print("HTTP错误:", e)
运行后先看状态码:200 表示请求被接口接受,
返回体中通常包含音频地址或base64数据;401 或 403 说明鉴权失败,
优先检查Key是否复制完整、
是否带了多余空格、
请求头字段名是否与文档一致。
常见报错与避坑
401 Unauthorized:密钥无效或已过期。
到控制台确认应用状态,重新生成密钥后替换代码中的值。
注意有些平台区分测试环境和生产环境密钥,不要混用。
403 Forbidden:常见原因是应用未开通对应接口权限,或请求的IP不在白名单内。
检查应用详情页的接口权限列表,以及是否配置了IP限制。
请求超时或连接失败:先用 curl -I https://api.mobvoi.com 检查网络连通性,再确认服务器安全组放行了443出站。
如果从国内服务器调用海外节点,延迟可能偏高,可适当调大 timeout。
返回参数错误:核对请求体字段名大小写和数据类型,例如文本字段是否误传了数字、音频格式是否在支持列表内。
不要凭猜测构造参数,直接对照文档中的请求示例。
另外,密钥不要提交到Git仓库。
建议通过环境变量读取:
export MOBVOI_API_KEY="你的Key"
代码中改为 os.environ.get("MOBVOI_API_KEY"),避免密钥随代码泄露。
调用结果怎么验证
首次接入时,建议用最短文本或短音频做一次最小请求,确认返回结构后再接入业务逻辑。
验证顺序:先看HTTP状态码是否为200,再看返回体中的业务错误码字段(如果有),最后检查音频文件能否正常播放或识别文本是否合理。
如果返回音频链接,可以用 curl -o test.mp3 "音频地址" 下载后播放,确认不是空文件。
若接口返回base64音频,解码后保存为文件再试听。
接入完成后,把密钥读取、请求超时和错误码判断封装成独立函数,后续更换模型或接口时只需调整参数,不必重写调用逻辑。
常见疑问
API Key和Secret Key都要传吗? 取决于接口设计。
有的接口只需API Key放在请求头,有的需要先用Key和Secret换取access_token。
以所调用接口的鉴权文档为准,不要两种方式混用。
免费额度够测试吗? 各产品线的免费额度和计费方式可能调整,注册后在控制台的用量或计费页面查看当前政策,不要以旧文章中的数字为准。
调用失败会扣费吗? 通常鉴权失败或参数错误不会产生有效调用计费,但具体规则以平台计费说明为准。
建议在测试环境先用小请求验证。