Run external application AFTER transfer

Status
Not open for further replies.

RobertGijsen

Forum User
Joined
Dec 17, 2020
Messages
21
Reaction score
1
Using the Advanced --> Behavior --> External Application we can launch an application when the phone rings. For now, I have it start an application that simply shows the parameters that are given, just to see it running. It it set to 'Notify when ringing' and that works when it rings.
But the goal is to have this start an executable that control an on-premise CRM installation. Usually the call is answered by the receptionist, who then transfers the call. This means initially the agent sees the internal number of the receptionist, and that's where the External Application starts with. Now, when the call is transfered, the agent actually sees the callers number, so that transfers through fine.

Is there a possibility to have the 3CX Windows application, AFTER a transfer as well? I tried setting to 'Notify when connected' but that doesn't trigger the executable at all.

If not possible with the 3CX Windows application, is there another way to trigger something after a transfer took place?
 
Hello Robert,

As you've pointed out, the initial transfer will show the receptionists details, followed by the caller's details after the transfer is complete. Instead of having this launch after, why not write a script that does not launch if the number of digits of the call are less than X digits in length?

You can create a .bat file that runs when the call comes in, which via logic you've included will not run if the incoming character are less than 3 or 4 digits long (as an example), therefore running when the transfer is complete as it contains the full number of the external caller.
 
Hi, thanks for your reply. Well, I can script whatever I want, but the 'external application' launches ONLY when the phone rings - ie. when the receptionist is doing an attended tranfer (blind transfers work fine). Then when the transfer is actually completed, the agents' phone actually shows the correct number, but the external app is not triggered.
So, I can only get the external app to run when the %CallerNumber% is 001 (which is the receptionist number).
I would certainly make a little script IF I got the external appication to run when a call is transfered as well (attended transfer that is).
 
Hi Robert,

Can you confirm that the external application is set to notify when 'connected' rather than 'ringing'? Would you mind testing that to see?
 
As stated in my first post, when I set it to 'connected' the configured executable does not fire at all.

[edit]
I just found out why too. It does work when I set the 3CX app to CTI and select my Yealink deskphone, and answer it using that. Than it runs when connected. However, the customer uses the Chrome Webextension. So they select CTI, in the selection the webclient does not show up, but the webclient still responds. When picking up through the webclient though the executable is NOT triggered. Only when I select a deskphone and answer through THAT deskphone.

Now the customer wants to get rid of his deskphones and only use softphones, so that's an issue.

Apart from that, if it would work, I'd really appreciate 2 seperate settings that can both be configured for ringing and connected. Because when you directly get a call from an external number, you might want your CRM to respond immediately before answering so you have the correct customer information in advance.
However, when you get a call transfered that doesn't work, because we then need to trigger on 'connected'.

So it would be very welcome to be able to set both settings at the same time, and not only one of them.

But the main issue now is that this does not work when using the Windows client as a softphone, or the Chrome extension as a softphone. The 'connected' setting does not trigger in that case.
 
Last edited:
The 3CX Windows app is specific to the Advanced Settings -> Behaviour route. It will not trigger the soft phones to launch an app.
You when creating an extension, you'll receive a link to log you in to the Web Client. The softphones can pass information to your CRM via the Web Client under Settings -> Integration.

We've tested both (windows client and chrome extension) and they works as expected. If you're unable to get this working may I suggest contacting support to further troubleshoot?
 
Ok, a little context here.

Our core-business is running RDS environments for our customers. Customers clients are NOT in the same LAN as 'their' servers, but they connect over the internet using RDP over HTTPS (so through RD Gateway) to their RDS sessions. Since a short time we offer 3CX as a VoIP solution. However, voip on RDS / Citrix is a crime as there are always delays in audio. For this reason the client wants to use the Chrome extension as that a convenient way to call from home as well during the pandemic we are in now. They want to get rid of their deskphones, save the receptionists one.
As for this customer (and it's our first 3CX customer) the application is an on-premise application, that runs within our environment, and its CRM integration exists in the form of an executable that can be ran with basically a phone number as parameter, and it'll open the callers client-card if found.

As that CRM appication also uses TAPI to do outbound calls, we've also installed the Multi Line Tapi driver on their RDS. This means the 3CX Windows Client gets installed automatically.

So: There is a remote (in LAN terms) RDS running the 3CX Windows Client and the CRM software. The 3CX Client on the server can respond to ringing - but sometimes that's not wanted (but we could indeed script around that). It can respond when connected - but that does not work when the webclient takes the call rather than the Windows client itself or the selected deskphone.

The Webclient DOES have integration support, but only in the form of sending a HTTP request to somewhere. That would mean I'd have to build a HTTP listener specific for this, as the CRM does NOT have that, being not a web-based CRM.

So what we'd want is the Windows client to respond when the webclient gets connected. As it immediately reflects the state of an extension when it's connected, calling, free, busy or whetever state, my assumption is the Windows client DOES know all it needs to know. I can't easily use the CRM integration of the webclient as that would require writing additional software, while the Windows clients should be able to do it in this situation.
 
I have to admit that I can't entirely get my head wrapped around the problem, but I can offer a number of possible solutions. 3CX Phone for Windows does support a plugin interface. Yes, it is more programming. But I assume the connected event would be captured by the plugin and could invoke the necessary code to notify your CRM.

Alternatively, you could use the 3CX Call Control API to subscribe to events that are then pushed to your own client application running on each PC, and that client application could then push the needed information to your CRM. This is even more code.

Lastly, depending on the capabilities of your CRM, you may be able to push a server-side event to the CRM and have the CRM update the appropriate client (We did this with Zendesk for example).

All that said, each of these options entail additional programming... if you can not get 3CX Phone for Windows to work as needed.
 
Thanks. Ok, I'll try to explain again. Remote Desktop server is in the cloud. Users do not have a VPN to their server, but connect over the internet to their workspace. Within that RDP session runs the Windows Client, that can talk to the CRM client (that's installed on that RDS as well) through the external application triggered by the 3CX Windows client. However, the actual phone they make calls with is locally on their desk - be it a deskphone or a softphone.
So the crux is that the Windows client should be able to respond to actions (pick up phone for example) of a remote phone.

I'm not shy of programming something, but there's two things here; at first, the Call Control API documentation is not available. 3CX themselves more than once told people to use the Call Control API for certain functionality, but at the same time they tell people documentation is not available anymore. Example: https://www.3cx.com/community/threads/3cx-call-control-api.64664
So that's a 100% miss from 3CX and I simply don't understand how they dis their customers like that.
Second; the CRM does NOT accept any requests other than from it's 'ExternalCall' executable. So if that's the way I'd have to create a listener that interprets calls and then runs the executable. But that would also mean I'd have to find out which user the request was send for, and on which RDS he is currently working when they have more. Doable, but it's so much easier if the Windows client could just do it.

That leaves your first option open; 3CX Windows client supports plugins. I searched for it but I cannot find any information. As the Windows clients runs in the RDS session and in the context of the user we want to do something for, that would certainly be the prefered route. Where can I find information on how to create plugins?

[edit]
using Google I just found SOME documentation. But as far as I can see so far is that the CallControlAPI can be used only from the 3CX Server. Which is a hosted one by our 3CX distributor, where we don't have terminal access. Gonna be hard to use it if that's the case.
 
Last edited:
Thank you for clarifying. I understand your situation and it's unique nature. The launch application option is mainly designed for when the actual client is being used in softphone mode, which cannot be used in your case because using it in softphone mode via RDS is not recommended.

If you'd like to create custom plugins, see this guide: https://www.3cx.com/docs/crm-integration/
 
The link provided by VasilisV_3CX is for the server-side integration. That will not help for this situation. What we have been talking about is a client-side solution (including a 3CX Phone for Windows plugin). Unfortunately, 3CX has pulled both the plugin and 3CX Call Control API documentation. Further, since I posted the above, 3CX has said in another post not to use this API because "it has been depreciated". Sigh...

We developed a number of 3CX Phone for Windows plugins (Autotask, Connectwise, Zendesk, VTiger, SugarCRM, HubSpot, Bullhorn, to name a few) but felt compelled to withdraw these tools when 3CX depreciated their plugins because we do not know whether this technology will continue to be included with 3CX Phone for Windows in the future and did not feel comfortable offering tools that could be rendered inoperable by 3CX.

So, I think we are left with one remaining option, and unfortunately this is going to sound self-serving. We developed our own API for 3CX. Essentially you install a "relay" agent on the 3CX server (Windows or Linux) and this relay can push events to applications who have subscribed. In other words, you create a small client-side agent that subscribes to events and pushes the necessary information to your CRM when required (ringing, connected, dropped, transferred, etc.).

Because this "agent" is installed in the users profile, it is not dependent on any client (Windows, Web, iOS, Android, or physical phone) it does not matter where your phone resides, or what phone you use. And if 3CX changes how any of their clients work, it will not impact this integration. We have full documentation for our REST / SignalR API.

Having said all that, 3CX has announced a new REST API / Gateway service for future release with 3CX V18. We have no information on when the new features with be available, or what their capabilities will be, but you may want to keep a close eye on this announcement... maybe this is why 3CX has withdrawn their documentation, and support for the plugins. Maybe something better is about to become available!
 
Status
Not open for further replies.

Forum statistics

Threads
112,349
Messages
592,026
Members
165,512
Latest member
gmacinit