19 Temmuz 2018 Perşembe

Twilio SMS Mesajlarını E-Posta Olarak İletme (Forwarding SMS Messages to your Email Inbox)



Twilio, gelen sms mesajlarını bir mail adresine iletmenize izin veriyor. Ben örneğimde .NET Core kullandım ve örneklemeyi de .NET Core üzerinden yapacağım.

Senaryoya göre Twilio gelen Sms mesajını Webhook aracılığı ile bizim sunucumuza gönderiyor, bizde gelen Reguestler ile dilediğimiz işlemi yapıyoruz.

Webhook Nedir?

Webhook özetle  HTTP callbacks'dir. Yani Web API'leri ve SaaS hizmetlerini bir arada sunan bir HTTP patterndir. Webhook çoğu yönü ile websocket'lere benzerlik gösterir. En önemli farkı ise websocket browser ile haberleşirken, webhook diğer bir uygulama sunucu (Twilio) ile haberleşir.

.NET Core Projesi ve Webhook

Örnek senaryomuzda Twilio bir Sms mesajı aldığında sunucumuz ile iletişime geçecek ve gelen mesajda ki bilgileri bize gönderecektir. Biz burada Sms üzerinden örnekleme yapacağız. Bu örnekleri Voice, Chat, Video ve diğer Twilio API'leri için de uygulayabilirsiniz.

Bir Proje Oluşturalım

Twilio'dan gelen istekleri işleyebilecek bir ASP.NET Core projesi oluşturalım. Eğer siz .NET Core yerine ASP.NET MVC üzerinden gidecekseniz MVC projesi oluşturun. Aralarında tek bir fark var ona da aşağıda değineceğim.


Ben projeye "TwilioSms" adını verdim siz istediğiniz ismi verebilirsiniz.


Eğer .NET Core kullanacaksanız ASP.NET Core 2.0 ın yüklü ve seçili olduğundan emin olun. 

NuGET Packages

Projemize NuGet Paket aracılığı ile 2 tane paket yüklememiz gerekiyor. Bu yüklemeleri "Package Manager Console" yi kullanarak hızlı bir şekilde yapabiliriz.

İlk önce Twilio paketini yüklüyoruz

PM> Install-Package Twilio

İkinci Paketimiz ise
- .NET Core kullanacaksanız Twilio.AspNet.Core

PM> Install-Package Twilio.AspNET.Core

- .NET Mvc kullanacaksanız Twilio.AspNet.Mvc

PM> Install-Package Twilio.AspNET.Mvc

Eğer .NET Core bir projeye Twilio.AspNET.Mvc paketini yüklerseniz yada tam tersi bir .NET Mvc projeye Twilio.AspNET.Core paketini yüklerseniz projeniziz çalışmasında hatalar oluşacaktır. Bu bakımdan hangi teknolojiyi kullanıyorsanız o paketi eklemeye dikkat edin.

Paketleri yükledikten sonra benim projemki paketler şu şekilde:


Siz bu yazıyı okduğunuzda bu paketlerin yeni versiyonları çıkmış olabilir. Benim yazıyı hazırladığım tarihte ki versiyonlar bu şekilde.

Control Oluşturulması

Oluşturduğumuz projeye yeni bir Controller ekleyeceğiz. Bunun için Projenizde ki Controller klasörüne sağ tıklayın ve sırasıyla Add -- Controllers -- MVC Controller ı tıklıyoruz.


Controller!a bir isim veriyoruz ben SmsToEmail ismini verdim.


Controller oluşturulduktan sonra Twilio' nun kullanacağı namespace leri controler ımıza ekliyoruz

using Twilio.AspNet.Common;
using Twilio.AspNet.Mvc;
using Twilio.TwiML;

Ardından, Controller sınıfımızı, Twilio dan devralabilmesi için TwilioController ile değiştiriyoruz.

public class SmsToEmailController : TwilioController

Ardından bir Action Method oluşturuyoruz. Eğer geriye bir değer döndürmek istiyorsak (Gelen mesaja otomatik cevap gibi) [HttpPost] yapısını kullanmanız gerekiyor.

        [HttpPost]
        public IActionResult Index()
        {
            string body = Request.Form["Body"];
            string to = Request.Form["To"];
            string from = Request.Form["From"];


            //Forward Sms to Email
            var message = new MailMessage();
            message.To.Add(new MailAddress("kime@mail.com"));
            message.From = new MailAddress("kimden@mail.com");
            message.Subject = "You have received a message from " + from;
            message.Body = "Message: " + body;
            message.IsBodyHtml = true;

            using (var smtp = new SmtpClient())
            {
                var credential = new NetworkCredential
                {
                    UserName = "username@mail.com",
                    Password = "Password"
                };
                smtp.Credentials = credential;
                smtp.Host = "mail servis smtp"; // smtp-mail.outlook.com
                smtp.Port = 587;
                smtp.EnableSsl = true;
                smtp.Send(message);
            }

            
            return TwiML(response);

        }


Ben bu örnekte bir mail yollama kısmı yapmaya çalıştım fakat siz daha farklı yollarla da maillerinizi gönderebilirsiniz.

Örnekte görüldüğü gibi Twilio dan bize "Body, To ve From" değerleri geliyor. Bizde bu değerleri alıp mail yollama işleminde kullanıyoruz. Burada ki To ve From değerleri Twilio üzerinden birbirine Sms atan kullanıcıların numarlarıdır

 string body = Request.Form["Body"]; //Mesaj içeriği
 string to = Request.Form["To"]; //Kime Sms Atıldı
 string from = Request.Form["From"]; //Kim Sms Attı

Proje kısmında yapacaklarımız bu kadar. Şimdi Twilio kısmında bir kaç ayar yapmamız gerekecek.

Buraya kadar okuduysanız bir Twilio numaranız vardır diye tahmin ediyorum ve bu varsayımla devam ediyorum.

Twilio'da yönlendirmek istediğimiz numara tıklıyoruz.


ve açılan sayfada Messaging kısmına aşağıda ki gibi projeyi çalıştıracağımız sunucunun adresini yazıyoruz.



Bu örnek ile ASP:NET MVC ve ASP.NET Core projelerinde Twilio ya gelen Sms Mesajını bir mail adresine yönlendirebilirsiniz. Daha fazla örnek için Twilio nun kendi sayfasını ziyaret edebilirsiniz. Twilio Tutorials Umarım işinize yarayan bir örnek olmuştur.