You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pingme/service/twillio/twillio.go

103 lines
2.8 KiB

package twillio
import (
"log"
"strings"
"github.com/kha7iq/pingme/service/helpers"
"github.com/sfreiberg/gotwilio"
"github.com/urfave/cli/v2"
)
// Twillio struct holds data parsed via flags for the service
type Twillio struct {
Title string
Token string
AccountSid string
Sender string
Receiver string
Message string
}
// Send parse values from *cli.context and return *cli.Command
// and send messages to target numbers.
// If multiple receivers are provided then the string is split with "," separator and
// message is sent to each number.
func Send() *cli.Command {
var twillioOpts Twillio
return &cli.Command{
Name: "twillio",
Usage: "Send sms via twillio",
UsageText: "pingme twillio --token 'tokenabc' --account 'sid123' " +
"--sender '+140001442' --receiver '+140001442'' --msg 'some message'",
Description: `Twillio provides ability to send sms to multiple numbers.
You can specify multiple receivers by separating the value with a comma.`,
Flags: []cli.Flag{
&cli.StringFlag{
Destination: &twillioOpts.Token,
Name: "token",
Aliases: []string{"t"},
Required: true,
Usage: "Auth token for twillio account.",
EnvVars: []string{"TWILLIO_TOKEN"},
},
&cli.StringFlag{
Destination: &twillioOpts.AccountSid,
Name: "account",
Required: true,
Aliases: []string{"a"},
Usage: "Twillio account sid",
EnvVars: []string{"TWILLIO_ACCOUNT_SID"},
},
&cli.StringFlag{
Destination: &twillioOpts.Message,
Name: "msg",
Aliases: []string{"m"},
Usage: "Message content.",
EnvVars: []string{"TWILLIO_MESSAGE"},
},
&cli.StringFlag{
Destination: &twillioOpts.Title,
Name: "title",
Usage: "Title of the message.",
EnvVars: []string{"TWILLIO_TITLE"},
},
&cli.StringFlag{
Destination: &twillioOpts.Sender,
Name: "sender",
Aliases: []string{"s"},
Usage: "Sender's phone number",
EnvVars: []string{"TWILLIO_SENDER"},
},
&cli.StringFlag{
Destination: &twillioOpts.Receiver,
Name: "receiver",
Aliases: []string{"r"},
Usage: "Receiver's phone number",
EnvVars: []string{"TWILLIO_RECEIVER"},
},
},
Action: func(ctx *cli.Context) error {
client := gotwilio.NewTwilioClient(twillioOpts.AccountSid, twillioOpts.Token)
fullMessage := twillioOpts.Title + "\n" + twillioOpts.Message
numbers := strings.Split(twillioOpts.Receiver, ",")
for _, v := range numbers {
if len(v) == 0 {
return helpers.ErrChannel
}
_, exception, err := client.SendSMS(twillioOpts.Sender, twillioOpts.Receiver, fullMessage, "", "")
if err != nil {
return err
}
if exception != nil {
return exception
}
}
log.Println("Successfully sent!")
return nil
},
}
}