回调功能

此页面将介绍koipy的回调细节

koipy基于HTTP协议实现了基本的回调功能。HTTP回调功能可以让koipy程序不改动源码的情况下实现以下需求:

  • 测试黑名单设立

  • 为不同用户重定向后端选择

  • 为测试结果进行数据分析和处理,并回传结果形成新的数据矩阵(新的列)

  • 输出自定义的图片,而不再局限于bot的绘图

  • 设立积分测试制度

  • 进行测试统计,计算用户量

  • 等等。。。

使用方法

在配置文件中加入如下配置(想开启哪个就取消注释):

callbacks:
  onMessage: http://127.0.0.1:8080/onMessage # 回调地址,机器人收到消息时,会向此地址发送POST请求,使用方法请看文档
#  onPreSend: http://127.0.0.1:8080/onPreSend # 回调地址,机器人处理所有任务的前置动作后(比如选定后端、选定规则等),会向此地址发送POST请求,来完成一些操作,使用方法请看文档
#  onResult: http://127.0.0.1:8080/onResult # 回调地址,机器人接受完测试结果后,会向此地址发送POST请求,可以用来添加,使用方法请看文档

这样,bot就会在特定时机发送POST请求到对应的回调地址,配置的三个回调地址的触发时机分别是:

  • callbacks.onMessage 在bot收到来自使用者的测试指令时

  • callbacks.onPreSend 在bot整理好所有的测试规则,即将发给后端时

  • callbacks.onResult 在接收完后端的测试结果,但还没有进行最终处理时

POST请求载荷

如无意外,bot向回调地址发送的POST请求的数据格式 始终为 JSON格式,它的结构体定义如下(最终序列化成JSON字符串):

处理结果

你需要自己建立回调服务器,使用你任何喜欢的编程语言搭建HTTP服务器,让它处理来自bot的请求,并构造响应结果,并将遵循HTTP协议的响应体回传给bot,其中响应体应遵循以下约定:

  1. 返回状态码

回调服务器应当返回HTTP状态码,根据状态码的不同,bot会作出以下操作:

  • 204 - bot会继续执行测试的代码逻辑

  • 200 - bot会继续执行测试的代码逻辑,并根据响应头的 "Content-Type" 字段,额外在TG发送不同的内容

  • >400 - bot将拒绝执行接下来的代码逻辑,并读取utf-8的文本内容作为错误提示回显给用户

  • 其他状态码 - bot将无视这些状态码,继续执行测试的代码逻辑

  1. 返回请求头的Content-Type字段

不论状态码是否是200,最好都返回Content-Type字段,bot会根据以下情况适配一些逻辑:

将发送额外的图片到Telegram,响应内容是一张图片:

将发送额外的提示文本:

将合并回调数据,修改或新增测试结果:

如果没有Content-Type字段,将会额外发送一个文件,并根据Content-Disposition字段设置文件名:

测试例子

以下是一个HTTP回调服务器的例子,它将在本地的8080端口运行回调服务,并展示一个基本运行逻辑:

最后更新于