Здесь нет ничего плохого в bytes.NewBuffer()
. Со стороны slack он распознал сообщение, предоставленное только текстовым полем. Вам необходимо изменить дизайн вашей SlackRequestBody
структуры. Поскольку вы используете API Webhook для отправки сообщений, ваше тело запроса должно соответствовать формату структуры, заданному 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"
}
}
]
}
Я рекомендую использовать официальный go клиент слабины. Это обеспечит большую гибкость. Удачного кодирования.