Messaging API Standards for Cross-platform Chat
When you first hear about Mio and its messaging platform interoperability, it’s natural to think to yourself, this can’t be that hard of a problem to solve?
Aren’t you just a middleman between two APIs?
Well, I am here to tell you that for a multitude of reasons, it is much harder than it looks.
The major reason I will be discussing today is a lack of standards.
Messaging Standards are a Thing of the Past
The days of common standards, like XMPP, for interoperability between messaging platforms are long gone.
In the newest iteration of workplace communication tools, Slack and Microsoft Teams have emerged as the heavyweights.
While both have embraced extensibility, neither has done so in a way that embraces or accepts common cross-platform standards.
Honestly, why would they?
They are battling each other for a land grab opportunity in a growing market with a winner-takes-all mentality.
With that mindset driving product development, it’s unlikely either will conform to a common standard in the near future.
Mio to the Rescue
The void of commonality presents our engineering team with a series of challenges while stitching the two platforms together.
Examples of this include non-standard implementations of markdown all the way to “how do I make sure we properly handle translations of Slack custom emojis?”
Then there is my personal favorite: creating feature parity across platforms for multi-person messages.
To give you some more insight into what it is we do at Mio, I am going to take you through some examples of how we handle a simple cross platform emoji translation.
Emoji Translation from Slack to Microsoft Teams
On Slack, I send a message with an emoji.
The raw message gets delivered to Mio.
As you can see, Slack represents the thumbs-up emoji as “:+1:”.
Now I send the same message from Microsoft Teams.
And Mio receives the raw message.
There are a couple of things to unpack here…
First, the raw message format is in an HTML format, and the emoji itself extracted from the broader HTML message is:
Second, the emoji image is a static custom Microsoft image.
You can’t see it in the still static version of the image, but on the Microsoft Teams client, their thumbs up is interactive.
They enable this functionality using HTML/CSS interactions with the span wrapper around the emoji image in the HTML.
One way to solve this would be to create a map linking “:+1:” to that hardcoded HTML block and recreate that for every emoji pairing on each platform.
However, Microsoft gives us a key clue toward a more universal solution in the alt tag.
The thumbs up emoji on Slack translated to Unicode is “U+1F44D”, which just so happens the exact Unicode that Microsoft gives us for alternative usage.
With this information, we can use these Unicode values as a two-way map that translates Slack shortcodes to HTML encoded symbols that can be used on Microsoft Teams and vice versa.
Luckily, for me and the brevity of this example, thumbs up is one of the Unicode universal emojis.
The problem becomes much harder to support when you introduce emojis without Unicode intermediary values, like Slack custom emojis.
At Mio, we’ve spent time carefully solving the edge cases and capturing and mapping the different idiosyncrasies each platform has in this non-standard world.
Before you spend considerable resources reinventing the wheel, make sure you take a look at our solution.