-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexample.go
More file actions
78 lines (62 loc) · 1.88 KB
/
example.go
File metadata and controls
78 lines (62 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package main
import (
"context"
"github.com/tinkershack/wabot/config"
"github.com/tinkershack/wabot/datastore"
"github.com/tinkershack/wabot/logger"
"github.com/tinkershack/wabot/wabot"
"github.com/tinkershack/wabot/webhooks"
"log/slog"
"github.com/spf13/viper"
)
func main() {
// Must satisfy config.Config fields
viper.SetEnvPrefix("wabot") // will be uppercased automatically, e.g. WABOT_BASEURL
viper.AutomaticEnv()
viper.SetConfigName("wabot")
viper.SetConfigType("yaml")
viper.AddConfigPath(".")
if err := viper.ReadInConfig(); err != nil {
slog.Error("Error reading config file", "error", err)
panic(err)
}
cfg := config.New()
// Unmarshal the values into the config.Config struct
if err := viper.Unmarshal(&cfg); err != nil {
slog.Error("Error parsing config file", "error", err)
panic(err)
}
logger := logger.NewTag(cfg.LogLevel, "main")
w, err := wabot.New(cfg)
if err != nil {
logger.Error("failed to create wabot", "error", err)
panic(err)
}
wl := w.Logger
handoffFn := webhooks.HandoffFunc(func(ctx context.Context, store *datastore.Store, rawData *[]byte) {
// logger.Debug("handoff", "raw_data", string(rawData))
})
respondFn := webhooks.RespondFunc(func(ctx context.Context, store *datastore.Store, payload webhooks.Payload) {
messages := payload.GetMessages()
if len(messages) == 0 {
wl.Warn("No messages found in payload")
return
}
// Process the messages
for _, message := range messages {
mtype := message.GetMessageType()
switch mtype {
case "location", "text", "flows", "interactive", "payment":
wl.Debug("message type", "type", mtype, "message", message)
default:
wl.Warn("unsupported message type", "type", mtype)
}
}
logger.Debug("respond", "payload", payload)
})
w.SetHandoffFn(handoffFn)
w.SetRespondFn(respondFn)
if err := w.Serve(); err != nil {
logger.Error("wabot failed", "error", err)
}
}