slack

slack provides a client for sending messages to Slack via Incoming Webhooks.

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

  • New creates a configured webhook client.
  • Client.Send sends a text message with per-message overrides for username, icon emoji, icon URL, and channel, while falling back to client defaults.
  • Client.HealthCheck performs 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