larksuite / oapi-sdk-go

larksuite oapi sdk by golang
MIT License
413 stars 81 forks source link

unable to send MessageCard via webhook #66

Closed mxlxm closed 2 years ago

mxlxm commented 2 years ago
package main

import (
    "context"
    "fmt"

    "github.com/buger/jsonparser"
    lark "github.com/larksuite/oapi-sdk-go/v2"
)

type cardBody struct {
    Card    lark.MessageCard `json:"card"`
    MsgType string           `json:"msg_type"`
}

func main() {
    customerBot := lark.NewCustomerBot("https://open.feishu.cn/open-apis/bot/v2/hook/4935e6fc-4490-4340-b15e-719cebe96172", "xxxxxxxxxxxxxxxxxxxx")
    card := &lark.MessageCard{
        CardLink: &lark.MessageCardURL{
            URL:        "https://www.feishu.cn",
            AndroidURL: "https://www.feishu.cn",
            IOSURL:     "https://www.feishu.cn",
            PCURL:      "https://www.feishu.cn",
        },
        Config: &lark.MessageCardConfig{EnableForward: lark.BoolPtr(true)},
        Header: &lark.MessageCardHeader{
            Template: lark.StringPtr("blue"),
            Title: &lark.MessageCardPlainText{
                Content: "Header title",
            },
        },
        Elements: []lark.MessageCardElement{
            &lark.MessageCardImage{
                Alt: &lark.MessageCardPlainText{
                    Content: "img_v2_9221f258-db3e-4a40-b9cb-24decddee2bg",
                    Lines:   nil,
                },
                Title: &lark.MessageCardPlainText{
                    Content: "img_v2_9221f258-db3e-4a40-b9cb-24decddee2bg",
                },
                ImgKey:       "img_v2_9221f258-db3e-4a40-b9cb-24decddee2bg",
                CompactWidth: lark.BoolPtr(false),
            },
            &lark.MessageCardAction{
                Actions: []lark.MessageCardActionElement{
                    &lark.MessageCardEmbedButton{
                        Text: &lark.MessageCardPlainText{
                            Content: "button",
                        },
                        Type:  lark.MessageCardButtonTypeDanger.Ptr(),
                        Value: map[string]interface{}{"value": "1"},
                        Confirm: &lark.MessageCardActionConfirm{
                            Title: &lark.MessageCardPlainText{
                                Content: "Title",
                            },
                            Text: &lark.MessageCardPlainText{
                                Content: "Text",
                            },
                        },
                    },
                },
                Layout: lark.MessageCardActionLayoutFlow.Ptr(),
            },
            &lark.MessageCardMarkdown{
                Content: "**Markdown**",
            },
            &lark.MessageCardDiv{
                Text: &lark.MessageCardPlainText{
                    Content: "text",
                },
                Extra: &lark.MessageCardEmbedButton{
                    Text: &lark.MessageCardPlainText{
                        Content: "button",
                    },
                    Type:  lark.MessageCardButtonTypeDanger.Ptr(),
                    Value: map[string]interface{}{"value": "1"},
                    Confirm: &lark.MessageCardActionConfirm{
                        Title: &lark.MessageCardPlainText{
                            Content: "Title",
                        },
                        Text: &lark.MessageCardPlainText{
                            Content: "Text",
                        },
                    },
                },
            },
        },
    }
    str, err := card.JSON()
    if err != nil {
        panic(err)
    }
    body := []byte(`{"msg_type":"interactive","card":{}}`)
    body, err = jsonparser.Set(body, []byte(str), "card")
    if err != nil {
        panic(err)
    }
    fmt.Printf("%s", body)
    resp, err := customerBot.SendMessage(context.TODO(), "interactive", body)
    if err != nil {
        panic(err)
    }
    fmt.Printf("request id: %s \n", resp.RequestId())
    fmt.Println(lark.Prettify(resp))
}
  CodeError: {
    Code: 19002,
    Msg: "params error, unknown card value"
  }
zhaoche27 commented 2 years ago

https://github.com/larksuite/oapi-sdk-go/blob/v2_main/sample/customer_bot/customer_bot.go 看看这个示例或源代码(也也比较简单),直接 image

mxlxm commented 2 years ago

text类型是可以 消息卡片成功不了

zhaoche27 commented 2 years ago

可以继续发挥一下研发的精神,https://open.feishu.cn/document/ukTMukTMukTM/ucTM5YjL3ETO24yNxkjN#4996824a ,看看 你的&lark.MessageCard{} 的json 与 文档中的消息卡片有什么出入?

zhaoche27 commented 2 years ago

我这边也看看

mxlxm commented 2 years ago

可以继续发挥一下研发的精神,https://open.feishu.cn/document/ukTMukTMukTM/ucTM5YjL3ETO24yNxkjN#4996824a ,看看 你的&lark.MessageCard{} 的json 与 文档中的消息卡片有什么出入?

https://github.com/larksuite/oapi-sdk-go/blob/v2_main/sample/api/message_model_card.go 卡片内容是复制的这里的

mxlxm commented 2 years ago

尝试了直接传对象、对象地址、拼装json 都是相同的报错

zhaoche27 commented 2 years ago

go get -u github.com/larksuite/oapi-sdk-go/v2
github.com/larksuite/oapi-sdk-go/v2 v2.0.11 给你看看修改的代码:https://github.com/larksuite/oapi-sdk-go/commit/96f23e6b7ff4985185732aec46b86c7e31db046a ,其实问题也不难发现,需要细心一些。主要还是因为自定义机器人发送的消息体定义的问题,其他消息类型都是 content 字段, 只有消息卡片是 card 字段

mxlxm commented 2 years ago

没有仔细看代码 居家很烦躁。。。