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