Не могу отказаться от бронирования - PullRequest
0 голосов
/ 27 сентября 2018

Я следил за документацией, чтобы настроить новый обработчик задач для 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();

Таким образом, агент находится в автономном режиме, и клиент больше звонит.Это не идеально, но я могу работать сейчас.

...