开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 5 天,点击查看活动详情
上篇文章已经讲解了消息卡片的发送过程,在这里使用实现消息卡片的回调。消息卡片中有button组件,当用户点击button,消息卡片会更新,提示用户的选择。
遗留bug
需要注意,如果使用lark框架,在go-lark/lark sdk中,发送消息卡片的功能需要三行代码就可以实现。
如果该消息卡片内容并非固定,而需要提供参数,一般将消息卡片作为字符串,使用``括起,参数使用占位符%v,使用fmt.Sprint将提供的参数放入对应的占位符。
"" 与 `` 包裹字符串的区别
- 使用
""包裹的字符串会解析字符串中的转义符,因此性能与转义符的个数相关 - 使用
``包裹的字符串不会解析字符串中的转义符
若提供的参数存在偶数个`,虽然不会出现错误,但两个`之间的内容将不会正常显示。如使用参数
"`$`'"
在最终的消息卡片中,只会显示
反引号会如实展示字符串源码,包括debug代码时会发现fmt.Sprintf的字符串是正常的,所以问题出在了方法执行过程。
解决方法是停止使用字符串的方法,而是调用消息卡片的各组件进行拼接。如:github.com/go-lark/exa…
消息卡片的更新
首次配置订阅事件需要验证challenge.
{
"challenge": "ajls384kdjx98XX", // 应用需要在响应中原样返回的值
"token": "xxxxxx", // 即 Verification Token
"type": "url_verification" // 表示这是一个验证请求
}
需要在三秒内解析并返回challenge
配置成功后,监听到事件会向对应网址发送post请 求.open.feishu.cn/document/uk…
{
"open_id": "ou_sdfimx9948345", //用户的open_id
"user_id": "eu_sd923r0sdf5", //用户的user_id
"open_message_id": "om_abcdefg1234567890",//触发交互操作的消息id
"tenant_key": "d32004232",//消息归属的租户id
"token": "c-xxxxx",//用于更新消息卡片的token(凭证)
"action": //具体的交互信息
{ "value":
{ "key":"value" },// 由消息卡片中设置
"tag": "button"
}
}
具体代码可以移步:github.com/Zerlina-ysl…