Genesys平台:从Sip服务器获取呼叫详细信息


  • 我想从Genesys平台SIP服务器获取呼叫详细信息

  • Genesys平台有Platform SDK for.NET.

  • Anybod有一个SIMPLE示例代码,它向展示了如何使用Platform SDKfor.NET[C#]从SIP Server获取调用详细信息

额外说明:

呼叫详细信息:尤其是我想为给定的呼叫获取AgentId

来自Sip服务器:我不确定Sip服务器是否是最好的记录通话详细信息。因此,对其他建议/替代方案持开放态度

您可以构建一个监视DN操作的类。此外,您还可以查看特定DN或所有DN,具体取决于您必须执行的操作。如果这一切都是为了通话,这是最好的方式。

首先,您必须定义TServerProtocol,然后必须通过主机、端口和客户端信息进行连接。

var endpoint = new Endpoint(host, port, config);
//Endpoint backupEndpoint = new Endpoint("", 0, config);
protocol = new TServerProtocol(endpoint)
{
ClientName = clientName
};
//Sync. way;
protocol.Open();
//Async way;
protocol.BeginOpen();

我总是使用异步方式来做这件事。我明白我的理由了:)你可以用SDK提供的事件检测连接何时打开。

protocol.Opened += new EventHandler(OnProtocolOpened);
protocol.Closed += new EventHandler(OnProtocolClosed);
protocol.Received += new EventHandler(OnMessageReceived);
protocol.Error += new EventHandler(OnProtocolError);

这里有OnMessageReceived事件。这是魔术发生的地方。您可以跟踪所有的呼叫事件和DN操作。如果你去genesys支持网站。你会发现一个SDK参考手册。在那本很容易理解的手册上,有很多关于参考资料和用法的信息。因此,在您的情况下,您需要一个呼叫的agentid。所以你需要EventEstablished来做到这一点。您可以在接收活动中使用此功能;

var message = ((MessageEventArgs)e).Message;
// your event-handling code goes here
switch (message.Id)
{
case EventEstablished.MessageId:
var eventEstablished = message as EventEstablished;
var AgentID = eventEstablished.AgentID;
break;
}

你可以用这种用法做很多这样的事情。就像拨号一样,保持呼入或呼出,即使你可以检测到内部呼叫并报告genesys平台没有。

我希望这一点足够清楚。

如果您可以访问路由策略并对其进行编辑。您可以在策略中添加一些代码,将所需的详细信息发送到某个web服务器(例如)或DB。我们在战略中做了这样的事情。在成功路由后,块作为后路由策略发送RTargetPlaceSelected和RTargetAgentSelected的值。

我们得到的AgentID和Place如下,步骤1:创建自定义命令类并在ExtensionSampleModule类中添加命令链,如下所示,

class LogOnCommand : IElementOfCommand
{
readonly IObjectContainer container;
ILogger log;
ICommandManager commandManager;
public bool Execute(IDictionary<string, object> parameters, IProgressUpdater progress)
{
if (Application.Current.Dispatcher != null && !Application.Current.Dispatcher.CheckAccess())
{
object result = Application.Current.Dispatcher.Invoke(DispatcherPriority.Send, new ExecuteDelegate(Execute), parameters, progress);
return (bool)result;
}
else
{
// Get the parameter
IAgent agent = parameters["EnterpriseAgent"] as IAgent;
IIdentity workMode = parameters["WorkMode"] as IIdentity;
IAgent agentManager = container.Resolve<IAgent>();
Genesyslab.Desktop.Modules.Core.Model.Agents.IPlace place = agentManager.Place;
if (place != null)
{
string Place = place.PlaceName;
}
else
log.Debug("Place object is null");
CfgPerson person = agentManager.ConfPerson;
if (person != null)
{
string AgentID = person.UserName;
log.DebugFormat("Place: {0} ", AgentID);
}
else
log.Debug("AgentID object is null");
}
}
}
// In ExtensionSampleModule
readonly ICommandManager commandManager;
commandManager.InsertCommandToChainOfCommandAfter("MediaVoiceLogOn", "LogOn", new 
List<CommandActivator>() { new CommandActivator() 
{ CommandType = typeof(LogOnCommand), Name = "OnEventLogOn" } });
enter code here
IInteractionVoice interaction = (IInteractionVoice)e.Value;
switch (interaction.EntrepriseLastInteractionEvent.Id)
{
case EventEstablished.MessageId:
var eventEstablished = interaction.EntrepriseLastInteractionEvent as EventEstablished;
var genesysCallUuid = eventEstablished.CallUuid;                  
var genesysAgentid = eventEstablished.AgentID;
.
.
.
.
break;
}

试试这个:

Genesyslab.Platform.Contacts.Protocols.ContactServer.Requests.JirayuGetInteractionContent
JirayuGetInteractionContent =
Genesyslab.Platform.Contacts.Protocols.ContactServer.Requests.JirayuGetInteractionContent.Create();
JirayuGetInteractionContent.InteractionId = "004N4aEB63TK000P";
Genesyslab.Platform.Commons.Protocols.IMessage respondingEventY = contactserverProtocol.Request(JirayuGetInteractionContent);
Genesyslab.Platform.Commons.Collections.KeyValueCollection keyValueCollection = ((Genesyslab.Platform.Contacts.Protocols.ContactServer.Events.EventGetInteractionContent)respondingEventY).InteractionAttributes.AllAttributes;

相关内容

  • 没有找到相关文章

最新更新