smpp-otp/internal/infrastructure/smpp.go

52 lines
1.1 KiB
Go

package smpp
import (
"log"
"smpp-otp/internal/config"
"github.com/fiorix/go-smpp/smpp"
"github.com/fiorix/go-smpp/smpp/pdu"
"github.com/fiorix/go-smpp/smpp/pdu/pdutext"
)
type SMPPClient struct {
Transceiver *smpp.Transceiver
}
func NewSMPPClient(cfg *config.Config) (*SMPPClient, error) {
smppCfg := cfg.SMPP
tx := &smpp.Transceiver{
Addr: smppCfg.Addr,
User: smppCfg.User,
Passwd: smppCfg.Pass,
Handler: func(p pdu.Body) {},
}
connStatus := tx.Bind()
status := <-connStatus
if status.Status() != smpp.Connected {
log.Println("Failed to connect:", status.Error())
return nil, status.Error()
}
return &SMPPClient{Transceiver: tx}, nil
}
func (c *SMPPClient) SendSMS(cfg *config.Config, dest, text string) error {
src := cfg.SMPP.Src_Phone_Number
params := &smpp.ShortMessage{
Src: src,
Dst: dest,
Text: pdutext.Raw(text),
Register: 0, // No delivery receipt
}
resp, err := c.Transceiver.Submit(params)
if err != nil {
log.Println("Failed to send SMS:", err)
return err
}
log.Println("SMS sent successfully, response:", resp)
return nil
}