前言
你还在为需要手撕 JSON 代码而烦恼吗?消息卡片搭建工具全新升级,为你带来更优雅的卡片创作体验:
卡片编辑:纯可视化操作编辑消息卡片,再也不用碰代码
我的卡片:一键保存卡片,轻松构建你的专属卡片模板库
模板消息:无需烦恼冗长的请求体,一个卡片 ID 就能发送
可视化编辑工具
如上图卡片上每个元素,都提供了可视化的边界功能,用来方便的编辑卡片元素的属性信息。
新版消息卡片消息内容协议如下:
{
"type":"template",
"data":{
"template_id":"ctp_xxxxxxxxxxxx",//卡片id,参数必填。可在搭建工具中通过“复制卡片ID”获取
"template_variable":
{
//卡片中绑定的变量的取值。如没有绑定变量,可不填此字段。
}
}
}
也就是开发者发送卡片消息时,只需要传递卡片模板的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())
}