diff options
Diffstat (limited to 'adapters/messaging/http_sms.go')
-rw-r--r-- | adapters/messaging/http_sms.go | 69 |
1 files changed, 30 insertions, 39 deletions
diff --git a/adapters/messaging/http_sms.go b/adapters/messaging/http_sms.go index c722f21..8d1c99f 100644 --- a/adapters/messaging/http_sms.go +++ b/adapters/messaging/http_sms.go @@ -11,13 +11,6 @@ import ( "git.simponic.xyz/simponic/phoneof/utils" ) -type HttpSmsMessagingAdapter struct { - ApiToken string - FromPhoneNumber string - ToPhoneNumber string - Endpoint string -} - type HttpSmsMessageData struct { RequestId string `json:"request_id"` } @@ -26,37 +19,35 @@ type HttpSmsMessageSendResponse struct { Data HttpSmsMessageData `json:"data"` } -func (adapter *HttpSmsMessagingAdapter) encodeMessage(message string) string { - requestId := utils.RandomId() - return fmt.Sprintf(`{"from":"%s","to":"%s","content":"%s","request_id":"%s"}`, adapter.FromPhoneNumber, adapter.ToPhoneNumber, message, requestId) -} - -func (adapter *HttpSmsMessagingAdapter) SendMessage(message string) (string, error) { - url := fmt.Sprintf("%s/v1/messages/send", adapter.Endpoint) - payload := strings.NewReader(adapter.encodeMessage(message)) - - req, _ := http.NewRequest("POST", url, payload) - req.Header.Add("x-api-key", adapter.ApiToken) - req.Header.Add("Content-Type", "application/json") - res, err := http.DefaultClient.Do(req) - if err != nil { - log.Printf("got err sending message send req %s", err) - return "", err - } - - if res.StatusCode/100 != 2 { - return "", fmt.Errorf("error sending message: %s %d", message, res.StatusCode) +func HttpSmsContinuation(apiToken string, fromPhoneNumber string, toPhoneNumber string, httpSmsEndpoint string) Continuation { + return func(message Message) ContinuationChain { + encodedMsg := fmt.Sprintf(`{"from":"%s","to":"%s","content":"%s"}`, fromPhoneNumber, toPhoneNumber, utils.Quote(message.Encode())) + log.Println(encodedMsg) + + return func(success Continuation, failure Continuation) ContinuationChain { + url := fmt.Sprintf("%s/v1/messages/send", httpSmsEndpoint) + payload := strings.NewReader(encodedMsg) + + req, _ := http.NewRequest("POST", url, payload) + req.Header.Add("x-api-key", apiToken) + req.Header.Add("Content-Type", "application/json") + res, err := http.DefaultClient.Do(req) + if err != nil || res.StatusCode/100 != 2 { + log.Printf("got err sending message send req %s %v %s", message, res, err) + return failure(message) + } + + defer res.Body.Close() + body, _ := io.ReadAll(res.Body) + + var response HttpSmsMessageSendResponse + err = json.Unmarshal(body, &response) + if err != nil { + log.Printf("got error unmarshaling response: %s %s", body, err) + return failure(message) + } + + return success(message) + } } - - defer res.Body.Close() - body, _ := io.ReadAll(res.Body) - - var response HttpSmsMessageSendResponse - err = json.Unmarshal(body, &response) - if err != nil { - log.Printf("got error unmarshaling response: %s %s", body, err) - return "", err - } - - return response.Data.RequestId, nil } |