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 和TWILIO_AUTH_TOKEN ,并将它们设置为你的账户凭证。
export TWILIO_ACCOUNT_SID=xxxxxxxxx
export TWILIO_AUTH_TOKEN=xxxxxxxxx
如果你是在Windows电脑上学习本教程,请使用set ,而不是export ,在命令提示符中定义你的环境变量。
如果你想了解更多关于为Python应用程序设置环境变量的其他方法,请查看在Python中使用环境变量的工作教程。
购买一个Twilio电话号码
为了能够打电话,你需要有一个与你的Twilio账户相关联的电话号码,以便打电话。登录Twilio控制台,选择电话号码,然后点击红色加号,购买一个Twilio号码。如果你使用的是免费账户,你将使用你的试用信用来购买。
在 "购买号码 "界面,选择你的国家,并在功能栏中勾选 "语音"。如果你想申请一个你所在地区的号码,你可以在 "号码 "栏中输入你的区号。
点击 "搜索 "按钮,看看有哪些号码可用,然后点击 "购买",从结果中选择你喜欢的号码。确认购买后,点击 "关闭 "按钮。
在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_如果你有一个很酷的项目想在这个博客上分享,请联系他。