Twilio возвращение сбора после пресс-звезды клиента
Я пытаюсь создать обратный сбор, если переводчик зависает в конференции, а клиент все еще на линии, я должен вернуть сбор клиенту, чтобы спросить его, хочет ли он другого переводчика или отключиться
все работало идеально, но, когда клиент нажал на звезду, сейл произнес только первую часть слова, а затем звонок прервался
def handle_incoming_call(self, call_sid, from_number, language_code):
try:
with transaction.atomic():
next_interpreter = CallSelector.get_next_interpreter(language_code)
conference_name = f"conferenceـ{call_sid}"
conference = CallSelector.create_conference(
language=next_interpreter.language,
interpreter=next_interpreter.interpreter,
conference_name=conference_name,
)
response = VoiceResponse()
response.say("Please wait while we connect you with an interpreter")
dial = Dial(
hangup_on_star=True,
action=f"{settings.BASE_URL}/api/calls/webhook/interpreter_leave/{conference.conference_id}/",
timeout=30,
)
dial.conference(
conference_name,
start_conference_on_enter=True,
end_conference_on_exit=False,
# record=True,
# recording_status_callback=f"{settings.BASE_URL}/api/calls/webhook/recording/{conference.conference_id}/",
status_callback=f"{settings.BASE_URL}/api/calls/webhook/conference-status/{conference.conference_id}/",
status_callback_event="start end join leave announcement",
status_callback_method="POST",
beep=True,
participant_label="client",
)
response.append(dial)
self._add_client_to_conference(conference, from_number, call_sid),
self._call_interpreter(conference, next_interpreter.interpreter),
return response
except Exception as e:
logger.error(f"Call handling failed: {str(e)}", exc_info=True)
return self._generate_no_interpreter_twiml()
А вот обратный вызов interpreter_leave
def handel_interpreter_leave(self, conference_id: str):
try:
print("Interpreter leave handling started")
conference = CallSelector.get_conference_by_conference_id(conference_id)
response = VoiceResponse()
gather = Gather(
num_digits=1,
action=f"{settings.BASE_URL}/api/calls/webhook/client_choice/{conference_id}/",
method="POST",
timeout=10,
input="dtmf",
)
gather.say("Press 1 to connect with a new interpreter, or press 2 to end the call.")
response.append(gather)
return response
except Exception as e:
logger.error(f"Interpreter leave handling failed: {str(e)}", exc_info=True)
raise
Перед вызовом Action у меня есть функция, вызываемая после выхода интерпретатора, чтобы сказать клиенту, чтобы он сохранил звезду
def handle_interpreter_hangup(self, conference_id: str, sid: str):
try:
print("Interpreter hangup handling started")
conference = CallSelector.get_conference_by_conference_id(conference_id)
self.client.conferences.get(conference.conference_sid).update(
announce_url=f"{settings.BASE_URL}/api/calls/webhook/interpreter_leave_redirect/{conference_id}/"
)
except Exception as e:
logger.error(f"Interpreter hangup handling failed: {str(e)}", exc_info=True)
raise
все работает, как и ожидалось, но когда дело доходит до сбора, twiml говорит «Press 1 to»