package providers import ( "fmt" "net/http" "net/url" "git.wenlab.co/joe/beaconfire" ) const ( BEACON_NAME_TWILIO = "twilio" ) type OptionsTwilio struct { AccountSid string AuthToken string From string To []string } type twilio struct { opt *OptionsTwilio } var _ beaconfire.BeaconFire = &twilio{} func NewTwilio(opt *OptionsTwilio) *twilio { return &twilio{ opt: opt, } } func (c twilio) Name() string { return BEACON_NAME_TWILIO } func (c *twilio) Send(bp *beaconfire.BeaconMessage) error { if len(c.opt.To) <= 0 { return beaconfire.ErrNoReceiver } // hc := &http.Client{Timeout: time.Second * 10} // v := url.Values{} // v.Set("From", bp.From) // v.Set("Body", bp.Content) // for _, receiver := range bp.To { // v.Set("To", receiver) // urlStr := fmt.Sprintf("https://api.twilio.com/2010-04-01/Accounts/%v/Messages.json", c.opt.AccountSid) // req, err := http.NewRequest("POST", urlStr, strings.NewReader(v.Encode())) // if err != nil { // return err // } // req.SetBasicAuth(c.opt.AccountSid, c.opt.AuthToken) // req.Header.Add("Accept", "application/json") // req.Header.Add("Content-Type", "application/x-www-form-urlencoded") // _, err = hc.Do(req) // if err != nil { // return err // } // } urlStr := fmt.Sprintf("https://api.twilio.com/2010-04-01/Accounts/%v/Messages.json", c.opt.AccountSid) v := url.Values{} v.Set("From", c.opt.From) v.Set("Body", bp.Content) for _, receiver := range c.opt.To { v.Set("To", receiver) _, err := beaconfire.Request(http.MethodPost, urlStr, []byte(v.Encode()), map[string]string{ "Accept": "application/json", "Content-Type": "application/x-www-form-urlencoded", }, c.opt.AccountSid, c.opt.AuthToken) if err != nil { return err } } return nil }