猿问

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

我正在尝试创建Slack通知,以发送通知结构中可用的数据,即通知结构将是数据源。我很难将通知结构正确插入附件。请参阅下面的代码。有人知道我能做什么吗?非常感谢您的帮助。


我的预期结果(即Slack通知)将如下所示:


UserID: 99

Type: Slack or Email

Level: Warning

Received: time.Time (now)

Originator: Originator Name

Immediate:  false

Data:  interface{}

Recipients: {email@gmail.com; Recipient Name}

Customer: {1, Customer Name}

package main


import (

    "fmt"


    "time"


    "github.com/parnurzeal/gorequest"

)


//NotificationType is enum of available notification types

type NotificationType string


const (

    //Email should be sent via email protocols

    Email NotificationType = "email"

)


//NotificationLevel is enum of notification levels

type NotificationLevel string


//Notification levels represent the importance of the notification

const (

    Error   NotificationLevel = "error"

    Warning NotificationLevel = "warning"

    Info    NotificationLevel = "info"

)


//Recipient represents the recipient of the notification

type Recipient struct {

    Email string

    Name  string

}


//Customer represents the customer the notification is about

type Customer struct {

    ID   int

    Name string

}


//Notification is struct containing all information about notification

//This will be used as Datasource in the Attachment

type 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 notification

type Field struct {

    Title string

    Value []*Notification

}


// Attachment holds data used in payload

type Attachment struct {

    Text   *string  //`json:"text"`

    Fields []*Field //`json:"fields"`

}


//Payload defines the notification structure

type Payload struct {

    Text        string       `json:"text,omitempty"`

    Attachments []Attachment `json:"attachments,omitempty"`

}

慕丝7291255
浏览 77回答 1
1回答

慕村9548890

以下代码是此请求的解决方案。package mainimport (    "bytes"    "encoding/json"    "errors"    "fmt"    "net/http"    "strings"    "time"    "log"    "strconv"    )//DataFeed contains data for the string concatenationtype 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 heretype 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)        }
随时随地看视频慕课网APP

相关分类

Go
我要回答