Jump to content
Pulseway 9.14 🔥

Featured Replies

Posted

Not sure how many people use 3CX for their phone systems, but our company utilizes the system and have recently adopted Pulseway as well. As a result, I have developed a plugin for 3CX Windows Client that opens a ticket as you pick up the phone from an incoming call. I have included the source code for reference if anyone else has a need for it.

Instructions:

  1. Create a new project. Select C# Language and create a new “Windows Class Library” project.
  2. Ensure that the project targets .NET Framework 4.5.1
  3. Add a reference to the library “MyPhoneCRMIntegration.dll” installed with 3CXPhone for Windows (usually C:\ProgramData\3CXPhone for Windows\PhoneApp).
  4. Rename Class1.cs to PulsewayTicketPlugin.cs and replace the code with the following:
using System;
using System.IO;

namespace _PulsewayTicketPlugin
{
    [MyPhonePlugins.CRMPluginLoader]
    public class PulsewayTicketPlugin
    {
        // Initialization of Variables
        private static PulsewayTicketPlugin instance = null;                                        // Holds the instance
        private MyPhonePlugins.IMyPhoneCallHandler callHandler = null;                              // Holds the handler
        private static MyPhonePlugins.CallState lastStatus = MyPhonePlugins.CallState.Undefined;    // Holds the last relevant phone status

        // Called upon loading 3CX Client
        [MyPhonePlugins.CRMPluginInitializer]
        public static void Loader(MyPhonePlugins.IMyPhoneCallHandler callHandler)
        {
            // Create a new instance of the plugin
            instance = new PulsewayTicketPlugin(callHandler);
        }

        // Constructor for plugin, to add event handler
        private PulsewayTicketPlugin(MyPhonePlugins.IMyPhoneCallHandler callHandler) {
            this.callHandler = callHandler;

            // As the status of the call changes, process the changes
            callHandler.OnCallStatusChanged += new MyPhonePlugins.CallInfoHandler(callHandler_OnCallStatusChanged);
        }

        // Processes the status of the call
        private void callHandler_OnCallStatusChanged(object sender, MyPhonePlugins.CallStatus callInfo)
        {
            // Process the current state
            //   - If it is ringing, a call is incoming, so we want to monitor it
            //   - If it has ended, no longer need to monitor it (happens when we end it or someone else picks it up)
            //   - Don't process other cases, not necessary
            switch (callInfo.State)
            {
                case MyPhonePlugins.CallState.Ended: { lastStatus = MyPhonePlugins.CallState.Undefined; break; };
                case MyPhonePlugins.CallState.Ringing: { lastStatus = MyPhonePlugins.CallState.Ringing; break; };
                default: { break; };
            }

            // If the phone was ringing and we picked it up, open a new ticket
            if (lastStatus == MyPhonePlugins.CallState.Ringing && callInfo.State == MyPhonePlugins.CallState.Connected)
            {
                // Windows will automatically use the default application used to open URL's
                System.Diagnostics.Process.Start("https://psa.pulseway.com/MSP/TicketEdit.aspx");
            }
        }
    }
}
  1. Build the DLL and place it into the 3CX Phone Directory (C:\ProgramData\3CXPhone for Windows\PhoneApp).
  2. Edit the 3CX Phone Configuration file (C:\ProgramData\3CXPhone for Windows\PhoneApp\3CXWin8Phone.user.config) and add the following:
<add key="CRMPlugin" value="CallNotifier,3CXPhoneTapiPlugin,PulsewayTicketPlugin"/>
  1. Reload your 3CX Windows Client and it should work with the next incoming call!
  • 1 year later...

Create an account or sign in to comment