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 }