省流:10元永久asp服务器 + quicker + python 实现消息响应
背景:工作中,有少部分频次较高的系统事务项,费时又费力。比如A\B\C\D\E\F 同时有同类的支持需求。
由于公司内部沟通软件是飞书,所以就基于飞书做了机器人。期望向机器人按格式发送口令消息,即可触发相应的操作。
消息类型形如【天气.成都】、【天气.省份=四川.城市=成都】,类似于【前缀.**参数】的形式。
这种形式本质是对原有的系统功能做补充,类似插件作用。
还可借助飞书的多维表格,实现灵活的权限配置。
可以拓展口令,实现丰富的功能,就使用者而言,不会有系统的切换,体验极佳。
由于我不专业,处理流程可能比较繁琐,希望各位路过的大佬不吝赐教优化,权当提供一点思路,抛砖引玉。
实现路径大逻辑:
1.用户向飞书机器人发送消息(单聊则直接向机器人发消息,群聊则需在群内@机器人)
2.飞书POST事件到提前配置的URL(机器人需要订阅[接收消息],注意取消勾选接收全部群消息;)
3.服务器接受请求,并处理转发到本地电脑(使用quicker推送服务,我的推荐码:606468-8096)
4.本地电脑运行py,处理/回复
关键代码之—ASP服务器代码:
由于这个服务器asp版本out,并且限制了库使用,网上ASP的相关代码也比较少,所以我有部分代码是抄GPT
以下代码主要实现:解析飞书发过的POST请求体(忽略所有中文,试了很多办法,暂时没找到方法),提取参数推送给quicker
<%
'先响应飞书服务器,飞书若未检测到消息200,则会安排重发,神烦 Response.Write "200" ' Read binary data from HTTP request ——抄GPT Dim bytes, text, byteCount bytes = Request.BinaryRead(Request.TotalBytes) byteCount = LenB(bytes) ' bytes -> string —— 抄GPT Dim byte1, byte2, byte3 Dim charCode, charCount text = "" charCount = 0 '根据GPT改写的,只保留数字、英文、常用符号,把ansi128以上的全部丢弃(中文丢弃)
'无奈之举,试了很多办法仍然不能正确解析出中文 For i = 1 to byteCount byte1 = AscB(MidB(bytes, i, 1)) If (byte1 < 128) Then text = text & Chr(byte1) End If charCount = charCount + 1 Next
' 试了下面的库,有的不能用,果然免费是有代价的 ' Set jsonObj = Server.CreateObject("MSXML2.DOMDocument.6.0") 不支持 ' Set jsonObj = Server.CreateObject("JSON") 不支持 ' Set data = Server.CreateObject("Scripting.Dictionary") 不支持 ' JSON.stringify 不支持 ' stext = Server.HTMLEncode(text) 可用,将{"a":1}转为 {"a": 1} ' 创建json对象 将str转成 json,可以正常使用,解析json文档,非常好
' 处理飞书消息,提取出必要参数。为什么要这么多参数?可能是为了减少向飞书服务器发送消息查询请求,忘记了。 Dim json Set json = Server.CreateObject("ScriptControl") json.Language = "JScript" json.AddCode("var obj = " & text ) message_id = json.Eval("obj.event.message.message_id") user_id = json.Eval("obj.event.sender.sender_id.user_id") chat_type = json.Eval("obj.event.message.chat_type") message_type = json.Eval("obj.event.message.message_type") sender_ou_id = json.Eval("obj.event.sender.sender_id.open_id") chat_id = json.Eval("obj.event.message.chat_id") On Error Resume Next parent_id = json.Eval("obj.event.message.parent_id") If Err.Number <> 0 Then parent_id = "" End If On Error GoTo 0 ' 这里好像是为了判断是否是消息转发,转发的消息不处理 Dim mentions_dt,mentions_ls,count On Error Resume Next Set mentions_dt = json.Eval("obj.event.message.mentions") mentions_ls = "" For Each item In mentions_dt mentions_ls = mentions_ls & item.id.union_id &"." Next If Err.Number <> 0 Then mentions_ls = "only_all" End If On Error GoTo 0 On Error Resume Next text = message_id & "," & user_id & "," & sender_ou_id & "," & chat_type & "," & message_type & "," & parent_id & "," & chat_id &","& mentions_ls If Err.Number <> 0 Then text = "text合并错误" End If On Error GoTo 0
' 创建请求 Dim xhr Set xhr = Server.CreateObject("MSXML2.XMLHTTP") Dim url, postData
' GET形式的quicker长连接 url = "https://push.getquicker.cn/to/quicker?toUser=邮箱&code=推送密码&operation=action&action=动作ID&data="&参数text xhr.open "GET", url, False xhr.send
' 我用的是iphone,配置了bark同步通知,方便调试 url = "https://api.day.app/bark码/asp程序正确执行"&参数text xhr.open "GET", url, False xhr.send %>
06-18 12:52