Create a Transfer button in IWS Customization

Is it possible to create a button on " InteractionVoiceCustomButtonRegion " to make a transfer directly to a routing point ?

Now I have the button created , but I can not find a way to make the transfer

Hi David,

What version of IWS?

My suggestion is to utilize existing command chains. See documentation at http://docs.genesys.com/Documentation/IW/latest/Developer/Voice

You might want to consider the InteractionVoiceSingleStepTransfer command chain.

Documentation at http://docs.genesys.com/Documentation/IW/latest/Developer/UseCustomizableCommands should help you understand how to execute commands in your buttons click event.

Regards,
Andrew

You can do it on two ways.

Using Commands Chain:

IDictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add(“CommandParameter”, Interaction); (Interaction to transfer, You can retrieve it from InteractionManager)
parameters.Add(“Destination”, destiny); (Routing Point o place of destination)
parameters.Add(“Location”, null);
parameters.Add(“UserData”, new KeyValueCollection());
parameters.Add(“Reasons”, null);
parameters.Add(“Extensions”, null);
parameters.Add(“SingleStepUserData”, null);
container.Resolve().GetChainOfCommandByName(“InteractionVoiceSingleStepTransfer”).Execute(parameters);

Another way. Working directly with Plattform:

Platform.Voice.Protocols.ConnectionId conid = new Platform.Voice.Protocols.ConnectionId(TConnectionID);
string place = _agent.LoginDNs[0].Split(‘@’); (Origin PLace, your place)
Genesyslab.Platform.Commons.Collections.KeyValueCollection kvc =new Genesyslab.Platform.Commons.Collections.KeyValueCollection();
kvc.Add(“COMMENT”, “TryTo”);
RequestSingleStepTransfer rsst = RequestSingleStepTransfer.Create(place[0].ToString(), conid, destiny,“”,kvc,kvc,kvc); b[/b]
createChannel(_agent);
channel.Protocol.Send(rsst);
destroyChannel(channel);

Regards.

Thak you Daniel_San, i could make.
Regards.

Hi Daniel and David,

I have a question about, how do you implement this solution.... finally, you use a button click event for make a SingleStepTransfer? If the answer is "yes", I would appreciate explaining how made it.

In summary, I need to know how execute commands in a button click event.

Thank you.

Best Regards.

p.d: Sorry my poor english ::slight_smile:

Hello,
I used your code in my botton of my form

using Genesyslab.Desktop.Infrastructure;
using Genesyslab.Desktop.Infrastructure.Commands;
using Genesyslab.Desktop.Infrastructure.Configuration;
using Genesyslab.Desktop.Infrastructure.DependencyInjection;
using Genesyslab.Desktop.Infrastructure.ViewManager;
using Genesyslab.Desktop.Modules.Core.Model.Agents;
using Genesyslab.Desktop.Modules.Core.Model.Interactions;
using Genesyslab.Desktop.Modules.Windows.Event;
using Genesyslab.Desktop.Modules.Windows.IWMessageBox;
using Genesyslab.Enterprise.Commons.Collections;
using Genesyslab.Platform.Commons.Logging;
using Genesyslab.Platform.Voice.Protocols.TServer.Events;
using Microsoft.Practices.Composite.Events;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Windows;
using Genesyslab.Desktop.Modules.Voice.Model.Interactions;
using System.Windows.Threading;
using System.IO;

    private void btn_ITransferencia_Click(object sender, RoutedEventArgs e)
    {
        IDictionary<string, object> parameters = new Dictionary<string, object>();
        //parameters.Add("CommandParameter", IInteraction);
        IInteractionVoice interactionVoice = parameters["CommandParameter"] as IInteractionVoice;
        parameters.Add("CommandParameter", interactionVoice);
        parameters.Add("Destination", "31001000");
        parameters.Add("Location", "");
        parameters.Add("UserData", new KeyValueCollection());
        parameters.Add("Reasons", new KeyValueCollection());
        parameters.Add("Extensions", new KeyValueCollection());
        parameters.Add("CorrelatorData", "");

        container.Resolve<ICommandManager>().GetChainOfCommandByName("InteractionVoiceSingleStepTransfer").Execute(parameters);
    }

but the call not transfer and show me this error in the log of WDE

16-11-07 23:41:56.488 [ 1] ERROR .BootstrapController - Application.DispatcherUnhandledException
System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at Genesyslab.Desktop.Modules.InteractionExtensionSample.MySample.MySampleView.btn_ITransferencia_Click(Object sender, RoutedEventArgs e)
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
at System.Windows.Controls.Primitives.ButtonBase.OnClick()
at System.Windows.Controls.Button.OnClick()
at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
at System.Windows.UIElement.OnMouseLeftButtonUpThunk(Object sender, MouseButtonEventArgs e)
at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
at System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e)
at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
at System.Windows.Input.InputManager.ProcessStagingArea()
at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

Please, what am I doing wrong? My WDE is version 8.5.110.16

Best regards

The problem is that you create a Dictionary called parameters:

IDictionary<string, object> parameters = new Dictionary<string, object>();

And then without adding anything to the Dictionary you try and get an IInteractionVoice object with a key name of ‘CommandParameter’ from the Dictionary

IInteractionVoice interactionVoice = parameters[“CommandParameter”] as IInteractionVoice;

And so you get an error that they key name does not exist.

You need to find another way to get the IInteractionVoice that you want to transfer.

PeteHoyle explained you very well.

So, you have to get the IInteracionVoice. Try with InteractionManager…

container.Resolve();

Regards.

Hello PeteHoyle and daniel_san,
Please. Your have other code to the transfer ?
Me Can sharing you please.
I used container.Resolve(); but not know how I use this interface.

Best regards

To use the container you have to resolve it on the contructor of the class.

You can see it on the documentation and examples.

It depends where your custom button is located, if it is in the IntearctionView area you can get the IInteractionVoice from the Context:


        public void Create()
        {
            IDictionary<string, object> contextDictionary = Context as IDictionary<string, object>;
            object caseObject;
            contextDictionary.TryGetValue("Case", out caseObject);
            ICase @case = caseObject as ICase;
            if (@case != null)
            {
                if (@case.MainInteraction is IInteractionVoice)
                {
                    IInteractionVoice iv = @case.MainInteraction as IInteractionVoice;
                    if (iv != null)
                    {
                    }
                }
            }
        }