54 lines
1.1 KiB
Go
54 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()
|
|
go func() {
|
|
for c := range connStatus {
|
|
if c.Status() != smpp.Connected {
|
|
log.Println("Failed to connect:", c.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
|
|
}
|