Skip to content

Commit bae83ae

Browse files
committed
Add support for more webhook events
1 parent 7c338c9 commit bae83ae

File tree

4 files changed

+14806
-42668
lines changed

4 files changed

+14806
-42668
lines changed

api/pkg/listeners/webhook_listener.go

Lines changed: 81 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,11 @@ func NewWebhookListener(
3131
}
3232

3333
return l, map[string]events.EventListener{
34-
events.EventTypeMessagePhoneReceived: l.OnMessagePhoneReceived,
34+
events.EventTypeMessagePhoneReceived: l.OnMessagePhoneReceived,
35+
events.EventTypeMessageSendExpired: l.OnMessageSendExpired,
36+
events.EventTypeMessagePhoneDelivered: l.OnMessagePhoneDelivered,
37+
events.EventTypeMessageSendFailed: l.OnMessageSendFailed,
38+
events.EventTypeMessagePhoneSent: l.OnMessagePhoneSent,
3539
}
3640
}
3741

@@ -53,3 +57,79 @@ func (listener *WebhookListener) OnMessagePhoneReceived(ctx context.Context, eve
5357

5458
return nil
5559
}
60+
61+
// OnMessageSendExpired handles the events.EventTypeMessageSendExpired event
62+
func (listener *WebhookListener) OnMessageSendExpired(ctx context.Context, event cloudevents.Event) error {
63+
ctx, span := listener.tracer.Start(ctx)
64+
defer span.End()
65+
66+
var payload events.MessageSendExpiredPayload
67+
if err := event.DataAs(&payload); err != nil {
68+
msg := fmt.Sprintf("cannot decode [%s] into [%T]", event.Data(), payload)
69+
return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
70+
}
71+
72+
if err := listener.service.Send(ctx, payload.UserID, event, payload.Owner); err != nil {
73+
msg := fmt.Sprintf("cannot process [%s] event with ID [%s]", event.Type(), event.ID())
74+
return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
75+
}
76+
77+
return nil
78+
}
79+
80+
// OnMessageSendFailed handles the events.EventTypeMessageSendFailed event
81+
func (listener *WebhookListener) OnMessageSendFailed(ctx context.Context, event cloudevents.Event) error {
82+
ctx, span := listener.tracer.Start(ctx)
83+
defer span.End()
84+
85+
var payload events.MessageSendFailedPayload
86+
if err := event.DataAs(&payload); err != nil {
87+
msg := fmt.Sprintf("cannot decode [%s] into [%T]", event.Data(), payload)
88+
return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
89+
}
90+
91+
if err := listener.service.Send(ctx, payload.UserID, event, payload.Owner); err != nil {
92+
msg := fmt.Sprintf("cannot process [%s] event with ID [%s]", event.Type(), event.ID())
93+
return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
94+
}
95+
96+
return nil
97+
}
98+
99+
// OnMessagePhoneSent handles the events.EventTypeMessagePhoneSent event
100+
func (listener *WebhookListener) OnMessagePhoneSent(ctx context.Context, event cloudevents.Event) error {
101+
ctx, span := listener.tracer.Start(ctx)
102+
defer span.End()
103+
104+
var payload events.MessagePhoneSentPayload
105+
if err := event.DataAs(&payload); err != nil {
106+
msg := fmt.Sprintf("cannot decode [%s] into [%T]", event.Data(), payload)
107+
return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
108+
}
109+
110+
if err := listener.service.Send(ctx, payload.UserID, event, payload.Owner); err != nil {
111+
msg := fmt.Sprintf("cannot process [%s] event with ID [%s]", event.Type(), event.ID())
112+
return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
113+
}
114+
115+
return nil
116+
}
117+
118+
// OnMessagePhoneDelivered handles the events.EventTypeMessagePhoneDelivered event
119+
func (listener *WebhookListener) OnMessagePhoneDelivered(ctx context.Context, event cloudevents.Event) error {
120+
ctx, span := listener.tracer.Start(ctx)
121+
defer span.End()
122+
123+
var payload events.MessagePhoneDeliveredPayload
124+
if err := event.DataAs(&payload); err != nil {
125+
msg := fmt.Sprintf("cannot decode [%s] into [%T]", event.Data(), payload)
126+
return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
127+
}
128+
129+
if err := listener.service.Send(ctx, payload.UserID, event, payload.Owner); err != nil {
130+
msg := fmt.Sprintf("cannot process [%s] event with ID [%s]", event.Type(), event.ID())
131+
return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))
132+
}
133+
134+
return nil
135+
}

0 commit comments

Comments
 (0)