mirror of https://github.com/kha7iq/pingme
parent
f6e4829524
commit
20e4b8ee3a
@ -0,0 +1,102 @@
|
||||
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
|
||||
},
|
||||
}
|
||||
}
|
Loading…
Reference in new issue