Twilio как отключить вызов, когда агент переадресовал вызов другому агенту

Например, -> Если агент A звонит пользователю, и теперь агент A передает звонок агенту B, как я могу отключить агента A от звонка и позволить пользователю и B продолжать разговор.

1. Когда я звоню, я использую этот TwiML.

<Response>
        <Dial  callerId="id">
            <Number  statusCallback="statusCallbackurl" statusCallbackMethod="POST">ag1_num</Number>
        </Dial>
        <Redirect>music_url</Redirect> 
    </Response>

2. Я передаю вызов, используя метод обновления, и набираю другого агента, используя этот код -

function transfer_call($Sid,&ag2_num){
    $childCalls = $this->client->calls->read(array("ParentCallSid" => $Sid));
    $childSid = $childCalls[0]->sid;
    $rr = array(
        "url" => "tr_url".$ag2_num,
        "method" => "POST"

    );
    $call = $this->client->calls($childSid)->update($rr);
    return $call->to;

}

а на tr_url я использовал TwiML-

<Response>
  <Dial>ag2_num</Dial>
  <Redirect>disconnectedcallurl-usingemptyqueue(todisconnectthefirstagent)</Redirect>
</Response> 

и чтобы отключить вызов, я вызвал этот метод и передал вызовы id-

function disconnect_call($callsid){
        $rr = array("status" => "completed");

        $call = $this->client->calls($callsid)->update($rr);
        echo $call->direction;
    }

Я использую идентификатор вызова, чтобы отключить агента от вызова, и он отключит весь вызов.


person Aman Singh    schedule 21.02.2017    source источник
comment
Не могли бы вы поделиться еще немного кода?   -  person philnash    schedule 21.02.2017
comment
Хорошо, я добавлю свой вопрос.   -  person Aman Singh    schedule 21.02.2017
comment
Когда вы перенаправляете другой конец вызова, первый набранный агент должен просто повесить трубку. Этого не происходит?   -  person philnash    schedule 21.02.2017
comment
да, вы правы .//* это то, что я хочу (1-й набранный агент должен просто повесить трубку), но происходит то, что он отключает весь вызов (все участники вызова отключаются). * //   -  person Aman Singh    schedule 21.02.2017
comment
Есть ли ошибки в вашем отладчике Twilio?   -  person philnash    schedule 21.02.2017
comment
нет ошибок на отладчике нет.   -  person Aman Singh    schedule 21.02.2017
comment
ты что-нибудь понял?   -  person Aman Singh    schedule 21.02.2017
comment
Какой Sid вы используете в методе отключения вызова? И когда вы это называете?   -  person philnash    schedule 21.02.2017
comment
Я использую callid, чтобы отключить первого агента (ag1_num) от вызова, и я использую его сразу после моего метода transfer_call = ›function transfer_call($Sid,&ag2_num){ $childCalls = $this->client->calls->read(array("ParentCallSid" => $Sid)); $childSid = $childCalls[0]->sid; $rr = array( "url" => "tr_url".$ag2_num, "method" => "POST" ); $call = $this->client->calls($childSid)->update($rr); $this->disconnect_call($childSid ); }.   -  person Aman Singh    schedule 21.02.2017


Ответы (1)


Проповедник разработчиков Twilio здесь.

В комментариях вы говорите, что используете метод disconnect_call сразу после передачи и используете один и тот же sid для обоих. Это означает, что вы переводите вызов, который вешает трубку от первого агента, но затем вы мгновенно вешаете и переведенный вызов, поэтому он никогда не вызывает второго агента.

Вам не нужно отключать первого агента, это сделает перевод вызова от него. Удалите вызов disconnect_child и повторите попытку.

person philnash    schedule 21.02.2017
comment
Я тоже пробовал, но это не отключает agent1 от вызова. - person Aman Singh; 21.02.2017
comment
Что тогда происходит с первым агентом? Куда они идут? Что они слышат? - person philnash; 21.02.2017
comment
Он начинает перечислять музыку с <Redirect>music_url</Redirect> , который используется, когда агент agent1 выполняет вызов в первый раз. - person Aman Singh; 21.02.2017
comment
Ах, хорошо, вы можете удалить это <Redirect>, тогда агенту не нужна музыка, если он звонит. - person philnash; 21.02.2017
comment
На самом деле я использовал это, чтобы поместить пользователя в режим ожидания. Если я удалю это, функция удержания не будет работать. - person Aman Singh; 21.02.2017
comment
Хорошо, затем используйте родительский SID в вызове для отключения. Родительский вызов - это вызов, который инициировал вызов, и в этом случае вызов исходит от агента. - person philnash; 21.02.2017