← Cloudflare Realtime / realtime / realtimekit / core
Чат
Это руководство объясняет, как отправлять и получать сообщения чата во встрече с помощью Cloudflare RealtimeKit.
Введение
В чате можно отправлять три типа сообщений:
- Текстовые сообщения
- Изображения
- Файлы
Объект чата встречи хранится в meeting.chat, у которого есть методы для отправки и получения сообщений.
console.log("Chat object:", meeting.chat); meeting.chat.messages содержит все сообщения, отправленные в чате. Это массив объектов, каждый из которых имеет тип Message.
console.log("All chat messages:", meeting.chat.messages);В чате можно отправлять три типа сообщений:
- Текстовые сообщения
- Изображения
- Файлы
Объект чата встречи хранится в meeting.chat, у которого есть методы для отправки и получения сообщений.
meeting.chat; meeting.chat.messages содержит все сообщения, отправленные в чате. Это массив объектов, каждый из которых имеет тип Message.
meeting.chat.messages;В чате можно отправлять три типа сообщений:
- Текстовые сообщения
- Изображения
- Файлы
Объект чата встречи хранится в meeting.chat, у которого есть методы для отправки и получения сообщений.
meeting.chat meeting.chat.messages содержит все сообщения, отправленные в чате. Это массив объектов, каждый из которых имеет тип com.cloudflare.realtimekit.chat.ChatMessage.
meeting.chat.messagesВ чате можно отправлять три типа сообщений:
- Текстовые сообщения
- Изображения
- Файлы
Объект чата встречи хранится в meeting.chat, у которого есть методы для отправки и получения сообщений.
meeting.chat meeting.chat.messages содержит все сообщения, отправленные в чате. Это массив объектов, каждый из которых имеет тип RealtimeKit.ChatMessage.
meeting.chat.messagesВ чате можно отправлять три типа сообщений:
- Текстовые сообщения
- Изображения
- Файлы
Объект чата встречи хранится в meeting.chat, у которого есть методы для отправки и получения сообщений.
meeting.chat; meeting.chat.messages содержит все сообщения, отправленные в чате. Это массив объектов, каждый из которых имеет тип Message.
meeting.chat.messages;Тип сообщения
Message тип определяется следующим образом:
interface BaseMessage<T extends MessageType> {
type: T;
userId: string;
displayName: string;
time: Date;
id: string;
isEdited?: boolean;
read?: boolean;
pluginId?: string;
pinned?: boolean;
targetUserIds?: string[];
}
interface TextMessage extends BaseMessage<MessageType.text> {
message: string;
}
interface ImageMessage extends BaseMessage<MessageType.image> {
link: string;
}
interface FileMessage extends BaseMessage<MessageType.file> {
name: string;
size: number;
link: string;
}
type Message = TextMessage | ImageMessage | FileMessage; Message тип определяется следующим образом:
interface BaseMessage<T extends MessageType> {
type: T;
userId: string;
displayName: string;
time: Date;
id: string;
isEdited?: boolean;
read?: boolean;
pluginId?: string;
pinned?: boolean;
targetUserIds?: string[];
}
interface TextMessage extends BaseMessage<MessageType.text> {
message: string;
}
interface ImageMessage extends BaseMessage<MessageType.image> {
link: string;
}
interface FileMessage extends BaseMessage<MessageType.file> {
name: string;
size: number;
link: string;
}
type Message = TextMessage | ImageMessage | FileMessage; ChatMessage класс определяется следующим образом:
enum class ChatMessageType {
TEXT,
IMAGE,
FILE
}
open class ChatMessage(
val userId: String,
val displayName: String,
val read: Boolean,
val pluginId: String?,
val type: ChatMessageType,
val time: String,
val createdAtMillis: Long,
val targetUserIds: List<String>?,
)
class TextMessage(val message: String): ChatMessage(...)
class ImageMessage(val link: String): ChatMessage(...)
class FileMessage(
val name: String,
val link: String,
val size: Long,
): ChatMessage(...) ChatMessage класс определяется следующим образом:
public enum ChatMessageType {
case text
case image
case file
}
open class ChatMessage {
public let userId: String
public let displayName: String
public let read: Bool
public let pluginId: String?
public let type: ChatMessageType
public let time: String
public let createdAtMillis: Int64
public let targetUserIds: [String]?
}
public final class TextMessage: ChatMessage {
public let message: String
}
public final class ImageMessage: ChatMessage {
public let link: String
}
public final class FileMessage: ChatMessage {
public let name: String
public let link: String
public let size: Int64
} Message тип определяется следующим образом:
interface BaseMessage<T extends MessageType> {
type: T;
userId: string;
displayName: string;
time: Date;
id: string;
isEdited?: boolean;
read?: boolean;
pluginId?: string;
pinned?: boolean;
targetUserIds?: string[];
}
interface TextMessage extends BaseMessage<MessageType.text> {
message: string;
}
interface ImageMessage extends BaseMessage<MessageType.image> {
link: string;
}
interface FileMessage extends BaseMessage<MessageType.file> {
name: string;
size: number;
link: string;
}
type Message = TextMessage | ImageMessage | FileMessage;Отправка сообщения чата
Отправка текстового сообщения
Существует метод в meeting.chat чтобы отправить сообщение каждого типа.
Чтобы отправить текстовое сообщение, используйте meeting.chat.sendTextMessage() метод. Он принимает строковое сообщение и отправляет его в комнату.
const message = "Is this the real life?";
await meeting.chat.sendTextMessage(message);Существует метод в meeting.chat чтобы отправить сообщение каждого типа.
Чтобы отправить текстовое сообщение, используйте meeting.chat.sendTextMessage() метод. Он принимает строковое сообщение и отправляет его в комнату.
const message = "Is this the real life?";
await meeting.chat.sendTextMessage(message);Существует метод в meeting.chat чтобы отправить сообщение каждого типа.
Чтобы отправить текстовое сообщение, используйте meeting.chat.sendTextMessage() метод. Он принимает строковое сообщение и отправляет его в комнату.
val message = "Is this the real life?"
meeting.chat.sendTextMessage(message)Существует метод в meeting.chat чтобы отправить сообщение каждого типа.
Чтобы отправить текстовое сообщение, используйте meeting.chat.sendTextMessage() метод. Он принимает строковое сообщение и отправляет его в комнату.
var message = "Is this the real life?"
meeting.chat.sendTextMessage(message)Существует метод в meeting.chat чтобы отправить сообщение каждого типа.
Чтобы отправить текстовое сообщение, используйте meeting.chat.sendTextMessage() метод. Он принимает строковое сообщение и отправляет его в комнату.
const message = "Is this the real life?";
await meeting.chat.sendTextMessage(message);Отправка изображения
Вы можете отправить изображение с помощью meeting.chat.sendImageMessage(). Принимает изображение типа File, и отправляет его участникам встречи.
<label for="img">Select image:</label>
<input type="file" id="img" name="img" accept="image/*" />
<button onclick="onSendImage()">Send Image</button>async function onSendImage() {
const image = document.getElementById("img");
await meeting.chat.sendImageMessage(image.files[0]);
}Вы можете отправить изображение с помощью meeting.chat.sendImageMessage(). Принимает изображение типа File, и отправляет его участникам встречи.
import { useRef } from "react";
function ChatComponent() {
const imageInputRef = useRef(null);
const onSendImage = async () => {
const image = imageInputRef.current;
if (image && image.files[0]) {
await meeting.chat.sendImageMessage(image.files[0]);
}
};
return (
<>
<label htmlFor="img">Select image:</label>
<input
type="file"
id="img"
name="img"
accept="image/*"
ref={imageInputRef}
/>
<button onClick={onSendImage}>Send Image</button>
</>
);
}Вы можете отправить изображение с помощью meeting.chat.sendImageMessage() и отправляет их участникам встречи.
meeting.chat.sendImageMessage(imageUri) { err ->
// Handle error if any
}Вы можете отправить изображение с помощью meeting.chat.sendImageMessage() и отправляет их участникам встречи.
meeting.chat.sendImageMessage(imageURL: url) { err in
// Handle error if any
}Вы можете отправить изображение с помощью meeting.chat.sendImageMessage(). Принимает изображение типа File и отправляет его участникам встречи.
import DocumentPicker from "@react-native-documents/picker";
async function onSendImage() {
// Get the image uri and create an object with the following fields
const res = await DocumentPicker.pickSingle({
type: [DocumentPicker.types.images],
});
const image = {
uri: res.uri,
name: res.name,
size: res.size,
type: res.type,
};
await meeting.chat.sendImageMessage(image);
}Отправка файла
Отправка файла похожа на отправку изображения. Единственное отличие в том, что при отправке изображения в чате встречи отображается предпросмотр, а для файлов это не так. При этом изображение тоже можно отправить как файл с помощью meeting.chat.sendFileMessage().
<label for="file">Select file:</label>
<input type="file" id="file" name="file" />
<button onclick="onSendFile()">Send File</button>async function onSendFile() {
const file = document.getElementById("file");
await meeting.chat.sendFileMessage(file.files[0]);
}Отправка файла похожа на отправку изображения. Единственное отличие в том, что при отправке изображения в чате встречи отображается предпросмотр, а для файлов это не так. При этом изображение тоже можно отправить как файл с помощью meeting.chat.sendFileMessage().
import { useRef } from "react";
function ChatComponent() {
const fileInputRef = useRef(null);
const onSendFile = async () => {
const file = fileInputRef.current;
if (file && file.files[0]) {
await meeting.chat.sendFileMessage(file.files[0]);
}
};
return (
<>
<label htmlFor="file">Select file:</label>
<input type="file" id="file" name="file" ref={fileInputRef} />
<button onClick={onSendFile}>Send File</button>
</>
);
}Отправка файла похожа на отправку изображения. Единственное отличие в том, что при отправке изображения в чате встречи отображается предпросмотр, а для файлов это не так. При этом изображение тоже можно отправить как файл с помощью meeting.chat.sendFileMessage().
meeting.chat.sendFileMessage(fileUri) { err ->
// Handle error if any
}Отправка файла похожа на отправку изображения. Единственное отличие в том, что при отправке изображения в чате встречи отображается предпросмотр, а для файлов это не так. При этом изображение тоже можно отправить как файл с помощью meeting.chat.sendFileMessage().
meeting.chat.sendFileMessage(fileURL: url) { err in
// Handle error if any
}Отправка файла похожа на отправку изображения. Единственное отличие в том, что при отправке изображения в чате встречи отображается предпросмотр, а для файлов это не так. При этом изображение тоже можно отправить как файл с помощью meeting.chat.sendFileMessage().
import DocumentPicker from "@react-native-documents/picker";
async function onSendFile() {
// Get the file uri and create an object with the following fields
const res = await DocumentPicker.pickSingle({
type: [DocumentPicker.types.allFiles],
});
const file = {
uri: res.uri,
name: res.name,
size: res.size,
type: res.type,
};
await meeting.chat.sendFileMessage(file);
}Отправка сообщения любого типа
Также существует распространённый метод под названием meeting.chat.sendMessage() который можно использовать для отправки любого из трех типов сообщений, показанных выше. По сути, он вызывает один из перечисленных выше методов в зависимости от типа полезной нагрузки, которую вы передаёте методу. sendMessage() метод принимает параметр message следующего типа:
async function sendMessage(
message:
| { type: "text"; message: string }
| { type: "image"; image: File }
| { type: "file"; file: File },
) {
// ...
}Ниже показано, как использовать sendMessage() метод, чтобы отправить текстовое сообщение:
const message = "Is this just fantasy?";
await meeting.chat.sendMessage({ type: "text", message });Также существует распространённый метод под названием meeting.chat.sendMessage() который можно использовать для отправки любого из трех типов сообщений, показанных выше. По сути, он вызывает один из перечисленных выше методов в зависимости от типа полезной нагрузки, которую вы передаёте методу. sendMessage() метод принимает параметр message следующего типа:
async function sendMessage(
message:
| { type: "text"; message: string }
| { type: "image"; image: File }
| { type: "file"; file: File },
) {
// ...
}Ниже показано, как использовать sendMessage() метод, чтобы отправить текстовое сообщение:
const message = "Is this just fantasy?";
await meeting.chat.sendMessage({ type: "text", message });Также существует распространённый метод под названием meeting.chat.sendMessage() который можно использовать для отправки любого из трех типов сообщений, показанных выше. По сути, он вызывает один из перечисленных выше методов в зависимости от типа полезной нагрузки, которую вы передаёте методу. sendMessage() метод принимает параметр message следующего типа:
async function sendMessage(
message:
| { type: "text"; message: string }
| { type: "image"; image: File }
| { type: "file"; file: File },
) {
// ...
}Ниже показано, как использовать sendMessage() метод, чтобы отправить текстовое сообщение:
const message = "Is this just fantasy?";
await meeting.chat.sendMessage({ type: "text", message });Получение сообщений чата
meeting.chat объект генерирует события при получении новых сообщений чата. Вы можете подписаться на событие chatUpdate событие, чтобы регистрировать получение нового сообщения чата.
meeting.chat.on("chatUpdate", ({ message, messages }) => {
console.log(`Received message ${message}`);
console.log(`All messages in chat: ${messages.join(", ")}`);
});Здесь message имеет тип Message, как определено во введении. messages представляет собой список всех сообщений чата на встрече, что совпадает с meeting.chat.messages.
Когда получено сообщение чата, meeting.chat.messages список также обновляется.
console.log(JSON.stringify(meeting.chat.messages));
meeting.chat.on("chatUpdate", () => {
console.log(JSON.stringify(meeting.chat.messages));
}); meeting.chat объект генерирует события при получении новых сообщений чата. Вы можете подписаться на событие chatUpdate событие, чтобы регистрировать получение нового сообщения чата.
import { useRealtimeKitSelector } from "@cloudflare/realtimekit-react";
// useRealtimeKitSelector hooks only works when `RealtimeKitProvider` is used.
const messages = useRealtimeKitSelector((m) => m.chat.messages);Как вариант:
meeting.chat.on("chatUpdate", ({ message, messages }) => {
console.log(`Received message ${message}`);
console.log(`All messages in chat: ${messages.join(", ")}`);
});Здесь message имеет тип Message, как определено во введении. messages представляет собой список всех сообщений чата на встрече, что совпадает с meeting.chat.messages.
Когда получено сообщение чата, meeting.chat.messages список также обновляется.
console.log(JSON.stringify(meeting.chat.messages));
meeting.chat.on("chatUpdate", () => {
console.log(JSON.stringify(meeting.chat.messages));
});Чтобы получать сообщения чата, необходимо реализовать метод onChatUpdates() метод из обратного вызова RtkChatEventListener. Подписаться на эти события можно, вызвав meeting.addChatEventListener(rtkChatEventListener).
meeting.addChatEventListener(object : RtkChatEventListener {
override fun onChatUpdates(messages: List<ChatMessage>) {
// to load chat messages
}
override fun onNewChatMessage(message: ChatMessage) {
// when a new chat message is shared in the meeting
}
override fun onMessageRateLimitReset() {
// when the rate limit for sending messages of self is reset
}
}) onChatUpdates() метод будет вызываться при любом изменении сообщений чата. messages параметр представляет собой список ChatMessage объекты, отправленные в чат.
onNewChatMessage() метод будет вызываться каждый раз, когда во встрече отправляется новое сообщение чата. message параметр представляет собой ChatMessage объект, отправленный в чат.
onMessageRateLimitReset() метод будет вызван, когда ограничение частоты отправки сообщений для Self будет сброшено и вы снова сможете отправлять сообщения. Стандартное ограничение составляет 180 сообщений за 60 секунд.
Чтобы получать сообщения чата, необходимо реализовать метод onChatUpdates() метод из обратного вызова RtkChatEventListener. Подписаться на эти события можно, вызвав meeting.addChatEventListener(rtkChatEventListener).
extension MainChatListener: RtkChatEventListener {
func onChatUpdates(messages: [ChatMessage]) {
// to load chat messages
}
func onNewChatMessage(message: ChatMessage) {
// when a new chat message is shared in the meeting
}
func onMessageRateLimitReset() {
// when the rate limit for sending messages of self is reset
}
} onChatUpdates() метод будет вызываться при любом изменении сообщений чата. messages параметр представляет собой список ChatMessage объекты, отправленные в чат.
onNewChatMessage() метод будет вызываться каждый раз, когда во встрече отправляется новое сообщение чата. message параметр представляет собой ChatMessage объект, отправленный в чат.
onMessageRateLimitReset() метод будет вызван, когда ограничение частоты отправки сообщений для Self будет сброшено и вы снова сможете отправлять сообщения. Стандартное ограничение составляет 180 сообщений за 60 секунд.
meeting.chat объект генерирует события при получении новых сообщений чата. Вы можете подписаться на событие chatUpdate событие, чтобы регистрировать получение нового сообщения чата.
meeting.chat.on("chatUpdate", ({ message, messages }) => {
console.log(`Received message ${message}`);
console.log(`All messages in chat: ${messages.join(", ")}`);
});Здесь message имеет тип Message, как определено во введении. messages представляет собой список всех сообщений чата на встрече, что совпадает с meeting.chat.messages.
Когда получено сообщение чата, meeting.chat.messages список также обновляется.
console.log(JSON.stringify(meeting.chat.messages));
meeting.chat.on("chatUpdate", () => {
console.log(JSON.stringify(meeting.chat.messages));
});Редактирование сообщений в чате
Редактирование текстового сообщения
Существует метод в meeting.chat чтобы редактировать сообщение каждого типа.
Чтобы отредактировать текстовое сообщение, используйте meeting.chat.editTextMessage() метод. Он принимает messageId (тип string) и message (тип string).
const message = meeting.chat.messages[0];
const messageId = message?.id;
const newMessage = "Is this the real life?";
await meeting.chat.editTextMessage(messageId, newMessage);Существует метод в meeting.chat чтобы редактировать сообщение каждого типа.
Чтобы отредактировать текстовое сообщение, используйте meeting.chat.editTextMessage() метод. Он принимает messageId (тип string) и message (тип string).
const message = meeting.chat.messages[0];
const messageId = message?.id;
const newMessage = "Is this the real life?";
await meeting.chat.editTextMessage(messageId, newMessage);Существует метод в meeting.chat чтобы редактировать сообщение каждого типа.
Чтобы отредактировать текстовое сообщение, используйте meeting.chat.editTextMessage() метод. Он принимает messageId (тип string) и message (тип string).
const message = meeting.chat.messages[0];
const messageId = message?.id;
const newMessage = "Is this the real life?";
await meeting.chat.editTextMessage(messageId, newMessage);Редактирование изображения
Изображение можно отредактировать с помощью meeting.chat.editImageMessage(). Принимает messageId типа string и изображение типа File.
<label for="img">Edit image:</label>
<input type="file" id="img" name="img" accept="image/*" />
<button onclick="onEditImage()">Edit Image</button>async function onEditImage() {
const messageId = "...";
const image = document.getElementById("img");
await meeting.chat.editImageMessage(messageId, image.files[0]);
}Изображение можно отредактировать с помощью meeting.chat.editImageMessage(). Принимает messageId типа string и изображение типа File.
import { useRef } from "react";
function ChatComponent() {
const imageInputRef = useRef(null);
const onEditImage = async () => {
const messageId = "...";
const image = imageInputRef.current;
if (image && image.files[0]) {
await meeting.chat.editImageMessage(messageId, image.files[0]);
}
};
return (
<>
<label htmlFor="img">Edit image:</label>
<input
type="file"
id="img"
name="img"
accept="image/*"
ref={imageInputRef}
/>
<button onClick={onEditImage}>Edit Image</button>
</>
);
}Изображение можно отредактировать с помощью meeting.chat.editImageMessage(). Принимает messageId типа string и изображение типа File.
import DocumentPicker from "@react-native-documents/picker";
async function onEditImage() {
const messageId = "...";
// Get the image uri and create an object with the following fields
const res = await DocumentPicker.pickSingle({
type: [DocumentPicker.types.images],
});
const image = {
uri: res.uri,
name: res.name,
size: res.size,
type: res.type,
};
await meeting.chat.editImageMessage(messageId, image);
}Редактирование файла
Редактирование файла похоже на редактирование изображения. Чтобы отредактировать файл, используйте meeting.chat.editFileMessage().
<label for="file">Edit file:</label>
<input type="file" id="file" name="file" />
<button onclick="onEditFile()">Edit File</button>async function onEditFile() {
const messageId = "...";
const file = document.getElementById("file");
await meeting.chat.editFileMessage(messageId, file.files[0]);
}Редактирование файла похоже на редактирование изображения. Чтобы отредактировать файл, используйте meeting.chat.editFileMessage().
import { useRef } from "react";
function ChatComponent() {
const fileInputRef = useRef(null);
const onEditFile = async () => {
const messageId = "...";
const file = fileInputRef.current;
if (file && file.files[0]) {
await meeting.chat.editFileMessage(messageId, file.files[0]);
}
};
return (
<>
<label htmlFor="file">Edit file:</label>
<input type="file" id="file" name="file" ref={fileInputRef} />
<button onClick={onEditFile}>Edit File</button>
</>
);
}Редактирование файла похоже на редактирование изображения. Чтобы отредактировать файл, используйте meeting.chat.editFileMessage().
import DocumentPicker from "@react-native-documents/picker";
async function onEditFile() {
const messageId = "...";
// Get the file uri and create an object with the following fields
const res = await DocumentPicker.pickSingle({
type: [DocumentPicker.types.allFiles],
});
const file = {
uri: res.uri,
name: res.name,
size: res.size,
type: res.type,
};
await meeting.chat.editFileMessage(messageId, file);
}Редактирование сообщений любого типа
Также существует распространённый метод под названием meeting.chat.editMessage() который можно использовать для редактирования любого из трех типов сообщений, показанных выше. По сути, он вызывает один из перечисленных выше методов в зависимости от типа полезной нагрузки, которую вы передаёте методу. editMessage() метод принимает параметры messageId и message следующего типа:
async function editMessage(
messageId: string,
message:
| { type: "text"; message: string }
| { type: "image"; image: File }
| { type: "file"; file: File },
) {
// ...
}Ниже показано, как использовать editMessage() метод, чтобы отредактировать текстовое сообщение:
const messageId = "...";
const message = "Is this just fantasy?";
await meeting.chat.editMessage(messageId, { type: "text", message });Также существует распространённый метод под названием meeting.chat.editMessage() который можно использовать для редактирования любого из трех типов сообщений, показанных выше. По сути, он вызывает один из перечисленных выше методов в зависимости от типа полезной нагрузки, которую вы передаёте методу. editMessage() метод принимает параметры messageId и message следующего типа:
async function editMessage(
messageId: string,
message:
| { type: "text"; message: string }
| { type: "image"; image: File }
| { type: "file"; file: File },
) {
// ...
}Ниже показано, как использовать editMessage() метод, чтобы отредактировать текстовое сообщение:
const messageId = "...";
const message = "Is this just fantasy?";
await meeting.chat.editMessage(messageId, { type: "text", message });Также существует распространённый метод под названием meeting.chat.editMessage() который можно использовать для редактирования любого из трех типов сообщений, показанных выше. По сути, он вызывает один из перечисленных выше методов в зависимости от типа полезной нагрузки, которую вы передаёте методу. editMessage() метод принимает параметры messageId и message следующего типа:
async function editMessage(
messageId: string,
message:
| { type: "text"; message: string }
| { type: "image"; image: File }
| { type: "file"; file: File },
) {
// ...
}Ниже показано, как использовать editMessage() метод, чтобы отредактировать текстовое сообщение:
const messageId = "...";
const message = "Is this just fantasy?";
await meeting.chat.editMessage(messageId, { type: "text", message });Другие функции чата
Получение сообщений от пользователя
meeting.chat объект предоставляет и другие удобные методы для работы с чатом.
Вы можете получить сообщения конкретного пользователя, передав ID пользователя в meeting.chat.getMessagesByUser() метод.
// Find the userId of the user with name "Freddie".
const { userId } = meeting.participants.joined
.toArray()
.find((p) => p.name === "Freddie");
const messages = meeting.chat.getMessagesByUser(userId); meeting.chat объект предоставляет и другие удобные методы для работы с чатом.
Вы можете получить сообщения конкретного пользователя, передав ID пользователя в meeting.chat.getMessagesByUser() метод.
// Find the userId of the user with name "Freddie".
const { userId } = meeting.participants.joined
.toArray()
.find((p) => p.name === "Freddie");
const messages = meeting.chat.getMessagesByUser(userId); meeting.chat объект предоставляет и другие удобные методы для работы с чатом.
Вы можете получить сообщения конкретного пользователя, передав ID пользователя в meeting.chat.getMessagesByUser() метод.
// Find the userId of the user with name "Freddie".
const { userId } = meeting.participants.joined
.toArray()
.find((p) => p.name === "Freddie");
const messages = meeting.chat.getMessagesByUser(userId);Получение сообщений определенного типа
Сообщения определенного типа также можно получить с помощью meeting.chat.getMessagesByType() метод. Например, чтобы получить все сообщения с изображениями в чате, можно использовать следующий фрагмент кода:
const imageMessages = meeting.chat.getMessagesByType("image");Сообщения определенного типа также можно получить с помощью meeting.chat.getMessagesByType() метод. Например, чтобы получить все сообщения с изображениями в чате, можно использовать следующий фрагмент кода:
const imageMessages = meeting.chat.getMessagesByType("image");Сообщения определенного типа также можно получить с помощью meeting.chat.getMessagesByType() метод. Например, чтобы получить все сообщения с изображениями в чате, можно использовать следующий фрагмент кода:
const imageMessages = meeting.chat.getMessagesByType("image");Закрепление сообщения в чате
Вы можете закрепить несколько сообщений в чате. При закреплении сообщения объект сообщения будет иметь атрибут pinned: true, с помощью которого можно определить, закреплено ли сообщение.
Чтобы закрепить сообщение:
// Pin the first message in the chat (could be text, image, or file).
const { id } = meeting.chat.messages[0];
await meeting.chat.pin(id);После того как вы закрепите сообщение, оно будет добавлено в meeting.chat.pinned.
const { id } = meeting.chat.messages[0];
await meeting.chat.pin(id);
console.log(meeting.chat.pinned);
console.log(meeting.chat.pinned.length > 0); // Should be trueЗакрепленное сообщение также можно открепить с помощью meeting.chat.unpin() метод.
// Unpin the first pinned message.
const { id } = meeting.chat.pinned[0];
await meeting.chat.unpin(id);Вы можете отслеживать события, чтобы узнавать о закреплении и откреплении сообщения.
meeting.chat.on("pinMessage", ({ message }) => {
console.log("A message was pinned", JSON.stringify(message));
});
meeting.chat.on("unpinMessage", ({ message }) => {
console.log("A message was unpinned", JSON.stringify(message));
});Вы можете закрепить несколько сообщений в чате. При закреплении сообщения объект сообщения будет иметь атрибут pinned: true, с помощью которого можно определить, закреплено ли сообщение.
Чтобы закрепить сообщение:
// Pin the first message in the chat (could be text, image, or file).
const { id } = meeting.chat.messages[0];
await meeting.chat.pin(id);После того как вы закрепите сообщение, оно будет добавлено в meeting.chat.pinned.
const { id } = meeting.chat.messages[0];
await meeting.chat.pin(id);
console.log(meeting.chat.pinned);
console.log(meeting.chat.pinned.length > 0); // Should be trueЗакрепленное сообщение также можно открепить с помощью meeting.chat.unpin() метод.
// Unpin the first pinned message.
const { id } = meeting.chat.pinned[0];
await meeting.chat.unpin(id);Вы можете отслеживать события, чтобы узнавать о закреплении и откреплении сообщения.
meeting.chat.on("pinMessage", ({ message }) => {
console.log("A message was pinned", JSON.stringify(message));
});
meeting.chat.on("unpinMessage", ({ message }) => {
console.log("A message was unpinned", JSON.stringify(message));
});Вы можете закрепить несколько сообщений в чате. При закреплении сообщения объект сообщения будет иметь атрибут pinned: true, с помощью которого можно определить, закреплено ли сообщение.
Чтобы закрепить сообщение:
// Pin the first message in the chat (could be text, image, or file).
const { id } = meeting.chat.messages[0];
await meeting.chat.pin(id);После того как вы закрепите сообщение, оно будет добавлено в meeting.chat.pinned.
const { id } = meeting.chat.messages[0];
await meeting.chat.pin(id);
console.log(meeting.chat.pinned);
console.log(meeting.chat.pinned.length > 0); // Should be trueЗакрепленное сообщение также можно открепить с помощью meeting.chat.unpin() метод.
// Unpin the first pinned message.
const { id } = meeting.chat.pinned[0];
await meeting.chat.unpin(id);Вы можете отслеживать события, чтобы узнавать о закреплении и откреплении сообщения.
meeting.chat.on("pinMessage", ({ message }) => {
console.log("A message was pinned", JSON.stringify(message));
});
meeting.chat.on("unpinMessage", ({ message }) => {
console.log("A message was unpinned", JSON.stringify(message));
});Удаление сообщения чата
meeting.chat пространство имён предоставляет метод с именем deleteMessage(). Он принимает параметр messageId типа string.
const messageId = "...";
await meeting.chat.deleteMessage(messageId); meeting.chat пространство имён предоставляет метод с именем deleteMessage(). Он принимает параметр messageId типа string.
const messageId = "...";
await meeting.chat.deleteMessage(messageId); meeting.chat пространство имён предоставляет метод с именем deleteMessage(). Он принимает параметр messageId типа string.
const messageId = "...";
await meeting.chat.deleteMessage(messageId);Экспорт сообщений чата
Вы можете программно получить все сообщения чата сессии RealtimeKit следующими способами:
- Использование Chat Replay API
- Настройка вебхука для
meeting.chatSyncedсобытие
Получение URL для скачивания чата
Чтобы получить URL-адрес для скачивания чата, выполните HTTP-запрос GET запрос к Эндпойнт API воспроизведения чата. API возвращает:
{
"success": true,
"data": {
"chat_download_url": "string",
"chat_download_url_expiry": "string"
}
}chat_download_url- URL-адрес для скачивания полного дампа чата сессии в формате CSV из AWS S3chat_download_url_expiry- Временная метка истечения срока действияchat_download_url. Если срок действия URL истёк, вызовите этот эндпойнт снова, чтобы получить новый URL для скачивания
Подробнее об эндпойнте API воспроизведения чата см. в Документация API Realtime Kit.
Скачивание файла дампа чата
Файл дампа чата можно скачать в формате CSV, выполнив HTTP GET запрос к chat_download_url полученный на предыдущем шаге.
Процесс загрузки файла по HTTP URL-адресу отличается в зависимости от того, выполняется ли загрузка на стороне клиента или на стороне сервера.
Скачивание на клиенте
Чтобы скачать на стороне клиента:
- Сделайте
GETзапрос кchat_download_url - Преобразуйте ответ в Blob
- Создайте невидимый
<a>HTML-элемент сdownloadатрибут и добавьте Blob к егоhref - Программно нажмите на
<a>элемент, чтобы браузер автоматически начал загрузку, а затем удалите<a>элемент
Скачивание на сервере
Чтобы скачать на сервере с использованием потоков Node.js:
- Создание записываемого потока для локального файла
- Сделайте
GETзапрос кchat_download_url - Получите поток для чтения с помощью
res.bodyи передать в поток для записи, созданный на первом шаге
Формат экспорта чата в CSV
CSV-файл содержит все сообщения чата вместе с информацией об участниках и метаданными. В нём указаны следующие заголовки столбцов:
id- Уникальный идентификатор сообщения чатаparticipantId- ID участника, отправившего сообщениеsessionId- Идентификатор сессии, из которой было отправлено сообщение чатаmeetingId- Идентификатор встречи, которой принадлежит эта сессияdisplayName- Отображаемое имя участника, отправившего это сообщениеpinned- Логическое значение, указывающее, было ли текущее сообщение закрепленоisEdited- Логическое значение, указывающее, было ли текущее сообщение отредактированоpayloadType- ENUM, указывающий тип полезной нагрузки, отправленной в сообщении чата. Может принимать одно из значений:TEXT_MESSAGE,IMAGE_MESSAGE,FILE_MESSAGEpayload- Фактический payload, отправленный в сообщении чатаcreatedAt- Временная метка отправки этого сообщения чата