Платформа 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;

Другие вопросы по тегам