如何用Python结合Twilio和TwiML录制来电?遇create方法不存在报错
解决Twilio Python SDK启动来电录制的问题
你的代码错误在于callCon.recordings.create()的用法——Twilio Python SDK里,calls(callSid).recordings是用来查询该通话下已存在的录制资源的,没有create()方法用来启动新录制。启动正在进行的通话录制,有两种正确方式:
方式一:通过API主动更新通话状态启动录制
如果需要在通话过程中(比如来电接通后)主动触发录制,使用calls.update()方法设置录制参数:
from twilio.rest import Client import os client = Client(os.getenv("TWILIO_ACCOUNT_SID"), os.getenv("TWILIO_AUTH_TOKEN")) call_sid = request.form["CallSid"] # 更新通话,启动录制 client.calls(call_sid).update( record="record-from-answer", # 可选值:record-from-ringing、record-from-answer等 recording_status_callback="https://your-server.com/handle-recording", # 录制完成后的回调地址(可选) recording_status_callback_method="POST" )
方式二:用TwiML在来电响应中直接启动录制
如果是在来电接入时就需要录制,直接返回包含<Record>指令的TwiML响应,以Flask为例:
from flask import Flask, request, make_response from twilio.twiml.voice_response import VoiceResponse, Record app = Flask(__name__) @app.route("/incoming-call", methods=['POST']) def handle_incoming(): resp = VoiceResponse() # 启动录制,录制完成后跳转至指定路由处理后续逻辑 resp.record( action="/post-recording", method="POST", maxLength="600" # 最大录制时长(秒) ) return make_response(str(resp)) @app.route("/post-recording", methods=['POST']) def post_recording(): # 获取录制的Sid,可用于后续查询或下载录制文件 recording_sid = request.form.get("RecordingSid") resp = VoiceResponse() resp.say("录制已完成,感谢您的来电") return make_response(str(resp)) if __name__ == "__main__": app.run(debug=True)
内容的提问来源于stack exchange,提问作者Nick Garyu
相关产品推荐
相关产品推荐

