Testing with Room Manager
How-to Guide - Use Room Manager to test your Fishjam integration quickly without a backend
Room Manager is a development tool that lets you create rooms and peers for testing without setting up your own backend server. This guide shows you how to use it effectively.
Prerequisites
- Access to Fishjam Dashboard
- A Sandbox environment set up
Step 1: Get your Room Manager URL
- Log in to Fishjam Dashboard
- Navigate to your Sandbox App
- Copy your Room Manager URL - it will look like:
https://fishjam.io/api/v1/connect/YOUR_APP_UUID/room-manager
YOUR_APP_UUID
is your unique sandbox identifier. Anyone who knows this ID can join your rooms, so keep it secure during development.
Step 2: Create a room and get peer tokens
Using HTTP GET requests
The Room Manager API uses simple GET requests. Add query parameters to create rooms and peers:
https://fishjam.io/api/v1/connect/${YOUR_APP_UUID}/room-manager?roomName=foo&peerName=bar&roomType=conference
Required parameters:
roomName
- Name of the room to create/joinpeerName
- Name for the peer joining the room
Optional parameters:
roomType
- Type of room to create (defaults toconference
)
Room types available:
conference
- For video/audio conferencing (default)audio-only
- For audio-only conferencinglivestream
- For one-to-many video/audio streaming
Step 3: Handle the response
The Room Manager returns a JSON response with connection details:
{ "peerToken": "<PEER_TOKEN>", "url": "wss://fishjam.io/api/v1/connect/${YOUR_APP_UUID}", "room": { "id": "<ROOM_ID>", "name": "foo" }, "peer": { "id": "<PEER_ID>", "name": "bar" } }
Step 4: Use the tokens in your client app
Below are examples on how to use the tokens from room manager in your frontend applications:
- React Native
- React
export default function
TestScreen () { const [roomData ,setRoomData ] =useState <{url : string;peerToken : string; } | null>(null);useEffect (() => { constfetchRoomData = async () => { try { constresponse = awaitfetch ( `https://fishjam.io/api/v1/connect/${YOUR_APP_UUID }/room-manager?roomName=${roomName }&peerName=${peerName }&roomType=conference`, ); constdata = awaitresponse .json ();setRoomData (data ); } catch (error ) {console .error ("Failed to create room:",error ); } };fetchRoomData (); }, []); if (!roomData ) { return <Text >Creating room...</Text >; } return ( <FishjamRoom fishjamUrl ={roomData .url }peerToken ={roomData .peerToken } /> ); }
function
VideoCallComponent () { const {joinRoom } =useConnection (); const [isConnected ,setIsConnected ] =useState (false); consthandleJoinRoom = async () => { constroomName = "testRoom"; constpeerName = `user_${Date .now ()}`; try { constresponse = awaitfetch ( `https://fishjam.io/api/v1/connect/${YOUR_APP_UUID }/room-manager?roomName=${roomName }&peerName=${peerName }`, ); const {url ,peerToken } = awaitresponse .json (); awaitjoinRoom ({url ,peerToken });setIsConnected (true); } catch (error ) {console .error ("Failed to join room:",error ); } }; return ( <div > {!isConnected && <button onClick ={handleJoinRoom }>Join Room</button >} {isConnected && <p >Connected to room!</p >} </div > ); } export default functionApp () { return ( <FishjamProvider > <VideoCallComponent /> </FishjamProvider > ); }
Step 5: Test different room types
Testing audio-only rooms:
const audioOnlyUrl = `https://fishjam.io/api/v1/connect/${YOUR_APP_UUID}/room-manager?roomName=audioTest&peerName=user1&roomType=audio-only`;
Testing livestream rooms:
// For the streamer const streamerUrl = `https://fishjam.io/api/v1/connect/${YOUR_APP_UUID}/room-manager?roomName=liveStream&peerName=streamer&roomType=livestream`; // For viewers, you need a viewer token (different endpoint) const viewerTokenUrl = `https://fishjam.io/api/v1/connect/${YOUR_APP_UUID}/room-manager/liveStream/livestream-viewer-token`;
Step 6: Handle multiple peers
To test with multiple participants, create multiple peer tokens with different peer names:
// First peer const peer1Response = await fetch( `https://fishjam.io/api/v1/connect/${YOUR_APP_UUID}/room-manager?roomName=multiTest&peerName=alice`, ); // Second peer const peer2Response = await fetch( `https://fishjam.io/api/v1/connect/${YOUR_APP_UUID}/room-manager?roomName=multiTest&peerName=bob`, );
Both peers will join the same room (multiTest
) and can communicate with each other.
Common testing patterns
Pattern 1: Random room names for isolation
const
roomName = `test_${Math .random ().toString (36).substring (7)}`; constpeerName = `user_${Date .now ()}`;
Pattern 2: Consistent naming for repeated tests
const
roomName = "development-room"; constpeerName = `developer_1`;
Pattern 3: Feature-specific room names
const
roomName = `screenshare-test-${Date .now ()}`; constroomName = `audio-only-test`; constroomName = `livestream-demo`;
Troubleshooting
Issue: Room not found errors
Problem: Rooms might not persist between requests.
Solution: Always create rooms fresh for each test session.
Issue: Connection failures
Problem: Invalid app UUID or network issues.
Solution:
- Verify your app UUID in the Fishjam Dashboard
- Check network connectivity
- Ensure you're using the sandbox environment
Security reminder
Room Manager is not safe for production!
- No authentication required
- Anyone with your app UUID can join rooms
- Identical room/peer names get the same tokens
- No rate limiting or abuse protection
Only use Room Manager for development and testing.
Resetting your app
If you need to reset your Room Manager:
- Go to Fishjam Dashboard
- Click Settings
- Click Reset App
- Get your new app UUID
This will invalidate all existing tokens (including the management token!) and give you a fresh sandbox environment.
Next steps
Once you've tested your integration with Room Manager:
For production deployment: