Платформа Genesys: получение сведений о звонке с Sip-сервера
Я хочу получить информацию о звонках с SIP-сервера платформы Genesys.
И у платформы Genesys есть Platform SDK для.NET.
- Anybod имеет простой пример кода, который показывает, как получить детали вызова с помощью Platform SDK для.NET [C#] с SIP-сервера?
Дополнительные заметки:
Подробности звонка: особенно я хотел получить AgentId для данного звонка
а также
С Sip-сервера: я не уверен, является ли Sip-сервер лучшим кандидатом на получение информации о звонке. Так что открыты для других предложений / альтернатив
5 ответов
Вы можете создать класс, который отслеживает действия 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 этого не делает.
Я надеюсь, что это достаточно ясно.
Если у вас есть доступ к стратегии маршрутизации, и вы можете редактировать ее. Вы можете добавить некоторый код в стратегию, чтобы отправить необходимые детали на какой-либо веб-сервер (например) или в БД. Мы делаем такие вещи в нашей стратегии. После успешной маршрутизации блок в качестве стратегии последующей маршрутизации отправляет значения RTargetPlaceSelected и RTargetAgentSelected.
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;
}
Мы получаем AgentID и Place следующим образом:Шаг 1: Создайте класс команды Custome и добавьте цепочку команд в классе 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
Попробуй это:
>
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;