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

如何在Python Django应用中通过Twilio实现常规语音通话?

实现Django + Twilio 常规语音通话的正确姿势

嘿,我来帮你搞定这个问题~你现在的代码其实已经能发起通话了,但用的是Twilio的demo TwiML,那个只是播放语音提示,要实现双向语音通话,核心是要让Twilio知道接通后该把通话转接到你朋友的号码,这就得用到TwiML里的<Dial>动词。

咱们分两种方式来实现,一种是快速测试的简易方案,另一种是贴合你Django应用的集成方案:

一、快速测试:用Twilio TwiML Bin

如果只是想先验证通话功能,不用改Django代码,直接用Twilio自带的TwiML Bin就行:

  1. 登录Twilio控制台,找到「TwiML Bins」(在左侧菜单「Tools」下面)
  2. 点击「Create TwiML Bin」,给它起个名字,然后在内容里输入:
<Response>
  <Dial>+你朋友的完整号码(带国家代码,比如+8613xxxxxxxxx)</Dial>
</Response>
  1. 保存后,复制这个Bin的URL(类似https://handler.twilio.com/twiml/xxxxxx)
  2. 把你代码里的url='http://demo.twilio.com/docs/voice.xml'替换成这个新的URL,运行代码就能发起通话,接通后Twilio会帮你桥接到你朋友的号码,实现正常对话。

二、Django集成方案(适合正式项目)

如果要把通话逻辑整合到你的Django应用里,需要自己写一个返回TwiML的视图:

1. 安装Twilio的Django相关依赖(可选,但更方便)

pip install twilio django-twilio

2. 编写Django视图

在你的app里新建一个视图函数,用来返回Twilio需要的TwiML指令:

from django.http import HttpResponse
from twilio.twiml.voice_response import VoiceResponse, Dial

def call_bridge(request):
    # 创建TwiML响应
    resp = VoiceResponse()
    # 指定要转接的号码
    dial = Dial()
    dial.number('+你朋友的完整号码')
    resp.append(dial)
    # 返回XML格式的响应
    return HttpResponse(str(resp), content_type='application/xml')

3. 配置URL路由

在你的项目urls.py里添加路由:

from django.urls import path
from .views import call_bridge

urlpatterns = [
    # 其他路由...
    path('twilio/call-bridge/', call_bridge, name='call_bridge'),
]

4. 让Twilio能访问到你的Django服务

如果是本地开发,Twilio没法直接访问你的localhost,所以需要用ngrok把本地端口暴露到公网:

# 假设你的Django运行在8000端口
ngrok http 8000

运行后会得到一个公网URL(类似https://xxxx-xx-xx-xx-xx.ngrok.io),把这个URL和你的路由拼接起来,就是Twilio要调用的地址:https://xxxx-xx-xx-xx-xx.ngrok.io/twilio/call-bridge/

5. 调整发起通话的代码

把你原来的代码里的url参数替换成上面的公网URL:

import os
from twilio.rest import Client

account_sid = os.environ['TWILIO_ACCOUNT_SID']
auth_token = os.environ['TWILIO_AUTH_TOKEN']

client = Client(account_sid, auth_token)

call = client.calls.create(
                        url='https://xxxx-xx-xx-xx-xx.ngrok.io/twilio/call-bridge/',
                        to='+你的号码(已验证的)',  # 这里是拨打你的号码,接通后Twilio会帮你转接到朋友的号码
                        from_='+你的Twilio号码'
                    )

print(call.sid)

(注意:免费Twilio账号只能拨打已验证的号码,所以to参数填你自己验证过的号码,接通后Twilio会自动转接到朋友的号码)

关键注意事项

  • 所有号码必须带国家代码(比如中国是+86,美国是+1),格式不能错
  • 确保你的Twilio账号里的Account SID和Auth Token正确配置到环境变量
  • 如果是正式部署,要把Django服务放到公网可访问的服务器上,不用再依赖ngrok
  • 免费账号有通话时长限制,超出后需要升级付费计划

内容的提问来源于stack exchange,提问作者Andi Maier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 05:32:42