调用IInteractionVoice.Release()不会在Workspace Desktop Edition自定义模块中释放(挂起)当前调用

时间:2017-02-22 20:19:28

标签: c# genesys workspace-desktop-edition

我需要在Genesys Workspace Desktop Edition中以编程方式挂断当前的电话。这就是我所拥有的:

public class SomeService
{
    private readonly IEnterpriseServiceProvider _esp;

    public SomeService(IEnterpriseServiceProvider esp)
    {
        _esp = esp;
    }

    public void HangupCurrentCall()
    {
        var iv = _esp.Resolve<IInteractionVoice>();

        iv.Release();
    }
}

上面的代码执行时没有错误,但是呼叫没有挂断。

1 个答案:

答案 0 :(得分:1)

您无法仅通过企业服务挂断当前通话。 WDE为此提供API。您可以从开发人员指南文档中查看。实际上你有两个选择来实现这一目标。使用WDE API命令调用的第一种方法。第二种方式使用通用SDK(PSDK)挂断当前调用。 首先,您需要收集当前呼叫的interactionId。之后可以调用这样的命令,

commandManager.CommandsByName["InteractionVoiceReleaseCall"].Insert(0, new CommandActivator()
            {
                CommandType = typeof(CustomCommand.ReleaseCall),
                Name = "InteractionVoiceReleaseCall"
            });     

您可以从WDE api指南中找到所有命令列表。 在您的命令类型(类)上,您必须返回布尔值。如果你返回false,它可以继续,发送true就像破坏命令一样。

或者你可以直接执行这样的命令;

IDictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("CommandParameter", interaction);
parameters.Add("Reasons", reasons);
parameters.Add("Extensions", extensions);
commandManager.GetChainOfCommandByName("InteractionVoiceReleaseCall").Execute();

作为SDK认证开发者,我总是喜欢PSDK(通用geneys sdk)。您可以检索当前的SIP服务器连接并向其发送请求。像这个代码块

IChannelService channelService = agent.EntrepriseService.Resolve<IChannelService>("channelService");
IClientChannel tServerChannel = channelService.ListChannels<Genesyslab.Platform.Voice.Protocols.TServerProtocol>().FirstOrDefault();

channelService.RegisterEvents(tServerChannel, new Action<Genesyslab.Enterprise.Model.Channel.IClientChannel>(ChannelEvent));

TServerProtocol tServerProtocol = tServerChannel.Protocol as TServerProtocol;

在此之后,您在tserverPorotocol对象上有当前连接。然后,您可以向SIP服务器发送请求。

像这样:

Genesyslab.Platform.Voice.Protocols.TServer.Requests.Voice.RequestReleaseCall releaseCall = Genesyslab.Platform.Voice.Protocols.TServer.Requests.Voice.RequestReleaseCall.Create();
releaseCall.ThisDN = "7000"; //(for example)(you can retrieve agent's DN from agent object)
releaseCall.ConnID = interaction.ConnectionId     // you can retrieve from interactionhandler event.

 tServerProtocol.Send(releaseCall);
 //or  tServerProtocol.Request(releaseCall); for async request. request return a ack message from the server.

我试图解释基础知识。我希望它有所帮助。如果您对sip等有疑问,请告诉我。