twilio.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package providers
  2. import (
  3. "fmt"
  4. "net/http"
  5. "net/url"
  6. "git.wenlab.co/joe/beaconfire"
  7. )
  8. const (
  9. TWILIO_NAME = "twilio"
  10. )
  11. type OptionsTwilio struct {
  12. AccountSid string
  13. AuthToken string
  14. }
  15. type twilio struct {
  16. opt *OptionsTwilio
  17. }
  18. var _ beaconfire.BeaconFire = &twilio{}
  19. func NewTwilio(opt *OptionsTwilio) *twilio {
  20. return &twilio{
  21. opt: opt,
  22. }
  23. }
  24. func (c twilio) Name() string {
  25. return TWILIO_NAME
  26. }
  27. func (c *twilio) Send(bp *beaconfire.BeaconParam) error {
  28. if len(bp.To) <= 0 {
  29. return beaconfire.ErrNoReceiver
  30. }
  31. // hc := &http.Client{Timeout: time.Second * 10}
  32. // v := url.Values{}
  33. // v.Set("From", bp.From)
  34. // v.Set("Body", bp.Content)
  35. // for _, receiver := range bp.To {
  36. // v.Set("To", receiver)
  37. // urlStr := fmt.Sprintf("https://api.twilio.com/2010-04-01/Accounts/%v/Messages.json", c.opt.AccountSid)
  38. // req, err := http.NewRequest("POST", urlStr, strings.NewReader(v.Encode()))
  39. // if err != nil {
  40. // return err
  41. // }
  42. // req.SetBasicAuth(c.opt.AccountSid, c.opt.AuthToken)
  43. // req.Header.Add("Accept", "application/json")
  44. // req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
  45. // _, err = hc.Do(req)
  46. // if err != nil {
  47. // return err
  48. // }
  49. // }
  50. urlStr := fmt.Sprintf("https://api.twilio.com/2010-04-01/Accounts/%v/Messages.json", c.opt.AccountSid)
  51. v := url.Values{}
  52. v.Set("From", bp.From)
  53. v.Set("Body", bp.Content)
  54. for _, receiver := range bp.To {
  55. v.Set("To", receiver)
  56. _, err := beaconfire.Request(http.MethodPost, urlStr, []byte(v.Encode()), map[string]string{
  57. "Accept": "application/json",
  58. "Content-Type": "application/x-www-form-urlencoded",
  59. }, c.opt.AccountSid, c.opt.AuthToken)
  60. if err != nil {
  61. return err
  62. }
  63. }
  64. return nil
  65. }