第二部分 Mendix服务开发
目前的方案是在Mendix上创建了一个可消费的RESTFUL服务,
创建Microflow逻辑如下:
1)根据获得来自飞书的消息, 创建HTTPResponse
因为需要在1 秒内回复飞书Request中的 CHALLENGE 值,所以要保存HTTPREQUEST中的CONTENT内容信息到HTTPResponse中,同时Response的StatusCode为“200”。
2、获得飞书上用户输入的变量
因为用户输入不同信息,希望获得飞书机器人不同的回复,所以需要通过Import Mapping把用户输入信息解析出来。
输入变量赋值到Variable_2对象中。
创建Jason结构 “AP_Purchase_Order.JSON_Feishu_MSG_first”
使用例子(当用户向机器人发出” 2600001525 6500 2019”查询财务凭证信息时发出的消息格式):
{
"uuid": "71c7fb189e40ed36XXXXXc91b68a24",
"event": {
"app_id": "cli_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”,
"chat_type": "private",
"employee_id": "ffb1c316",
"is_mention": false,
"lark_version": "lark/4.1.4",
"message_id": "",
"msg_type": "text",
"open_chat_id": "oc_e7ab3a366dcf33e282a3526da23c8cc5",
"open_id": "ou_20386a40b2af9a1d7bb1085853aff603",
"open_message_id": "om_b2936126a9e7673de9d3bc01e59fa9ee",
"parent_id": "",
"root_id": "",
"tenant_key": "2cXXXX575f",
"text": "2600001525 6500 2019",
"text_without_at_bot": "2600001525 6500 2019",
"type": "message",
"union_id": "on_a0883cdXXXXX394491ddab1745f",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36 Lark/4.1.4 LarkLocale/zh_CN ttnet SDK-Version/4.1.26",
"user_open_id": "ou_20XXXXXXXXX03"
},
"token": "dXXXXXXXXXX2ipmJ",
"ts": "1622708952.981788",
"type": "event_callback"
}
JSON消息中,需要获取的是
"employee_id" 飞书用户号
"open_chat_id" 飞书聊天群号
"text" 用户向机器人输入的文字
创建Jason结构的Import Mapping:
系统自动创建对应的Domain Model: Root
3、通过app_id,app_secret调用飞书API,获得tenant_access_token
向飞书发送消息,需要用appid和app_secret调用API获得token, 然后通过token再调用飞书API发送消息。
创建变量Token_request,分别赋值app_id和app_secret:
调用飞书API:https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/
把token_request赋值给这个Call REST的request:
把调用飞书API后返回的内容,通过JSON格式Mapping保存入tenant_access_token对象变量中。
把tenant_access_token对象变量中的tenant_access_token值,保存到tenant_access_token文本变量中:
4、调用SAP Odata服务,获得用户查询对应的EntitySet,保存到列表zadocalist.
通过Substring函数,把Variable_2对象中的Text中的BELNR单据号,RBUKRS公司,GJAHR年度获得放到Parameter中,传入另外一个微流,在这个微流里调用SAP ODATA服务,并把查询结果保存在zacdocaList列表中。
SAP查询用户和密码保存在固定变量中:
调用SAP ODATA:
Query的表达式举例:@ZRFICO_PROJECT_SRV.ZRFICO_PROJECT_SRV+'/'+ toString(ZRFICO_PROJECT_SRV.zacdocaList.zacdocaSet
)+'?$filter=Rbukrs%20eq%20%27'+$RBUKRS+'%27%20and%20Gjahr%20eq%20%27'
+$GJAHR+'%27%20and%20Belnr%20eq%20%27'+$BELNR+'%27'
其中@ZRFICO_PROJECT_SRV.ZRFICO_PROJECT_SRV代表SAPOdata服务名,ZRFICO_PROJECT_SRV.zacdocaList.zacdocaSet代表EntitySet名称。
拼接后的整个查询字符串举例为:
http://10.60.89.37:8000/sap/opu/odata/sap/ZRFICO_PROJECT_SRV/zacdocaSet?$filter=Rbukrs%20eq%20%276500%27%20and%20Gjahr%20eq%20%272019%27%20and%20Belnr%20eq%20%272600001525%27
调用SAPOdata服务后,运行结果保存到$ListOfACDOCA列表中。
5、生成查询返回飞书聊天群消息文本
把聊天群信息保存在chat_id变量中:
把用户ID信息保存在chat_id变量中:
创建返回信息的开头部分:@用户ID + 用户输入文本:
这一步完成后,返回到飞书的信息样子如下:
创建循环用于读取SAP返回的记录行,拼接成返回给飞书的消息内容:
在本例子中,用SAP Odata返回的记录中的4列信息组成返回给飞书的消息内容:
这一步做完后,返回飞书的消息文本格式如下:
6、通过chat_id,tenant_access_token,返回SAP查询消息给飞书群
创建对象NewRoot,按照返回信息报文格式,填写chat_id, msg_type, content, user_id:
然后Call飞书REST(https://open.feishu.cn/open-apis/message/v4/send/):
在HTTP Header中填写key “Authorization”,
格式为'Bearer ' + $Newtoken/tenant_access_token
构建Request的消息主体:
把NewRoot变量中保存的信息,Mapping到对应的HTTP请求报文中:
生成对应第一步飞书Request的返回飞书的Response,状态(StatusCode)200:
暂无数据