You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 21:12:48