我想从我的手机拨打我的Twilio号码,Twilio识别我的号码,拒绝接听电话,然后给我回电话。这是代码:
@application.route("/test", methods=['GET', 'POST'])
def test():
whitelist = ['81808730xxxx', '44753810xxxx', '+44753810xxxx', '+44792834xxxx', '44792834xxxx']
call_from = request.values.get('From', 'None')
if call_from in whitelist:
# "<Response><Reject /></Response>"
resp = twilio.twiml.Response()
resp.reject()
time.sleep( 10 )
account_sid = "account_sid"
auth_token = "account_auth_token"
client = TwilioRestClient(account_sid, auth_token)
call = client.calls.create(to=call_from, from_="+1646480xxxx", url="https://zshizuka.herokuapp.com/gather")
print call.sid
else:
resp = twilio.twiml.Response()
call_to = "+44792834xxxx"
resp.dial(call_to)
#return json.dumps({'success':True}), 200
return str(resp)
这会产生可怕的回应:“我们很抱歉发生了系统错误。再见”。
但是,如果我在拨打第一个铃声后拨打号码和挂断电话,那就完美了。所以我假设问题在于拒绝动词。正如你所看到的,我曾经尝试过,有没有twiml。
我想得到一个忙碌的信号,拒绝接听电话(所以手机话费没有成本)然后回电。
感谢帮助。
答案 0 :(得分:1)
我希望更好地理解您的用例,但我会使用Twilio Python Helper Library来解决这个问题。
就<Reject>
TwiML而言,您可以执行以下操作,并确保指定原因将其设置为“忙碌”&#39;:
from flask import Flask
from flask import request
from twilio import twiml
account_sid = "YOU_ACCOUNT_SID"
auth_token = "YOUR_ACCOUNT_TOKEN"
client = TwilioRestClient(account_sid, auth_token)
app = Flask(__name__)
@app.route('/test', methods=["GET", "POST"])
def test():
whitelist = ['+14151XXXXXX', '+14152XXXXXX']
call_from = request.form['From']
if call_from in whitelist:
resp = twiml.Response()
resp.reject(reason="busy")
return str(resp)
else:
resp = twiml.Response()
call_to = "+14153XXXXXX"
resp.dial(call_to)
return str(resp)
if __name__ == "__main__":
app.run()
由于<Reject>
内没有回调,您可以选择如何继续进行回调。
如果您使用的是Python 3.3或更高版本,则可以考虑使用asyncio执行整个过程。
对于旧版本的Python,我建议您尝试通过任务队列完成客户端调用,如this post中所示。
如果这有帮助,请告诉我。