Я следил за документацией, чтобы настроить новый обработчик задач для Twilio.Проблема в том, что при отклонении резервирования возникает странная ошибка.
Невозможно обновить запись: резервирование не находится в ожидаемом состоянии [ожидает] и не может быть обновлено до [отклонено]
Но в Taskrouter на веб-сайте говорится, что он находится в состоянии ожидания.
Я получаю резервирование следующим образом: и workerSid, иservationSid публикуются через ajax.
$reservation = $client->taskrouter
->workspaces($config['workspaceSid'])
->workers($workerSid)
->reservations($reservationSid)
->fetch();
КогдаЯ эхо $reservation->reservationStatus
, это говорит в ожидании.Я попробовал обе версии из документации, чтобы отклонить резервирование:
$new_reservation = $client->taskrouter
->workspaces($reservation->workspaceSid)
->tasks($reservation->task->sid)
->reservations($reservationSid)
->update(
array('reservationStatus' => 'rejected')
);
$new_reservation = $client->taskrouter
->workspaces($reservation->workspaceSid)
->workers($reservation->workerSid)
->reservations($reservation->sid)
->update(
array('reservationStatus' => 'rejected')
);
Я использую это, чтобы назначить вызов из Taskrouter оператору, в котором params - это все, что от запроса Twilio, посылаемого моему ngrok:
$reservation = $client->taskrouter
->workspaces($params['WorkspaceSid'])
->tasks($params['TaskSid'])
->reservations($params['ReservationSid'])
->fetch();
$reservation->update(
array(
'instruction' => 'conference',
'endConferenceOnExit' => true,
'startConferenceOnEnter' => true,
'conferenceRecord' => 'record-from-start',
'beep' => 'onExit'
)
);
return $app->json($reservation);
Я использую библиотеку остатков PHP twilio 5.21.4 с php 7.1.20.
В некотором смысле здесь, что я делаю неправильно.
Iсоздал временное решение для моей проблемы.Я обновляю задачу вместо резервирования, например:
$client->taskrouter->v1->workspaces($twilio->getWorkspaceId())
->tasks($reservation['task']['sid'])
->update(array(
'Attributes' => $new_attributes,
"assignmentStatus" => "canceled",
"reason" => "agent rejected the call"
)
);
Где $ new_attributes - это кодированный в json массив с workerSids, который отклонил вызов.Я добавил worker.sid NOT IN task.rejectedWorkers
в свой рабочий процесс в Taskrouter.Когда задача обновляется, JS выполняет:
Twilio.Device.disconnectAll();
setAgentStatus('Offline');
location.reload();
Таким образом, агент находится в автономном режиме, и клиент больше звонит.Это не идеально, но я могу работать сейчас.