基于 satori 协议机器人的服务端
graph TD;
User(用户)--?-->Chat(聊天平台);
Adaptor(对应平台的适配器)--API-->Chat(聊天平台);
Adaptor--资源变更的API/GRPC?-->Server(本服务);
Server--内部触发事件后通过satori协议中的事件下发-->Client(客户端);
graph LR;
Client(客户端)--satori的API-->Server(本服务);
Server--事件下发API/GRPC?-->Adaptor(对应平台的适配器);
Adaptor--API-->Chat(聊天平台);
Chat--?-->User(用户)
- internal # 内部包,基于pkg包的实现
- pkg # 公共包,核心模块和主要逻辑
- adaptor # 适配器的定义
- application # 本服务本身是一个应用, 这里是针对这个应用的定义
- config # 配置的定义
- plugin # 插件(不是机器人插件,而是插件开发模式中,插件本身,定义插件)
- satori # satori协议下 适配器和机器人插件 的约束
- main.go #程序启动入口
模块名 | 说明 | 建议 |
---|---|---|
自增序列 | 提供资源的自增序列 | 可以使用外部能力实现,不必显示提供(例如数据库自增主键) |
http 服务 | 接收和处理资源变更的请求 | 接收事件后立刻触发事件,将事件交给事件处理 |
事件管理 | 用于接收外部事件变更后广播给对应的所有监听者,需要提供监听者注册能力 | - |
资源管理 | 存储资源和资源事件 | 资源本身必须是有序队列,类似 feed |
插件管理 | 插件完整生命周期维护,提供与插件的交互能力,另外提供一个 go 语言的插件 builder,加速插件开发 | 基于hashicorp/go-plugin,且需要提供一份脱离语言的文档/模板仓库 |
资源模型 | 资源模型的 struct,且需要提供 grpc 和 json 报文能力 | 单独建一个仓库satori-protocol-go/satori-model-go |
事件渠道 | 基于一个接口,实现 ws/webhook 两种渠道 | - |