使用Python和Twilio如何实现reject()和回调?

时间:2016-05-30 09:11:39

标签: python twilio

我想从我的手机拨打我的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。

我想得到一个忙碌的信号,拒绝接听电话(所以手机话费没有成本)然后回电。

感谢帮助。

1 个答案:

答案 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中所示。

如果这有帮助,请告诉我。