@@ -36,6 +36,8 @@ func NewWebhookListener(
3636 events .EventTypeMessagePhoneDelivered : l .OnMessagePhoneDelivered ,
3737 events .EventTypeMessageSendFailed : l .OnMessageSendFailed ,
3838 events .EventTypeMessagePhoneSent : l .OnMessagePhoneSent ,
39+ events .EventTypePhoneHeartbeatOnline : l .onPhoneHeartbeatOnline ,
40+ events .EventTypePhoneHeartbeatOffline : l .onPhoneHeartbeatOffline ,
3941 }
4042}
4143
@@ -133,3 +135,41 @@ func (listener *WebhookListener) OnMessagePhoneDelivered(ctx context.Context, ev
133135
134136 return nil
135137}
138+
139+ // OnMessagePhoneDelivered handles the events.EventTypeMessagePhoneDelivered event
140+ func (listener * WebhookListener ) onPhoneHeartbeatOffline (ctx context.Context , event cloudevents.Event ) error {
141+ ctx , span := listener .tracer .Start (ctx )
142+ defer span .End ()
143+
144+ var payload events.PhoneHeartbeatOfflinePayload
145+ if err := event .DataAs (& payload ); err != nil {
146+ msg := fmt .Sprintf ("cannot decode [%s] into [%T]" , event .Data (), payload )
147+ return listener .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
148+ }
149+
150+ if err := listener .service .Send (ctx , payload .UserID , event , payload .Owner ); err != nil {
151+ msg := fmt .Sprintf ("cannot process [%s] event with ID [%s]" , event .Type (), event .ID ())
152+ return listener .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
153+ }
154+
155+ return nil
156+ }
157+
158+ // OnMessagePhoneDelivered handles the events.EventTypeMessagePhoneDelivered event
159+ func (listener * WebhookListener ) onPhoneHeartbeatOnline (ctx context.Context , event cloudevents.Event ) error {
160+ ctx , span := listener .tracer .Start (ctx )
161+ defer span .End ()
162+
163+ var payload events.PhoneHeartbeatOnlinePayload
164+ if err := event .DataAs (& payload ); err != nil {
165+ msg := fmt .Sprintf ("cannot decode [%s] into [%T]" , event .Data (), payload )
166+ return listener .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
167+ }
168+
169+ if err := listener .service .Send (ctx , payload .UserID , event , payload .Owner ); err != nil {
170+ msg := fmt .Sprintf ("cannot process [%s] event with ID [%s]" , event .Type (), event .ID ())
171+ return listener .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg ))
172+ }
173+
174+ return nil
175+ }
0 commit comments