前言
你还在为需要手撕 JSON 代码而烦恼吗?消息卡片搭建工具全新升级,为你带来更优雅的卡片创作体验:
🌟 卡片编辑:纯可视化操作编辑消息卡片,再也不用碰代码
🌟 我的卡片:一键保存卡片,轻松构建你的专属卡片模板库
🌟 模板消息:无需烦恼冗长的请求体,一个卡片 ID 就能发送
可视化编辑工具
如上图卡片上每个元素,都提供了可视化的边界功能。
卡片格式与数据分离
如上每个卡片都有一个ID,我们称之为卡片模板的ID,另外卡片上每个元素都可以绑定一个变量,通过修改变量的值,卡片模板会生成一个具体的实例。
发送消息卡片
新版消息卡片使用下面协议进行发送
也就是开发者只需要传递卡片模板的ID,以及模板中需要的占位符的值。服务端接受请求后会根据模板ID获取到模板内容,然后结合模板占位符的值进行渲染就得到一个具体的消息卡片的实例。
基于oapi-go-sdk进行发送消息的代码如下:
package main
import (
"context"
"encoding/json"
"fmt"
lark "github.com/larksuite/oapi-sdk-go/v3"
larkcore "github.com/larksuite/oapi-sdk-go/v3/core"
larkim "github.com/larksuite/oapi-sdk-go/v3/service/im/v1"
"os"
)
type NewCardContent struct {
Type string `json:"type,omitempty"`
Data *NewCardContentData `json:"data,omitempty"`
}
type NewCardContentData struct {
TemplateID string `json:"template_id,omitempty"`
TemplateVariable map[string]interface{} `json:"template_variable,omitempty"`
}
func (m *NewCardContent) String() (string, error) {
bs, err := json.Marshal(m)
if err != nil {
return "", err
}
return string(bs), nil
}
func main() {
// 创建client
var appID, appSecret = os.Getenv("APP_ID"), os.Getenv("APP_SECRET")
client := lark.NewClient(appID, appSecret)
// 构建卡片消息
cardContent := &NewCardContent{
Type: "template",
Data: &NewCardContentData{
TemplateID: "ctp_AAYmRrRBHYZP",
TemplateVariable: map[string]interface{}{
"title": "我是加多888",
},
},
}
content, err := cardContent.String()
if err != nil {
fmt.Println(err)
return
}
// 发送消息
resp, err := client.Im.Message.Create(context.Background(), larkim.NewCreateMessageReqBuilder().
ReceiveIdType(larkim.ReceiveIdTypeOpenId).
Body(larkim.NewCreateMessageReqBodyBuilder().
MsgType(larkim.MsgTypeInteractive).
ReceiveId("ou_c245b0a7dff2725cfa2fb104f8b48b9d").
Content(content).
Build()).
Build())
if err != nil {
fmt.Println(err)
return
}
if !resp.Success() {
fmt.Println(resp.Code, resp.Msg, resp.RequestId())
return
}
fmt.Println(larkcore.Prettify(resp))
fmt.Println(resp.RequestId())
}
视频介绍地址
https://www.bilibili.com/video/BV1zd4y1E7ug/?spm_id_from=333.999.0.0