52 lines
1.1 KiB
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
|
|
}
|