Twilio:保持电话热转接

问题描述 投票:0回答:1

我正在Twilio建议的应用程序中实现热转移。 我需要以下所有这些功能: https://www.twilio.com/docs/voice/tutorials/warm-transfer

我从Github下载了这个示例,以检查这种方法是否合适: https://github.com/TwilioDevEd/warm-transfer-csharp

现在我面临的问题是,当第一个座席呼叫第二个座席并告诉他们呼叫者的问题并挂掉他们自己(即第一个座席)时,我不能把第一个呼叫者暂停听一些音乐

我在示例代码中添加了这段代码以将调用者置于保持状态:

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”的错误。 请让我知道如何实现这一目标,或者我是否可以使用其他更好的方法来满足我的要求。

twilio twilio-api twilio-programmable-voice
1个回答
0
投票

Twilio开发者传道者在这里。

您收到20404错误,因为您尝试通过将会议SID作为需要调用SID的参数来引用不存在的资源。

会议和呼叫是不同的资源,这就是为什么要在会议中引用您需要会议SID和参与者呼叫SID的原因。

您有呼叫SID,这被混淆地称为会议ID,但这是因为它在创建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();
}
© www.soinside.com 2019 - 2024. All rights reserved.