Ошибка вызова обновления Twilio REST

Я подписался на эту страницу, чтобы обновить звонок в конференц-зал. Каждый раз, когда я пытаюсь вызвать функцию обновления, я получаю сообщение об ошибке: No 'To' number is specified. Даже если я захожу в стандартный Twiml, куда входил звонок, там написано. В документе нигде не сказано, что вам нужен номер Кому.

Код, который я использовал:

$call = $tokens['client']->account->calls->get($call_sid);
$call->update(array(
        "Url" => $app["request"]->getSchemeAndHttpHost() . "/dial/api/assign_redirect?callsid=" . $call_sid,
        "Method" => "POST"
    ));

Твимл, куда он перенаправлен:

<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say voice="woman">Thank you for your patience. You are now connecting with an agent</Say>
<Dial record="true">
    <Conference startConferenceOnEnter="false" endConferenceOnExit="true" eventCallbackUrl="{{ url('API-record') }}" record="record-from-start">{{ callsid }}</Conference>
</Dial>

The other Twiml where the call is accepted:

<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Dial record='record-from-answer' callerId='{{ callerId }}'>
        {{ numberOrClient|raw }}
    </Dial>
</Response>

Поддержка Twilio не помогла, они указали мне на: https://www.twilio.com/docs/errors/21201, что не имеет смысла.

Я уже задавал кучу вопросов о том, как:

У меня сработало только последнее. Но это создает третью ногу. Хочу придерживаться уже существующих. Кто-нибудь знает, как это исправить?

Заранее спасибо!

Изменить: я использую версию 4 библиотеки PHP.


person Duncan    schedule 06.09.2016    source источник
comment
Могу я спросить, какую версию библиотеки PHP вы используете? v4 или v5? Спасибо!   -  person philnash    schedule 06.09.2016
comment
Привет, я использую версию v4.   -  person Duncan    schedule 06.09.2016
comment
Что-нибудь еще происходит вокруг этого первого блока кода? Обновление, отправленное в ресурс вызова с идентификатором SID вызова, никогда не должно нуждаться в номере To, поэтому мне просто интересно, есть ли у него еще контекст?   -  person philnash    schedule 06.09.2016
comment
Немного, для клиента я использую JS-библиотеку v1.3. Клиент может выбрать отклонение, принятие или переадресацию вызова на конференцию. Первые две работают, третий доставляет мне неудобства. У меня есть второй рабочий процесс с использованием рабочей области Twilio, с использованием библиотеки PHP v4, где я использую примерно тот же код, и он работает, только я получаю sid вызова от итератора вместо библиотеки js.   -  person Duncan    schedule 06.09.2016
comment
Извините, что продолжаю задавать вопросы. Вы передаете SID от внешнего интерфейса к этому коду? И точно ли он поступает правильно? Можете ли вы зарегистрировать идентификатор вызова и объект вызова перед вызовом update   -  person philnash    schedule 06.09.2016
comment
Нет проблем, скорее будут вопросы для положительного финала, чем вообще никаких ответов :). Но да, я использую Ngrok, чтобы мой локальный env разговаривал с Twilio, поэтому я могу видеть запрос, сделанный в инспекторе ngrok. Я также возвращаю его и console.log обратно во внешний интерфейс. Это запрос ajax, и я получаю его в PHP примерно так: $call_sid= $request->request->get('call_sid'); Я попытался еще немного отладить его, используя call_sid второй ноги, но это перенаправляет клиента и вешает входящий вызов, но не вызывает ошибок.   -  person Duncan    schedule 06.09.2016
comment
Но в какой момент вы получаете эту ошибку? Когда Twilio подключается к TwiML? Я думал, что это произошло, когда вы сделали вызов REST API для обновления вызова. Извините за путаницу! Обещаю, мы с этим справимся!   -  person philnash    schedule 06.09.2016
comment
Я получаю его при обновлении, не вижу запросов к TwiML. Если я выполняю запрос принудительно, он подключается к TwiML, и я получаю Error - 12100 Document parse failure, потому что он передает ошибку Twilio в запросе к TwiML (я вижу ошибку перед TwiML в отладчике Twilio).   -  person Duncan    schedule 06.09.2016
comment
Можете ли вы зарегистрировать то, что у вас есть в переменной $call между вызовом get и update?   -  person philnash    schedule 06.09.2016
comment
Это 1 большой объект: pastebin.com/SbE2mDmz   -  person Duncan    schedule 06.09.2016
comment
Да, это так! И прямо внизу, строка 2163-2164, вы можете увидеть, что у вас нет идентификатора безопасности вызова (в ключе sid или в URL-адресе). Вы не получаете этот идентификатор вызова из своего запроса Ajax должным образом. Вот где вам следует искать.   -  person philnash    schedule 06.09.2016
comment
Все еще странно. Ошибка не имеет смысла, и в ответе отображается тот же call_sid, что и в почтовом запросе ngrok, дайте мне секунду, чтобы проверить   -  person Duncan    schedule 06.09.2016
comment
Я считаю, что произошло то, что при вызове get без идентификатора вызова вы в конечном итоге получили ссылку на экземпляр списка для вызовов. Затем при вызове update выполняется запрос POST, который считает, что делает запрос на создание вызова, и поэтому вы получаете сообщение об ошибке, что требуется номер To.   -  person philnash    schedule 06.09.2016
comment
Некоторые из моих отладочных кодов действительно сломали call_sid. После отката и еще одного теста я получаю: pastebin.com/B8CJpA6Y   -  person Duncan    schedule 06.09.2016
comment
Ладно, починил. После того, как я возился с ->account->calls->get, у меня получился итератор, такой же, как и в рабочей области. foreach ($tokens['client_token']->account->calls->getIterator(0, 50, array("CallSid" => $call_sid )) as $call) и это работает, я успешно подключил клиента к конференции. Спасибо за помощь @philnash   -  person Duncan    schedule 06.09.2016


Ответы (1)


Я исправил это, получив оба call_sid ног и создав итератор, как в документации. Если вы отправите результат, ошибка To исчезнет, ​​она немного шире и медленнее, чем get, но она работает.

person Duncan    schedule 07.09.2016