Откройте новое окно взаимодействия с почтой в рабочей области Genesys Interaction.

Я получил задание показать диалог "Новая исходящая почта" в Genesys IWS при внешнем событии от веб-службы. Я установил свое расширение IWS, и оно загружается и может предоставить интерфейс веб-сервиса.

Моя главная проблема сейчас в том, что я не понимаю, как я могу открыть окно взаимодействия из моего кода. Я попытался получить экземпляр этого с помощью:

IInteractionsWindow interactionsView = Container.Resolve<IInteractionsWindow>();
interactionsView.Create();
interactionsView.ShowView();

На самом деле это работает только наполовину, так как я получаю новое окно, но оно совершенно пустое. Нужно ли загружать каждый регион отдельно? Есть ли более простой способ достижения моих целей полностью интегрированным способом?

ОБНОВЛЕНИЕ: Сейчас я пытался добиться чего-то с помощью Platform SDK, хотя понятия не имею, действительно ли это помогает мне показать агенту "окно новой почты". Я попытался с помощью следующего кода:

interactionServerProtocol = new InteractionServerProtocol(new Endpoint(new Uri("tcp://ixnServer:7319")));
interactionServerProtocol.ClientName = "CRMIntegrationModule";
interactionServerProtocol.ClientType = InteractionClient.AgentApplication;

contactServerProtocol = new UniversalContactServerProtocol(new Endpoint(new Uri("tcp://ucsServer:5130")));
contactServerProtocol.ClientName = "CRMIntegrationModule";

interactionServerProtocol.Open();
contactServerProtocol.Open();

RequestSubmit request = RequestSubmit.Create();
request.InteractionType = "Outbound";
request.InteractionSubtype = "OutboundNew";
request.MediaType = "email";
request.Queue = "default";

EventAck response = interactionServerProtocol.Request(request) as EventAck;
if (response != null)
{
    string id = Convert.ToString(response.Extension["InteractionId"]);

    RequestInsertInteraction insertRequest = RequestInsertInteraction.Create();
    insertRequest.InteractionAttributes = new InteractionAttributes
    {
        Id = id,
        MediaTypeId = "email",
        TypeId = "Outbound",
        SubtypeId = "OutboundNew",
        TenantId = 101,
        Status = new NullableStatuses(Statuses.Pending),
        Subject = "Testmail",
        EntityTypeId = new NullableEntityTypes(EntityTypes.EmailOut)
    };
    insertRequest.EntityAttributes = new EmailOutEntityAttributes()
    {
        FromAddress = "dummy@gmx.net",
        ToAddresses = "dummy@gmx.net",
    };
    insertRequest.InteractionContent = new InteractionContent()
    {
        Text = "This is the e-mail body."
    };
    contactServerProtocol.Send(insertRequest);

    RequestPlaceInQueue queueRequest = RequestPlaceInQueue.Create();
    queueRequest.InteractionId = id;
    queueRequest.Queue = "default";
    interactionServerProtocol.Send(queueRequest);
}

interactionServerProtocol.Close();
contactServerProtocol.Close();

Плохая вещь - это ответ сервера взаимодействия, который:

attr_ref_id [int] = 2
attr_error_code [int] = 34
attr_error_desc [str] = "Client is not logged in"

Я думаю, что это может быть связано с неправильным входом в систему, но я не знаю, как этого добиться. Любая помощь?

ОБНОВЛЕНИЕ 2 Я мог бы отправить электронное письмо с использованием Platform SDK, но это не то, что я действительно хочу. Первоначальный вопрос все еще актуален, так как я просто хочу вызвать окно взаимодействий и все. Другие вещи зависят от пользователя. Является ли это возможным?

2 ответа

Решение

Я использовал данные цепочки команд:

    public IObjectContainer Container { get; set; }

    public void NewItem(string contactId, string emailAddress)
    {
        IAgent agent = Container.Resolve<IAgent>();
        IRoutingBasedManager routingManager = Container.Resolve<IRoutingBasedManager>();

        IDictionary<string, object> parameters = new Dictionary<string, object>();
        parameters.Add("CommandParameter", agent.FirstMediaEmail);
        parameters.Add("TargetId", contactId);
        parameters.Add("OwnerId", agent.ConfPerson.EmailAddress);
        parameters.Add("Destination", emailAddress);
        parameters.Add("RecentIndex", contactId);
        bool todo = routingManager.RequestToDo("CreateNewOutboundEmail", RoutingBasedTarget.Contact, parameters);
        if (todo && parameters.ContainsKey("RoutingBaseCommand"))
        {
            IChainOfCommand chainOfCommand = parameters["RoutingBaseCommand"] as IChainOfCommand;
            if (chainOfCommand != null)
            {
                chainOfCommand.Execute(parameters["RoutingBaseCommandParameters"]);
            }
        }
    }

Вам нужно использовать PlatformSDK. добавить Genesyslab.platform.webmedia.protocols.dll После этого вы можете использовать *webmedia.tserver.request, под этой вкладкой есть requestWeb или sth.

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

В вашем главном модуле (есть метод Initialize), необходимо зарегистрироваться, как это. Вы можете поместить кнопку или STH, затем вы можете вызвать событие или вы можете использовать командную цепочку после входа в систему, до вас.

Удачи.

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