Augmenting Zoom functionality with Voximplant to get premium functions. Part 1

Zoom is a perfect example of market disruption, it appeared on the market where big players had serious install base and where it seemed not that easy to compete with them, but because of its great product company was growing very fast, replacing old and ugly solutions. Still there are always things that can be improved (nothing/nobody is perfect :) For example, Premium Audio package’s (that adds PSTN call-out and some additional features) price starts from $100/month according to https://zoom.us/pricing , while H.323/SIP Room Connector’s price is $49/month/port. Keeping in mind that Voximplant supports SIP and can be used to build any reasonable call scenario, it makes sense to establish connection between Voximplant and Zoom and implement call-in/call-out functionality without Premium Audio.

Setting up Zoom

The first and the only thing we need there is to buy H.323/SIP Room Connector what can be done at https://zoom.us/billing after login. We need only 1 port since we will have only one SIP call between Voximplant and Zoom, while all other actions related to communication with PSTN will be done on Voximplant side.

Setting up Voximplant

The scheme of the whole solution looks as follows:

The idea is to build web interface that will let us connect Voximplant to particular Zoom conference and then connect additional participants using PSTN call-out or let them connect with call-in using (in this example) Voximplant’s sandbox phone numbers. Web SDK can be used to build WebRTC conference client, but unfortunately it’s possible to connect only 1 participant this way (1 port), additional participant will require additional payment for H.323/SIP connector port. We will implement web client anyway, just to show this functionality which can be rather useful — all modern browsers support WebRTC (Safari 11 is nearly there :)

Get your free developer account at https://voximplant.com/sign-up/ , after the account is activated — log in to the control panel at https://manage.voximplant.com

  1. Create Voximplant application in the Applications section, let’s call it zoomconnector
  2. Go to Scenarios and create new scenarios ZoomBridge and ZoomCall-In with the following content:

https://gist.github.com/aylarov/03393f30de431a7a430ab244f37e4a16

3. Now it’s time to buy a Sandbox phone number for Call-Ins processing. It can be done at https://manage.voximplant.com/#numbers , just click on the switch to change Real phone numbers to Test phone numbers and choose the number you like. I bought 699100266 from Gotham City :), Sandbox numbers (unlike real numbers) are used with special PSTN access numbers — you will see the list of them at the same page. Assign the number to our application (zoomconnector):

4. Now it’s time to setup applications rules — they explain which scenarios should be used to process calls, go to Applications → Edit zoomconnector application and open Rules tab and create 2 Rules:

One rule will be sending calls that came to the sandbox number to Zoom Call-In scenario for processing, while second one will send all other calls (including outbound call from Zoom Call-In scenario) to ZoomBridge scenario that implements connector with Zoom. Please note that Rules order is important.

5. That’s it! We are ready to connect Voximplant to Zoom meeting.

First, start Zoom meeting from the Zoom app.

You now have Zoom Meeting ID that can be used for connector. So there are 2 ways of connecting:

  1. Make call to one of the access numbers, let’s say to +19292240694 and enter the sandbox number 699100266 , after our Zoom Call-In scenario starts it will ask to enter Zoom meeting number — just dial the meeting id and it will call ZoomBridge that will create audio conference and connect it to Zoom meeting. Up to 100 participants can join from PSTN to this meeting.
  2. Make HTTP API call (StartScenarios) , see http://voximplant.com/docs/references/httpapi/#toc-startconference that will launch ZoomBridge scenario — it will be connected to Zoom meeting , but there won’t be any participants until somebody calls in or we use call-out feature we programmed in the scenario.

Here is the image of established connection between our conference and Zoom meeting

PSTN Call-Out

So how can we do PSTN Call-Out? After ZoomBridge scenario executed there is a VoxEngine session with audio conference connected to Zoom meeting, if you check the ZoomBridge’s code you will see there the following piece:

After VoxEngine session started it can be accessed using media_session_access_url , if you make HTTP request to this URL AppEvents.HttpRequest event will be dispatched. We can pass data to the scenario to do something, in our case we will be making outbound call to PSTN and connect the call with our conference (which is already connected to Zoom meeting)

So when we have media_session_access_url either from StartConference HTTP request or from VoxEngine , see accessURL at http://voximplant.com/docs/references/appengine/AppEvents.html#AppEvents_Started , we can use it to do PSTN Call-Out requests. Just as an example: http://66.242.4.112:12092/request/9a48d59ba4a31e91.1500477013.141859_66.242.4.112/c9b00ac050c23edc/CallOut/18001234567

P.S.

In the next article I will write how to connect web client built using our WebRTC-enabled SDK to our conference/meeting and some other useful tips and tricks about call recording , speech recognition, etc. It will augment the functionality of the connector even further.