本例子描述的场景是让用户在飞书聊天群里通过输入凭证单据号,公司法人和财政年度这3个字段,呼叫飞书机器人,飞书机器人在后端查询SAP财务凭证明细信息,返回给飞书聊天群。
整体实现逻辑:在Mendix上创建可消费的RESTFUL服务,在服务中获得飞书机器人发出的消息,首先按消息体原样 echo 回飞书去,让飞书获得消息已经送达的确认。然后解析用户输入的三个字段入参(BELNR单据号,RBUKRS公司,GJAHR年度),调用SAP Odata服务查询SAP数据。获得数据后,在向飞书发送消息前,用飞书机器人预设的appid和app_secret调用飞书API获得token, 然后通过token再调用飞书API把查询获得的消息发送给飞书聊天群指定用户。
第一部分 飞书机器人设置
在飞书上创建机器人,填写事件订阅-请求网址信息:
用户在飞书群里@机器人后发出的消息,会以POST方式发送到这个URL地址, 这个地址就是后面下一步在Mendix中创建的可消费的Restful服务的地址。
在飞书控制台,添加机器人订阅事件:
在飞书控制台,添加机器人权限:
在飞书开发平台后端,获得该飞书机器人关键信息:App ID、App Secret、Verification Token。
填写网址后,飞书系统会向这个网址发送一个 POST 请求。这个请求的内容如下:
POST /sspai HTTP/1.1 Host: fs.xxx.xxx Content-Length: 121 User-Agent: Go-http-client/1.1 Content-Type: application/json;charset=utf-8 X-Request-Id: 17212xxxxxxx Accept-Encoding: gzip {"challenge":"b715df13-587e-48e8-acf4-84d3e8dbaa51","token":"9a86Lk3lTNsXhNmu4Jkwce6NO1cje7yR","type":"url_verification"}
按照飞书官方的要求,应用接收此请求后,需要解析出 CHALLENGE 值,并于 1 秒内回复 CHALLENGE 值。
根据实际测试,超出1秒目前飞书也没有重新呼叫。不过由于回复的消息体仍然需要使用 json 格式,并且飞书服务器只读取 challenge 值,因此可以把发过来的消息体原样 echo 回去,并不需要从请求体的 json 数据中解析出 challenge 值。
看样子也可以在企业微信机器人上搞一下?😋