调用飞书开发平台写一个小型的消息卡片与回调(下

1,864 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 5 天,点击查看活动详情 
上篇文章已经讲解了消息卡片的发送过程,在这里使用实现消息卡片的回调。消息卡片中有button组件,当用户点击button,消息卡片会更新,提示用户的选择。

遗留bug

需要注意,如果使用lark框架,在go-lark/lark sdk中,发送消息卡片的功能需要三行代码就可以实现。

截屏2023-02-05 16.35.37.png 如果该消息卡片内容并非固定,而需要提供参数,一般将消息卡片作为字符串,使用``括起,参数使用占位符%v,使用fmt.Sprint将提供的参数放入对应的占位符。

"" 与 `` 包裹字符串的区别

  • 使用 "" 包裹的字符串 会解析 字符串中的 转义符,因此性能与转义符的个数相关
  • 使用 `` 包裹的字符串 不会解析 字符串中的 转义符

若提供的参数存在偶数个`,虽然不会出现错误,但两个`之间的内容将不会正常显示。如使用参数

"`$`'"

在最终的消息卡片中,只会显示

截屏2023-02-05 16.54.17.png

反引号会如实展示字符串源码,包括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" 
      } 
}

截屏2023-02-06 16.40.37.png 具体代码可以移步:github.com/Zerlina-ysl…

参考

studygolang.com/articles/21…
juejin.cn/post/686377…