Migrating To Stream From An In-House Solution Or Another Provider

Migrations are common during implementation and we have extensive experience with this process. We have assisted with migrations for our largest customers (ex. GameChanger, 9Count, Caffeine.tv, etc) from both other chat providers and in-house solutions. There are two different ways to migrate to Stream, both are explained below.

We recommend purchasing premium support to help with a large-scale migration. Premium support provides real-time engagement with our engineering team.

Hard Switch To Stream (requires a break in service and customers must upgrade their App)

  1. Schedule ideal time to stop service and perform migration

  2. Export all relevant data for Stream in the correct import format - import format & process

  3. Import data into Stream via the Stream Dashboard

  4. Validate and perform a sanity check

  5. Go live with Stream Chat!

Alternative: Seamless Integration To Stream Infrastructure (i.e. no break in service)

  1. Create and begin running a mechanism (ex. webhook) to replicate data from your previous provider

ex: On Channel created -> create a Channel in Stream

  1. Export existing chat data in the required data format

Note: You can provide an example export for Stream to review as well

  1. Import data into Stream via the Stream Dashboard

Note: The Dashboard can upload files up to 100MB. If the file is larger than 100MB, please contact https://getstream.io/contact/support/ or mention this in your shared slack channel.

  1. Setup and run reverse replication (so users in old app version can communicate with users in new app until they upgrade)

ex. On Channel created -> create a Channel in the old provider system

  1. Rollout SDK updates to connect to the Stream API

It’s best to provide a sample data import for review prior to your migration. This will help Streamline your migration process.

Mapping - How to keep existing Chat identifiers (ex. Channel ID) consistent when switching to Stream

It’s important to map existing data fields for users, messages, and channels to these entities in Stream. If you are using a Seamless Integration approach, it is important that the data import fields and permissions and other provider webhook fields and permissions are mapped correctly.

Please view the example mappings in the tables below

users

Stream FieldIn-House/Alternate Provider FieldTransformation
ididNone
namenameNone
imageprofile_imageNone
**custom_dataNone

channels

Stream FieldIn-House/Alternate Provider FieldTransformation
ididNone
typeprivatepublic rooms map to livestream and private rooms map to messaging
created_by_idcreated_by_idNone
namenameNone
membersmember_user_idsNone
**custom_dataNone

messages

Stream FieldIn-House/Alternate Provider FieldTransformation
ididint → string
channel_typeN/AInherit from parent Channel
channel_idN/AInherit from parent Channel
usersender_idNone
textpartsTake the content of the first element of the parts array with a part-type of inline and a mime-type of text/plain. If no such part exists (a small minority of messages) set to a sensible default.
typeN/Aregular
attachmentspartsAll Provider message parts excluding the first part with a type of text/plain
**custom_dataNone
© Getstream.io, Inc. All Rights Reserved.