执行 python 程序以从 twilio 服务器获取呼叫者参加电话会议时出错

Posted

技术标签:

【中文标题】执行 python 程序以从 twilio 服务器获取呼叫者参加电话会议时出错【英文标题】:Getting error while executing python program to get a caller to conference call from twilio server 【发布时间】:2018-04-26 12:32:22 【问题描述】:

我写了一个关于 [Ph Num 1 Twilio Server Ph Num2 ] 的 python 程序 [- 从我的 ph 号码 (Num 1) 向 twilio 服务器发送包含另一个电话号码 (Num 2) 的消息 - twilio 接听电话号码 (Num2) 并给我回电 (Num1)(说你即将开会)和 - twilio 呼叫 Num 2 并与我会面 (Num1)

这是我的程序:

from flask import Flask, request
from twilio import twiml
from twilio.rest import Client

app = Flask(__name__)

account = "AC7d2a***************"
token = "f83b27**************"
client = Client(account, token)

@app.route("/sms", methods=['GET', 'POST'])
def sms():
    number=request.form["From"]

    call= client.calls.create(from_="+1857*******",to=number,url="https://handler.twilio.com/twiml/EHb330731ab2c9a35fcdc620bef1b88536")

    return str(resp)

if __name__=="__main__":
    app.run()

url="https://handler.twilio.com/twiml/EHb330731ab2c9a35fcdc620bef1b88536 包含

<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Say>You are about to enter a conference</Say>
  <Dial><Conference>number</Conference></Dial>
</Response> 

我也做了 Ngrok,并在 twilio 号码的语音和消息 URL 中添加了我的 Ngrok 链接

我尝试了很多更改并收到各种错误,而不是在发送消息后给我打电话的 twilio 号码(带有 Ph 号码 (Num2) 到会议)

执行上述代码时最近出现的错误是 错误:

[2017-11-13 09:46:41,570] ERROR in app: Exception on /sms [POST]
Traceback (most recent call last):
  File "/home/arif/my_app/local/lib/python2.7/site-packages/flask/app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/arif/my_app/local/lib/python2.7/site-packages/flask/app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/arif/my_app/local/lib/python2.7/site-packages/flask/app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/arif/my_app/local/lib/python2.7/site-packages/flask/app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/arif/my_app/local/lib/python2.7/site-packages/flask/app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "conf.py", line 17, in sms
    return str(resp)
NameError: global name 'resp' is not defined
127.0.0.1 - - [13/Nov/2017 09:46:41] "POST /sms HTTP/1.1" 500 -

我的程序是否得到了我期望的结果?谁能帮我问题出在哪里?

【问题讨论】:

【参考方案1】:

这里是 Twilio 开发者宣传员。

这里有几个问题。首先,您的 webhook 响应中出现错误。您可以在堆栈跟踪的底部看到错误:

  File "conf.py", line 17, in sms
    return str(resp)
NameError: global name 'resp' is not defined
127.0.0.1 - - [13/Nov/2017 09:46:41] "POST /sms HTTP/1.1" 500 -

它说resp 没有定义。

您可以看到,在您的方法中,您从未定义 resp,但您尝试返回它的 str 版本:

def sms():
    number=request.form["From"]
    call= client.calls.create(from_="+1857*******",to=number,url="https://handler.twilio.com/twiml/EHb330731ab2c9a35fcdc620bef1b88536")
    return str(resp)

在这种情况下,您可以只向 Twilio 返回一个空字符串。

def sms():
    number=request.form["From"]
    call= client.calls.create(from_="+1857*******",to=number,url="https://handler.twilio.com/twiml/EHb330731ab2c9a35fcdc620bef1b88536")
    return ('', 204)

一旦解决了这个问题,您会发现您只打了一个电话,即回拨给您自己。要与您要呼叫的号码开会,您需要生成两个呼叫。您说您要发送的消息的正文将是您要拨入会议的另一个号码,所以这应该可以:

def sms():
    my_number=request.form["From"]
    other_number=request.form["Body"]
    twilio_number="+1857*******"
    conference_url="https://handler.twilio.com/twiml/EHb330731ab2c9a35fcdc620bef1b88536"
    client.calls.create(from_=twilio_number,to=my_number,url=conference_url)
    client.calls.create(from_=twilio_number,to=other_number,url=conference_url)
    return ('', 204)

如果有帮助,请告诉我。

【讨论】:

以上是关于执行 python 程序以从 twilio 服务器获取呼叫者参加电话会议时出错的主要内容,如果未能解决你的问题,请参考以下文章

Heroku 需要 40 分钟来执行来自 Twilio 的发布请求

Python利用Twilio(国际)以及腾讯云服务做一些事情

在 Raspberry Pi 上从 python 脚本为 Twilio 服务运行终端命令时出错

如何在解析服务器上配置 Twilio?

执行 PHP 脚本以从 Android 连接服务器的路径 [关闭]

执行 PHP 脚本以从 Android 连接服务器的路径 [关闭]