TwilioでPythonを使用するにはどうすればreject()とコールバックを実装できますか?


3

私の携帯電話から私の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

私はあなたのユースケースをよく理解していますが、Twilio Python Helper Libraryを使用してこれを行うつもりです。

限り<Reject> TwiMLが行くように、あなたはこのような何かをし、「忙しい」に設定する理由を指定することを確認することができます:あなたが持っているでしょう<Reject>内には、コールバックがないので

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() 

どのように進むことができるかについてのいくつかの選択肢。

Python 3.3以降を使用している場合は、asyncioを使用してプロセス全体を実行することを検討してください。

古いバージョンのPythonでは、this postで示されているように、タスクキューを介してクライアント呼び出しを完了することをお勧めします。

これがまったく役に立ったら教えてください。

  0

ありがとう、私はあなたのコメントをいただきありがとうございます。 time.sleep()とは対照的に、私はスケジューラーを試してみます。 25 6月. 162016-06-25 12:31:27