iOS - Utility Modülü¶
Utility Modülü, kimlik doğrulama akışlarını destekleyen yardımcı servisleri sunar. Randevu yönetimi, doküman imzalama, adres doğrulama ve kurumsal müşteri doğrulama (KYB) işlemleri bu modül üzerinden gerçekleştirilir.
Giriş¶
Utility Modülü, EnQualify SDK'in kimlik doğrulama ve müşteri edinimi esnasında yardımcı özelliklerine erişebilmek için oluşturulmuş bir modüldür. Bu modül içerisinde randevu sistemi, adres doğrulama sistemi, çağrı tiplerinin alınması, doküman imzalama ve doküman ekleme sistemi ile birlikte kurumsal müşterinin tanınması sürecinde kullanılan metodları içermektedir.
Utility Modülünün Projeye Eklenmesi¶
EnQualify SDK Utility Modül'ün kullanımı tıp diğer modüllerde olduğu gibi "Podfile" içerisine ilgili modül ve sürüm numarası eklenerek gerçekleştirilebilir.
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
source 'https://github.com/CocoaPods/Specs.git'
source 'ssh://git@github.com/EnquraTechnology/EnQualifyiOSPackages.git'
target 'EnQualifyPlus-SDK' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
pod 'EnQualify/OCR', '2.0.4.2'
pod 'EnQualify/Face', '2.0.4.2'
pod 'EnQualify/NFC', '2.0.4.2'
pod 'EnQualify/VideoCall', '2.0.4.2'
pod 'EnQualify/Utility', '2.0.4.2'
# Pods for EnQualifyPlus-SDK
end
Utility Modüle diğer yardımcı modüllerde olduğu gibi Enqualify/Core modül'e ihtiyaç duyar bunun dışında herhangi bir bağımlılık içermeden doğrudan kullanılabilir.
Utility Modülü Nasıl Implemente Edilir ?¶
Utility Modüle, EnQualify SDK'in diğer modüllerine nazaran en büyük farklılık delegate observation yapısı ile değil, @escaping closure yapısı ile çalışmaktadır. Bununla birlikte ilgili class'ın kendisine ait observe / trigger edeceği method bulunmadığından dolayı yalnızca CoreModüle üzerinden gelen yanıtları iletmek üzere delegate yapısı mevcuttur.
import UtilityModule
class ViewController: UIViewController, EnQualifyUtilityDelegate {
func someMethodInside() {
EnQualifyUtility.setBaseModel(with baseModel: BaseModelUtility, delegate: Any?)
}
func baseModelCompleted() { }
func initializeFailed(with key: CustomNSError) { }
func deinitializeCompleted(moduleName: String) { }
}
EnQualifyUtility.setBaseModel fonksiyonu ilgili modül'ü kullanırken verification platform üzerindeki bilgilere erişebilmek için gerekli olan adresi, authorization ve configurasyonların belirlendiği ve CoreModül'e bildirildiği yerdir. Bu fonksiyonun çağırımının başarılı olması durumunda baseModelCompleted() tetiklenmektedir, aksi bir durum gerçekleşmesi durumunda initializeFailed(with key: CustomNSError) tetiklenmekte ve içerisindeki CustomNSError içerisindeki cevap değerlendirilebilir.
// BaseModelUtility
public var signallingCertificateList: [String]?
public var mapiCertificateList: [String]?
public var signallingCertificateBase64List: [String]?
public var mapiCertificateBase64List: [String]?
public var baseURL: String?
public var locale: String?
public var mobileUser: String?
public var countryCode: String?
Burada istenilen BaseModelUtility EnQualify SDK'in yardımcı modüllerinde verilmesi gereken CoreBaseModel ile aynıdır.
Çağrı Tiplerinin Alınması¶
Çağrı tipleri fonksiyonu, doğrulama ve kimlik kontrol süreçlerinde hangi tür çağrı yöntemlerinin mevcut olduğunu belirlemek için kullanılır. Bu bilgi, kullanıcıya sunulacak doğrulama seçeneklerini dinamik olarak belirlemeye yardımcı olur. Bu çağrı tiplerine özel olarak belirlemiş olduğunuz ayarları alabilmeniz için ilgili alanlarda kullanmanıza olanak sağlar.
Fonksiyon¶
Çağrı Tipi Getirme - callTypeGet¶
Sistemde mevcut olan tüm çağrı tiplerini getirir.
Sözdizimi
public static func callTypeGet(
with handler: String?,
completionHandler: @escaping ([String: String]?) -> ()
)
Parametreler
| Parametre | Tip | Açıklama |
|---|---|---|
handler | String? | İstek için opsiyonel tanımlayıcı veya bağlam bilgisi |
completionHandler | ([String: String]?) -> () | Çağrı tiplerini döndüren completion bloğu |
Default KYC çağrı tipleri gelirken, istenirse KYB çağrı tipleri getirilebilmesi için handler "KYB" olarak verilmelidir.
Dönüş Değeri
-
[String: String]?: Çağrı tiplerini içeren dictionary -
Key: Çağrı tipi kodu/kimliği
- Value: Çağrı tipi açıklaması/adı
Kullanım Örneği
EnQualifyCore.callTypeGet(with: "CONTEXT_ID_123") { callTypes in
guard let callTypes = callTypes else {
print("Çağrı tipleri alınamadı")
return
}
print("Mevcut çağrı tipleri:")
for (key, value) in callTypes {
print("Kod: \(key) - Açıklama: \(value)")
}
}
Handler Parametresi Kullanımı
handler parametresi, isteğe özel bağlam bilgisi sağlamak için kullanılabilir:
// Belirli bir işlem için çağrı tipleri
EnQualifyUtility.callTypeGet(with: "KYB") { callTypes in
}
// Genel kullanım için çağrı tipleri
EnQualifyUtility.callTypeGet(with: nil) { callTypes in
}
Randevu Sistemi¶
Randevu Nedir?¶
EnQualify SDK mevzuata uygun iki aşamalı (parçalı) doğrulama sistemine sahiptir. Bu aşamalardan ilki olan Self-Service akış tamamlandıktan sonra eğer zorunlu ise Video Görüşme için devam edilmelidir. Sisteminizde bulunan agentların yoğunluğu ya da diğer farklı sebeplerden ötürü, aday müşteri görüntülü görüşmeye o an katılamaz ise randevu oluşturarak görüntülü görüşmenin zamanını belirleyebilirsiniz. Bu randevu yönetim sistemi ile birlikte mevcut randevuların kontrolü, mevcut randevunun iptali, yeni alınacak randevuların tarihi ve saatinin alınması ve yeni randevu oluşturmak mümkündür.
Randevu Sistemine Erişim¶
EnQualifySDK modüler yapısı gereği, randevu sistemine her modül üzerinden erişilebilir bir yapıda tasarlanmıştır. EnQualifyOCR, EnQualifyNFC, EnQualifyFace ve EnQualifyVideoCall üzerinden randevu sisteminin bütün yeteneklerine ulaşmak mümkündür.
Mevcut Randevu Kontrolü¶
Kullanıcı akışa başlamadan önce kendisine ait daha önce oluşturulmuş bir randevu var ise bunu appointmentGet metodu ile kontrolü mümkündür.
import UtilityModule
/// Identity Type: "T.C. Kimlik Kartı"
/// Identity No: "12345678901"
EnQualifyUtility.appointmentGet(identityType: String?, identityNo: String?) { result in
}
bu çağırım sonrası size dönecek olan sonucu capture ettiğinizde [[String : AnyObject]] tipinde bir veriye erişeceksiniz. Bu veri tipi içerisinde key value ikililerinden oluşan bir yapı karşınıza çıkacak. Dönen veriyi incelemek gerekirse:
uId: UUID? // Randevunuza ait unique bir referans
callType: String? // Randevunun hangi callType'a ait olduğu
callTypeValue: String? // Ait olan callType'ın verification platformdaki UI ismi
identityType: String? // Randevunun hangi kimlik tipinde olduğu
identityNo: String? // Randevunun hangi kimlik numarasına ait olduğu
name: String? // Randevu alan kişinin ismi
surname: String? // Randevu alan kişinin soyismi
phone: String? // Randevu alan kişinin telefon numarası
email: String? // Randevu alan kişinin e-posta adresi
startDate: String? // Randevunun hangi güne ait olduğu
endDate: String? // Randevuya katılmak için son tarih
isPriorityCustomer: Bool? // Randevunun önceliğini belirtir.
Mevcut Randevunun İptali¶
Kullanıcı isterse daha önceden oluşturmuş olduğu randevuyu iptal edebilir. Önceden oluşturulan randevunun iptali için EnQualifySDK 'in sunduğu appointmentCancel API'si kullanılır.
import UtilityModule
/// callType : "NewCustomer"
/// identityType: "T.C. Kimlik Kartı"
/// identityNo: "12345678901"
EnQualifyUtility.appointmentCancel(callType: String, identityType: String, identityNo: String ) { result in
}
bu çağırım sonucu size iptal etmek istediğiniz randevunun iptal sonucu ile ilgili Bool bir değer dönmektedir.
Uygun Randevuların Kontrolü¶
Kullanıcı, gerekli olduğu durumda randevu oluşturabilmek ve kendisine uygun randevu zamanını belirleyebilmek için daha önceden verification platform üzerinden tanımlanan slotlar ile birlikte randevu tarih ve zamanına erişebilir. Bu kontrole ulaşabilmek için EnQualifySDK'in sunduğu appointmentAvailableGet API'si kullanılır.
import UtilityModule
/// callType: "NewCustomer"
/// startDate: "2025-01-23T04:56:07.000+00:00"
/// endDate: "2025-01-23T04:56:07.000+00:00"
EnQualifyUtility.appointmentAvailableGet(callType: String?, startDate: String?, endDate: String?) { result in
}
bu çağırım sonrası size dönecek olan sonucu capture ettiğinizde [[String : AnyObject]] tipinde bir veriye erişeceksiniz. Bu veri tipi içerisinde key value ikililerinden oluşan bir yapı karşınıza çıkacak. Dönen veriyi incelemek gerekirse:
date: String? // Randevunun hangi gün'e ait olduğu
startTime: String? // Randevunun başlangıç saati
endTime: String? // Randevunun bitiş saati
count: String? // Saat aralığındaki randevu sayısı
Randevu oluşturma¶
Kullanıcı kendisine uygun tarih ve saati belirleyerek randevu oluşturabilir. Bu işlemi gerçekleştirebilmek için EnQualifySDK'in sunduğu appointmentSave API'si kullanılır.
import UtilityModule
/// callType: "NewCustomer"
/// date: "2025-05-09T00:00:00Z"
/// startTime: "14:45:00"
/// identityType: "T.C. Kimlik Kartı"
/// identityNo: "12345678901"
/// name: "Ahmet"
/// surname: "Yılmaz"
/// phone: "05993311920"
/// email: "example@enqura.com"
/// uId: "c18683b4-8c79-47ef-bd93-60f54c64e8de"
EnQualifyUtility.appointmentSave(callType: String?, date: String?, startTime: String?, identityType: String?, identityNo: String?, name: String?, surname: String?, phone: String?, email: String?, uId: UUID?) { result in
}
bu çağırım sonucu, belirtilen tarih ve saat için randevu oluşturulmasına dair sonuç Bool tipinde döner.
Doküman İmzalama¶
5.2.7. Döküman İmzalama¶
Mobilden Güvenli Doküman İmzalama
Mobil cihazlar üzerinden yapılan doküman imzalama işlemimiz, hem kullanıcının onayını hem de imzalanan içeriğin bütünlüğünü garanti altına alan güvenli bir yapıya sahiptir. Kullanıcı bir dokümanı imzalamak istediğinde, mobil cihazına özel bir anahtar gönderilir. Bu anahtar sayesinde, dokümanın belirli bir özeti alınır ve sadece o kullanıcıya özgü bir imza oluşturulur.
Bu imza, daha sonra sistemimize kaydedilerek, imzalanan dokümanın daha sonra değiştirilmediği ve gerçekten o kullanıcı tarafından onaylandığı her zaman kanıtlanabilir hale getirilir.
Döküman başarılı bir şekilde imzalandığında, status parametresi true değer dönecektir. Bu closure içerisinde, başka bir döküman imzalama işlemi yapılmayacaksa EnQualifyUtility.signingFinish() fonksiyonu çağrılabilir.
Döküman imzalama işlemi başarısız olduğunda status parametresi false değer dönecektir. Bu değer ile birlikte iş akışına göre değerlendirilip diğer işlemlere geçilebilir ya da kullanıcıya hata mesajı gösterebilirsiniz.
Döküman imzalama işlemi tamamlandığında EnQualifyUtility.signingFinish() fonksiyonu çağırımının içerisindeki capture edilen status Bool değeri dönecektir, true sonuç imzalama işleminin bitimindeki CustomerAPI'nin tetiklenmesi için sürecin bittiğini işaret eder. False sonuç ise bu esnada yaşanan bir hatadan kaynaklanan sorundan dolayı işlemin bittiğini verification platforma doğru bir biçimde ulaştıramadığını anlatmaktadır.
Adres Doğrulama¶
Adres doğrulama sistemi, kullanıcıların kimlik belgelerinde yer alan kimlik bilgilerinin, barkodlu adres doğrulama belgesinde bulunan bilgiler ile eşleşip eşleşmediğini kontrol etmek için kullanılır. Bu süreç iki ana fonksiyon ile gerçekleştirilir:
- Barkod Okuma (
barcodeRead) - Adres Doğrulama (
addressVerify)
Fonksiyonlar¶
1. Barkod Okuma - barcodeRead¶
Bu fonksiyon, ikametgah belgesindeki barkoddan bilgileri okumak ve parse etmek için kullanılır.
public static func barcodeRead(
content: String?,
isWithAddress: AnyObject?,
identityNo: String?,
completionHandler: @escaping (String?, String?, String?, Bool?) -> ()
)
Parametreler
| Parametre | Tip | Açıklama |
|---|---|---|
content | String? | Barkoddan okunan ham veri içeriği |
isWithAddress | AnyObject? | Adres bilgisinin dahil edilip edilmeyeceğini belirten opsiyonel parametre |
identityNo | String? | T.C. Kimlik numarası |
completionHandler | (String?, String?, String?, Bool?) -> () | İşlem tamamlandığında çağrılacak completion bloğu |
Completion Handler Dönüş Değerleri
Completion handler aşağıdaki parametreleri döndürür:
barcode(String?): İşlenmiş barkod verisiexpireDate(String?): Belgenin son kullanma tarihiaddress(String?): Belgede yer alan adres bilgisiisSameIdentity(Bool?): Kimlik numarasının eşleşip eşleşmediği
Kullanım Örneği
import UtilityModule
EnQualifyUtilty.barcodeRead(
content: "base64DataSample",
isWithAddress: true,
identityNo: "12345678901",
completionHandler: { barcode, expireDate, address, isSameIdentity in
guard let barcode = barcode,
let address = address,
let isSameIdentity = isSameIdentity,
isSameIdentity else {
print("Barkod okuma başarısız")
return
}
print("Barkod: \(barcode)")
print("Son Kullanma Tarihi: \(expireDate ?? "Belirtilmemiş")")
print("Adres: \(address)")
}
)
2. Adres Doğrulama - addressVerify¶
Bu fonksiyon, ikametgah belgesindeki adres bilgisi ile birlikte nüfus vatandaşlık işleri sistemine bağlanarak ilgili belgede bulunan bilgilerin doğruluğunu teyit etmek için kullanılır.
public static func addressVerify(
identityNo: String,
barcode: String,
completionHandler: @escaping (Bool) -> ()
)
Parametreler
| Parametre | Tip | Açıklama |
|---|---|---|
identityNo | String | T.C. Kimlik numarası |
barcode | String | Doğrulanacak barkod verisi |
completionHandler | (Bool) -> () | İşlem tamamlandığında çağrılacak completion bloğu |
Completion Handler Dönüş Değeri
Bool: Adres doğrulama başarılı isetrue, başarısız isefalse
import UtilityModule
EnQualifyUtilty.addressVerify(
identityNo: "12345678901",
barcode: "barcode_string",
completionHandler: { isVerified in
if isVerified {
print("Adres doğrulama başarılı")
// Doğrulama başarılı işlemleri
} else {
print("Adres doğrulama başarısız")
// Hata durumu işlemleri
}
}
)
Kurumsal Müşteri Süreçleri (KYB - Know Your Business)¶
Genel Bakış¶
İşletme doğrulama sistemi, kimlik doğrulama işlemlerinden önce kurumsal müşterilerin sisteme tanıtılması için kullanılır. Bu süreç, işletme bilgilerinin kaydedilmesi, çalışan yönetimi ve gerekli dokümanların toplanması aşamalarından oluşur.
Temel İş Akışı¶
- İşletme Kontrolü (
callBusinessCheck) - Daha önce kayıt var mı kontrol edilir - İşletme Ekleme (
callBusinessAdd) - Yeni işletme sisteme eklenir - Çalışan Yönetimi (
callBusinessStaffAdd/Check) - İşletme çalışanları eklenir var ise kontrol edilir. - Doküman Yönetimi (
callBusinessDocumentAdd) - Gerekli belgeler yüklenir - Güncelleme (
callBusinessUpdate) - İşlem durumu güncellenir
Fonksiyonlar¶
1. İşletme Kontrolü - callBusinessCheck¶
Verilen vergi numarası ile daha önceden kayıtlı bir işletme olup olmadığını kontrol eder.
public static func callBusinessCheck(
taxNumber: String,
reference: String? = nil,
completionHandler: @escaping (VerifyCallBusinessCheckModelWrapper?) -> ()
)
Parametreler
| Parametre | Tip | Açıklama |
|---|---|---|
taxNumber | String | İşletme vergi numarası |
reference | String? | İşlem referans bilgisi (opsiyonel) |
completionHandler | (VerifyCallBusinessCheckModelWrapper?) -> () | İşlem tamamlandığında çağrılacak completion bloğu |
Dönüş Modeli - VerifyCallBusinessCheckModelWrapper
public var checkRecord: AnyObject? // Daha önceden kayıt var mı?
public var callBusinessUId: String? // Bu işleme ait business ID
public var type: String? // İşletme tipi (limited/şahıs)
Kullanım Örneği
import UtilityModule
EnQualifyUtility.callBusinessCheck(
taxNumber: "1234567890",
reference: "REF123",
completionHandler: { result in
guard let result = result else {
print("İşletme kontrolü başarısız")
return
}
if result.checkRecord != nil {
print("İşletme daha önce kaydedilmiş")
print("Business ID: \(result.callBusinessUId ?? "Belirtilmemiş")")
print("Tip: \(result.type ?? "Belirtilmemiş")")
} else {
print("Yeni işletme kaydı gerekiyor")
}
}
)
2. İşletme Ekleme - callBusinessAdd¶
Yeni bir işletmeyi sisteme ekler.
public static func callBusinessAdd(
taxNumber: String,
name: String,
shortName: String? = nil,
data: String? = nil,
type: String? = nil,
reference: String? = nil,
completionHandler: @escaping (String?) -> ()
)
Parametreler
| Parametre | Tip | Açıklama |
|---|---|---|
taxNumber | String | İşletme vergi numarası |
name | String | İşletme tam adı |
shortName | String? | İşletme kısa adı (opsiyonel) |
data | String? | Verification platform'da dashboard görünümü için ek bilgiler |
type | String? | İşletme tipi ("limited" veya "şahıs") |
reference | String? | İşlem referans bilgisi |
completionHandler | (String?) -> () | İşlem sonucunda dönen business ID |
Kullanım Örneği
import UtilityModule
EnQualifyUtility.callBusinessAdd(
taxNumber: "1234567890",
name: "Örnek Şirket A.Ş.",
shortName: "Örnek Şirket",
data: "Dashboard için ek bilgiler", // JSON şeklinde gönderilecektir.
type: "limited",
reference: "REF123",
completionHandler: { businessId in
if let businessId = businessId {
print("İşletme başarıyla eklendi. Business ID: \(businessId)")
} else {
print("İşletme ekleme başarısız")
}
}
)
3. Çalışan Ekleme - callBusinessStaffAdd¶
İşletmeye yeni çalışan ekler.
public static func callBusinessStaffAdd(
callBusinessUID: String?,
sessionUId: String?,
name: String,
surname: String,
identityNo: String,
birthDate: String,
phone: String,
completionHandler: @escaping (AnyObject?) -> ()
)
Parametreler
| Parametre | Tip | Açıklama |
|---|---|---|
callBusinessUID | String? | İşletme benzersiz kimliği |
sessionUId | String? | Oturum kimliği |
name | String | Çalışan adı |
surname | String | Çalışan soyadı |
identityNo | String | T.C. Kimlik numarası |
birthDate | String | Doğum tarihi |
phone | String | Telefon numarası |
completionHandler | (AnyObject?) -> () | İşlem sonucu |
Kullanım Örneği
import UtilityModule
EnQualifyUtility.callBusinessStaffAdd(
callBusinessUID: "BUSINESS_123",
sessionUId: "SESSION_456",
name: "Ahmet",
surname: "Yılmaz",
identityNo: "12345678901",
birthDate: "1990-01-15",
phone: "+905551234567",
completionHandler: { result in
if result != nil {
print("Çalışan başarıyla eklendi")
} else {
print("Çalışan ekleme başarısız")
}
}
)
4. Çalışan Kontrolü - callBusinessStaffCheck¶
İşletmeye ait bir çalışanın kayıtlı olup olmadığını kontrol eder.
Sözdizimi
public static func callBusinessStaffCheck(
identityNo: String,
callBusinessUID: String?,
completionHandler: @escaping (AnyObject?) -> ()
)
Parametreler
| Parametre | Tip | Açıklama |
|---|---|---|
identityNo | String | Kontrol edilecek çalışanın T.C. Kimlik numarası |
callBusinessUID | String? | İşletme benzersiz kimliği |
completionHandler | (AnyObject?) -> () | Kontrol sonucu (Bool değere cast edilmelidir.) |
Kullanım Örneği
import UtilityModule
EnQualifyUtility.callBusinessStaffCheck(
identityNo: "12345678901",
callBusinessUID: "BUSINESS_123",
completionHandler: { result in
if result != nil {
print("Çalışan mevcut")
} else {
print("Çalışan bulunamadı")
}
}
)
5. İşletme Güncelleme - callBusinessUpdate¶
İşletme kaydının durumunu günceller.
Sözdizimi
public static func callBusinessUpdate(
callBusinessUID: String?,
reference: String?,
isInProgress: AnyObject?,
type: String?,
completionHandler: @escaping (AnyObject?) -> ()
)
Parametreler
| Parametre | Tip | Açıklama |
|---|---|---|
callBusinessUID | String? | İşletme benzersiz kimliği |
reference | String? | İşlem referans bilgisi |
isInProgress | AnyObject? | İşlemin devam edip etmediği (true/false) |
type | String? | İşletme tipi |
completionHandler | (AnyObject?) -> () | Güncelleme sonucu (Bool değere cast edilmelidir.) |
Kullanım Örneği
import UtilityModule
EnQualifyUtility.callBusinessUpdate(
callBusinessUID: "BUSINESS_123",
reference: "REF123",
isInProgress: true,
type: "limited",
completionHandler: { result in
if result != nil {
print("İşletme durumu güncellendi")
} else {
print("Güncelleme başarısız")
}
}
)
6. Doküman Ekleme - callBusinessDocumentAdd¶
İşletmeye ait dokümanları sisteme yükler.
public static func callBusinessDocumentAdd(
category: String?,
reference: String?,
callBusinessUId: String?,
document: [VerifyMobileCallBusinessDocumentArrayWrapper]?,
completionHandler: @escaping (AnyObject?) -> ()
)
Parametreler
| Parametre | Tip | Açıklama |
|---|---|---|
category | String? | Doküman kategorisi |
reference | String? | İşlem referans bilgisi |
callBusinessUId | String? | İşletme benzersiz kimliği |
document | [VerifyMobileCallBusinessDocumentArrayWrapper]? | Yüklenecek doküman array'i |
completionHandler | (AnyObject?) -> () | Yükleme sonucu (Bool değere cast edilmelidir.) |
Doküman Modeli - VerifyMobileCallBusinessDocumentArrayWrapper
public var extension: String? // Dosya uzantısı (pdf, jpg, png vb.)
public var content: String? // Dosya içeriği (Base64 formatında)
public var contentHash: String? // Dosya hash değeri
Kullanım Örneği
import UtilityModule
let document = VerifyMobileCallBusinessDocumentArrayWrapper()
document.extension = "pdf"
document.content = "Base64EncodedFileContent"
document.contentHash = "SHA256HashValue"
EnQualifyUtility.callBusinessDocumentAdd(
category: "TICARET_SICIL_GAZETESI",
reference: "REF123",
callBusinessUId: "BUSINESS_123",
document: [document],
completionHandler: { result in
if result != nil {
print("Doküman başarıyla yüklendi")
} else {
print("Doküman yükleme başarısız")
}
}
)
7. KYB Doküman Kategori Listesi - getDocumentKYBCategoryList¶
KYB akışında eklenecek olan dokümanların kategorilerini getirir.
public static func getDocumentKYBCategoryList(
completionHandler: @escaping ([VerifyInfoDocumentKYBCategoryArrayWrapper]?) -> ()
)
Dönüş Modeli - VerifyInfoDocumentKYBCategoryArrayWrapper
public var category: String? // Kategori kodu
public var name: String? // Kategori adı (Türkçe)
public var nameEn: String? // Kategori adı (İngilizce)
public var isRequired: AnyObject? // Zorunlu mu?
public var sequence: NSNumber? // Sıralama
public var secondPhase: AnyObject? // İkinci fazda mı gerekli?
Kullanım Örneği
import UtilityModule
EnQualifyUtility.getDocumentKYBCategoryList { categories in
guard let categories = categories else {
print("Kategori listesi alınamadı")
return
}
for category in categories {
print("Kategori: \(category.category ?? "Belirtilmemiş")")
print("Ad: \(category.name ?? "Belirtilmemiş")")
print("Zorunlu: \(category.isRequired ?? false)")
print("---")
}
}
Sesli Doğrulama¶
1. Ürün Tanımı¶
EnQualify Sesli Doğrulama SDK'sı, kimlik doğrulama süreçlerine ses ve video katmanı ekleyen bir mobil entegrasyon çözümüdür. Müşterileriniz ekrandaki soruları sesli yanıtlar; sistem bu yanıtları analiz ederek kimlik teyidini gerçekleştirir.
Ne İşe Yarar?¶
- Müşteri temsilcisiz, tamamen dijital kimlik doğrulama
- Sesli yanıt + video kaydı ile ikili doğrulama katmanı
- Soru grupları (teyitli soru, onay metni, teyitsiz soru) üzerinden esnek senaryo kurgusu
- Yanıtlar STT (konuşmayı metne çevirme) ile işlenir, backend tarafında eşleştirilir
2. Kullanıcı Akışı¶
| Adım | Ekran ve İşlem |
|---|---|
| 1 — Hazırlık | Bilgilendirme ekranı gösterilir. Mikrofon ve kamera izni istenir. Kullanıcı "Başlayın" butonuna basar; arka planda soru konfigürasyonu servisten çekilir. |
| 2 — Sesli Yanıt | Her soru için kullanıcı mikrofon butonuna basarak yanıtını kaydeder. Kayıt duraklatılabilir, geri dinlenebilir ve silinebilir. Gönder butonuna basıldığında ses ve video backend'e iletilir; STT sonucu anlık döner. |
| 3 — Onay | Tüm yanıtlar özet ekranında listelenir. Kullanıcı bir yanıtı yanlış bulduysa o soruyu tekrar kaydedebilir. Onaylıyorum butonuna basıldığında nihai doğrulama servisi çağrılır. |
✅ Başarılı — Özet ekranı gösterilir, akış bir sonraki adıma yönlendirilir.
❌ Başarısız — Kullanıcı "Tekrar Dene" ile başa dönebilir.
⚠️ Teknik Hata — Kullanıcı görüntülü görüşmeye yönlendirilir.
3. Soru Konfigürasyonu¶
| ContentType | Açıklama |
|---|---|
ConfirmedQuestion | Kullanıcının kimlik bilgisini doğrulayan sorular (ör. Baba adı, Seri no). Yanıtlar backend'deki kayıtlı verilerle eşleştirilir. |
ConfirmationText | Kullanıcının sesli olarak onaylaması gereken metinler (ör. sözleşme maddeleri, ürün bilgileri). |
UnconfirmedQuestion | Serbest yanıt soruları. Yanıt eşleştirmesi yapılmaz, ses kaydı alınır. |
ConfirmedQuestiongrubunda 3 soru varsa → ⅓, ⅔, 3/3 şeklinde gösterilir- Ardından
ConfirmationTextgrubuna geçilir, numaralandırma 1'den başlar DisplayCount— gruptan kaç soru gösterileceğiIsRandom— soruların rastgele sıralanıp sıralanmayacağı
4. Teknik Entegrasyon¶
SDK üç servis üzerinden çalışır. Entegrasyon sırası aşağıdaki gibidir:
4.1 Gereksinimler¶
- iOS 14+
- Swift 5.7+
- EnQualifyUtility framework (
UtilityModule) Info.plist:NSMicrophoneUsageDescription,NSCameraUsageDescription
4.2 Adım 1 — SDK'yı Başlat ve Soruları Çek¶
conversationalValidationLaunch ile oturum başlatılır. Başarılı bağlantı sonrası delegate callback'i tetiklenir, soru listesi bu callback üzerinden alınır.
swift
EnQualifyUtility.conversationalValidationLaunch(
baseModel: baseModel,
sessionModel: sessionModel,
delegate: self
)
// Delegate callback — sorular bu metod ile gelir
func conversationalValidationConfigGetCompleted(
config: [VerifyVoiceVerificationMobileListWrapper]?
) {
// config içinde sorular, içerik tipleri,
// displayCount, isRandom ve expectedAnswers bulunur
}
SessionModelUtility parametreleri:
| Parametre | Açıklama |
|---|---|
callType | Çağrı tipi (ör. "NewCustomer") |
name / surname | Kullanıcı adı soyadı |
identityNo | TC kimlik numarası |
reference | Unique işlem referansı (UUID) |
4.3 Adım 2 — Her Soru İçin Ses ve Video Gönder¶
Kullanıcı her soruyu yanıtladıktan sonra callVoiceVerificationAdd çağrılır. SDK ses ve video dosyalarını otomatik olarak işleyip backend'e iletir. STT sonucu answer alanında döner.
swift
EnQualifyUtility.callVoiceVerificationAdd(
videoContentURL: videoFileURL, // Kameradan kaydedilen mp4
soundContentURL: audioFileURL, // Mikrofondan kaydedilen m4a
voiceVerificationContentUId: contentUId // Hangi soruya ait olduğu
) { response in
let answer = response?.answer ?? ""
// answer dolu → STT başarılı, bir sonraki soruya geç
// answer boş → STT başarısız, kullanıcıya hata göster
// response nil → teknik hata
}
contentUId değeri soru konfigürasyonundan (VerifyVoiceVerificationMobileListWrapper.contentUId) gelir ve her soru için benzersizdir.
4.4 Adım 3 — Tüm Sorular Tamamlandığında Onay Al¶
Kullanıcı tüm yanıtları onayladıktan sonra callVoiceVerificationApproved çağrılır.
swift
EnQualifyUtility.callVoiceVerificationApproved { isApproved in
if isApproved {
// Doğrulama başarılı → sonraki adıma geç
} else {
// Doğrulama başarısız → kullanıcıya hata göster
}
}
4.5 Servis Akış Özeti¶
conversationalValidationLaunch()
↓
conversationalValidationConfigGetCompleted (delegate)
↓
[ Her soru için ]
callVoiceVerificationAdd(video, ses, contentUId)
↓ response.answer
[ Tüm sorular bitti ]
↓
callVoiceVerificationApproved()
↓ true / false
5. Güvenlik ve Veri Akışı¶
- Ses dosyaları
m4aformatında kaydedilir, SDK tarafından base64'e çevrilerek backend'e iletilir - Video dosyaları
mp4formatında, ses track'i olmadan kaydedilir - Her soru için ses ve video ayrı ayrı gönderilir (
contentUIdile eşleştirilir) - STT işlemi backend tarafında gerçekleşir; mobil cihazda hiçbir metin analizi yapılmaz