23 Haz 2020

Sql sorgusu ile sms atmak

Postgresql'de fonksiyonlardan yararlanarak nasıl sms atabiliriz onu anlatmış olacağım. Sms servisi olarak netgsm kullanmış olacağız. Ark...



Postgresql'de fonksiyonlardan yararlanarak nasıl sms atabiliriz onu anlatmış olacağım. Sms servisi olarak netgsm kullanmış olacağız. Arka planda kod karmaşıklığı yaratmaması için bu yöntemi seçtim. Performans olarak bir şey diyemeyeceğim. Sql sorgusu çalıştırarak sms gönderimi rahatlığı olduğu için sizlerle de paylaşmak istedim. Trigger ekleyerek daha farklı senaryolar eklenebilir. Böylece db'ye yazılan, update olan herhangi bir işlemde kullanıcı sms bilgilendirilebilir. 

Kurulumlar

İlk önce PostgreSql için python3'ü kuralım. Benim kullandığım postgresql sürümü 12.

PostgreSql de sürümünüzü öğrenmek için

select version();

sudo apt-get install postgresql-plpython3-12

Daha sonra sunucumuza kurduğumuz python modüllerini sql tarafında aktif edelim.

CREATE EXTENSION plpython3u;


Fonksiyonumuzu oluşturuyoruz.

CREATE FUNCTION smssend (phone text,smstext text)
    RETURNS text
AS $$
    import requests
    usercode=''
    password=''
    msgheader=''
    phone2 = '90'+str(phone)
    smstext2 =smstext.replace("\n","\\n")
    smslist = f"<mp><msg><![CDATA[{smstext2}]]></msg><no>{phone2}</no></mp>\n"  
    url = "https://api.netgsm.com.tr/sms/send/xml"
    payload = f"\n<mainbody>\n<header>\n<company dil="\">Netgsm</company>\n<usercode>{usercode}</usercode>\n<password>{password}</password>\n<type>n:n</type>\n<msgheader>{msgheader}</msgheader>\n</header>\n<body>\n{smslist}</body>\n</mainbody>"
    headers = {
        'content-type': "application/xml"
    }
    response = requests.request("POST", url, data=payload.encode('UTF-8'), headers=headers)
    return response.text
$$ LANGUAGE plpython3u;

n:n oluşturmamdaki amaç herhangi bir kısıtın olmaması, ister sms i tek kişiye, istersek farklı farklı smsleri farklı numaralara da atabilmemiz mümkün. Şuan sadece tek sms gönderiyoruz. 



SONUÇ



Okuyup geçme yorum yap lütfen :)

Yorumunuz cevaplandığında bildirim almak için Beni bilgilendir'i işaretleyin.
EmojiEmoji