TwiML Voice <Play>无法播放Google Cloud Storage URL问题排查
问题分析与解决方案
你的核心问题是Flask接口返回的内容不符合Twilio Voice Webhook的要求:
你当前代码最后返回的是字符串'200',但Twilio调用你的Webhook时,需要接收符合格式的TwiML(Twilio Markup Language)XML响应,才能执行播放音频的操作。你打印的XML是正确的,但没有将其作为有效响应返回给Twilio,导致Twilio无法解析执行播放逻辑。
修正后的代码
@app.route('/hello', methods=['GET', 'POST']) def welcome(): name = 'messi' url = GCSAgent().search_mp3_file(name) print(f'Logging url:{url}') response = VoiceResponse() response.play(url) print(response) # 返回正确的TwiML响应,指定Content-Type为XML return str(response), 200, {'Content-Type': 'application/xml'}
关键说明
str(response)将生成的VoiceResponse对象转换为Twilio能识别的XML字符串- 显式设置
Content-Type: application/xml,确保Twilio正确解析响应内容 - HTTP状态码保持200即可,无需返回纯文本'200'
修正后,Twilio就能正常接收并解析TwiML,和使用Play小部件时一样播放GCS存储桶中的MP3文件。
内容的提问来源于stack exchange,提问作者Utkarsh
相关产品推荐
相关产品推荐

