My first experience with Intercom

I recently had the pleasure to work with Intercom the first time in my life — and eventually decided to not use it in the end. That said, intercom is a great piece of software. It has a superior support team, fair pricing, a good documentation and is super easy to integrate — it just didn’t fit our requirements, but may fit yours. I started this article because I had a medium tab opened when I started integrating and basically dropped noted here whenever i faced a problem. Now there are enough of them to write an article about.

Integrating Intercom into a meteor/node app

I couldn’t find any up to date packages. There is meteor-intercom but it uses underscore and sessions. A lot of people integrate Intercom into their apps so it can not be that complicated, can it?

The Server side

On the server-side we basically have to do two things for a basic setup*. Calculate a unique hash for the current user and publish it to the client.

Meteor.publish('currentUserIntercomData', function() {
if (this.userId) {
const intercomHash = crypto
.createHmac('sha256', new Buffer(secret, 'utf8'))

if (intercomHash) this.added('users', this.userId, { intercomHash: intercomHash });

That’s it! We decided to add some hooks to sync user data, but it doesn’t get much more complicated.

*actually you don’t have to do this at all and could live without a server-side in case you only want to communicate with anonymous users.

The client side

For client side integration it’s enough to add the loading script they provide and boot intercom. I ended up creating a small react component which does pretty much Intercom('boot') on mount and Intercom('update') on route changes (required to make intercom aware of route changes on SPAs).

We’re done intercom is integrated and we can actually start creating awesome auto messages!

The bad parts

Intercom UI/UX is very thought trough. Everything is super responsive and the things that are possible are designed in a pleasant manner. The mobile app is also pretty neat. I’m personally a huge fan of the A/B testing feature for messages. This article will only tackle the bad parts, not because there are no good parts, but because there exist a lot of positive articles about intercom already and I don’t feel like it’s necessary to cover them again. It’s not meant as an Intercom bash, but as a warning for users who are considering intercom.

What’s following is a listing of things which made us not use Intercom. Some of them may have workarounds, but at some points we would have more workarounds than working stuff :)


We hoped to get rid of our custom solutions and switch over to Intercom for everything around customer messaging.

Intercom provides basically 3 types of messages from a developers perspective.
segment based messages: messages which automatically get set to a user which matches a certain set of rules and logs out off the application before he leaves the segment.
event based messages: actually very similar to segment based messages, but having an event selector in the rule set. Events are sent to Intercom via rest or whatever endpoint you use, so you could send an email for users which are female and invited a friend. The gender is synced in the user data, invited a friend would come as event.
admin initiated messages: this is basically the manual approach like you would do with mailgun — not using any cool intercom features, besides storing the message as conversation with the user.


There are basically three fundamental problems we faced when trying to implement our messages.

rulesets are primitive: You can only chain all rules with “and” or “or”, nothing in between. This is sufficient for some cases, but insufficient for others. The specific case here was that we wanted to send a message on two different pages. It seems like the only possible way is to either create two messages and accept that some users might get it twice, or create an endless chain of is not conditions for all the other pages.

the message template system is limited: basically all you can do is write static text and add variables with fallbacks. When you e.g. want to have different salutation based on gender you have to create two different email templates. A simple if/else is not possible.

emails are only send once: In most cases this makes a lot of sense as we don’t want to spam our users. When welcoming a user to your platform you only want to send the message once. In some cases it makes sense to send a message multiple times — e.g every time a user invites a friend we want to write him a thank you mail or similar. This is simply not possible.

Admin initiated messages to the rescue. The support team frequently suggested to use admin initiated messages as it’s basically the manual way of doing things and allows you to do anything you want. While this is true — you are not restricted by rules/templates, it’s again limited:
You can select from two predefined templates which you use to inject your body into. Using your own template isn’t possible.
You always have to specify an message author (one of the admins) as Intercom will handle the message as conversation and a conversation needs two partners.


The messenger is basically an iframe which embeds to your page. Sadly the customization options are very limited. Adjusting the width is not possible without workarounds. Also a major bummer was the missing possibility to turn off the gif button. It’s not that I personally don’t like gifs :) but it seems inappropriate for our target group.


Intercom provides a test-app for each Intercom app, so you can test your auto messages before releasing them into the wild. Actually I didn’t expect such a feature and was positively surprised! So whats the problem? There’s no syncing or import/export functionality implemented. So whenever you test some new message or try to optimize it on test app you have to copy paste them over to the production-app. We did this with a very small set of messages ~20 and already had a lot of errors, because copy/paste actually means “open another tab and clicking through various menus to set the appropriate flags in a message creation dialog”.

Github Integration

Intercom allows to create tickets from conversations and automatically updated the state inside the conversation. This feature is actually super cool and I would definitely use it for a project with a public issue repository. The problem is, they don’t generate the tickets via api like ci bots do, but instead use the logged in user itself — meaning we would have to create github accounts for all support staff members and give them full repo access to allow them creating tickets.


i18n is a major pain point caused by the points mentioned above (no conditionals in templates). I18n in Intercom is restricted to the app. The auto messages aren’t langauge aware at all. If you want to write a different mail for german and english users you basically have to set it up twice and try to ensure they don’t get both.


I’m still using Intercom for some stuff. I feel like it’s is especially useful/usable for soft realtime interaction with anonymous users — not necessarily for all about customer messaging.



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store