企微机器人设计
1 为什么要做一个机器人?
解决的问题 (🤖的适用场景)
- 日常工作中,重复繁琐的运营工作
- 线上问题定位 (媒资 Union 查询,用户染色、错误日志等 )
- 借助机器人做错误告警,业务周报等
2 设计思想
-
可扩展
-
可扩展,轻松增加新指令
-
统一的指令注册接口
-
指令按照 tree 的方式管理,每个指令实现一个文件。
-
内聚:指令实现细节在内部的 rpc 包中管理
-
基于文本消息指令
-
基于空格分隔的多级指令设计;
-
格式:@robot <cmd…> < arguments >
-
易用性(对用户友好)
-
类似 unix 工具,每一级指令要带有 help 指令,并给出示例,无需查询文档,即可上手。
-
采用 markdown 消息, 消息样式丰富,可读性好,提示使用体验;
方案选型
本质: 聊天机器人:类似于一个Unix 命名行工具。
** 方案一 **:unix tool 设计:(commands、arguments 和 flags)
比如: 采用 Cobra 实现 (支持子命名
):
@robot sampler add vuid 1234 @robot help @robot -h
TODO: Cobra 的设计
** 方案二** : 策略模式 优点: 相对灵活,简单,方便定制。
现有实现的不足
这次CR的代码,由于没有历史包袱,3月份做的一个工具微服务; 也减少了 ReadAbility 一些常见的问题。
设计问题: 接口设计: 指令、参数 应该分离
实现问题:
- rpc 包命名不规范
- reqCmd 下标访问
方案:对特定的消息,可增加一层 struct 构造,然后处理; 由于指令本身比较简单,多加一层,维护起来没那么直观。
** tips: **
- 讲讲你背后的设计思想
- 同时可以再想一下是不是有其它更有的方案,和大家讨论一下