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)
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
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 Field | In-House/Alternate Provider Field | Transformation |
---|---|---|
id | id | None |
name | name | None |
image | profile_image | None |
** | custom_data | None |
channels
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
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 |