怎么使用Python从出站Twilio调用中检索信息?

本教程将介绍如何使用Python从出站Twilio调用中检索信息?的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

怎么使用Python从出站Twilio调用中检索信息? 教程 第1张

问题描述

我是Twilio的新手,正在尝试怎么从我使用Python3成功进行的出站呼叫中检索数据。我希望能够检索收件人按下的按钮等信息。

在阅读了一下Twilio文档(然后有点迷路)之后,我想我知道Twilio是怎么工作的了,以及为什么我无法从电话中检索数据。我认为,Python程序只是建立了从Twilio到电话号码的连接。收件人可以拨打任何号码,我可以使用标签获取一些信息。但我怎么将这些信息定向到我的Python程序呢?我的想法是让Twilio(以某种方式)将信息发送回我的Python程序,然后我就可以采取行动(比如更新数据库)。

我猜Twilio将把数据抛到其他地方,然后我的Python程序就可以去检索这些数据,但我不知道从哪里学到这项技能。我对Python3有一个基本的基础,但对Web开发并不是很了解。只是一些基本的HTML5和CSS3。

推荐答案

Twilio开发人员推介此处。

您可能在入站呼叫中看到过documentation on gathering user input via keypad in Python。

当您接到入站呼叫时,Twilio发出WebHook请求以确定下一步要做什么,您使用TwiML进行响应,例如,当您要获取信息时,a<Gather>

当您发出出站呼叫时,您initiate the call with the REST API,然后当呼叫连接时,Twilio向您的URL发出一个WebHook请求。然后,您可以使用TwiML进行响应,以告诉Twilio要做什么,并且在此阶段您也可以使用<Gather>进行响应。

让我们从outbound call as shown in this documentation收集输入。

首先,您购买一个Twilio电话号码并为其配置一个NgrokURL:这是一个方便的工具,可以通过公共URL向Web开放您的本地服务器。当您发出出站呼叫时,您向其传递该URL:your-ngrok-url.ngrok.io/voice

from twilio.rest import Client
account_sid = 'your-account-sid'
auth_token = 'your-auth-token'
client = Client(account_sid, auth_token)

call = client.calls.create(
 url='https://your-ngrok-url.ngrok.io/voice',
 to='phone-number-to-call',
 from_='your-twilio-number'
)

client.calls.create中的URL返回TwiML,其中包含有关用户接听电话时应该执行的操作的说明。让我们创建一个FlaskTM应用程序,其中包含在用户应答呼叫时运行的代码。

from flask import Flask, request
from twilio.twiml.voice_response import VoiceResponse, Gather

app = Flask(__name__)

@app.route("/voice", methods=['GET', 'POST'])
def voice():
 # Start a TwiML response
 resp = VoiceResponse()

请问通过带有TwiMLGather动词的小键盘接收用户输入,该动词用于在电话呼叫期间收集数字或转录语音。Action attribute将绝对或相对URL作为一个值,一旦调用者完成数字输入(或到达超时),Twilio就会向该URL发出HTTP请求。该请求包括用户数据和Twilio的标准请求参数。

如果您从调用方收集数字,则Twilio包括Digits参数,该参数包含调用方键入的数字。

 gather = Gather(num_digits=1, action='/gather')
 gather.say('For sales, press 1. For support, press 2.')
 resp.append(gather)

如果收件人没有选择选项,让我们将它们循环回到开头,以便他们可以再次听到方向。

 resp.redirect('/voice')
 return str(resp)

然而,如果他们确实选择了一个选项并在键盘上输入了一个数字,Twilio会向托管您的TwiML的URL发送一个POST请求,其中包含他们输入的数字。这就是怎么通过按下按钮从接收方获得用户输入,并将其定向回您的Python程序:withrequest.values['Digits']。根据该值(在choice变量中),您可以相应地更新数据库或其他内容,如下面的条件所示。

@app.route('/gather', methods=['GET', 'POST'])
def gather():
 """Processes results from the <Gather> prompt in /voice"""
 # Start TwiML response
 resp = VoiceResponse()

 # If Twilio's request to our app included already gathered digits,
 # process them
 if 'Digits' in request.values:
  # Get which digit the caller chose
  choice = request.values['Digits']

  # <Say> a different message depending on the caller's choice
  if choice == '1':
resp.say('You selected sales. Good for you!')
return str(resp)
  elif choice == '2':
resp.say('You need support. We will help!')
return str(resp)
  else:
# If the caller didn't choose 1 or 2, apologize and ask them again
resp.say("Sorry, I don't understand that choice.")

 # If the user didn't choose 1 or 2 (or anything), send them back to /voice
 resp.redirect('/voice')

 return str(resp)

希望这能有所帮助!

好了关于怎么使用Python从出站Twilio调用中检索信息?的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。