Azure Speech to Text v3.1 Webhook配置失败:握手验证问题求助
Azure Speech to Text v3.1 Webhook 配置问题解答
是的,你必须准备一个支持GET请求的端点来完成Azure Speech to Text Webhook的挑战/响应握手流程,这是Webhook激活的必要步骤。
握手失败原因分析
从你提供的错误响应可以看到:
Challenge response payload doesn't match validation token. Expected: 08d9c88813f34d26b82bbb15334fd75b, actual:
这说明Azure向你的webUrl发送了验证请求,但你的端点没有返回正确的验证令牌,导致握手失败,Webhook处于Failed状态。
握手流程具体步骤
- 当你创建Webhook时,Azure会立即向你指定的
webUrl发送一个GET请求,请求中包含validationToken查询参数(即错误信息里的Expected值)。 - 你的端点需要读取这个
validationToken参数,然后直接将其作为纯文本内容返回,响应状态码必须为200 OK。 - 注意:握手阶段不需要用到你设置的
secret,secret是后续接收转录完成事件时,用来验证请求签名合法性的,和握手流程无关。
端点实现示例(Python Flask)
你需要搭建一个公开可访问的HTTPS端点,示例代码如下:
from flask import Flask, request app = Flask(__name__) # 处理验证握手的GET请求 @app.route('/speech-webhook', methods=['GET']) def validate_webhook(): validation_token = request.args.get('validationToken') if validation_token: return validation_token, 200 return 'Invalid validation request', 400 # 处理转录完成的POST事件 @app.route('/speech-webhook', methods=['POST']) def handle_transcription_event(): # 可选:用secret验证请求签名 # signature = request.headers.get('Signature') # 用HMAC-SHA256算法,以secret为密钥对请求体哈希,对比signature return 'Event received', 200 if __name__ == '__main__': # 注意:Azure要求Webhook必须是HTTPS,需配置SSL证书 app.run(host='0.0.0.0', port=443, ssl_context=('your-cert.pem', 'your-key.pem'))
创建Webhook的请求体修正
你提交的请求体里不需要包含links字段,这个字段是Azure返回给你的元数据,不是创建时需要提交的内容,修正后的请求体如下:
datahook = { "webUrl": "https://your-public-https-endpoint/speech-webhook", "displayName": "Transcription Complete Webhook", "description": "Receive notifications when speech transcription finishes", "events": { "transcriptionCompletion": True }, "properties": { "secret": "stt" } }
额外注意事项
- 确保你的端点是公开可访问的HTTPS地址,Azure不支持HTTP的Webhook URL。
- 如果你使用临时工具(如webhook.site),需要确认该工具是否支持自动返回
validationToken,否则无法完成握手。
内容的提问来源于stack exchange,提问作者SaadEddine Saad
相关产品推荐
相关产品推荐

