There is no simple way to do this built into 3CX.
It is possible to monitor real-time events using the 3CX Call Control API. You would have to passively monitor for new connection events, and then watch for corresponding delete events. A more brute-force method would be to actively query for "active connections" periodically. This method is a pretty resource demanding API and should be used sparingly. Both of the above approaches requires significant 3CX development experience and is not something you should attempt to tackle unless you are ready to invest a lot of hours.
Even with our VoIPTools APIs, while far simpler than working directly with the native 3CX API, still requires a modest level of .Net C# expertise. You would need to subscribe to SignalR events (3CX connection events), or use our REST API to get a list of active connections (phone calls). Using the REST API is be fairly simple (for a programmer), but as I said this API should be used infrequently. For example, do not query this every second. Maybe once a minute would be OK.