86 lines
2.1 KiB
Go
86 lines
2.1 KiB
Go
package messenger
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
|
afro "github.com/amanuelabay/afrosms-go"
|
|
"github.com/twilio/twilio-go"
|
|
twilioApi "github.com/twilio/twilio-go/rest/api/v2010"
|
|
)
|
|
|
|
var (
|
|
ErrSMSProviderNotFound = errors.New("SMS Provider Not Found")
|
|
)
|
|
|
|
func (s *Service) SendSMS(ctx context.Context, receiverPhone, message string) error {
|
|
|
|
settingsList, err := s.settingSvc.GetSettingList(ctx)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
switch settingsList.SMSProvider {
|
|
case domain.AfroMessage:
|
|
return s.SendAfroMessageSMS(ctx, receiverPhone, message)
|
|
case domain.TwilioSms:
|
|
return s.SendTwilioSMS(ctx, receiverPhone, message)
|
|
default:
|
|
return ErrSMSProviderNotFound
|
|
}
|
|
}
|
|
|
|
func (s *Service) SendAfroMessageSMS(ctx context.Context, receiverPhone, message string) error {
|
|
apiKey := s.config.AFRO_SMS_API_KEY
|
|
senderName := s.config.AFRO_SMS_SENDER_NAME
|
|
hostURL := s.config.ADRO_SMS_HOST_URL
|
|
endpoint := "/api/send"
|
|
|
|
// API endpoint has been updated
|
|
// TODO: no need for package for the afro message operations (pretty simple stuff)
|
|
request := afro.GetRequest(apiKey, endpoint, hostURL)
|
|
request.BaseURL = "https://api.afromessage.com/api/send"
|
|
|
|
request.Method = "GET"
|
|
request.Sender(senderName)
|
|
request.To(receiverPhone, message)
|
|
|
|
response, err := afro.MakeRequestWithContext(ctx, request)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if response["acknowledge"] == "success" {
|
|
return nil
|
|
} else {
|
|
fmt.Println(response["response"].(map[string]interface{}))
|
|
return errors.New("SMS delivery failed")
|
|
}
|
|
}
|
|
|
|
func (s *Service) SendTwilioSMS(ctx context.Context, receiverPhone, message string) error {
|
|
accountSid := s.config.TwilioAccountSid
|
|
authToken := s.config.TwilioAuthToken
|
|
senderPhone := s.config.TwilioSenderPhoneNumber
|
|
|
|
client := twilio.NewRestClientWithParams(twilio.ClientParams{
|
|
Username: accountSid,
|
|
Password: authToken,
|
|
})
|
|
|
|
params := &twilioApi.CreateMessageParams{}
|
|
params.SetTo(receiverPhone)
|
|
params.SetFrom(senderPhone)
|
|
params.SetBody(message)
|
|
|
|
_, err := client.Api.CreateMessage(params)
|
|
if err != nil {
|
|
return fmt.Errorf("%s", "Error sending SMS message: %s"+err.Error())
|
|
}
|
|
|
|
return nil
|
|
}
|