نحوه مهاجرت از Sendbird به TalkJS
در این آموزش، ما به شما نشان می دهیم که چگونه داده ها را از Sendbird صادر کرده و به TalkJS وارد کنید. اگر میخواهید با TalkJS پلتفرمها را تغییر دهید، این واقعاً مفید است. در صورتی که از API چت دیگری استفاده می کنید، مراحل بسیار شبیه به این خواهند بود. جریان اصلی این است که تمام دادهها را با استفاده از API Sendbird دریافت کنید، تغییراتی در دادهها ایجاد کنید تا TalkJS بتواند آن را شناسایی کند و در نهایت APIهای TalkJS را با دادههای تبدیلشده فراخوانی کنید. می توانید کل کد منبع را در مخزن Github ما پیدا کنید.
صادرات از Sendbird
در بالا تصویری از چت گروهی ما در Sendbird نشان داده شده است. آنها سه موجودیت اصلی دارند که باید آنها را به TalkJS وارد کنید. آنها کاربران، کانال ها و پیام ها هستند. جدول زیر نگاشت بین موجودیت ها در Sendbird و TalkJS را نشان می دهد.
Sendbird | TalkJS |
---|---|
کاربران | کاربران |
کانال ها | گفتگو |
پیام ها | پیام ها |
دو راه برای صادرات داده از Sendbird وجود دارد. یکی استفاده از گزینه صادرات از داشبورد و دیگری استفاده از Export APIهای آنهاست. ما در اینجا از داشبورد استفاده می کنیم زیرا سریع و آسان است.
در داشبورد خود، به داده ها صفحه صادرات و کلیک کنید درخواست. پس از رسیدن به آنجا، نهادی را که میخواهید صادر کنید (کانالها، پیامها، کاربران)، قالب و بازه زمانی آن را انتخاب کنید. Sendbird فقط به شما امکان می دهد محدوده تاریخ 7 روز را انتخاب کنید، بنابراین اگر داده های قدیمی دارید، باید چندین صادرات انجام دهید. را کلیک کنید درخواست برای ارسال درخواست صادرات در صادرات داده صفحه، می توانید یک ورودی جدید برای صادرات ببینید. قبل از اینکه برای دانلود در دسترس قرار گیرد، از وضعیت های مختلفی عبور می کند. را کلیک کنید دانلود و آن را در حافظه محلی خود ذخیره کنید.
با استفاده از Sendbird Export API
شما همچنین می توانید داده ها را از Sendbird با استفاده از صادرات REST API صادر کنید. URL پایه برای صادرات REST API این است:
https://api-APPLICATION_ID.sendbird.com/v3/export/ENTITY_NAME
جایگزین کردن APPLICATION_ID با شناسه برنامه خود از داشبورد Sendbird و ENTITY_NAME با کاربران، پیام ها یا کانال ها بر اساس آنچه می خواهید صادر کنید. همچنین باید یک هدر سفارشی به نام ارائه کنید Api-Token
و مقدار آن را از داشبورد Sendbird خود نیز ارائه دهید.
درخواست باید یک HTTP POST
و بدن فقط به دو پارامتر نیاز دارد start_ts
و end_ts
. هر دوی اینها در یونیکس میلی ثانیه هستند. Sendbird به شما امکان می دهد پیام ها را در بازه زمانی 7 روزه فقط در هنگام استفاده از API واکشی کنید، بنابراین اگر داده های بیشتری دارید، باید چندین درخواست ارسال کنید.
{
"start_ts": "1673352000",
"end_ts": "1673907200"
}
فرمت پیش فرض JSON است، اما اگر آن را در CSV می خواهید، فقط آن را اضافه کنید format
ویژگی را در بدنه درخواست قرار دهید و آن را روی CSV تنظیم کنید. فراموش نکنید که اضافه کنید Api-Token
هدر هنگام ارسال هر درخواست پس از ارسال، باید پاسخی مطابق شکل زیر دریافت کنید:
{
"request_id": "x00000xx0000000",
"status": "scheduled",
"data_type": "users",
"start_ts": 1673352000000,
"end_ts": 1673907200000,
"user_ids": [],
"format": "json",
"created_at": 1675207070000,
"timezone": "UTC"
}
وضعیت است scheduled
و شما می توانید فایل را پس از تکمیل آن با اجرای یک درخواست GET با request_id به عنوان پارامتر پرس و جو بازیابی کنید. برای این مثال، درخواست به شکل زیر است:
https://api-APPLICATION_ID.sendbird.com/v3/export/users/x00000xx0000000
هنگامی که وضعیت است done
، می توانید داده ها را با استفاده از URL موجود در پاسخ دانلود کنید. تاریخ انقضای آن 7 روز است.
وارد کردن به TalkJS
ما فرآیند واردات را به سه برنامه مختلف تفکیک کرده ایم تا توضیح آن آسان تر شود. کد در هر سه شبیه به یکدیگر است و می توانید آنها را در حین استفاده در تولید ترکیب کنید. این فقط برای این است که توضیح را به خاطر این آموزش کمی ساده تر کند. ما سه برنامه NodeJS داریم که کاربران، مکالمات و پیامها را وارد میکنند.
وارد کردن کاربران
"use strict";
const fs = require("fs");
const axios = require("axios");
const instance = axios.create({
baseURL: "https://api.talkjs.com",
headers: {
Authorization: "Bearer YOUR_SECRET_KEY_FROM_TALKJS_DASHBOARD",
"Content-Type": "application/json",
},
});
function importUsers() {
const userDataRaw = fs.readFileSync("exported-data/active_users.json");
const usersJson = JSON.parse(userDataRaw);
const users = usersJson.active_users;
for(let user of users){
instance.put(`/v1/YOUR_APP_ID/users/${user.user_id}`, {
name: user.nickname,
email: [user.metadata.emailId],
photoUrl: user.profile_url,
id: user.user_id,
})
}
}
importUsers();
کد بالا نشان می دهد که چگونه می توانید کاربران را به TalkJS وارد کنید. ما از دو ماژول در برنامه استفاده کرده ایم. ماژول سیستم فایل (fs
) داده های صادر شده را می خواند و axios
ماژول برای درخواست پس از وارد کردن ماژول ها، یک نمونه از ماژول axios ایجاد می کنیم که در آن عبور می کند baseURL
از TalkJS API و هدرهای لازم.
برای احراز هویت درخواست ها باید کلید مخفی را از داشبورد TalkJS خود دریافت کنید. حتما تنظیم کنید Content-Type
مانند application/json
، از آنجایی که TalkJS در حال حاضر فقط از آن پشتیبانی می کند.
تابع بعدی فرآیند واردات واقعی است. ما داده های JSON را می خوانیم و از طریق هر کاربر حلقه می زنیم. سپس نقطه پایانی را با HTTP PUT
روشی که پارامترهای لازم برای ایجاد کاربر را ارسال می کند. این id
و email
حداقل پارامترهای مورد نیاز هستند. Sendbird فیلد آدرس ایمیل برای کاربران خود ندارد، اما از افزودن فیلدهای سفارشی پشتیبانی می کند. فیلد فوق داده حاوی فیلدهای سفارشی است و میتوانیم آدرس ایمیل را از آن به فیلد ایمیل برای کاربر TalkJS نگاشت کنیم.
وارد کردن مکالمات
function importConversations() {
const channelsRaw = fs.readFileSync("exported-data/group_channels.json");
const channelsJson = JSON.parse(channelsRaw);
const channels = channelsJson.group_channels;
for(let channel of channels){
const channelParticipants = [];
for (let member of channel.members) {
channelParticipants.push(member.user_id);
}
instance.put(`/v1/YOUR_APP_ID/conversations/${channel.channel_url}`, {
subject: channel.name,
participants: channelParticipants,
})
}
}
importConversations();
برنامه بعدی وارد کردن مکالمات است. کانال ها در Sendbird مشابه مکالمات در TalkJS هستند. فایل JSON را مانند قبل می خوانیم و داده ها را در متغیری به نام ذخیره می کنیم channels
. شرکت کنندگان یک مکالمه در متغیری به نام ذخیره می شوند members
در Sendbird ما این را بازیابی می کنیم و قبل از فراخوانی API برای ایجاد مکالمات در TalkJS در یک آرایه ذخیره می کنیم. URL کانال از Sendbird به عنوان شناسه مکالمه منحصر به فرد در TalkJS استفاده می شود.
وارد کردن پیام ها
const messagesRaw = fs.readFileSync("exported-data/messages.json");
const messagesJson = JSON.parse(messagesRaw);
const messages = messagesJson.messages;
const uniqueConversations = [ ...new Set(messages.map((item) => item.channel_url))];
let conversationJsonArray = [];
for (let conversation of uniqueConversations) {
let conversationJsonObj = {};
conversationJsonObj[conversation] = [];
conversationJsonArray.push(conversationJsonObj);
}
for(let conversation of conversationJsonArray) {
for(let message of messages){
if(Object.keys(conversation)[0] === message.channel_url){
let messageObj = {};
messageObj.text = message.message,
messageObj.sender = message.user.user_id,
messageObj.type = message.type === "MESG" ? "UserMessage" : "SystemMessage",
messageObj.timestamp = message.created_at,
messageObj.readBy = []
conversation[message.channel_url].push(messageObj);
}
}
}
این قسمت با دو قسمت دیگر کمی متفاوت است. میتوانید از نقطه پایانی واردات در TalkJS برای وارد کردن انبوه پیامها از مکالمات استفاده کنید. اما قبل از آن باید داده های خود را آماده کنید. ساختار داده ها مطابق شکل زیر است.
[
{
"converstationId": [
{ message_1 }, { message_2 }, { message_3 }
]
},
{
"converstationId": [
{ message_1 }, { message_2 }, { message_3 }
}
]
سه خط اول کد مشابه برنامه های قبلی است که در آن داده های صادر شده را می خوانیم و در یک ثابت ذخیره می کنیم. سپس، یک ثابت فراخوانی ایجاد می کنیم uniqueConversations
برای ذخیره شناسه های منحصر به فرد کانال ها از Sendbird. ما از a استفاده می کنیم Set
زیرا فقط مقادیر منحصر به فرد را ذخیره می کند.
در حلقه for بعدی، یک آرایه JSON حاوی شناسه های مکالمه به عنوان کلید ایجاد می کنیم. آرایه JSON در حال حاضر مانند شکل زیر است:
[
{
"converstationId": []
},
{
"converstationId": []
}
]
قسمت آخر از دو حلقه for تشکیل شده است. یکی که روی آرایه JSON نشان داده شده در بالا تکرار می شود و دیگری که روی پیام های ما تکرار می شود. سپس، بررسی میکنیم که آیا شناسه مکالمه هر پیام با کلید شیئی که در حال حاضر در آن هستیم برابر است یا خیر. اگر مطابقت داشتند، آن را با مقادیر لازم برای TalkJS پر میکنیم. فیلد مهر زمانی به حفظ ترتیب پیامها در هنگام وارد کردن آن از Sendbird به TalkJS کمک میکند. ما استفاده کرده ایم message.type
MESG از Sendbird برای نگاشت آن به UserMessage
در TalkJS تایپ کنید.
function importMessages(conversationJsonArray) {
for (let conversation of conversationJsonArray) {
instance.post(`/v1/tAU5JKLC/import/conversations/${Object.keys(conversation)[0]}/messages`, [...conversation[Object.keys(conversation)[0]]])
}
}
importMessages(conversationJsonArray);
در نهایت، ما را فراخوانی می کنیم importMessages
تابعی که در آرایه JSON ساخته شده عبور می کند. ما در هر یک از مکالمات تکرار می کنیم و کل آرایه پیام های داخل آن را به API ارسال می کنیم.
باز کردن برنامه در TalkJS
اکنون میتوانیم یک برنامه کاربردی در TalkJS ایجاد کنیم و سپس دادههای وارد شده را مشاهده کنیم. همچنین می توانید به داشبورد TalkJS خود بروید و به آن بروید فعالیت → تاریخچه مکالمه و سپس مکالمه ایجاد شده جدید را انتخاب کنید. کاربران و چت ها را در یک رابط کاربری به سبک TalkJS به شما نشان می دهد.
در برنامه نمونه خود، ما میخواهیم شناسههای کاربری و نامهای آنها را اضافه کنیم تا سریع آنها را تنظیم کنیم. هنگام استفاده از آن در تولید، میتوانید از APIهای TalkJS برای بازیابی کاربران، مکالمات، پیامها و غیره استفاده کنید. سه حالت رابط کاربری برای TalkJS وجود دارد. یکی صندوق ورودی، دومی جعبه گفتگو و آخرین مورد ویجت بازشو است. شما می توانید بیشتر در مورد آنها در اینجا بخوانید. ما در این مثال از ویجت chatbox استفاده می کنیم. برای راه اندازی سریع برنامه خود در TalkJS می توانید بخش شروع به کار را بخوانید. سپس کد زیر را در فایل اسکریپت خود کپی کنید تا مکالمه ای را که از Sendbird صادر کرده ایم بازیابی کنید.
Talk.ready.then(function () {
var me = new Talk.User({
id: "523915",
name: "Mathew Jacob"
});
var other1 = new Talk.User({
id: "523916",
name: "Morgan Stanley"
});
var other2 = new Talk.User({
id: "523917",
name: "Shane Riley"
});
var other3 = new Talk.User({
id: "523918",
name: "Clyde Howell"
});
window.talkSession = new Talk.Session({
appId: "YOUR_APP_ID",
me: me
});
var conversation = window.talkSession.getOrCreateConversation(
"SENDBIRD_CONVERSATION_ID"
);
conversation.setParticipant(me);
conversation.setParticipant(other1);
conversation.setParticipant(other2);
conversation.setParticipant(other3);
var chatbox = window.talkSession.createChatbox(conversation);
chatbox.mount(document.getElementById("talkjs-container"));
});
همانطور که قبلا ذکر شد، ممکن است بخواهید از یک API برای بازیابی نام و شناسه کاربران استفاده کنید. اما در این مثال، ما آنها را بر اساس مقادیری که وارد کرده ایم، کدگذاری کرده ایم. هنگامی که همه اینها تنظیم شد، باید یک رابط کاربری چت باکس با چت های صادر شده از Sendbird در مرورگر خود داشته باشید. کل کد منبع این مثال در مخزن Github ما موجود است.