ralphm's blog

Thursday, 20 June 2019

Mobile XMPP And VoIP: Introduction

Scalable, multi-region chat and calling

Little over three years ago, I embarked on an exciting journey on what was eventually announced as the VEON Personal Internal Platform: an iOS/Android app providing chat, voice calling, news, offers, and interaction with a marketplace of business, large and small. Unfortunately, the project was cancelled earlier this year for business reasons I won't go into, and the team was let go. However, during that time, my work has been varied, interesting and challenging. Parts were clearly technical: multi-dc infrastructure, monitoring, alerting, messaging (internal events as well as chat), voice calling, identity management, service discovery, security. But most of my work was beyond just technology. I hired and lead teams, bridged between developers and product, security, support, and especially legal and regulatory people.

This series is mostly about the technical aspects of the chat and voice calling features of the platform, including rich text messaging, groupchat, and contact discovery and management. I will talk about APIs, XMPP, and WebRTC, but within the business context outlined in this post. I will cover most of what's in the slides of my presentation at XMPP Summit 23 in Brussels, with the same title as this series.

The Context

When I came in, I was one of the first internal engineers, with an chat and voice calling platform already in the works by an external team. That existing platform used a custom WebSocket protocol for onboarding, chat, groupchat, and signalling voice calls with (modified) WebRTC. As the project progressed, that system (let's call it the legacy system) built in Erlang and MongoDB, was first augmented with Scala and Python based identity management, self-care, news, and offers features, with HTTP based APIs. Then the legacy system was gradually replaced by XMPP for chat and call signalling (Jingle), and the (unmodified) WebRTC library by Google. The augmented functionality mentioned above was also further developed with additional features.

The Series

This is the list of the posts in this series, in the order they were published: