Sendbird Migration

Migrating data from Sendbird to Stream Chat is easy. Sendbird lets you export chat data from your account. The Stream Dashboard supports importing data exported from Sendbird.

When rebuilding your chat functions with Stream, there are some key differences to keep in mind.

Channel Types

Sendbird has 2 channel types:

  • Open channels

  • Group channels

Stream Chat has 5 built-in channel types:

  • livestream

  • messaging

  • commerce

  • gaming

  • team

Stream Chat also supports creating your own channel types. This allows you to configure the features and permissions to exactly fit your use case.

Usually, you’ll want to use the “livestream” chat type if you’re using a Sendbird open channel.

Channels

Instead of the getChannel and channel.enter, Stream uses 1 API call to both get and enter a channel.

The concept of UserMessage and FileMessage in Sendbird is replaced using a Message with a list of attachments.

Thumbnails

Sendbird requires you to specify different thumbnails up-front. Stream lets you request different image sizes at read time.

Private vs. Public Groups

This difference is handled by Stream’s permission system. You can allow or not allow non-members to edit the list of members for a channel.

You can query users

Realtime sync from Sendbird to Stream

This feature is only available on Stream’s Enterprise pricing plans. Request the Stream team to enable this feature for your app by contacting support.

Stream enables real-time data synchronization from Sendbird through webhook integration. When used together with Stream-to-Sendbird sync, this allows for a gradual migration to Stream, ensuring everything functions correctly. This approach is particularly useful when you can’t control user upgrade timing, such as with mobile apps.

Setup

To begin synchronization, provide Stream with your Sendbird app ID and token. Once Stream enables the sync, configure your Sendbird webhook URL to https://chat.stream-io-api.com/sendbird/webhook?api_key=<YOUR_STREAM_API_KEY> in the Sendbird webhook configuration page.

Stream processes each incoming Sendbird webhook by storing its payload in a persistent queue. This enables webhook replay if failures or misconfigurations occur, while guaranteeing chronological processing of events without any out-of-order handling.

Default configuration

  • The default admin user (and creator of channels) on Stream side is data-migration-admin
  • The channel ID will be the same as in Sendbird, but with the prefixes sendbird_{group,open}_channel_ stripped
  • The channel type will be
    • custom_type if set on the Sendbird channel object
    • public if the Sendbird channel type is open or the channel is public
    • messaging if none of the above is true
  • The user name on Stream side will come from the user nickname on the Sendbird side
  • The user image on Stream side will come from the user profileUrl on the Sendbird side
  • The message type will be
    • system if the message is a ADMM message from Sendbird
    • regular otherwise
  • The default channel role will be channel_member

These defaults can be overridden by request.

Handled events

The following events are handled as defined by the category field in the Sendbird webhook:

open_channel:create
open_channel:remove
open_channel:enter
open_channel:exit
open_channel:message_send
open_channel:message_update
open_channel:message_delete
group_channel:create
group_channel:changed
group_channel:remove
group_channel:invite
group_channel:join
group_channel:decline_invite
group_channel:leave
group_channel:message_send
group_channel:message_read
group_channel:message_update
group_channel:message_delete
group_channel:reaction_add
group_channel:reaction_delete

If you only wish to have Stream handle a subset of these it is also configurable.

© Getstream.io, Inc. All Rights Reserved.