---
# System prepended metadata

title: Müşteri İletişim Platformu
tags: [communication]

---

# Müşteri İletişim Platformu

###### tags:`communication`


```plantuml
@startuml 

rectangle "Temel Mimari" {
    
component gateway << bbt.messaging.gateway >> [
    Uygulamalar için mesaj gönderim kapısı
]

component dengage << dEngage >> [
    Kampanya ve mesaj gönderim çözümü
]
    
component codec << Codec >> [
    SMS mesajları için Operatör entegrasyon çözümü
]
    
component workers << Workers >> [
    Musteriye bildirim gonderimi
    dEngage uzerine veri akisi saglama
]
    
component apilog << API Log >> [
    Müşteri Web, Mobil ve Çağrı Merkezi Hareketleri
    dEngage uzerine veri akisi saglama
]
    
component mobile [
    Mobil Uygulama    
]

component web [
    Web Uygulama    
]

gateway --> dengage : Bulk&Fast SMS, eMail, Push
gateway --> codec : OTP
dengage --> codec : Bulk&Fast SMS
workers --> dengage : Müşteri verileri
apilog --> dengage : Müşteri hareketleri
dengage --> web : On-Web
dengage --> mobile : Push, In-App
mobile --> dengage : Events
web --> dengage : Events
workers --> gateway : Mail, SMS, Push
    
@enduml
```
## dEngage Çalışmaları

### Başvuru Bilgilerinin Akışı
- [x] Temel başvuru bilgilerinin aktarılması
- [ ] Ek başvuru bilgilerinin aktarılması

### Müşteri Bilgilerini Akışı
- [x] Aktarım takip uygulamasının geliştirilmesi
- [ ] dEngage aktarım uygulmasının geliştirilmesi
- [ ] Testlerin  yapılıp canlı sisteme taşınması

```plantuml
@startuml

rectangle "Müşteri Bilgilerinin Veri Akış Mimarisi" {

component handler << QLIK >> [
    <b>CDC</b>
    Müşteri ile ilgili bilgi değişiklikleri takibi için
]
    
component dengage << dEngage >> [
    Master Contact kayıtlarını güncellemek için
]
   
package "Kafka Topics" as kafka {

database topic1 [
    Müşteri bilgileri güncellendi
    ]
    
database topic2 [
    Telefon numarası güncellendi
    ]
    
database topic3 [
    Eposta güncellendi
    ]

database topic4 [
    Cihazı güncellendi
    ]

}
    
component workertracker <<bbt.cif.customer-info-tracker.worker>> [ 
    Müşteri bilgilerini takip edip toplarlar
]
    
database topicCustomerUpdate [
    Güncellenmiş müşteri bilgisi paketi 
    ]
    
component workerupdater <<bbt.dEgange.customer-info-updater.worker>> [ 
    Müşteri bilgilerini dEngage üzerinde günceller
]
    
}
    
handler --> topic1
handler --> topic2
handler --> topic3
handler --> topic4
    
topic1 --> workertracker
topic2 --> workertracker
topic3 --> workertracker
topic4 --> workertracker

workertracker --> topicCustomerUpdate
topicCustomerUpdate --> workerupdater

workerupdater --> dengage

    
@enduml
```


### :+1: Müşteri Servis Hareketlerinin Akışı 
- [ ] Müşteri servis haraketlerinin kafka topic içine aktarılması
- [ ] dEngage aktarım uygulmasının geliştirilmesi
- [ ] Testlerin  yapılıp canlı sisteme taşınması


```plantuml
@startuml

rectangle "Müşteri Servis Hareketlerinin Veri Akış Mimarisi" {

component logstash << logstash >> [
    Servis çağrı bilgilerinin toparlamak için
]
    
database topic [
    Servis çağrı kayıtları
    ]

component workerupdater <<bbt.dEgange.api-call-updater.worker>> [ 
    Servis çağrı kayıtlarını dEngage tarafına aktarır.
]
    
component dengage << dEngage >> [
    Star şema üzerinde servis çağrılanı tutar ve kampanya kurgusunda kullanır.
]
}
    
logstash --> topic
topic --> workerupdater
workerupdater --> dengage
    
@enduml
```

:::warning
 * Logstash ile direkt aktarım yapılabilir.
 * CDC ile SQL den aktarım yapılabilir.
 * RabbitMQ de bir queue daha oluşturarak aktarım yapılabilir.
     * https://docs.confluent.io/kafka-connect-rabbitmq-source/current/overview.html
:::

#### Kayıt Deseni

Her bir log kaydında bulunacak ve aktarılacak alanlar;
* **RequestTime**: API çağırma zamanı olarak aktarılacaktır.
* **CustomerId**: Müşteri TCKN bilgisi 
* **CustomerNo**: Temel bankacılıkta bulunan müşteri bilgisi
* **ClientId**: Kullanan uygulama bilgisi *(Text)*
* **HttpMethod**: Çağrılan servisin method tipi bilgisi
* **UpStreamPathTemplate**: Çağrılan servisin url bilgisi
* **RouteData**: Route üzerinden bind edilen data *(JSON/Text)*
* **RequestQueryString**: Query üzerinden gönderilen data *(JSON/Text)*
* **RequestData**: Request body üzerinden gönderilen data *(JSON/Text)*
* **ResponseData**: Response body olarak dönen data *(JSON/Text)*																			

#### Aktarım Kuralları
* Sadece HTTP Status Code: 200 kayıtları aktarılacaktır.
* Personel hareketleri **aktarılmayacak**.
    * Personel bilgisi uygulama ayağa kalktığında pusuladan çekip dictionary de in-memory tutarak kontrol eder.
    * Dictionary yenilenme **6 saat** den uzun olamaz.
    * Yönetim kurulu üyeleri gibi yan çalışanlar tam olarak anlaşılmalı.
* Sadece izin  verilen UpStreamPathTemplate akışlarına izin verilecek.
    * Bir configürasyondan alacak şekilde configüre edilmeli.
    * Yeni strem runtime da eklenmeli :) 
        * Pod dictionaryleri invalide edecek queue pub/sub modeli :)



### InApp, OnSite Devreye Alınması
- [x] Test kurulumlarının yapılması
- [x] Testlerin yapılması
- [ ] Canlı Sistem Kurulumu
- [ ] SDK Entegrasyonları

### Uygulama Davranış Verisi Akışı 
- [ ] SDK Entegrasyonları
- [ ] Testlerin yapılması
- [ ] Canlı Sistem Kurulumu
- [ ] *Custom event* geliştirmleri

### Bildirimlerin Entegrasyonu
- [ ] Bildirim mesajlarının star şemaya akışı (*Bildirim entegrasyon çalışmalarının bir parçası*).

```plantuml
@startuml

rectangle "Bildirim dEngage Veri Akış Mimarisi" {

component handler << QLIK >> [
    <b>CDC</b>
    İşlemler sonucunda oluşan hareketler tanımlı Kafka topiclerine aktarılır.
]
    
component dengage << dEngage >> [
    Star şema entegrasyonu ile hareket verisi entegrasyonu için
]
   
package "Kafka Topics" as kafka {

database topic4 [
    ...n
    ]
database topic1 [
    Fast Gerçekleşti
    ]
    
database topic2 [
    EFT Geldi
    ]
    
database topic3 [
    Hesap Açıldı
    ]
}
    
package "İşleyiciler" << bbt.dEngage.stream-worker >> as workers {
    component worker1 [ Fast Gerçekleşti 
        ]
    component worker2 [ Fast Gerçekleşti 
        ]
    component worker3 [ Fast Gerçekleşti 
        ]
    component worker4 [ ...n 
        ]
}
    
handler --> topic1
handler --> topic2
handler --> topic3
handler --> topic4
    
topic1 --> worker1
topic2 --> worker2
topic3 --> worker3
topic4 --> worker4

worker1 --> dengage
worker2 --> dengage
worker3 --> dengage
worker4 --> dengage



    
@enduml
```


### App Inbox Devreye Alınması
- [x] Test kurulumlarının yapılması
- [x] Testlerin yapılması
- [ ] Canlı Sistem Kurulumu
- [ ] Bildirimlerin entegrasyonu
- [ ] SDK Entegrasyonları


## Bildirim Entegrasyon Çalışmaları

- [x] Bildirim gönderim uygulamasının geliştirilmesi
- [x] Bildirim izni/kaydı uygulmasının geliştirilmesi
- [ ] Bildirim gönderim testlerin yapılması
- [ ] dEngage veri aktarım modülünün geliştirilmesi


```plantuml
@startuml

rectangle "Bildirim Enterasyon Mimarisi" {

component handler << QLIK >> [
    <b>CDC</b>
    İşlemler sonucunda oluşan hareketler tanımlı Kafka topiclerine aktarılır.
]

    
component gateway << bbt.messaging.gateway >> [
    Şablonlu, şablonsuz mesajların iletimi için
]

component master << bbt.notification.services >> [
    Müşterilerinin bildirim izin durumlarının sorgulanması için
]
    
   
package "Kafka Topics" as kafka {

database topic4 [
    ...n
    ]
database topic1 [
    Fast Gerçekleşti
    ]
    
database topic2 [
    EFT Geldi
    ]
    
database topic3 [
    Hesap Açıldı
    ]

}
    
package "İşleyiciler" << bbt.notification.worker >> as workers {
    component worker1 [ Fast Gerçekleşti 
        ]
    component worker2 [ Fast Gerçekleşti 
        ]
    component worker3 [ Fast Gerçekleşti 
        ]
    component worker4 [ ...n 
        ]
}
    
handler --> topic1
handler --> topic2
handler --> topic3
handler --> topic4
    
topic1 --> worker1
topic2 --> worker2
topic3 --> worker3
topic4 --> worker4

worker1 --> gateway
worker2 --> gateway
worker3 --> gateway
worker4 --> gateway

worker1 --> master
worker2 --> master
worker3 --> master
worker4 --> master
    
@enduml
```

### QR & Fast Bildirimleri
- [ ] Gönderimlerinin şablonlarının oluşturulması
- [ ] Var olan izin ve kayıtların taşınmasın
- [ ] Test edip canlıya alınması
 
### Para Transfer Bildirimleri
- [ ] Gönderimlerinin şablonlarının oluşturulması
- [ ] Var olan izin ve kayıtların taşınmasın
- [ ] Test edip canlıya alınması

### Hesaplar Bildirimleri
- [ ] Gönderimlerinin şablonlarının oluşturulması
- [ ] Var olan izin ve kayıtların taşınmasın
- [ ] Test edip canlıya alınması

### Ödeme Bildirimleri
- [ ] Gönderimlerinin şablonlarının oluşturulması
- [ ] Var olan izin ve kayıtların taşınmasın
- [ ] Test edip canlıya alınması

### Kart Kullanım Bildirimleri
- [ ] Gönderimlerinin şablonlarının oluşturulması
- [ ] Var olan izin ve kayıtların taşınmasın
- [ ] Test edip canlıya alınması

### Döviz Bildirimleri
- [ ] Gönderimlerinin şablonlarının oluşturulması
- [ ] Var olan izin ve kayıtların taşınmasın
- [ ] Test edip canlıya alınması

### Fon Bildirimleri
- [ ] Gönderimlerinin şablonlarının oluşturulması
- [ ] Var olan izin ve kayıtların taşınmasın
- [ ] Test edip canlıya alınması



## Gelen SMS Entegrasyon Çalışmaları
Operatörler tarafından sağlanan kısa numaralardan gelen mesajlar gelen numara ve mesajı ile birlikte bir servise yönlendiriliyor.

Var olan yapı daha izlenebilir ve sağlıklı bir yapıya dönüştürilmesi hedeflenmiştir.

```plantuml
@startuml

rectangle "Gelen SMS Yönetimi Mimarisi" {


package "Operatör Mesajları" as operator {
card sms_in_1[
 <b>8222</b>
    Kredi Başvuru kanalı ]

card sms_in_2[
 <b>3525</b> 
    İletişim İzni İptal ]
}
    
    
component codec [
    <b>Codec</b>
    Operator SMS Entegrasyon Uygulaması
    <i>Bulk ve Fast</i>
]

component handler << bbt.messasing.incoming-sms-handler >> [
    <b>Mesaj Dağıtıcısı</b>
    Mesajları kısa numaralarına ve anahtar kelimelerine göre kafka topiclerine dağıtır.
]
    

   
package "Kafka Topics" as kafka {
    
database topic1 [
    8222_migros
    ]
    
database topic2 [
    8222_mudo
    ]
    
database topic3 [
    3525_on_iptal
    ]
database topic4 [
    3525_burgan_iptal
    ]
}

sms_in_1 --> codec
sms_in_2 --> codec

codec --> handler
    
handler --> topic1
handler --> topic2
handler --> topic3
handler --> topic4
    
@enduml
```

### Çıkış SMS Entegrasyonu
- [x] Burgan müşteri çıkış 
- [x] On müşteri çıkış
- [ ] Çıkışların kuyruk yapsından çalışması 
### Diğer Gelen SMS Entegrasyonu
- [ ] **8222** Kredi Başvurusu




