Twilio: переведите вызов в режим «теплой передачи» - PullRequest
0 голосов
/ 13 марта 2019

Я реализую warm-Transfer в моем приложении, предложенном 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();
    }

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

1 Ответ

0 голосов
/ 14 марта 2019

Разработчик 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();
}
...