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: **

  • 讲讲你背后的设计思想
  • 同时可以再想一下是不是有其它更有的方案,和大家讨论一下