# SMS Gateway
###### tags: `ready`
Kampanya sisteminden gönderilen SMS mesajları hariç her türlü transactional SMS gönderim ve izleme servis kümesidir.
* Gönderimler OTP dahil olarak bu gateway üzerinden yapılır.
* Bu gateway nihai olarak dEngage üzerinde sonlanarak gönderim yapar.
* Kara listeler gateway üstünde tutulur.
* Templating dEngage üzerinde yapılır.
```plantuml
@startuml
rectangle "Transactional SMS Akışı" {
package "Message Gateway" as gateway {
artifact "SMS Servisleri" as sms_services
}
package "Backoffice " as backoffice {
component sms_monitoring [
<b>SMS İzleme ve Yönetim Uygulaması</b>
Yugabyte Exporter
]
}
package "Legacy Uygulamalar" as ui_legacy {
card dijital_applications [
<b>Kanal Uygualamaları</b>
]
card corebanking [
<b>Temel Bankacılık</b>
]
card thirdparties [
<b>3.Parti uygulamalar</b>
]
}
database sqlserver [
<b>SQL Server </b>
Tüm servis kayıtları
Servislerin configürasyonları
Kara liste yönetim alt yapısı
]
dijital_applications --> sms_services
corebanking --> sms_services
thirdparties --> sms_services
sms_monitoring --> sms_services
component dEngage
sms_services --> sqlserver
sms_services --> dEngage
@enduml
```
## SMS Gönderimi
### POST : /message-gateway/sms/send
SMS gönderimi için kullanılan servistir.
#### Request Body
```json
{
"id": "b15e6285-04ea-413e-8afc-7d7613e043bb",
"country-code": 90,
"prefix": 530,
"number": 2896073,
"message": "Kredi başvurunuz onaylanmıştır.",
"templated-message": {
"template": "inform-customer-loan-approved",
"data": {
"Name": "Ugur",
"Surname": "Karatas"
}
},
"type": "private-info | public-info | legal | otp",
"process": "corportate-site-loan-application",
"action": "loan-approved"
}
```
* **id** alanı gönderici tarafından oluşturulan Guid değerdir. Gönderi sorgulamaları bu id üzerinden yapılır.
* **country-code, prefix, number** gönderim yapılacak telefon numarasıdır.
* **message** gönderim yapılacak yapılacak mesajı içerir.
* **templated-message** gönderim yapılacak yapilacak mesaji dEngage şablonu ile içerir. *message ve templated-message alanlarından sadece birisi gönderilebilir.*
* **type** alanı enumaration olup içeriğin tipini tanımlar.
* Eğer içerik kişiye özel bir bilgilendirme ise **private-info** seçilir. Örneğin ektreler, hesap kesim bilgisi, fatura ödeme bilgisi gibi içerikler bu sınıfta değerlendirilebilir.
* Eğer içerik genel bir bilgilendirme ise **public-info** seçilir. Örneğin şube açılışı, banka iletişim bilgisi değişimi gibi içerikler bu sınıfta değerlendirilebilir.
* Eğer içerik yasal bir bilgilendirme ise **legal** seçilir. Örneğin BDDK bilgilendirmeleri, vergi değişim bildirimi gibi içerikler bu sınıfta değerlendirilebilir.
* Eğer içerik güvenlik doğrulaması ise **otp** seçilir. Örneğin internet bankacılığı girişi bu sınıfta değerlendirilebilir.
* **process** gönderimi hangi sürecin yaptığı bilgisi iz kayıtları için gönderilir.
* **action** sürecin hangi adımında gönderimin yapıldığı bilgisidir.
## Header Yönetimi
Gönderilen mesajlarda hengi marka/etiketle gönderim yapılacağı bu modül ile belirlenir. Kullanıcıya iletilecek mesaj kullanıcının telefon numarası üzerinden sorgulanarak elde edilen bilgilere istinaden ilgili kırınımdan belirlenir. Bu tanımlarda boş bırakılan alanlar o değer ne olursa olsun geçerli anlamında kullanılır.
### Kayıt görüntüsü
| Header | Type | Business Line | Branch | Açıklama |
| -------- | -------- | -------- |-------- |-------- |
| Burgan Bank | - | - | - | Tüm mesajlar için varsayılan başlık metni |
| On. | - | dijital | - | Dijital iş kolu için varsayılan başlık metni |
| Burgan Private | - | retail | 3000 | Retail olup 3000 şube müşterine iletilen mesajın başlık metni |
### POST : /message-gateway/sms/header
Bir header kaydı oluşturmak veya güncellemek için kullanılır.
```json
{
"id": "b15e6285-04ea-413e-8afc-7d7613e043bb",
"type": "private-info | public-info | legal | otp",
"business-line": "retail | dijital | corporate | sme",
"branch": 2000,
"header": "Burgan Bank"
}
```
### GET : /message-gateway/sms/header
Header kayıtlarını getirmek için kullanılır.
*Kayıt sayısının 100 adetten daha az olacağı varsayımı ile paging veya filtreleme fonksiyonlarına gerek duyulmamıştır.*
### DELETE : /message-gateway/sms/header/{id}
Kayıt numarası verilen header kaydının silinmesi için kullanılır.
## Blacklist Yönetimi
Black list yönetimi sadece otp mesajları için çalışmaktadır. Sim kart değişikliğine istinaden otp iletimini engellenmesi ve kullanıcının Black list'den çıkarılması fonksiyonları için servisler sunar.
Sim değişikliği için gereken kontrol süresi için gün bilgisi **configuration** dosyasından okunur.
```xml
<sim-change-control-days>90</sim-change-control-days>
```
Tüm otp gönderimleri öncesinde black list numara özelinde ve sim değişikliği kontrol günü kadar geriye giderek taranır.
* Eğer hiç kayıt yok ise gün konrolü ile gönderim sağlanır.
* Eğer resolve edilmemiş kayıt varsa gönderim sağlanmaz.
* Eğer resolve edilmiş bir kayıt varsa resolve edildiği günden itibaren gün kontrolü yaparak gönderim sağlanır.
### Kayıt görüntüsü
| Country Code | Prefix | Number | CreatedWith | CratedAt | Reason | ResolvedBy | ResolvedWith | ResolvedAt |
| -------- | -------- | -------- |-------- |-------- |-------- |-------- |-------- |-------- |
| 90 | 530 | 2896073 | f3fc7e0e-9e15-40b1-832f-d5a558e4c865 | 01-11-2021 |sim-change|||
* **CreatedWith** kara listeye düşmesine neden otp gönderim çağrı talebinin kaydıdır.
* **ResolvedBy** kara listeden çıkaran sürecin/sistemin adıdır.
* **ResolvedWith** kara listeden çıkaran sişlemin tekil narasıdır.
### PATCH : /message-gateway/sms/blacklist/{id}/resolve
Bir kara liste kaydını çözmek için kullanılır.
```json
{
"resolved-by": "call-center-ekyc-recover",
"resolved-with": "2458687"
}
```
### GET : /message-gateway/sms/blacklist?phone={phone}
Belirli bir telefonun black list kayıtlarını getirmek için kullanılır.