Allow access to MessageService topics across experiences/universes

Problem

As a Roblox developer, it is currently too hard to pass messages between experiences and/or universes.

Use Cases

Although the following use cases are presented, there are more use cases that I can think of.

Use Case 1

This use case involves cross-game chat. One such a scenario would entail a player opening a support ticket in game which a message is sent to a different game in which all the players are moderators. Within that game, the ticket is assigned to a moderator (game master) and the game master opens a chat with the player. The chat system would be a custom implementation. All these messages are not just cross server, but also cross experience/universe. This would allow for a moderator to help a player without having to log into the specific server that the player is in.

Use Case 2

Using a custom chat system as was described in case 1 above, commands can be sent to specific game servers to perform actions on that server.

One such action would be to kick a player. A command such as /kick <player name> would be sent to all servers in all games to kick that one player no matter what game they are in.

Another action would be to locate a player. If a moderator chooses to join the player in game, they would need to locate the server the player is logged into. A command such as /teleport2player <player name> would launch a query to all active servers across all games. The server that has the player responds with it’s game.GameId, game.PlaceId, and game.JobId. Then the teleport service can be used to teleport the moderator to that specific server, if there is room.

Additional Information

Currently, the only way to do this involves the use of Cloud APIs and sending the message off the Roblox platform and then looping the message back to the Roblox platform with the new destination This method creates additional headaches with security and reliability. The big issue here is once the message leaves the platform, Roblox has lost control of it. Additionally, since security is an issue, if the external server is compromised, the messages can be manipulated before being sent back causing havoc.

Proposed Solution

One implementation that I thought of is utilizing the current MessagingService API to send messages across experiences and/or universes.

You would have a web interface for the specific global message topic in which one could add or remove the experiences which are allowed to access it, similar to the current sound permissions. Unlike the sound permissions, you can revoke access for security reasons. This would also allow the creation and deletion of said topic. You would have to create the topic first in the web interface to use it. Upon creation, you would be given a system generated identifier for that specific topic. The identifiers are unique across the platform.

Within the experiences you subscribe to the global topic as you would any other topic. This allows for the use of existing code patterns to implement message responders.

Conclusion

If Roblox is able to address this issue, it would improve my development experience because then I can have one game that is specific to moderators who can watch over many games from one location. Furthermore, this also increases security since messages are not leaving the Roblox platform which eliminates a point of vulnerability.

3 Likes

If this was a feature it would be so useful!

3 Likes

There is a way to implement this right now with HttpService

1 Like

Unless you set up your own proxy server, this is unfortunately not really possible given the block on requests to *.roblox.com on HttpService

1 Like

No, you don’t need it as you can just set up a web server to communicate information between servers using HttpService

If you aren’t aware, you would need a middle-man server to allow this as Roblox blocks requests to it’s own domain through HttpService.

1 Like

Yeah, I’m not using Roblox’s api.

There are free and powerful servers such as vercel which can get the job done

As these servers can communicate information between each other by passing information to the server with http long polling

Yes, it is possible to use free external services like Vercel to host the middle-man server, but it isn’t necessarily ideal. For example, Roblox actually limits HttpService to 3 simultaneous in-flight requests, meaning you can only have so many long-polling requests without distrupting other in-game operations.

Bruh, that isn’t what long polling is

Even though Roblox has a limit of 500 requests per minute, every second you could ping the vercel server seeing if there is any information from other servers

@SpoostyGuy The reason why I made the feature request is because I don’t want to deal with the hassle of setting up another external server to handle this. And did you actually read the point that I made about security issues? If not, I strongly suggest you go back and reread it.

I’m going to tell you what I told someone in the other feature request thread.

So by advocating for people to use the HTTP service, you are advocating that this information leaves Roblox’s custody and therefore their control. By setting up an external server, Roblox is no longer responsible for the data if it should be stolen or modified maliciously. Not only that, not everyone knows how to set up a server in the first place. So you would have a novice programmer attempt to configure a server for HTTPS with certificates using a web server like Apache, then configure Node.js, Ruby, PHP, Python, or some other scripting language, then use that language to process requests. That is what you are asking. Most people can’t or won’t deal with that even though they need this type of functionality.

And don’t forget, the developer is responsible for that server in both maintenance and security aspects. On top of that, if there is a breach and the data is compromised, the developer will be held responsible, not Roblox.

So no, this is a needed infrastructure feature and I hope they implement it, above your objections.

I’ve done this many times in the past and thought of this and I implemented server verification making sure the request comes from Roblox and encryption so the data doesn’t get stolen

Roblox in many cases ignores feature requests so :person_shrugging:, but this is just a solution

Perhaps I should attend the next Roblox Devcon and submit it to them personally.

I know this is six days old, but I must say that this is possibly the worst and most expensive way to do real-time in Roblox.

Use long polling on something that runs for a long time, like a virtual machine. Like other serverless platforms, Vercel charges by the request and the millisecond. In a month, just having one Roblox server on will get you 2.6 million requests, and about as much compute time, far beyond any free tier.

(I quite like Pushpin.)