GroupMe isn't like the worst chat app ever made, but it's pretty close. Read receipts don't sync, sometimes the official clients forget certain chats exist (especially direct messages!), and there's so many inconsistencies and bugs between the different official clients. Oh, and how many times have users asked for a search function?
I'm sick of it. I'm sick of everybody on campus using GroupMe instead of something like Slack.
What if everybody used Slack?
What if they did without even knowing it?
What it does
SlackMe is a disgusting amalgamation of GroupMe's and Slack's APIs that allows me to see GroupMe messages inside Slack. Slack's superior message management and search ability, combined with SlackMe, will hopefully make for a better GroupMe experience.
After all, it's not like they set the bar very high.
How I built it
I started by experimenting with GroupMe's push tutorial inside of Insomnia, my preferred web requests client. I began with HTTP long polling, then moved on to connecting to GroupMe's Faye instance over WebSockets. To test out working with their WebSockets API I used websocket.org's Echo Test.
From there I tried to smush that into Node.js. I chose Node because it's something I've always wanted to learn, and this was a pretty decent excuse to learn it. Additionally I was thinking of deploying SlackMe on Zeit's now, which [used to] prefer Node. After mucking about with Axios and ws, I had a basic read-only client that let me see different GroupMe events such as incoming messages, new logins, and likes.
Next I had to get that into Slack somehow, since that was the whole point of SlackMe.
Slack has an incoming webhooks function, but I soon discovered that it would be tedious to maintain different webhooks for different channels. So I mucked about with their REST API and was eventually able to get text and pictures sent to GroupMe sent in Slack as well.
Challenges I ran into
- Wrapping my head around Node's asynchronous...ness
- Making up missed lectures and a midterm on Saturday
- The only documented part of GroupMe's push API is connecting to it, and figuring out the rest was a challenge
- Speaking of which, you have to reset the connection every hour apparently
- This limiting human form that requires sustenance and sleep
What I learned
- Avoiding callback hell in Node
- Bayuex protocol
- GroupMe's "lovely" API
What's next for SlackMe
- Using Slack outgoing webhooks to send Slack messages to GroupMe
- Deploying to somewhere that isn't my laptop (I snagged friendsisthebestsit.com from Domain.com to use for my incoming webhooks)
- Separating GroupMe chats into Slack channels
- User-friendly OAuth instead of manually passing around keys
- Adding additional features like likes, polls, and calendar events