Chat during Live Stream - React
Enhance your live stream experience by enabling real-time audience chat using VideoSDK's usePubSub hook. Whether you’re streaming a webinar, online event, or an interactive session, integrating a chat system lets your viewers engage, ask questions, and react instantly. This guide shows how to build a group or private chat interface for a live stream using the Publish-Subscribe (PubSub) mechanism.
This guide focuses on using PubSub to implement Chat functionality. If you are not familiar with the PubSub mechanism and usePubSub
hook, you can follow this guide.
Implementing Chat​
Group Chat
(Public Chat for All Viewers)​
To allow your entire audience to chat during the stream:
- Choose a topic name (e.g. "CHAT") that everyone will publish and subscribe to. Retrieve the
publish()
method and messages array usingusePubSub
.
// importing usePubSub hook from react-sdk
import { usePubSub } from "@videosdk.live/react-sdk";
function ChatView() {
// destructure publish method from usePubSub hook
const { publish, messages } = usePubSub("CHAT");
return <>...</>;
}
- Next create a message input and a send button to publish the messages.
function ChatView() {
// destructure publish method from usePubSub hook
const { publish, messages } = usePubSub("CHAT");
// State to store the user typed message
const [message, setMessage] = useState("");
const handleSendMessage = () => {
// Sending the Message using the publish method
publish(message, { persist: true });
// Clearing the message input
setMessage("");
};
return (
<>
<input
value={message}
onChange={(e) => {
setMessage(e.target.value);
}}
/>
<button onClick={handleSendMessage}>Send Message</button>
</>
);
}
- Display incoming chat messages from all users, creating a real-time chat feed during the stream.
function ChatView() {
// destructure publish method from usePubSub hook
const { publish, messages } = usePubSub("CHAT");
const [message, setMessage] = useState("");
const handleSendMessage = () => {
...
};
return (
<>
<div>
<p>Messages: </p>
{messages.map((message) => {
return (
<p>
{messsage.senderName} says {message.message}
</p>
);
})}
</div>
<input
value={message}
onChange={(e) => {
setMessage(e.target.value);
}}
/>
<button onClick={handleSendMessage}>Send Message</button>
</>
);
}
Private Chat
(1:1 between Host and Viewer)​
Private messaging is ideal when a host or moderator needs to directly respond to a viewer’s question. This can be achieved using the sendOnly
property.
function ChatView() {
// destructure publish method from usePubSub hook
const { publish, messages } = usePubSub("CHAT");
// State to store the user typed message
const [message, setMessage] = useState("");
const handleSendMessage = () => {
// Sending the Message using the publish method
// Pass the participantId of the participant to whom you want to send the message.
publish(message, { persist: true , sendOnly: ['XYZ'] });
// Clearing the message input
setMessage("");
};
//...
}
Display Latest Message Notificaiton​
To alert hosts/moderators about new incoming chat messages in real-time:
function ChatView() {
// destructure publish method from usePubSub hook
const { publish, messages } = usePubSub("CHAT", {
onMessageReceived: (message)=>{
window.alert(message.senderName + "says" + message.message);
}
});
const [message, setMessage] = useState("");
const handleSendMessage = () => {
...
};
return <>...</>;
}
Downloading Chat Messages​
All the messages from PubSub published with persist : true
can be downloaded as an .csv
file. This file will be accessible in the VideoSDK dashboard and through the Sessions API.
API Reference​
The API references for all the methods and events utilized in this guide are provided below.
Got a Question? Ask us on discord