Kolejnym tematem, który chciałbym przybliżyć jest wysyłanie SMS-ów z Azure Functions. Po raz kolejny chciałbym Was przekonać do koncepcji komponowania aplikacji z gotowych elementów. Tym razem są to SMS-y, które będziemy wysyłać za pomocą platformy Twilio.
Konfiguracja Twilio
Poprzednim razem, kiedy omawialiśmy wysyłanie maili musieliśmy utworzyć element odpowiedzialny za wysyłanie maili w Azure Portal-u. Twilio na taką możliwość nie pozwala. Musimy utworzyć konto bezpośrednio na ich stronie.
Tam, zostaniemy poproszeni o podanie loginu, hasła oraz potwierdzenie naszej tożsamości poprzez przepisanie kodu otrzymanego SMS-em. Po wykonaniu tych kroków zostaniemy przekierowani do strony, na której zostaniemy poproszeni o podanie tytułu naszego projektu:
Zaraz po jego podaniu zostaniemy przeniesieni na główny ekran usługi. Znajdują się tam dwa z trzech elementów, które będziemy musieli podać podczas konfiguracji naszej funkcji – Account SID and Auth Token. Proponuję zapisać sobie gdzieś, te wartości, tak aby nie musieć do nich ponownie wracać.
Teraz należy tylko uzyskać numer, z którego będą wysyłane SMS-y. Na głównym ekranie usługi można zauważyć sekcję Programmable SMS, tam też znajduje się przycisk Get Started. Po jego kliknięciu zostaniemy przeniesieni na stronę, gdzie po kliknięciu przycisku Get a number otrzymamy numer, który wykorzystamy w naszej funkcji. Jest to trzeci element, który powinniśmy sobie gdzieś zanotować, ponieważ będzie on nam potrzebny do poprawnego skonfigurowania funkcji.
Mając zapisane wspomniane trzy elementy – Account SID, Auth Token oraz numer telefonu, z którego zostaną wysłane SMS-y – możemy wrócić do Azure Portal-u.
Wysyłanie SMS-ów przy użyciu Azure Functions
Funkcja jako skrypt
Podobnie jak w poprzednim wpisie – wysyłanie maili – wykorzystamy szablon funkcji Http Trigger do rozpoczęcia naszej pracy. Oczywiście musimy otworzyć stronę Integrate, a tam dodać nowy parametr wyjściowy o typie Twilio SMS:
Po jego wybraniu zostaniemy przeniesieni na stronę, na której zostaniemy poproszeni o podanie parametrów potrzebnych do skonfigurowania usługi:
Szczególną uwagę należy zwrócić na dwa z nich – Auth Token setting oraz Account SID setting. W ich przypadku nie są to bezpośrednie wartości kluczy, które zapisaliśmy ze strony Twilio, ale nazwy kluczy do ustawień naszej funkcji z sekcji App Setting, które dopiero przechowują zapisane wartości. Pozostałe parametry nie powinny budzić wątpliwości.
Po zapisaniu konfiguracji możemy otworzyć plik function.json, w którym przechowywana jest konfiguracja w formacie json.
W celu dodania do konfiguracji wspomnianych wcześniej parametrów – Auth Token setting oraz Account SID setting – należy przejść do sekcji App Setting. Aby tam przejść musimy otworzyć Platform features, a następnie Application settings. Pamiętajcie tylko, że dodane parametry muszą mieć takie same nazwy, jak podane wcześniej w sekcji Integrate.
Pozostało nam już tylko napisanie kodu. Tym razem będzie ciężej, ponieważ sekcja Documentation jest pusta. Na szczęście mechanizm integracji działa podobnie jak w przypadku wysyłania maili. Musimy dodać argument wyjściowy typu SMSMessage, który będzie zawierał wiadomość, którą chcemy wysłać:
#r "Twilio.Api" using System; using System.Net; using Twilio; public static HttpResponseMessage Run(HttpRequestMessage req, out SMSMessage message) { // parse query parameter string messageText = req.GetQueryNameValuePairs() .FirstOrDefault(q => string.Compare(q.Key, "message", true) == 0) .Value; message = new SMSMessage(); message.Body = messageText; return req.CreateResponse(HttpStatusCode.Accepted); }
Jak widzicie kod jest bardzo prosty. Oczywiście istnieje możliwość skonfigurowania pozostałych parametrów wiadomości SMS w kodzie aplikacji.
Funkcja utworzona jako kod
Istnieje możliwość zastosowania drugiego podejścia – wykorzystania atrybutu do skonfigurowania integracji z Twilio. Większość kroków jest taka sama. Różnica występuje tylko w samym kodzie funkcji:
[FunctionName("SendNotificationSMS")] public static void Run( [QueueTrigger("tosendnotification", Connection = "registration2storage_STORAGE")] Customer customer, [TwilioSms( To = "+48123456789", From = "+4812345678", Body = "New customer {Name} {Surname}!")] out SMSMessage message) { message = new SMSMessage(); }
Proszę zwrócicie uwagę, że w atrybucie dotyczącym Twilio możemy skonsumować bezpośrednio właściwości obiektu pobranego z kolejki.
Dzień dobry,
Zastanawia nas jaki model telefonu Yealink działałby z Twilio ?
Wydaje mi się, że każdy wspierający protokuł SIP. Tylko proszę zauważyć, że Twilio służszy do rozszerzenia obecnego rozwiązania / zbudowanie jego bardziej inteligentej / automatycznej wersji niż do dostarczania usług VOIP. Proszę spojrzeć na stronę: https://www.twilio.com/voice/sip-registration