Go SDK
The norq-go package provides a Go client for sending and linting notification templates.
Install
go get github.com/norq/norq-goRequires the norq binary to be installed and available in $PATH (or configured explicitly).
Quick start
package main
import (
"context"
"fmt"
"github.com/norq/norq-go"
)
func main() {
client, err := norq.New()
if err != nil {
panic(err)
}
ctx := context.Background()
// Send
result, err := client.Send(ctx, "transactional/order-shipped", norq.SendOpts{
To: &norq.Recipient{Email: "gaurav@example.com"},
Data: map[string]any{"user": map[string]any{"first_name": "Gaurav"}},
})
for _, r := range result.Results {
fmt.Printf("%s: success=%v\n", r.Channel, r.Success)
}
}Constructor options
client, _ := norq.New(
norq.WithBinaryPath("/usr/local/bin/norq"),
norq.WithCwd("/path/to/project"),
norq.WithResolver(myResolver),
)API
Send(ctx, id, opts)
result, err := client.Send(ctx, "transactional/welcome", norq.SendOpts{
To: &norq.Recipient{Email: "user@example.com"},
Data: map[string]any{...},
Sample: "New user", // alternative to Data
Channels: []string{"email"}, // optional filter
DryRun: false,
})Lint(ctx, id)
results, err := client.Lint(ctx, "") // all
results, err := client.Lint(ctx, "transactional/welcome") // one
for _, r := range results {
for _, d := range r.Diagnostics {
fmt.Printf("%s: %s [%s]\n", d.Severity, d.Message, d.Rule)
}
}RecipientResolver
type MyResolver struct {
db *sql.DB
}
func (r *MyResolver) Resolve(ctx context.Context, userID string) (*norq.Recipient, error) {
user, err := r.db.GetUser(ctx, userID)
if err != nil {
return nil, err
}
return &norq.Recipient{Email: user.Email, Phone: user.Phone}, nil
}
client, _ := norq.New(norq.WithResolver(&MyResolver{db: db}))Types
type Recipient struct {
Email string
Phone string
Slack *SlackRecipient
Push *PushRecipient
WhatsApp *WhatsAppRecipient
MsTeams *MsTeamsRecipient
}
type SendResult struct {
Success bool
Provider string
Channel string
MessageID string
Error string
}
type SendMultiResult struct {
Results []SendResult
Skipped []SkippedChannel
}Codegen
norq codegen --lang go --out internal/norq/types.goGenerates typed Go structs for each notification's data shape.