Twilio twiml инструкция не се изпълнява в рамките на Flask.redirect

За живота си не мога да накарам Twilio да изпълни twiml инструкциите в рамките на Flask.redirect. Не виждам нищо нередно, когато изпълнявам заявката чрез 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")

въведете описание на изображението тук


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


Отговори (1)


Връщате следния TwiML, когато повикването бъде отговорено:

<Response><Pause length="5"/></Response> и след това обаждането прекъсва. Можете да използвате TwiML за пренасочване към друг URL адрес или да използвате URL параметър на ресурса за обаждания и сочете към /call/greeting URL.

Когато Twilio изчерпи TwiML за изпълнение, повикването приключва. Трябва да продължите да го захранвате с TwiML. Обърнете внимание, че statusCallbacks не контролира потока на обажданията (така че 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