使用Python和Twilio可编程语音拨打有持续时间限制的电话

1,648 阅读7分钟

Twilio可编程语音允许你直接从你的应用程序中进行可编程的语音呼叫。这项服务最近被扩展到支持呼叫持续时间限制,这可能是一个有用的方法,以避免长时间保持连接的呼叫产生意外费用。

在本教程中,你将学习如何使用Python的可编程语音,以预定义的最大持续时间进行语音呼叫。

先决条件

  • Python 3.6或更新版本。如果你的操作系统没有提供Python解释器,你可以从python.org下载一个安装程序。
  • 一个Twilio账户。如果你是Twilio的新用户,请点击这里,现在就可以创建一个免费账户,当你升级到付费账户时,可以获得10美元的积分。你可以查看免费Twilio账户的功能和限制
  • 一部可以接收语音电话的电话,用来测试项目。

设置你的环境

在本节中,你将设置一个全新的Python项目。为了使事情井井有条,打开终端或命令提示符,找到一个合适的位置,并创建一个新的目录,将你将要创建的项目放在那里。然后切换到该目录。

mkdir phone-call
cd phone-call

创建一个虚拟环境

按照Python 的最佳实践,你现在要创建一个虚拟环境,在那里安装这个项目所需的 Python 依赖项。

如果你使用的是 Unix 或 MacOS 系统,打开终端,输入以下命令来完成上面描述的任务。

python3 -m venv venv
source venv/bin/activate
pip install --upgrade twilio

如果你是在 Microsoft Windows 上学习本教程,在命令提示符窗口中输入下列命令。

python -m venv venv
venv\Scripts\activate
$ pip install --upgrade twilio

这个项目唯一需要的Python包是Twilio Python Helper库,它被用来处理电话呼叫。在我写这篇文章时,呼叫持续时间限制是一个相当新的补充。确保Twilio Python辅助库的版本是6.63.0或更新的。

定义Twilio凭证

为了能够访问Twilio服务,Python应用程序将需要你的Twilio账户凭证来进行登录和验证。定义这些凭证的最安全的方法是将它们作为环境变量添加。

你需要的信息是 "账户SID "和 "Auth Token"。你可以在Twilio控制台的主仪表板上找到这两个信息。

Twilio account SID and auth token

在你的终端中,定义两个环境变量,称为TWILIO_ACCOUNT_SIDTWILIO_AUTH_TOKEN ,并将它们设置为你的账户凭证。

export TWILIO_ACCOUNT_SID=xxxxxxxxx
export TWILIO_AUTH_TOKEN=xxxxxxxxx

如果你是在Windows电脑上学习本教程,请使用set ,而不是export ,在命令提示符中定义你的环境变量。

如果你想了解更多关于为Python应用程序设置环境变量的其他方法,请查看在Python中使用环境变量的工作教程。

购买一个Twilio电话号码

为了能够打电话,你需要有一个与你的Twilio账户相关联的电话号码,以便打电话。登录Twilio控制台,选择电话号码,然后点击红色加号,购买一个Twilio号码。如果你使用的是免费账户,你将使用你的试用信用来购买。

在 "购买号码 "界面,选择你的国家,并在功能栏中勾选 "语音"。如果你想申请一个你所在地区的号码,你可以在 "号码 "栏中输入你的区号。

Buy a Twilio phone number

点击 "搜索 "按钮,看看有哪些号码可用,然后点击 "购买",从结果中选择你喜欢的号码。确认购买后,点击 "关闭 "按钮。

在Python中打一个电话

启动你的文本编辑器或IDE,在你在教程开始时创建的_phone-call_目录下创建一个名为_call.py_的新Python文件。

在这个文件中输入以下代码。

from twilio.rest import Client
from twilio.twiml.voice_response import VoiceResponse

client = Client()

twiml = VoiceResponse()
twiml.say('Hello, from Python!')

call = client.calls.create(
    from_='<your-twilio-phone-number>',
    to='<your-phone-number>',
    twiml=str(twiml),
)

确保你更新上述代码片段的以下部分。

  • 用你的Twilio电话号码替换from_ 参数的值
  • 用你的个人电话号码替换to 参数的值

这两个电话号码都应该以E.164格式输入,其中包括一个加号和国家代码。

你可能想知道twiml 这个变量是做什么用的。TwiML是Twilio的标记语言,是对XML的扩展,用于指定你希望如何处理某些事件的指示。适用于Python的Twilio辅助库带有一组类和方法,可以简化TwiML的创建。

当一个电话从你之前购买的Twilio电话号码打出时,Twilio将执行TwiMLVoiceResponse 对象中提供的指令。在这个例子中,say() 方法告诉Twilio用文字转语音的方式说出给定的信息。当Twilio完成了所有以TwiML形式给出的指令后,通话就结束了。

回到你的终端,确保你已经用你的Twilio凭证定义了环境变量,如上所示,然后按以下方式运行脚本。

python call.py

你的个人电话一会儿就会响起。当你接听电话时,你会听到 "你好,来自Python!"。

连接到另一个号码

可编程语音的TwiML语言支持大量的操作。让我们使_call.py_脚本更有趣一些。假设我们极其懒惰,想给某人打电话而不用拨他们的号码。通过TwiML,你可以要求Twilio给你打电话,并在你拿起电话时将你与对方连接起来。

from twilio.rest import Client
from twilio.twiml.voice_response import VoiceResponse

client = Client()

twiml = VoiceResponse()
twiml.dial('<a-friend's-phone-number>')

call = client.calls.create(
    from_='<your-twilio-phone-number>',
    to='<your-phone-number>',
    twiml=str(twiml),
)

在这个_call.py_的更新版本中,say() 方法被替换成了dial() 方法,顾名思义,就是拨打一个号码并将你与之连接起来。

在运行应用程序之前,记得替换上面代码中的电话号码占位符。如果你没有人可以打电话,而且位于美国,你可以使用+13034997111 ,这是一个由NIST维护的电话时间服务。如果你有一定的年龄,这将会勾起你的回忆!你可以试试这个应用程序。

试一试这个应用程序吧。

python call.py

当你的电话响起时,接起电话,你就会自动连接到你在TwiML说明中指定的电话号码。

设置一个通话时间

_call.py_应用程序可以作为一个懒人的拨号器,但考虑到你将对可编程语音服务收费,给通话时间设置一个硬性限制可能是一个好主意。

默认情况下,通过可编程语音服务进行的呼叫最大持续时间为4小时(对于付费账户)。这个限制可以在可编程声音设置中延长到24小时。试用账户的呼叫限制是10分钟,不能延长。

如果适用于您的账户的最大持续时间太长,您可以以分钟为单位指定每次通话的最大持续时间。这里是_call.py_ 的一个新版本,它设置了5分钟的通话时长限制。

from twilio.rest import Client
from twilio.twiml.voice_response import VoiceResponse

client = Client()

twiml = VoiceResponse()
twiml.dial('<a-friend's-phone-number>')

call = client.calls.create(
    from_='<your-twilio-phone-number>',
    to='<your-phone-number>',
    twiml=str(twiml),
    time_limit=300,
)

添加到呼叫中的time_limit 参数将确保呼叫在指定时间断开。时间限制值的单位是秒。你可以通过设置一个较短的值(例如使用60,表示一分钟的持续时间),并在通话中等待,直到连接结束,来确保时间限制的作用。

总结

在本教程中,你已经学会了如何从Python应用程序中拨打电话,并确保通话不会超过预定的时间。但这仅仅是个开始。请务必查看TwiML 参考资料,了解如何用电话做很多其他很酷的事情。

_Miguel Grinberg_是Twilio公司负责技术内容的首席软件工程师。与他联系的方式是 _mgrinberg [at] twilio [dot] com_如果你有一个很酷的项目想在这个博客上分享,请联系他。