summaryrefslogtreecommitdiff
path: root/adapters/messaging/http_sms.go
diff options
context:
space:
mode:
Diffstat (limited to 'adapters/messaging/http_sms.go')
-rw-r--r--adapters/messaging/http_sms.go69
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
}