Инструкция Twilio twiml не выполняется в Flask.redirect

Я не могу, хоть убей, заставить Twilio выполнять инструкции twiml в Flask.redirect. Я не вижу ничего плохого, когда выполняю запрос через Postman, так что мне не хватает? Я также вижу перенаправление в выходных данных консоли из Flask.

Ожидаемое поведение заключается в том, что при ответе на исходящий вызов (CallStatus == 'in-progress') вызов перенаправляется на приветственное сообщение. Что действительно происходит, так это то, что звонок длится 5 секунд - что определяется в dial (), чтобы Twilio успевал среагировать - и вешает трубку.

Я даже попытался включить глагол очень длинной паузы в 100 секунд в ответ, возвращаемый с помощью Hello (), но это было просто проигнорировано.

Итак ... что мне не хватает? Любые идеи будут оценены.

@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")

введите описание изображения здесь


person Geppelt    schedule 17.12.2020    source источник


Ответы (1)


При ответе на вызов вы возвращаете следующий TwiML:

<Response><Pause length="5"/></Response>, а затем вызов прерывается. Вы можете использовать TwiML для перенаправления на другой URL-адрес или использовать параметр URL ресурса звонков и укажите /call/greeting URL.

Когда у Twilio заканчивается TwiML для выполнения, вызов завершается. Вы должны продолжать кормить его TwiML. Обратите внимание, что s tatusCallbacks не контролируют поток вызовов (поэтому Twilio не будет выполнять какой-либо TwiML, возвращаемый statusCallback).

  • Боковое примечание: здесь опечатка: /call/dail/<number> (циферблат)
person Alan    schedule 18.12.2020
comment
Таким образом, единственный вариант - обновить вызов напрямую с помощью чего-то вроде ниже, чтобы поместить его в поток: call = client.calls(CallSid).update(twiml='<Response><Say>Ahoy there</Say></Response>') - person Geppelt; 18.12.2020
comment
Глагол паузы в 5 секунд должен был дать statusCallback достаточно времени для реакции. - person Geppelt; 18.12.2020