We’ve provided real-time chat support since Stripe launched. Our experience using other services has made us big fans of receiving immediate interactive help and avoiding email round-trips. Chat is a richer experience: a question might have a simple answer, but the best answer might be that something else should be done differently. Dialog helps to draw that out. Multiple people, including other Stripe users, might have suggestions. Answers to questions can in turn lead to more questions. And, everything else aside, it’s very satisfying to get an answer in 30 seconds rather than having to constantly check your email for a response.
If you’re a regular in our chatroom, you might have noticed that it now looks much better. The changes aren’t limited to the design, though. Over the past few weeks, we’ve rebuilt our chat infrastructure from the ground up.
Most importantly, Stripe Chat is now fully integrated with the rest of Stripe. Since you’re now identified by your Stripe account, we can provide account-specific help in debugging—we can instantly and securely investigate logs for common problems, take a look at your payment form, or follow up by email if you have to leave. If you have account-specific questions, we can now invite you into a private one-on-one chatroom, and the conversation happens over a secure connection to Stripe’s servers.
In addition, many developers—including those at Stripe—keep an IRC client open throughout the day. We wanted to support this use-case with Stripe Chat, so the new Stripe Chat is built atop IRC: you can now simply join #stripe instead of keeping a browser window open.
Under the hood, we’ve made Stripe Chat much more responsive. With our old chat infrastructure (built atop Campfire), your question could take a few seconds to appear in the chatroom after pressing "Send". Messages that you send to Stripe Chat appear in under 100ms, which greatly improves the flow of conversation.
Users who join via the web interface are connected to a web chat server using socket.io. This server announces their presence to the IRC server and bidirectionally forwards messages between their sessions and #stripe. IRC users see web users as just another client.
The web chat server acts as another IRC server on our IRC network. (For more details on how this works, see RFC 2813.) This means that it maintains only a single connection to our IRC server, and uses that to multiplex all messages. In addition to being faster than having an individual connection per client, this lets the web chat server perform useful administrative tasks such as automatically giving IRC operator privileges to Stripe staff members.
⁕ ⁕ ⁕
We launched this new chat platform a few weeks ago, and we’ve been very happy with how it’s worked out so far. If there’s interest, we may open-source the code in the future. And if you have any feedback or suggestions, you know where to go.