Migrating To Stream From An In-House Solution Or Another Provider
Confused about "Migrating To Stream From An In-House Solution Or Another Provider"?
Let us know how we can improve our documentation:
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.
Hard Switch To Stream (requires a break in service and customers must upgrade their App)
Schedule ideal time to stop service and perform migration
Export all relevant data for Stream in the correct import format - import format & process
Import data into Stream via the Stream Dashboard
Validate and perform a sanity check
Go live with Stream Chat!
Alternative: Seamless Integration To Stream Infrastructure (i.e. no break in service)
Create and begin running a mechanism (ex. webhook) to replicate data from your previous provider
ex: On Channel created -> create a Channel in Stream
Export existing chat data in the required data format
Note: You can provide an example export for Stream to review as well
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.
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
Rollout SDK updates to connect to the Stream API
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
Copied!Stream Field | In-House/Alternate Provider Field | Transformation |
---|---|---|
id | id | None |
name | name | None |
image | profile_image | None |
** | custom_data | None |
channels
Copied!Stream Field | In-House/Alternate Provider Field | Transformation |
---|---|---|
id | id | None |
type | private | public rooms map to livestream and private rooms map to messaging |
created_by_id | created_by_id | None |
name | name | None |
members | member_user_ids | None |
** | custom_data | None |
messages
Copied!Stream Field | In-House/Alternate Provider Field | Transformation |
---|---|---|
id | id | int → string |
channel_type | N/A | Inherit from parent Channel |
channel_id | N/A | Inherit from parent Channel |
user | sender_id | None |
text | parts | Take 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. |
type | N/A | regular |
attachments | parts | All Provider message parts excluding the first part with a type of text/plain |
** | custom_data | None |