亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么不 byte.NewBuffer 接受全身請求?

為什么不 byte.NewBuffer 接受全身請求?

Go
慕哥9229398 2022-05-23 16:48:46
我是 golang 的新手,我正在編寫一個腳本來使用傳入的 webhook 向 slack 發送消息。slackBody, _ := json.Marshal(SlackRequestBody{Text: msg, EventName: "xxx", AccountId: "xxx",        EventTime: "xxxxx", UserName: "xxxx", yyy: "xx", Status: "xx"})    fmt.Println(string(slackBody))    //test := ioutil.ReadAll(bytes.NewBuffer(slackBody))    req, err := http.NewRequest(http.MethodPost, webhookUrl, bytes.NewBuffer(slackBody))    if err != nil {        return err    }    req.Header.Add("Content-Type", "application/json")    client := &http.Client{Timeout: 10 * time.Second}    resp, err := client.Do(req)這個帖子請求只包含“req”請求的幾個字。你能幫我弄清楚這個問題嗎?
查看完整描述

1 回答

?
森林海

TA貢獻2011條經驗 獲得超2個贊

這里沒有錯bytes.NewBuffer() 。從 slack 的角度來看,它只識別“文本”字段提供的消息。你需要重新設計你的SlackRequestBody結構。當您使用 Webhook API 發送消息時,您的請求正文應遵循slack.


POST https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX

Content-type: application/json

{

  "text": ...

  "blocks": ...

  "attachments": ...

  "thread_ts": ...

  "mrkdwn": ... 

  ... ... ...

}

所以,你的SlackRequestBody結構應該是這樣的:


package main


import (

    "encoding/json"

    "fmt"

    "time"

)


type SlackRequestBody struct {

    Text            string  `json:"text"`

    Blocks          []Block `json:"blocks,omitempty"`

    ThreadTimestamp string  `json:"thread_ts,omitempty"`

    Mrkdwn          bool    `json:"mrkdwn,omitempty"`

}


type Block struct {

    BlockID string `json:"block_id,omitempty"`

    Type    string `json:"type"`

    Text    Text   `json:"text"`

}


type Text struct {

    Type string `json:"type"`

    Text string `json:"text"`

}


func main() {

    var payload = &SlackRequestBody{

        Text: "Your message",

        Blocks: []Block{

            {

                Type: "section",

                Text: Text{

                    Type: "plain_text",

                    Text: "User Name: XXXX",

                },

                BlockID: "username",

            },

            {

                Type: "section",

                Text: Text{

                    Type: "plain_text",

                    Text: "Event Time: " + time.Now().String(),

                },

                BlockID: "eventTime",

            },

        },

    }


    data, err := json.Marshal(payload)

    if err != nil {

        panic(err)

    }


    fmt.Println(string(data))


}

去游樂場

輸出:


{

   "text":"Your message",

   "blocks":[

      {

         "block_id":"username",

         "type":"section",

         "text":{

            "type":"plain_text",

            "text":"User Name: XXXX"

         }

      },

      {

         "block_id":"eventTime",

         "type":"section",

         "text":{

            "type":"plain_text",

            "text":"Event Time: 2020-03-29 14:11:33.533827881 +0600 +06 m=+0.000078203"

         }

      }

   ]

}

我會推薦你使用 slack 的官方go 客戶端。它將提供更大的靈活性??鞓肪幋a。


查看完整回答
反對 回復 2022-05-23
  • 1 回答
  • 0 關注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號