Zoom raw recording and chat messaging

I’m using the linux sdk to access raw video data, but as I understood from the docs, this sdk cant send messages in the meeting’s chat.

  1. How to use my meeting bot the send messages to the in-meeting chat?
  2. Is there an API to send messages in the chat without the requirement of a bot?
  3. The only solution I found is that I need to setup another bot with web sdk to access the chat features but then I’ll end up with 2 bots in the meeting.

How can I solve this?

(cc @chunsiong.zoom )
Thanks!

@gofmannir , you might be able to send message using

m_pMeetingService->GetMeetingChatController()->SendChatMsgTo(......)

Is there an API to send messages in the chat without the requirement of a bot?

No

The only solution I found is that I need to setup another bot with web sdk to access the chat features but then I’ll end up with 2 bots in the meeting.

Try sending using the method I’ve mentioned above

Hi, I’m trying to create a thread that will handle chat messaging in my application this way:

Defining global chatController: in the top on the file

IMeetingChatController* m_pChatController;

Defining it after the bot has joined succesfully:

m_pChatController = m_pMeetingService->GetMeetingChatController();

std::cout << "Setting up thread" << std::endl;
m_pChatController->SendChatMsgTo("mesasge before thread", 0, ZOOM_SDK_NAMESPACE::SDKChatMessageType_To_All);
thread(ReadResultsAndSendToChat).detach();
void ReadResultsAndSendToChat(){
    std::this_thread::sleep_for(std::chrono::seconds(3));
	std::cout << "trying to send chat in thread" << std::endl;
	SDKError err = m_pChatController->SendChatMsgTo("mesasge in thread", 0, ZOOM_SDK_NAMESPACE::SDKChatMessageType_To_All);

	if (err != SDKERR_SUCCESS) {
		std::cout << "Error occurred sending chat: " << err << std::endl;
	}
}

The “mesasge before thread” Sent successfully to the chat,
But “mesasge in thread” not sent, Without and SDKError.

What could cause that?
@chunsiong.zoom

I see that this similar to this: Can't send chat messages from a background thread - #4 by chunsiong.zoom
but no answer there too.

I’m trying to achieve that in a certain event, a chat message will be sent.
The events in my application defined by .txt/.json file that gets updated each X seconds.
So, I’m trying to setup a thread that will listen to file changes and accordingly send chat messages.

@gofmannir sorry I’m not familiar with the issue you are facing.

There is a very high possibility the issue you are having is due to threading and sleep.

As a rule of thumb, all of these needs to run on the main thread

@gofmannir Hi,

Please review here Can't send chat messages from a background thread - #2 by freelancer.nak

@chunsiong.zoom This is a very straightforward thread, even removing the sleep it still the same.
Why chat is limited only for the main thread?

@freelancer.nak Why do you this it’s like that? what workaround could work?
Is there any event based strategy that can be implemented here at all with the chatController?

As far as I know, the documentations and threads on the dev forums mentions that the functionalities of the SDK must run on the main thread.

Please use meetingService from main thread using event loop here is my working sample

// triggered from Event Loop
void BotLauncher::sendChat(string content)

{

_meetingService->GetMeetingChatController()->SendChatMsgTo(convertStringToWChar(content), 0, SDKChatMessageType::SDKChatMessageType_To_All);

}

// Called from main
void BotLauncher::SendChatFromMainThread()
{
	if (!msgs.empty())
	{
		sendChat(msgs.front());
		msgs.pop();
	}
}

// here is WinMain
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, char*, int nCmdShow)
{
	HeapSetInformation(NULL, HeapEnableTerminationOnCorruption, NULL, 0);

	Log logger;
	LPWSTR* meetingCreds = readJWT();

	if (meetingCreds[1] != NULL)
	{
		zoomBot = new BotLauncher(meetingCreds[1], meetingCreds[2], _atoi64(CW2A(meetingCreds[3])), meetingCreds[4], LPWSTRToString(meetingCreds[5]));

		zoomBot->Run(hInstance);

		std::this_thread::sleep_for(std::chrono::seconds(3));
	}

	MSG msg;
	while (GetMessage(&msg, NULL, 0, 0))
	{
		if (WM_QUIT == msg.message)
		{
			break;
		}

		if (zoomBot != NULL) {
			zoomBot->SendChatFromMainThread();
		}

		DispatchMessage(&msg);
	}

	return 0;
	TranslateMessage(&msg);
}

Hope that works for you. Thanks

Sorry but I’m using the linux sdk, What is the pattern you used here?

The pattern will be same as above for Windows.

I trying queuing & dispatching messages to the main thread but it frezzes the raw video recording I’m doing…
Maybe you can help me understand it offline?

You need to implement better multithread strategy to avoid that thing.

Hey @gofmannir ,

One thing that you might want to try is using something like GLib, which provides a pretty useful main loop abstraction that makes dealing with these sorts of things a bit simpler.

Then, you could edit your queueing strategy to use g_idle_add to call the function in the main loop, whenever there are no higher priority events pending. This should alleviate the freezing you’re observing in your current implementation.

We use a similar approach in our meeting bots and it works well for us.

Another alternative is to use Recall.ai for your meeting bots instead. It’s a simple 3rd party API that lets you use meeting bots to get raw audio/video from meetings without you needing to spend months to build, scale and maintain these bots.

Let me know if you have any questions!