twilio.go 1.8 KB

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