← Cloudflare Realtime / realtime / realtimekit / core
Chat
Tento návod vysvětluje, jak pomocí Cloudflare RealtimeKit odesílat a přijímat chatové zprávy ve schůzce.
Úvod
V chatu lze odesílat tři typy zpráv:
- Textové zprávy
- Obrázky
- Soubory
Objekt chatu schůzky je uložen v meeting.chat, který obsahuje metody pro odesílání a příjem zpráv.
console.log("Chat object:", meeting.chat); meeting.chat.messages pole obsahuje všechny zprávy, které byly v chatu odeslány. Jedná se o pole objektů, kde každý objekt je typu Message.
console.log("All chat messages:", meeting.chat.messages);V chatu lze odesílat tři typy zpráv:
- Textové zprávy
- Obrázky
- Soubory
Objekt chatu schůzky je uložen v meeting.chat, který obsahuje metody pro odesílání a příjem zpráv.
meeting.chat; meeting.chat.messages pole obsahuje všechny zprávy, které byly v chatu odeslány. Jedná se o pole objektů, kde každý objekt je typu Message.
meeting.chat.messages;V chatu lze odesílat tři typy zpráv:
- Textové zprávy
- Obrázky
- Soubory
Objekt chatu schůzky je uložen v meeting.chat, který obsahuje metody pro odesílání a příjem zpráv.
meeting.chat meeting.chat.messages pole obsahuje všechny zprávy, které byly v chatu odeslány. Jedná se o pole objektů, kde každý objekt je typu com.cloudflare.realtimekit.chat.ChatMessage.
meeting.chat.messagesV chatu lze odesílat tři typy zpráv:
- Textové zprávy
- Obrázky
- Soubory
Objekt chatu schůzky je uložen v meeting.chat, který obsahuje metody pro odesílání a příjem zpráv.
meeting.chat meeting.chat.messages pole obsahuje všechny zprávy, které byly v chatu odeslány. Jedná se o pole objektů, kde každý objekt je typu RealtimeKit.ChatMessage.
meeting.chat.messagesV chatu lze odesílat tři typy zpráv:
- Textové zprávy
- Obrázky
- Soubory
Objekt chatu schůzky je uložen v meeting.chat, který obsahuje metody pro odesílání a příjem zpráv.
meeting.chat; meeting.chat.messages pole obsahuje všechny zprávy, které byly v chatu odeslány. Jedná se o pole objektů, kde každý objekt je typu Message.
meeting.chat.messages;Typ zprávy
Message typ je definován následovně:
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 typ je definován následovně:
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 třída je definována takto:
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 třída je definována takto:
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 typ je definován následovně:
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;Odeslání chatové zprávy
Odeslání textové zprávy
Existuje metoda v meeting.chat a odeslat tak zprávu každého typu.
Chcete-li odeslat textovou zprávu, použijte meeting.chat.sendTextMessage() metodu. Ta přijímá textovou zprávu (string) a odešle ji do místnosti.
const message = "Is this the real life?";
await meeting.chat.sendTextMessage(message);Existuje metoda v meeting.chat a odeslat tak zprávu každého typu.
Chcete-li odeslat textovou zprávu, použijte meeting.chat.sendTextMessage() metodu. Ta přijímá textovou zprávu (string) a odešle ji do místnosti.
const message = "Is this the real life?";
await meeting.chat.sendTextMessage(message);Existuje metoda v meeting.chat a odeslat tak zprávu každého typu.
Chcete-li odeslat textovou zprávu, použijte meeting.chat.sendTextMessage() metodu. Ta přijímá textovou zprávu (string) a odešle ji do místnosti.
val message = "Is this the real life?"
meeting.chat.sendTextMessage(message)Existuje metoda v meeting.chat a odeslat tak zprávu každého typu.
Chcete-li odeslat textovou zprávu, použijte meeting.chat.sendTextMessage() metodu. Ta přijímá textovou zprávu (string) a odešle ji do místnosti.
var message = "Is this the real life?"
meeting.chat.sendTextMessage(message)Existuje metoda v meeting.chat a odeslat tak zprávu každého typu.
Chcete-li odeslat textovou zprávu, použijte meeting.chat.sendTextMessage() metodu. Ta přijímá textovou zprávu (string) a odešle ji do místnosti.
const message = "Is this the real life?";
await meeting.chat.sendTextMessage(message);Odeslání obrázku
Obrázek můžete odeslat pomocí meeting.chat.sendImageMessage(). Přijímá obrázek typu File, a odešle je účastníkům schůzky.
<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]);
}Obrázek můžete odeslat pomocí meeting.chat.sendImageMessage(). Přijímá obrázek typu File, a odešle je účastníkům schůzky.
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>
</>
);
}Obrázek můžete odeslat pomocí meeting.chat.sendImageMessage() a odešle je účastníkům schůzky.
meeting.chat.sendImageMessage(imageUri) { err ->
// Handle error if any
}Obrázek můžete odeslat pomocí meeting.chat.sendImageMessage() a odešle je účastníkům schůzky.
meeting.chat.sendImageMessage(imageURL: url) { err in
// Handle error if any
}Obrázek můžete odeslat pomocí meeting.chat.sendImageMessage(). Přijímá obrázek typu File a odešle jej účastníkům schůzky.
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);
}Odeslání souboru
Odesílání souboru je podobné odesílání obrázku. Jediný rozdíl je v tom, že při odeslání obrázku se v chatu schůzky zobrazí náhled, což u souborů neplatí. I tak lze obrázek odeslat i jako soubor pomocí 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]);
}Odesílání souboru je podobné odesílání obrázku. Jediný rozdíl je v tom, že při odeslání obrázku se v chatu schůzky zobrazí náhled, což u souborů neplatí. I tak lze obrázek odeslat i jako soubor pomocí 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>
</>
);
}Odesílání souboru je podobné odesílání obrázku. Jediný rozdíl je v tom, že při odeslání obrázku se v chatu schůzky zobrazí náhled, což u souborů neplatí. I tak lze obrázek odeslat i jako soubor pomocí meeting.chat.sendFileMessage().
meeting.chat.sendFileMessage(fileUri) { err ->
// Handle error if any
}Odesílání souboru je podobné odesílání obrázku. Jediný rozdíl je v tom, že při odeslání obrázku se v chatu schůzky zobrazí náhled, což u souborů neplatí. I tak lze obrázek odeslat i jako soubor pomocí meeting.chat.sendFileMessage().
meeting.chat.sendFileMessage(fileURL: url) { err in
// Handle error if any
}Odesílání souboru je podobné odesílání obrázku. Jediný rozdíl je v tom, že při odeslání obrázku se v chatu schůzky zobrazí náhled, což u souborů neplatí. I tak lze obrázek odeslat i jako soubor pomocí 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);
}Odeslání libovolného typu zprávy
Existuje také běžná metoda nazvaná meeting.chat.sendMessage() kterou lze použít k odeslání kteréhokoli ze tří typů zpráv zobrazených výše. V podstatě volá jednu z výše uvedených metod v závislosti na typu payloadu, který metodě odešlete. sendMessage() metoda přijímá parametr message následujícího typu:
async function sendMessage(
message:
| { type: "text"; message: string }
| { type: "image"; image: File }
| { type: "file"; file: File },
) {
// ...
}Zde je návod, jak použít sendMessage() metodu pro odeslání textové zprávy:
const message = "Is this just fantasy?";
await meeting.chat.sendMessage({ type: "text", message });Existuje také běžná metoda nazvaná meeting.chat.sendMessage() kterou lze použít k odeslání kteréhokoli ze tří typů zpráv zobrazených výše. V podstatě volá jednu z výše uvedených metod v závislosti na typu payloadu, který metodě odešlete. sendMessage() metoda přijímá parametr message následujícího typu:
async function sendMessage(
message:
| { type: "text"; message: string }
| { type: "image"; image: File }
| { type: "file"; file: File },
) {
// ...
}Zde je návod, jak použít sendMessage() metodu pro odeslání textové zprávy:
const message = "Is this just fantasy?";
await meeting.chat.sendMessage({ type: "text", message });Existuje také běžná metoda nazvaná meeting.chat.sendMessage() kterou lze použít k odeslání kteréhokoli ze tří typů zpráv zobrazených výše. V podstatě volá jednu z výše uvedených metod v závislosti na typu payloadu, který metodě odešlete. sendMessage() metoda přijímá parametr message následujícího typu:
async function sendMessage(
message:
| { type: "text"; message: string }
| { type: "image"; image: File }
| { type: "file"; file: File },
) {
// ...
}Zde je návod, jak použít sendMessage() metodu pro odeslání textové zprávy:
const message = "Is this just fantasy?";
await meeting.chat.sendMessage({ type: "text", message });Příjem chatových zpráv
meeting.chat emituje události při přijetí nových zpráv v chatu. Můžete naslouchat chatUpdate událost pro zaznamenání přijetí nové zprávy v chatu.
meeting.chat.on("chatUpdate", ({ message, messages }) => {
console.log(`Received message ${message}`);
console.log(`All messages in chat: ${messages.join(", ")}`);
});Zde message je typu Message, jak je definováno v úvodu. messages je seznam všech zpráv chatu ve schůzce, což je totéž jako meeting.chat.messages.
Když je přijata chatová zpráva, meeting.chat.messages seznam se také aktualizuje.
console.log(JSON.stringify(meeting.chat.messages));
meeting.chat.on("chatUpdate", () => {
console.log(JSON.stringify(meeting.chat.messages));
}); meeting.chat emituje události při přijetí nových zpráv v chatu. Můžete naslouchat chatUpdate událost pro zaznamenání přijetí nové zprávy v chatu.
import { useRealtimeKitSelector } from "@cloudflare/realtimekit-react";
// useRealtimeKitSelector hooks only works when `RealtimeKitProvider` is used.
const messages = useRealtimeKitSelector((m) => m.chat.messages);Alternativně:
meeting.chat.on("chatUpdate", ({ message, messages }) => {
console.log(`Received message ${message}`);
console.log(`All messages in chat: ${messages.join(", ")}`);
});Zde message je typu Message, jak je definováno v úvodu. messages je seznam všech zpráv chatu ve schůzce, což je totéž jako meeting.chat.messages.
Když je přijata chatová zpráva, meeting.chat.messages seznam se také aktualizuje.
console.log(JSON.stringify(meeting.chat.messages));
meeting.chat.on("chatUpdate", () => {
console.log(JSON.stringify(meeting.chat.messages));
});Abyste mohli přijímat chatové zprávy, musíte implementovat metodu onChatUpdates() metodu z callbacku RtkChatEventListener. K odběru těchto událostí se můžete přihlásit voláním 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() metoda se zavolá vždy, když dojde ke změně chatových zpráv. messages parametr je seznam ChatMessage odeslané v chatu.
onNewChatMessage() metoda se zavolá vždy, když je ve schůzce sdílena nová chatová zpráva. message parametr je ChatMessage odeslaný v chatu.
onMessageRateLimitReset() metoda se zavolá, jakmile se obnoví limit rychlosti pro odesílání zpráv od self a budete moci znovu odesílat zprávy. Výchozí limit rychlosti je 180 zpráv za 60 sekund.
Abyste mohli přijímat chatové zprávy, musíte implementovat metodu onChatUpdates() metodu z callbacku RtkChatEventListener. K odběru těchto událostí se můžete přihlásit voláním 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() metoda se zavolá vždy, když dojde ke změně chatových zpráv. messages parametr je seznam ChatMessage odeslané v chatu.
onNewChatMessage() metoda se zavolá vždy, když je ve schůzce sdílena nová chatová zpráva. message parametr je ChatMessage odeslaný v chatu.
onMessageRateLimitReset() metoda se zavolá, jakmile se obnoví limit rychlosti pro odesílání zpráv od self a budete moci znovu odesílat zprávy. Výchozí limit rychlosti je 180 zpráv za 60 sekund.
meeting.chat emituje události při přijetí nových zpráv v chatu. Můžete naslouchat chatUpdate událost pro zaznamenání přijetí nové zprávy v chatu.
meeting.chat.on("chatUpdate", ({ message, messages }) => {
console.log(`Received message ${message}`);
console.log(`All messages in chat: ${messages.join(", ")}`);
});Zde message je typu Message, jak je definováno v úvodu. messages je seznam všech zpráv chatu ve schůzce, což je totéž jako meeting.chat.messages.
Když je přijata chatová zpráva, meeting.chat.messages seznam se také aktualizuje.
console.log(JSON.stringify(meeting.chat.messages));
meeting.chat.on("chatUpdate", () => {
console.log(JSON.stringify(meeting.chat.messages));
});Úprava zpráv v chatu
Úprava textové zprávy
Existuje metoda v meeting.chat a upravit tak zprávu každého typu.
Chcete-li upravit textovou zprávu, použijte meeting.chat.editTextMessage() metodu. Ta přijímá messageId (typ string) a message (typ string).
const message = meeting.chat.messages[0];
const messageId = message?.id;
const newMessage = "Is this the real life?";
await meeting.chat.editTextMessage(messageId, newMessage);Existuje metoda v meeting.chat a upravit tak zprávu každého typu.
Chcete-li upravit textovou zprávu, použijte meeting.chat.editTextMessage() metodu. Ta přijímá messageId (typ string) a message (typ string).
const message = meeting.chat.messages[0];
const messageId = message?.id;
const newMessage = "Is this the real life?";
await meeting.chat.editTextMessage(messageId, newMessage);Existuje metoda v meeting.chat a upravit tak zprávu každého typu.
Chcete-li upravit textovou zprávu, použijte meeting.chat.editTextMessage() metodu. Ta přijímá messageId (typ string) a message (typ string).
const message = meeting.chat.messages[0];
const messageId = message?.id;
const newMessage = "Is this the real life?";
await meeting.chat.editTextMessage(messageId, newMessage);Úprava obrázku
Obrázek můžete upravit pomocí meeting.chat.editImageMessage(). Přijímá messageId typu string a obrázek typu 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]);
}Obrázek můžete upravit pomocí meeting.chat.editImageMessage(). Přijímá messageId typu string a obrázek typu 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>
</>
);
}Obrázek můžete upravit pomocí meeting.chat.editImageMessage(). Přijímá messageId typu string a obrázek typu 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);
}Úprava souboru
Úprava souboru je podobná úpravě obrázku. Chcete-li upravit soubor, použijte 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]);
}Úprava souboru je podobná úpravě obrázku. Chcete-li upravit soubor, použijte 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>
</>
);
}Úprava souboru je podobná úpravě obrázku. Chcete-li upravit soubor, použijte 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);
}Úprava libovolného typu zprávy
Existuje také běžná metoda nazvaná meeting.chat.editMessage() kterou lze použít k úpravě kteréhokoli ze tří typů zpráv zobrazených výše. V podstatě volá jednu z výše uvedených metod v závislosti na typu payloadu, který metodě odešlete. editMessage() metoda přijímá parametry messageId a message následujícího typu:
async function editMessage(
messageId: string,
message:
| { type: "text"; message: string }
| { type: "image"; image: File }
| { type: "file"; file: File },
) {
// ...
}Zde je návod, jak použít editMessage() metodu pro úpravu textové zprávy:
const messageId = "...";
const message = "Is this just fantasy?";
await meeting.chat.editMessage(messageId, { type: "text", message });Existuje také běžná metoda nazvaná meeting.chat.editMessage() kterou lze použít k úpravě kteréhokoli ze tří typů zpráv zobrazených výše. V podstatě volá jednu z výše uvedených metod v závislosti na typu payloadu, který metodě odešlete. editMessage() metoda přijímá parametry messageId a message následujícího typu:
async function editMessage(
messageId: string,
message:
| { type: "text"; message: string }
| { type: "image"; image: File }
| { type: "file"; file: File },
) {
// ...
}Zde je návod, jak použít editMessage() metodu pro úpravu textové zprávy:
const messageId = "...";
const message = "Is this just fantasy?";
await meeting.chat.editMessage(messageId, { type: "text", message });Existuje také běžná metoda nazvaná meeting.chat.editMessage() kterou lze použít k úpravě kteréhokoli ze tří typů zpráv zobrazených výše. V podstatě volá jednu z výše uvedených metod v závislosti na typu payloadu, který metodě odešlete. editMessage() metoda přijímá parametry messageId a message následujícího typu:
async function editMessage(
messageId: string,
message:
| { type: "text"; message: string }
| { type: "image"; image: File }
| { type: "file"; file: File },
) {
// ...
}Zde je návod, jak použít editMessage() metodu pro úpravu textové zprávy:
const messageId = "...";
const message = "Is this just fantasy?";
await meeting.chat.editMessage(messageId, { type: "text", message });Další funkce chatu
Získání zpráv od uživatele
meeting.chat zpřístupňuje pro pohodlnější práci s chatem i další metody.
Zprávy konkrétního uživatele získáte předáním jeho ID do meeting.chat.getMessagesByUser() metoda.
// 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 zpřístupňuje pro pohodlnější práci s chatem i další metody.
Zprávy konkrétního uživatele získáte předáním jeho ID do meeting.chat.getMessagesByUser() metoda.
// 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 zpřístupňuje pro pohodlnější práci s chatem i další metody.
Zprávy konkrétního uživatele získáte předáním jeho ID do meeting.chat.getMessagesByUser() metoda.
// 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);Získání zpráv konkrétního typu
Zprávy určitého typu můžete také získat pomocí meeting.chat.getMessagesByType() metodu. Můžete například získat všechny obrázkové zprávy přítomné v chatu pomocí následujícího úryvku kódu:
const imageMessages = meeting.chat.getMessagesByType("image");Zprávy určitého typu můžete také získat pomocí meeting.chat.getMessagesByType() metodu. Můžete například získat všechny obrázkové zprávy přítomné v chatu pomocí následujícího úryvku kódu:
const imageMessages = meeting.chat.getMessagesByType("image");Zprávy určitého typu můžete také získat pomocí meeting.chat.getMessagesByType() metodu. Můžete například získat všechny obrázkové zprávy přítomné v chatu pomocí následujícího úryvku kódu:
const imageMessages = meeting.chat.getMessagesByType("image");Připnutí chatové zprávy
V chatu můžete připnout několik zpráv. Jakmile zprávu připnete, bude mít objekt zprávy atribut pinned: true, pomocí kterého zjistíte, zda je zpráva připnutá.
Chcete-li připnout zprávu:
// Pin the first message in the chat (could be text, image, or file).
const { id } = meeting.chat.messages[0];
await meeting.chat.pin(id);Jakmile připnete zprávu, bude přidána do 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 truePřipnutou zprávu můžete také odepnout pomocí meeting.chat.unpin() metoda.
// Unpin the first pinned message.
const { id } = meeting.chat.pinned[0];
await meeting.chat.unpin(id);Můžete naslouchat událostem, které oznámí, kdy byla zpráva připnuta nebo odepnuta.
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));
});V chatu můžete připnout několik zpráv. Jakmile zprávu připnete, bude mít objekt zprávy atribut pinned: true, pomocí kterého zjistíte, zda je zpráva připnutá.
Chcete-li připnout zprávu:
// Pin the first message in the chat (could be text, image, or file).
const { id } = meeting.chat.messages[0];
await meeting.chat.pin(id);Jakmile připnete zprávu, bude přidána do 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 truePřipnutou zprávu můžete také odepnout pomocí meeting.chat.unpin() metoda.
// Unpin the first pinned message.
const { id } = meeting.chat.pinned[0];
await meeting.chat.unpin(id);Můžete naslouchat událostem, které oznámí, kdy byla zpráva připnuta nebo odepnuta.
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));
});V chatu můžete připnout několik zpráv. Jakmile zprávu připnete, bude mít objekt zprávy atribut pinned: true, pomocí kterého zjistíte, zda je zpráva připnutá.
Chcete-li připnout zprávu:
// Pin the first message in the chat (could be text, image, or file).
const { id } = meeting.chat.messages[0];
await meeting.chat.pin(id);Jakmile připnete zprávu, bude přidána do 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 truePřipnutou zprávu můžete také odepnout pomocí meeting.chat.unpin() metoda.
// Unpin the first pinned message.
const { id } = meeting.chat.pinned[0];
await meeting.chat.unpin(id);Můžete naslouchat událostem, které oznámí, kdy byla zpráva připnuta nebo odepnuta.
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));
});Odstranění chatové zprávy
meeting.chat jmenný prostor zpřístupňuje metodu s názvem deleteMessage(). Přijímá parametr messageId typu string.
const messageId = "...";
await meeting.chat.deleteMessage(messageId); meeting.chat jmenný prostor zpřístupňuje metodu s názvem deleteMessage(). Přijímá parametr messageId typu string.
const messageId = "...";
await meeting.chat.deleteMessage(messageId); meeting.chat jmenný prostor zpřístupňuje metodu s názvem deleteMessage(). Přijímá parametr messageId typu string.
const messageId = "...";
await meeting.chat.deleteMessage(messageId);Export zpráv chatu
Všechny chatové zprávy relace RealtimeKit můžete programově načíst následujícími způsoby:
- Použití Chat Replay API
- Nastavení webhooku pro
meeting.chatSyncedudálost
Získání adresy URL pro stažení chatu
Chcete-li získat URL pro stažení chatu, proveďte HTTP GET požadavek na Koncový bod Chat Replay API. API vrací:
{
"success": true,
"data": {
"chat_download_url": "string",
"chat_download_url_expiry": "string"
}
}chat_download_url- URL adresa, pomocí které si můžete stáhnout celý výpis chatu relace ve formátu CSV z AWS S3chat_download_url_expiry- Časové razítko vypršení platnostichat_download_url. Pokud URL vyprší, zavolejte tento koncový bod znovu a získejte novou URL ke stažení
Podrobnosti o koncovém bodu API Chat Replay najdete v Dokumentace API Realtime Kit.
Stáhněte soubor s výpisem chatu
Soubor s exportem chatu můžete stáhnout ve formátu CSV odesláním HTTP GET požadavek na chat_download_url získaný v předchozím kroku.
Proces stahování souboru z adresy URL HTTP se liší podle toho, zda stahujete na straně klienta, nebo na straně serveru.
Stahování na klientovi
Stažení na straně klienta:
- Vytvořte
GETpožadavek nachat_download_url - Převeďte odpověď na blob
- Vytvořte neviditelný
<a>HTML elementu sdownloadatribut a přidejte blob do jehohref - Programově klikněte na
<a>element, aby prohlížeč automaticky zahájil stahování, a poté odeberte<a>element
Stahování na serveru
Stažení na serveru pomocí streamů Node.js:
- Vytvoření zapisovatelného streamu pro lokální soubor
- Vytvořte
GETpožadavek nachat_download_url - Získejte čitelný stream pomocí
res.bodya propojte (pipe) se zapisovatelným streamem vytvořeným v prvním kroku
Formát exportu chatu do CSV
Soubor CSV obsahuje všechny chatové zprávy spolu s informacemi o účastnících a metadaty. Obsahuje následující záhlaví sloupců:
id- Jedinečné ID chatové zprávyparticipantId- ID účastníka, který zprávu odeslalsessionId- ID relace, ze které byla chatová zpráva odeslánameetingId- ID schůzky, ke které tato relace patřídisplayName- Zobrazované jméno účastníka, který tuto zprávu odeslalpinned- Boolean hodnota, která udává, zda byla aktuální zpráva připnutaisEdited- Boolean hodnota, která udává, zda byla aktuální zpráva upravenapayloadType- ENUM, který udává typ payloadu odeslaného ve zprávě chatu. Může nabývat jedné z hodnotTEXT_MESSAGE,IMAGE_MESSAGE,FILE_MESSAGEpayload- Skutečný obsah odeslaný v chatové zprávěcreatedAt- Časové razítko odeslání této chatové zprávy