#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. Фантастика! Рад, что смог помочь.