Table of contents
Part of nurago, a collection of independent Go packages for backend services.
import "github.com/tecnickcom/nurago/pkg/slack"
Package slack provides a client for sending messages to Slack via Incoming Webhooks.
Slack webhook reference: https://api.slack.com/messaging/webhooks
What It Provides
Newcreates a configured webhook client.Client.Sendsends a text message with per-message overrides for username, icon emoji, icon URL, and channel, while falling back to client defaults.Client.HealthCheckperforms an availability check against a status endpoint (default: Slack Status API) with a dedicated ping timeout.
Usage
c, err := slack.New(
webhookURL,
"my-bot",
":rocket:",
"",
"#deployments",
)
if err != nil {
return err
}
if err := c.HealthCheck(ctx); err != nil {
return err
}
err = c.Send(ctx,
"deployment succeeded",
"", // use default username
"", // use default icon emoji
"", // use default icon URL
"", // use default channel
)
if err != nil {
return err
}
When To Use
- A service sends alerts or deployment notices to a channel.
- Sender name, icon, and channel have defaults but must be overridable per message.
Example
// A stand-in for a Slack Incoming Webhook endpoint. Real code passes the
// https://hooks.slack.com/services/... address issued by Slack.
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
body, _ := io.ReadAll(r.Body)
fmt.Println(string(body))
_, _ = w.Write([]byte("ok"))
}))
defer srv.Close()
// The constructor takes the defaults applied to every message: sender
// name, icon emoji, icon URL, and channel.
client, err := slack.New(srv.URL, "deploybot", ":rocket:", "", "#releases")
if err != nil {
fmt.Println(err)
return
}
// Empty metadata arguments fall back to the client defaults.
err = client.Send(context.TODO(), "release v1.2.3 is live", "", "", "", "")
fmt.Println("err:", err)
// Output:
// {"text":"release v1.2.3 is live","username":"deploybot","icon_emoji":":rocket:","channel":"#releases"}
// err: <nil>
Full source is in example_slack_test.go. More runnable examples are on pkg.go.dev.
Dependencies
Importing this package pulls 1 external module:
github.com/julienschmidt/httprouter