为了账号安全,请及时绑定邮箱和手机立即绑定

根据数据源在附件中发送数据

根据数据源在附件中发送数据

Go
慕丝7291255 2022-08-15 15:38:30
我正在尝试创建Slack通知,以发送通知结构中可用的数据,即通知结构将是数据源。我很难将通知结构正确插入附件。请参阅下面的代码。有人知道我能做什么吗?非常感谢您的帮助。我的预期结果(即Slack通知)将如下所示:UserID: 99Type: Slack or EmailLevel: WarningReceived: time.Time (now)Originator: Originator NameImmediate:  falseData:  interface{}Recipients: {email@gmail.com; Recipient Name}Customer: {1, Customer Name}package mainimport (    "fmt"    "time"    "github.com/parnurzeal/gorequest")//NotificationType is enum of available notification typestype NotificationType stringconst (    //Email should be sent via email protocols    Email NotificationType = "email")//NotificationLevel is enum of notification levelstype NotificationLevel string//Notification levels represent the importance of the notificationconst (    Error   NotificationLevel = "error"    Warning NotificationLevel = "warning"    Info    NotificationLevel = "info")//Recipient represents the recipient of the notificationtype Recipient struct {    Email string    Name  string}//Customer represents the customer the notification is abouttype Customer struct {    ID   int    Name string}//Notification is struct containing all information about notification//This will be used as Datasource in the Attachmenttype Notification struct {    UserID     int    Type       NotificationType    Level      NotificationLevel    Received   time.Time    Originator string    Immediate  bool    Data       interface{}    // following field are populated by notification service itself    Recipients []*Recipient    Customer   *Customer}//Field defines fields to be used in the notificationtype Field struct {    Title string    Value []*Notification}// Attachment holds data used in payloadtype Attachment struct {    Text   *string  //`json:"text"`    Fields []*Field //`json:"fields"`}//Payload defines the notification structuretype Payload struct {    Text        string       `json:"text,omitempty"`    Attachments []Attachment `json:"attachments,omitempty"`}
查看完整描述

1 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

以下代码是此请求的解决方案。


package main


import (

    "bytes"

    "encoding/json"

    "errors"

    "fmt"

    "net/http"

    "strings"

    "time"

    "log"

    "strconv"

    )


//DataFeed contains data for the string concatenation

type DataFeed struct {

    CustomerID    int

    CustomerName  string

    CustomerEmail string

    CustomerPhone string

    Received      time.Time

}

//ConcatenateDate takes data from DataFeed and concatenates them into a msg ('\n' separated)

func ConcatenateData(d DataFeed) (msg string) {

    values := []string{}

    values = append(values, "New notification incoming, see more details below:")

    values = append(values, "ID: " + strconv.Itoa(d.CustomerID))

    values = append(values, "Name: " + d.CustomerName)

    values = append(values, "Email: " + d.CustomerEmail)

    values = append(values, "Phone Number: " + d.CustomerPhone)

    values = append(values, "Received: " + (d.Received).String())


    msg = strings.Join(values, "\n")

    //fmt.Println(values)

    //fmt.Println(msg)


    return msg

}


// SlackRequestBody comment here

type SlackRequestBody struct {

    Text string `json:"text"`

}


func SendSlackNotification(webhookURL string, msg string) error {

    slackBody, _ := json.Marshal(SlackRequestBody{Text: msg})

    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)

    if err != nil {

        return err

    }


    buf := new(bytes.Buffer)

    buf.ReadFrom(resp.Body)

    if buf.String() != "ok" {

        return errors.New("Non-ok response returned from Slack")

    }


    return nil

}


func main() {

    webhookURL := "https://hooks.slack.com/services/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"


    e := DataFeed{

        CustomerID:    767,

        CustomerName:  "Tom",

        CustomerEmail: "tom.nemeth85@gmail.com",

        CustomerPhone: "07479551111",

        Received:      time.Now(),

    }


    fmt.Println(e)

    fmt.Printf("\n")

    fmt.Println(ConcatenateData(e))

    

        err := SendSlackNotification(webhookURL, ConcatenateData(e)) //--> Set "e" as argument here

        if err != nil {

            log.Fatal(err)

        }


查看完整回答
反对 回复 2022-08-15
  • 1 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信