11package services
22
33import (
4+ "bytes"
45 "context"
6+ "encoding/json"
57 "fmt"
68 "net/http"
79 "time"
@@ -13,7 +15,6 @@ import (
1315 "github.com/NdoleStudio/httpsms/pkg/entities"
1416 "github.com/NdoleStudio/httpsms/pkg/repositories"
1517 "github.com/NdoleStudio/httpsms/pkg/telemetry"
16- "github.com/carlmjohnson/requests"
1718 cloudevents "github.com/cloudevents/sdk-go/v2"
1819 "github.com/palantir/stacktrace"
1920)
@@ -71,22 +72,47 @@ func (service *Integration3CXService) sendNotification(ctx context.Context, even
7172
7273 payload , err := service .getPayload (event )
7374 if err != nil {
74- msg := fmt .Sprintf ("cannot generate payload from [%s] event with ID [%s] for user [%s]" , event .Type (), event .ID (), integration .UserID )
75+ msg := fmt .Sprintf ("cannot generate [3cx] payload from [%s] event with ID [%s] for user [%s]" , event .Type (), event .ID (), integration .UserID )
7576 ctxLogger .Error (service .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg )))
77+ return
7678 }
7779
78- var response string
79- err = requests .URL (integration .WebhookURL ).
80- Client (service .client ).
81- BodyJSON (payload ).
82- ToString (& response ).
83- Fetch (ctx )
80+ body , err := json .Marshal (payload )
8481 if err != nil {
85- msg := fmt .Sprintf ("cannot send [%s] event to [3cx] webhook [%s] for user [%s]" , event .Type (), integration .WebhookURL , integration .UserID )
82+ msg := fmt .Sprintf ("cannot marshal [%T] for [%s] event with ID [%s] for user [%s]" , payload , event .Type (), event .ID (), integration .UserID )
83+ ctxLogger .Error (service .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg )))
84+ }
85+
86+ request , err := http .NewRequestWithContext (ctx , http .MethodPost , integration .WebhookURL , bytes .NewBuffer (body ))
87+ if err != nil {
88+ msg := fmt .Sprintf ("cannot create [%T] for [%s] event with ID [%s] for user [%s]" , request , event .Type (), event .ID (), integration .UserID )
8689 ctxLogger .Error (service .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg )))
90+ return
8791 }
92+ request .Header .Set ("Content-Type" , "application/json; charset=UTF-8" )
8893
89- ctxLogger .Info (fmt .Sprintf ("sent [3cx] webhook to url [%s] for event [%s] with ID [%s] and response [%s]" , integration .WebhookURL , event .Type (), event .ID (), response ))
94+ response , err := service .client .Do (request )
95+ if err != nil {
96+ msg := fmt .Sprintf ("cannot send [%s] event to [3cx] webhook [%s] for user [%s]" , event .Type (), integration .WebhookURL , integration .UserID )
97+ ctxLogger .Error (service .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , msg )))
98+ }
99+ defer func () {
100+ err = response .Body .Close ()
101+ if err != nil {
102+ ctxLogger .Error (stacktrace .Propagate (err , "cannot close response body" ))
103+ }
104+ }()
105+
106+ ctxLogger .Info (
107+ fmt .Sprintf (
108+ "sent [3cx] webhook to url [%s] for event [%s] with ID [%s] and response [%s] and code [%d]" ,
109+ integration .WebhookURL ,
110+ event .Type (),
111+ event .ID (),
112+ response .Status ,
113+ response .StatusCode ,
114+ ),
115+ )
90116}
91117
92118func (service * Integration3CXService ) getPayload (event cloudevents.Event ) (fiber.Map , error ) {
0 commit comments