Twilio: перевод вызова на удержание при повторной передаче

#twilio #twilio-api #twilio-programmable-voice

#twilio #twilio-api #twilio-программируемый-голос

Вопрос:

Я внедряю теплую передачу в своем приложении, предложенном Twilio.
Мне нужна вся эта функция следующим образом:
https://www.twilio.com/docs/voice/tutorials/warm-transfer

Я скачал этот пример с Github, чтобы проверить, подойдет ли такой подход:
https://github.com/TwilioDevEd/warm-transfer-csharp

Теперь проблема, с которой я сталкиваюсь, заключается в том, что я не могу перевести первого вызывающего абонента на удержание, слушая какую-нибудь музыку, пока 1-й агент звонит 2-му агенту и сообщает им о проблеме вызывающего абонента и вешает трубку сами (т. Е. 1-й агент)

Я добавил этот фрагмент кода в пример кода, чтобы перевести вызывающего абонента на удержание:

 public async Task<ActionResult> CallAgent2(string agentId)
    {
        var call = await _callsRepository.FindByAgentIdAsync(agentId);
        var participant = ParticipantResource.Update(
            pathConferenceSid: call.ConferenceId,
            pathCallSid: call.ConferenceId,
            hold: true,
            holdUrl: new System.Uri("http://twimlets.com/holdmusic?Bucket=com.twilio.music.classical")
        );

        var callBackUrl = GetConnectConfereceUrlForAgent(agentId, call.ConferenceId);
        _callCreator.CallAgent("agent2", callBackUrl);
        return new EmptyResult();
    }
  

Но я получаю сообщение Twilio об ошибке «Ошибка 20404».
Пожалуйста, дайте мне знать, как я могу этого добиться или могу ли я использовать какой-то другой лучший подход для выполнения моего требования.

Комментарии:

1. 20404 — это отсутствующий ресурс (по сути, 404). Похоже, вы, возможно, дважды используете идентификатор конференции, когда вместо этого вам нужен sid вызова для pathCallSid параметра.

2. Да, именно так это делается в примере кода. На самом деле, когда поступают первые вызовы, его CallSid становится как conferenceSid. Я попытался присвоить случайное имя идентификатору конференции и получить доступ к ParticipantResource. Функция выборки с использованием этого случайного имени, но все та же проблема.

Ответ №1:

Евангелист-разработчик Twilio здесь.

Вы получаете ошибку 20404, потому что пытаетесь сослаться на ресурс, который не существует, передавая SID конференции в качестве параметра, которому требуется SID вызова.

Конференции и вызовы — это разные ресурсы, поэтому для обращения к участнику конференции вам нужен SID конференции и SID вызова участника.

У вас есть SID вызова, который ошибочно называют идентификатором конференции, но это потому, что он использовался в качестве понятного имени при создании TwiML для набора кого-либо в конференцию.

Поскольку это понятное имя, это означает, что мы можем найти конференцию, отфильтровав ее по понятному имени.

 var conferences = ConferenceResource.Read(
    friendlyName: conferenceId,
    status: ConferenceResource.StatusEnum.InProgress
);
  

Это возвращает все текущие конференции с удобным названием, совпадающим с SID вызова. Это займет не более одной конференции. Затем вы можете использовать SID конференции вместе с SID вызова для обновления участника. Попробуйте что-то вроде этого:

 public async Task<ActionResult> CallAgent2(string agentId)
{
    var call = await _callsRepository.FindByAgentIdAsync(agentId);
    var conferences = ConferenceResource.Read(
        friendlyName: conferenceId,
        status: ConferenceResource.StatusEnum.InProgress
    );
    var conference = conferences[0];
    var participant = ParticipantResource.Update(
        pathConferenceSid: conference.Sid,
        pathCallSid: call.ConferenceId,
        hold: true,
        holdUrl: new System.Uri("http://twimlets.com/holdmusic?Bucket=com.twilio.music.classical")
    );

    var callBackUrl = GetConnectConfereceUrlForAgent(agentId, call.ConferenceId);
    _callCreator.CallAgent("agent2", callBackUrl);
    return new EmptyResult();
}
  

Комментарии:

1. Этот идентификатор, указанный в модели, является первичным ключом в таблице в виде целого числа, которое не будет работать. Я не уверен, как получить pathConferenceSid. Я предполагаю, что pathConferenceSid генерируется из Twilio, потому что, когда агент присоединяется к новой конференции, используя: new Dial().Conference( «xyz», waitUrl: новая система. Uri(waitUrl)); и когда я получаю доступ с помощью: ParticipantResource. Выборка(«xyz», вызов. SiD) выдает мне ту же ошибку 20404. Здесь xyz — случайное имя, заданное мной.

2. О, вы правы. Мы никогда не получаем SID конференции, только SID вызова. Я обновил свой ответ другой идеей.

3. Идеально! Это то, что я искал. Теперь он работает.

4. Фантастика! Рад, что смог помочь.