Invite New Users Feature

In order to increase Rocket.chat adoption, its really important that users are able to easily send an invite to rocket.chat to their friends.

The standard way to do this on mobile phones is for the Invite button to list the users contacts from their address book and then for the user to choose that contact and then for the default messaging app on the phone to be launched and a message to be sent. On Telegram the message is:

"Hey, I’m using Telegram to chat. Join me! Download it here: https://telegram.org/dl."

This approach is fine but it has some drawbacks:

  1. it requires access to the users contacts/address book
  2. the invited user then needs to not only download the app but also find the person who invited them, which involves knowing their username.
  3. Though the inviting user can edit the prepopulated message before sending it, it does not encourage the sending of a customized message to the invited user, which I think would increase the likelihood of the invited user joining and responding. Imagine if the the message instead was “Hey Joe, do you think the Chicago Bulls will be any good next year? Let’s discuss over Rocket, etc.”
  4. The invite can only be sent to a single user as opposed to a broadcast message to a group of friends or to twitter or facebook.

I’d like to propose another mechanism that leverages the “share” feature that is available on both Android and IOS. Note that when I click “share” then the OS shows me all the different apps that support sharing. On my Android phone it looks like this (apologies to my friends who are listed here):

In addition to one-to-one messaging, many of these apps support sharing with a group or in a broadcast mode such as facebook/twitter. Before launching the “share” functionality, we can prompt the user to send a personal message. Additionally, instead of asking the user to download the app, we can just point the user to the direct message chat or the channel/private group that the user happens to be in. So, for instance, if I have a channel active with my friends discussing the Chicago Bulls prospects in 2019, then I can invite a person or persons to join in that group by simply including a URL to the web version of that group: https://open.rocket.chat/channel/chicagobulls for instance. This way the message will look something like:

Hey Joe, so and so thinks that the Bulls are going to tank again next year. No way! Help me convince them they’re wrong. We’re discussing here: https://open.rocket.chat/channel/chicagobulls

The invited user will then only need to register an account and he/she will get right into the discussion and start using Rocket. They can keep using the web client or, if we implement this feature Mobile app install banners, they will be prompted to install the app if they are accessing from a mobile device.

In general this proposed approach involves less friction for the invited user as well as solving the other problems with the standard invite approach listed above.

Lastly, whether we go with the approach I describe or the standard approach, I would love to see invite functionality added to the web and mobile clients.

Thoughts?

Actually this is exactly what Kik does. It uses the “share” functionality and then allows the user to send the following via whatever app they want:

Hey! I’m on Kik - my username is “bizzbyster” kik.me/bizzbyster.

I’d like to see this same feature in Rocket chat but can do it in my fork and then the team can decide whether this feature is taken or not.

I think the biggest pain point for explaining RocketChat to newbies is that it isn’t just one centralized server, so joining open.rocket.chat after looking up RocketChat doesn’t mean they’re going to be able to speak with the community of our server.

What about adopting Discords invite feature where it creates a time sensitive (that is adjustable) link to the server. However in RocketChats case, the link would need to link to a sign-up page for the server.

Another thing to consider is to how to manage this feature with private communities that do not have their registration open. Maybe a 1-Time use, Time Sensitive link that leads to a sign-up page for the server.

In my opinion the Rocket.chat client should skip the part about prompting the user for a server URL and just login to open.rocket.chat.

See All users connect to open.rocket.chat by default and Combining multi-server view in Rocket.chat client.

@Shailesh351 pointed out that we could leverage this functionality. https://firebase.google.com/docs/dynamic-links/use-cases/user-to-user

All,

I think firebase dynamic links are a really cool way to send users an invite that then prompts them to install the app and then takes them to a DM with the inviting user. Or to a group or to a DM with a bot. But I know that others are working on some of this deep linking (https://rocket.chat/docs/developer-guides/deeplink/) and I don’t want to jump to a solution that requires Firebase so for now we are going to break this into two pieces:

Phase 1. Implement invite functionality in Android that leverages the “share” function on the device to allow them to send a message to a friend using any app that implements the share intent. That message will instruct users how to get the app and to DM the inviting user. It will be similar to: “Hey! I’m on Kik - my username is “bizzbyster” kik.me/bizzbyster”.
Phase 2. Continue discussions to support firebase dynamic links (or some other deep linking across install mechanism) to make this process less manual.

Hope this makes sense.

@rafael.kellermann @gabriel.engel @sing.li if you are onboard with the above phase 1, it’d be great to get some input on the UX approach for inviting users. Is it in the nav drawer?

I think we have something kind of similiar in progress. Not as short. But basically extending deeplink. Being able to have a link like: go.rocket.chat/room?host=foo.bar.com&rid=1234&path=group/important

1 Like

Thanks @aaron.ogle. That’s good to know. That appears to be a different mechanism from what is documented here: https://rocket.chat/docs/developer-guides/deeplink/. I’m going to start another thread specific to deep linking.

1 Like

More discussion on deep linking here Improved deep linking support

@aaron.ogle Agree with you. Defining standard host url for Rocket.Chat is required for Android implementation. Because app provides multi server functionality. In android to implement deep linking we need to provide intent-filters for the host in advance, which in multi server app is not possible(because we don’t know host url in advance).

If we can provide standalone app for one host than we can get this working without standard host.
What about generating standalone app for particular host by making android app generator? Which will take host url as parameter and will give apk file for that server. Just like https://github.com/fossasia/open-event-droidgen

@Shailesh351 initial implementation can be viewed here: https://github.com/WideChat/Rocket.Chat.Android/pull/91.

Again, this is just the first step and does not include any server side support or any deep linking.

Please post your thoughts/comments here.

Thanks!

1 Like

“Phase 2. Continue discussions to support firebase dynamic links (or some other deep linking across install mechanism) to make this process less manual.”

We are implementing this and will have a pull request shortly. As part of implementing it, we will also implement parts of this spec that are not yet implemented on Android – https://rocket.chat/docs/developer-guides/deeplink/.

Hope there is general agreement about this approach.

Thanks!

Peter

1 Like