mirror of https://github.com/kha7iq/pingme
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.
103 lines
2.8 KiB
103 lines
2.8 KiB
4 years ago
|
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
|
||
|
},
|
||
|
}
|
||
|
}
|