Сервис AngularJS для отправки SMS-сообщений Twilio

0

Я экспериментировал с созданием службы AngularJS, которую можно вызывать из контроллера и отправлять текстовые сообщения на основе определенных событий в приложении. Реализация основывается на этом и работает следующим образом:

Во-первых, у нас есть услуга:

function BusinessService($http) {

  this.twilioSMS = {

    sendMessage: function(to, from, body) {

      var accountSid = 'xxx';
      var authToken = 'xxx';

      var testEndpoint = 'https://api.twilio.com/2010-04-01/Accounts/' + accountSid + '/SMS/Messages.json';
      var liveEndpoint = 'https://api.twilio.com/2010-04-01/Accounts/' + accountSid + '/Messages.json';

      var data = {
        To: to,
        From: from,
        Body: body
      };

      $http({
        method: 'POST',
        url: testEndpoint,
        data: data,
        dataType: 'json',
        contentType: 'application/x-www-form-urlencoded',
        beforeSend: function(xhr) {
          xhr.setRequestHeader("Authorization",
            "Basic " + btoa(accountSid + ":" + authToken) // !
          );
        },
        success: function(data) {
          console.log("Got response: %o", data);
          if (typeof successCallback == 'function')
            successCallback(data);
        },
        error: function(jqXHR, textStatus, errorThrown) {
          console.log("Request failed: " + textStatus + ", " + errorThrown);
          if (typeof failCallback == 'function')
            failCallback(jqXHR, textStatus, errorThrown);
        }
      })

    }

  }

}

Затем установите его в контроллере:

function ConsumerBusinessProfileCtrl($scope, BusinessService) {

  $scope.sendMessage = function(to, from, body) {
    return BusinessService.twilioSMS.sendMessage(to, from, body)
  }

}

И затем называя это из представления:

<a ng-click="sendMessage('+12345678901', '+15005550006', 'Hey Jenny! Good luck on the bar exam!')">Send Message</a>

Я проверил пример jsfiddle с моими учетными записями, authToken и номерами телефонов, и он работает нормально. Но моя реализация завершилась неудачей с ошибкой 401 (UNAUTHORIZED). Часть меня думает, что это потому, что $http не поддерживает beforeSend или afterSend. Но я не уверен? Может ли кто-нибудь здесь вести меня в правильном направлении?

  • 0
    Как вы внедрили аутентификацию.
  • 0
    Аутентификация @RomanC выполняется по адресу beforeSend с переменными accountSid и authToken Я немного погуглил и обнаружил, что на самом деле jQuery на самом деле не поддерживает это, но рекомендует использовать перехватчики. К сожалению, я не слишком знаком с этой концепцией и с тем, как реализовать ее в моем случае.
Показать ещё 3 комментария
Теги:

1 ответ

0
Лучший ответ

Изменено $ http для исправления:

 $http({
  method: 'POST',
  url: testEndpoint,
  data: data,
  transformRequest: function(obj) {
    var str = [];
    for (var p in obj)
      str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
    return str.join("&");
  },
  headers: {
    'Authorization': 'Basic ' + btoa(accountSid + ':' + authToken),
    'Content-Type': 'application/x-www-form-urlencoded'
  },
}).success(function(response) {
  console.log(response);
}).error(function(error) {
  console.log(error);
});
}
  • 0
    Я столкнулся с той же проблемой в первый раз интеграции Twilio. transformRequest заставил его работать на меня. Благодарю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню