【问题标题】:Twilio twiml instruction not executing within Flask.redirectTwilio twiml 指令未在 Flask.redirect 中执行
【发布时间】:2020-12-17 23:57:16
【问题描述】:

在我的一生中,我无法让 Twilio 在 Flask.redirect 中执行 twiml 指令。当我通过 Postman 执行查询时,我看不到任何错误,所以我错过了什么?我还可以在 Flask 的控制台输出中看到重定向。

预期的行为是,当呼出呼叫被应答时(CallStatus == 'in-progress'),呼叫被重定向到问候消息。真正发生的是通话持续 5 秒——在 dial() 中定义以确保 Twilio 有足够的时间做出反应——然后挂断。

我什至尝试将 100 秒的很长的停顿动词加入到 greeting() 中返回的响应中,但这被忽略了。

那么...我错过了什么?任何见解将不胜感激。

@app.route("/call/dail/<number>", methods=['POST'])
def dial(number):
    call = client.calls.create(
                        status_callback='http://<tunnel>.ngrok.io/call/status_update',
                        status_callback_method='GET',
                        status_callback_event=['initiated', 'answered', 'completed'],
                        twiml='<Response><Pause length="5"/></Response>',
                        to=number,
                        from_=from_number
                    )

    return call.sid

@app.route("/call/status_update", methods=['GET'])
def call_status_update():

   called_number = request.values.get("Called")
   callsid = request.values.get("CallSid")
   callstatus = request.values.get("CallStatus")

   if callstatus == 'in-progress':
      return redirect(url_for('greeting'))

   return "Waiting for someone to pickup..."

@app.route("/call/greeting", methods=['GET', 'POST'])
def greeting():
    response = VoiceResponse()

    wait_message = 'This is a greeting.'
    response.say(wait_message)

    return Response(str(response), 200, mimetype="application/xml")

【问题讨论】:

    标签: python flask twilio twilio-twiml


    【解决方案1】:

    当呼叫被应答时,您将返回以下 TwiML:

    &lt;Response&gt;&lt;Pause length="5"/&gt;&lt;/Response&gt; 然后电话挂断。您可以使用 TwiML 将 redirect 指向另一个 URL,或者使用调用资源的 URL parameter 并指向 /call/greeting URL。

    当 Twilio 用完要执行的 TwiML 时,调用结束。你必须继续喂它 TwiML。请注意,statusCallbacks do not control the call flow(因此 Twilio 不会执行 statusCallback 返回的任何 TwiML)。

    • 旁注:此处输入错误:/call/dail/&lt;number&gt;(拨号)

    【讨论】:

    • 所以唯一的选择是直接使用以下内容更新调用以使其进入流程:call = client.calls(CallSid).update(twiml='&lt;Response&gt;&lt;Say&gt;Ahoy there&lt;/Say&gt;&lt;/Response&gt;')
    • 5 秒停顿动词是为了给 statusCallback 足够的时间做出反应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多