MaxITGarrett Posted May 31, 2018 Posted May 31, 2018 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: Create a new project. Select C# Language and create a new “Windows Class Library” project. Ensure that the project targets .NET Framework 4.5.1 Add a reference to the library “MyPhoneCRMIntegration.dll” installed with 3CXPhone for Windows (usually C:\ProgramData\3CXPhone for Windows\PhoneApp). 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"); } } } } Build the DLL and place it into the 3CX Phone Directory (C:\ProgramData\3CXPhone for Windows\PhoneApp). 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"/> Reload your 3CX Windows Client and it should work with the next incoming call! karbonphyber, Paul and flydev 2 1
Administrators Paul Posted May 31, 2018 Administrators Posted May 31, 2018 Thanks Max for sharing this with everyone . -Paul
MaxITGarrett Posted May 31, 2018 Author Posted May 31, 2018 Of course! I have some more snippets to share on the API side of things as well. Paul 1
Gary Haberl Posted June 3, 2018 Posted June 3, 2018 FANTISTIC. Yes we use 3CX, and will look at this. Thank you. MaxITGarrett 1
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now