Я сделал это с помощью события booking.created .Я использую стандартный рабочий процесс и очередь задач, а затем программно отклоняю все резервирования, пока резервирование не будет выполнено с помощью правильного агента, а затем принимаю его.
В пользовательском интерфейсе TaskRouter в консоли Twilkio я добавил веб-крючок на reservation.created
событие, указывающее на мой сервер.Затем запрос обрабатывается следующим образом:
@app.route('/hook/reservation', methods=['POST'])
def fn_th_reservation():
task_attributes = json.loads(request.form['TaskAttributes'])
channel_sid = task_attributes["channelSid"]
worker_sid = request.form['WorkerSid']
reservation_sid = request.form["ReservationSid"]
workspace_sid = request.form["WorkspaceSid"]
task_sid = request.form["TaskSid"]
# implement app specific logic here. you can use channel_sid and
# worker_sid to compare them to a mapping from you database for instance
is_right_worker = ...
reservation_status = 'accepted' if is_right_worker else 'rejected'
client = Client(account_sid, auth_token)
# accept or reject reservation
reservation = client.taskrouter.workspaces(workspace_sid) \
.tasks(task_sid).reservations(reservation_sid) \
.update(reservation_status=reservation_status)
print(reservation.worker_name)
print(reservation.reservation_status)
return('200')
просто убедитесь, что вы не создаете бесконечный цикл, отклоняя каждого работника