38 lines
1.3 KiB
Markdown
38 lines
1.3 KiB
Markdown
|
# Architecture
|
||
|
|
||
|
This document provides a big picture of Zulip's bot architecture.
|
||
|
|
||
|
## Design goals
|
||
|
|
||
|
The goal is to have a common framework for hosting a bot that reacts
|
||
|
to messages in any of the following settings:
|
||
|
|
||
|
* Run as a long-running process using `call_on_each_event`.
|
||
|
|
||
|
* Run via a simple web service that can be deployed to PAAS providers
|
||
|
and handles outgoing webhook requests from Zulip.
|
||
|
|
||
|
* Embedded into the Zulip server (so that no hosting is required),
|
||
|
which would be done for high quality, reusable bots; we would have a
|
||
|
nice "bot store" sort of UI for browsing and activating them.
|
||
|
|
||
|
* Run locally by our technically inclined users for bots that require
|
||
|
account specific authentication, for example: a Gmail bot that lets
|
||
|
one send emails directly through Zulip.
|
||
|
|
||
|
## Portability
|
||
|
|
||
|
The core logic of a bot is implemented in a class
|
||
|
that inherits from `ExternalBotHandler`.
|
||
|
Creating a handler class for each bot allows your bot
|
||
|
code to be more portable. For example, if you want to
|
||
|
use your bot code in some other kind of bot platform, then
|
||
|
if all of your bots conform to the `handler_class` protocol,
|
||
|
you can write simple adapter code to use them elsewhere.
|
||
|
|
||
|
## Other approaches
|
||
|
|
||
|
You can still use the full Zulip API to create custom
|
||
|
solutions. The hope, though, is that this architecture
|
||
|
will make writing simple bots a quick and easy process.
|