HTTP handlers
Plugins can define custom HTTP endpoints that are published under the main maubot web server. The endpoints can do anything from JSON APIs to fully fledged websites.
Web handlers are disabled by default. You must set webapp: true
in your
plugin's maubot.yaml
to enable them. After that, simply decorate an aiohttp
handler method with @web.method(path)
where method
is the HTTP method,
e.g. get
or post
:
from maubot import Plugin
from maubot.handlers import web
from aiohttp.web import Request, Response, json_response
class WebsiteBot(Plugin):
@web.get("/id")
async def get_id(self, req: Request) -> Response:
return json_response({"id": self.id})
@web.post("/data/{id}")
async def post_data(self, req: Request) -> Response:
data_id = req.match_info["id"]
data = await req.text()
self.log.debug(f"Received data with ID {data_id}: {data}")
return Response(status=200)
The defined endpoints are reachable at
http://your.maubot.instance/_matrix/maubot/plugin/<instance ID>/<path>
.
Plugins can find their own public web base URL in self.webapp_url
.
The web server itself is aiohttp. Refer to the aiohttp server docs for more
info on how to make request handler methods, responses and other such things.
The maubot.handlers.web
module is designed to work like
aiohttp's RouteTableDef
, but there may be minor differences.