如何用 Python 打电话

尽管在过去几年中出现了大量新的智能手机应用程序,但良好的老式电话仍然是最好的通信方式之一。只需几行 Python 代码加上一个 Web 应用程序编程接口,我们就可以从任何应用程序拨打和接听电话。

我们的示例电话会说一段文字,并将所有来电者放入录制的电话会议中。当您在自己的应用程序的电话调用中执行不同的操作时,您可以使用 Twilio 的 TwiML 动词修改指令。

我们的工具

您应该安装 Python 2 或 3 来构建此应用程序。在整个帖子中,我们还将使用:

  • pip 和 virtualenv 来处理应用程序依赖性
  • 一个免费的 Twilio 帐户来使用他们的电话调用 web API
  • Twilio 的 Python 帮助程序库,版本 5.7.0,可在 PyPI 上获得

您可以在 no-framework/phone-calls 目录下的 python-twilio-example-appsGitHub 存储库中获取本教程的所有开源代码。使用并复制您自己的应用程序的代码。该存储库和这篇博文中的所有内容都是在 MIT 许可下开源的。

安装应用依赖

我们的应用程序将使用 TwilioPython 帮助程序库来创建对 Twilio API 的 HTTP POST 请求。 Twilio 帮助程序库可从 PyPI 安装到虚拟环境中。打开您的终端并使用 virtualenv 命令创建一个新的 virtualenv:

virtualenv phoneapp

调用 virtualenv activate 目录中的 bin/ 脚本,使此 virtualenv 成为活动的 Python 可执行文件。请注意,您需要在每个您希望 virtualenv 处于活动状态的终端窗口中执行此步骤。

source phoneapp/bin/activate

激活虚拟环境后,命令提示符将更改为类似(phoneapp) $ 的内容。

接下来使用pip 命令将 Twilio Python 包安装到虚拟环境中。

pip install twilio==5.7.0

安装脚本完成后,我们将为项目准备好所需的依赖项。现在我们可以编写和执行 Python 代码来拨打电话号码了。

我们的 Python 脚本

创建一个名为 phone_calls.py 的新文件,然后复制或键入以下代码行。

from twilio.rest import TwilioRestClient


# Twilio phone number goes here. Grab one at https://twilio.com/try-twilio
# and use the E.164 format, for example: "+12025551234"
TWILIO_PHONE_NUMBER = ""

# list of one or more phone numbers to dial, in "+19732644210" format
DIAL_NUMBERS = ["",]

# URL location of TwiML instructions for how to handle the phone call
TWIML_INSTRUCTIONS_URL = \
  "http://static.fullstackpython.com/phone-calls-python.xml"

# replace the placeholder values with your Account SID and Auth Token
# found on the Twilio Console: https://www.twilio.com/console
client = TwilioRestClient("ACxxxxxxxxxx", "yyyyyyyyyy")


def dial_numbers(numbers_list):
    """Dials one or more phone numbers from a Twilio phone number."""
    for number in numbers_list:
        print("Dialing " + number)
        # set the method to "GET" from default POST because Amazon S3 only
        # serves GET requests on files. Typically POST would be used for apps
        client.calls.create(to=number, from_=TWILIO_PHONE_NUMBER,
                            url=TWIML_INSTRUCTIONS_URL, method="GET")


if __name__ == "__main__":
    dial_numbers(DIAL_NUMBERS)

在运行此应用程序之前,您需要修改几行。首先,将您希望拨打的一个或多个电话号码插入 DIAL_NUMBERS 列表。每个都应该是一个字符串,用逗号分隔。例如,DIAL_NUMBERS = ["+12025551234", "+14155559876", "+19735551234"]

接下来,需要设置 TWILIO_PHONE_NUMBER 以及在 client = TwilioRestClient("ACxxxxxxxxxx", "yyyyyyyyyy") 行中找到的帐户 SID 和身份验证令牌。我们可以从 Twilio 控制台获取这些值。

在您的网络浏览器中转到 Twilio 网站并注册一个免费帐户或登录您现有的 Twilio 帐户。

Twilio 注册屏幕。

从 Twilio 控制台复制帐户 SID 和授权令牌并将其粘贴到您的应用程序代码中:

从 Twilio 控制台获取帐户 SID 和授权令牌。

Twilio 试用帐户允许您拨打和接听您自己经过验证的电话号码。要处理来自任何电话号码的呼叫,您需要升级您的帐户(点击顶部导航栏上的升级按钮)。

登录到您的 Twilio 帐户后,转到管理电话号码屏幕。在此屏幕上,您可以购买一个或多个电话号码或单击帐户中的现有电话号码进行配置。

管理电话号码屏幕。

点击一个号码后,您将进入电话号码配置屏幕。粘贴带有 TwiML 指令的 URL,并将下拉列表从“HTTP POST”更改为“HTTP GET”。在这篇文章中,我们将使用 http://static.fullstackpython.com/phone-calls-python.xml,但该 URL 可以不仅仅是一个静态 XML 文件。

Twilio 电话号码配置屏幕。

当该 URL 由您的 Web 应用程序处理时,Twilio 的威力就会真正体现出来,因此它可以根据来电号码或存储在您数据库中的其他属性,用 TwiML 指令动态响应。

在 Voice webhook 下,粘贴 http://static.fullstackpython.com/phone-calls-python.xml 并将右侧的下拉列表从“HTTP POST”更改为“HTTP GET”。单击屏幕底部的“保存”按钮。

现在尝试拨打您的电话号码。您应该会听到 Alice 语音朗读的文本片段,然后您将进入电话会议。如果没有其他人拨打该号码,则应播放保持音乐。

打电话

我们刚刚处理了打入我们电话号码的来电。现在是时候拨打出站电话了。确保您的 phone_calls.py 文件已保存并且您的 virtualenv 仍处于激活状态,然后执行脚本:

python phone_calls.py

很快,您在 DIAL_NUMBERS 列表中输入的所有电话号码都应该随着来电亮起。接听电话的任何人都会听到“爱丽丝”的声音朗读我们的消息,然后他们将被安排到一个录制的电话会议中,就像有人拨入该号码一样。

这是我的呼入电话:

在 iPhone 上接听来电。

仅仅几行 Python 代码就不错了!

后续步骤

现在我们知道如何按照程序指令从 Twilio 号码拨打和接听电话,我们可以在我们的应用程序中做更多的事情。接下来,您可以使用这些教程之一对您的电话号码进行更多操作:

  • 构建一个电话呼叫 Slack 机器人
  • 隐藏电话号码以进行匿名通信
  • 添加呼叫跟踪以查看电话呼叫指标

有问题吗?通过 Twitter@fullstackpython 或@mattmakai 与我联系。我也在 GitHub asmattmakai 上。

看到这篇文章有什么问题了吗?在 GitHub 上创建此页面的源代码并提交拉取请求。

赞(0) 打赏

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏