Skip to content

Commit

Permalink
Merge pull request #1 from InsurUp/webhook-docs
Browse files Browse the repository at this point in the history
Add webhook api integration docs
  • Loading branch information
kerem-acer authored Nov 18, 2024
2 parents e5a1177 + cabead1 commit 4759f8e
Show file tree
Hide file tree
Showing 35 changed files with 1,848 additions and 6 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,5 @@
npm-debug.log*
yarn-debug.log*
yarn-error.log*

.idea/
199 changes: 199 additions & 0 deletions docs/kullanici-rehberleri/webhook-api-integration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
# Webhook API Entegrasyonu

Webhook'lar, bir olay meydana geldiğinde veya gelirken belirtilen URL'e istek atmak için kullanılır. InsurUp'da iki çeşit event vardır.

- **Async**: event'ler bir olay gerçekleştiğinde atılır ve belirtilen API'ın sonucunu yapılan işleme etki etmez.
- **Sync**: event'ler bir olay gerçekleşmeden önce atılır ve belirtilen API'ın sonucuna göre yapılan işleme etki edebilir. Ödeme validasyonu güzel bir örnektir.

Webhook event'leri, belirli bir URL'ye HTTP POST isteği göndererek tetiklenir. Bu istek, bir JSON nesnesi içerir. JSON nesnesi, event'e ait detayları içerir.

## Header'lar

- **`x-webhook-event`**: Tetiklenen event'in ismidir.
- **`x-webhook-id`**: Acente panelindeki oluşturulan webhook'un tekil numarasıdır.
- **`x-webhook-delivery`**: Tekil gönderim numarasıdır.
- **`x-webhook-signature`**: Bu header eğer `secret` alanı doluysa gönderilir. Belirtilen `secret` ile payload SHA-256 ile şifrelenir.

## Event'ler

### `proposal_premium.received` *async*

Bir teklif primi InsurUp'a iletildiği zaman tetiklenir.

**Örnek Payload**

```json
{
"proposalId": "673afd15f11de64fe1f2bjdb",
"productId": 40235,
"premiums": [
{
"installmentNumber": 1,
"netPremium": 1243,
"grossPremium": 1243,
"commission": 0,
"exchangeRate": 1,
"paymentType": "All",
"currency": "TurkishLira",
"insuranceCompanyProposalNumber": "142534209"
},
{
"installmentNumber": 2,
"netPremium": 1243,
"grossPremium": 1243,
"commission": 0,
"exchangeRate": 1,
"paymentType": "All",
"currency": "TurkishLira",
"insuranceCompanyProposalNumber": "142534209"
},
{
"installmentNumber": 3,
"netPremium": 1243,
"grossPremium": 1243,
"commission": 0,
"exchangeRate": 1,
"paymentType": "All",
"currency": "TurkishLira",
"insuranceCompanyProposalNumber": "142534209"
}
],
"insuredCustomer": {
"name": "Müşteri ismi",
"phoneNumber": {
"number": "5334180719",
"countryCode": 90
},
"email": {
"value": "customer@insurup.com"
},
"city": {
"value": "34",
"text": "İSTANBUL"
},
"district": {
"value": "1823",
"text": "KÜÇÜKÇEKMECE"
}
}
}
```

### `proposal_premium.purchasing` *sync*

Bir teklif primini satın alınmadan önce tetiklenir. Bu event'i satın alma validasyonu olarak kullanabilirsiniz.

**Örnek Payload**

```json
{
"proposalId": "673afd15f11de64fe1f2bjdb",
"productId": 40235,
"installmentNumber": 1,
"paymentType": "CreditCard"
}
```

### `proposal_premium.purchase_failed` *async*

Bir teklif primini satın alma isteği **başarısız** olunca tetiklenir.

**Örnek Payload**

```json
{
"proposalId": "673afd15f11de64fe1f2bjdb",
"productId": 40235,
"installmentNumber": 1,
"paymentType": "CreditCard",
"failureReason": "X sigorta şirketi bilinmeyen bir nedenden dolayı poliçeleştirme isteğini reddetti"
}
```

### `proposal_premium.purchased` *async*

Bir teklif primini satın alma isteği **başarılı** olunca tetiklenir.

**Örnek Payload**

```json
{
"proposalId": "673afd15f11de64fe1f2bjdb",
"policyId": "673b4cb4524a0a5187ddbeae",
"productId": 40235,
"installmentNumber": 1,
"paymentType": "CreditCard",
"policyStartDate": "2024-11-20",
"policyEndDate": "2025-11-20"
}
```

## Signature Validasyonu

Webhook'larınızın güvenliğini sağlamak için, gelen isteklerin gerçekten sizin tarafınızdan gönderildiğini doğrulamak amacıyla imza doğrulaması yapmanız önemlidir. Aşağıda, imza doğrulaması için çeşitli dillerde örnek kodlar bulunmaktadır.

### Python

```python
import hmac
import hashlib

def validate_signature(secret, payload, signature):
computed_signature = hmac.new(secret.encode(), payload.encode(), hashlib.sha256).hexdigest()
return hmac.compare_digest(computed_signature, signature)
```

### Javascript

```javascript
const crypto = require('crypto');

function validateSignature(secret, payload, signature) {
const computedSignature = crypto
.createHmac('sha256', secret)
.update(payload, 'utf8')
.digest('hex');
return crypto.timingSafeEqual(Buffer.from(computedSignature, 'hex'), Buffer.from(signature, 'hex'));
}
```

### C#

```csharp
bool ValidateSignature(string secret, string payload, string signature)
{
using var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(secret))

var computedHash = hmac.ComputeHash(Encoding.UTF8.GetBytes(payload));
var computedSignature = BitConverter.ToString(computedHash).Replace("-", "").ToLower();

return computedSignature == signature.ToLower();
}
```

### PHP

```php
function validate_signature($secret, $payload, $signature) {
$computed_signature = hash_hmac('sha256', $payload, $secret);
return hash_equals($computed_signature, $signature);
```

### Java

```java
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class SignatureValidator {
public static boolean validateSignature(String secret, String payload, String signature) throws Exception {
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
sha256_HMAC.init(secret_key);

String computedSignature = Base64.getEncoder().encodeToString(sha256_HMAC.doFinal(payload.getBytes()));
return computedSignature.equals(signature);
}
}
```
10 changes: 4 additions & 6 deletions docusaurus.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ const config: Config = {
{
docs: {
editUrl: 'https://github.com/InsurUp/docs/blob/main/',
// includeCurrentVersion: false,
includeCurrentVersion: false,
routeBasePath: '/'
},
blog: false,
Expand All @@ -38,8 +38,6 @@ const config: Config = {
indexName: 'insurup',
contextualSearch: true
},
// Replace with your project's social card
// image: 'img/docusaurus-social-card.jpg',
navbar: {
logo: {
alt: 'InsurUp Logo',
Expand All @@ -57,9 +55,9 @@ const config: Config = {
label: 'InsurUp CRM',
position: 'right',
},
// {
// type: 'docsVersionDropdown',
// }
{
type: 'docsVersionDropdown',
}
],
},
// footer: {
Expand Down
37 changes: 37 additions & 0 deletions versioned_docs/version-0.1.26/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
---
title: Başlangıç
sidebar_position: 1
---

# InsurUp'a Hoş Geldiniz! 🚀

InsurUp, sigorta acenteleri ve brokerları için geliştirilmiş yenilikçi bir CRM çözümüdür. Kolay kullanımı, güçlü özellikleri ve esnek altyapısıyla, sigorta işlemlerinizi hızlı ve verimli bir şekilde yönetmenize olanak tanır. İster küçük bir acente olun, ister büyük bir broker ağı yönetin; InsurUp, sigorta süreçlerinizi daha kolay ve etkili hale getirir.

## 🌟 InsurUp Nedir?

InsurUp, sigorta acentelerinin ve brokerlarının iş süreçlerini kolaylaştırmak için özel olarak tasarlanmış bulut tabanlı bir CRM platformudur. Platform, sigorta acentelerinin teklif hazırlama, poliçe yönetimi, müşteri ilişkileri ve veri analizi gibi temel işlemlerini tek bir çatı altında toplar. Esnek ve kullanıcı dostu arayüzü sayesinde, herhangi bir teknik bilgi gerektirmeden kullanıcıların ihtiyaçlarına göre özelleştirilebilir ve kolayca adapte edilebilir.

Bulut tabanlı yapısı, kullanıcıların diledikleri yerden sisteme erişmelerine olanak tanırken, güçlü entegrasyon özellikleriyle sigorta şirketleriyle hızlı ve güvenli bağlantılar kurmalarını sağlar. Self servis modülleriyle kullanıcılar kendi başlarına acente kurulumlarını tamamlayabilir, teklifleri hızla hazırlayabilir ve müşteri bilgilerini tek bir ekranda görüntüleyebilir. Tüm bu özellikler, InsurUp'ı modern sigorta operasyonlarının merkezi haline getirir.

InsurUp hakkında daha fazla bilgi için [InsurUp web sitemizi](https://www.insurup.com) sayfamızı ziyaret edin.

## 🎯 Nasıl Başlayabilirsiniz?

Yeni bir kullanıcı olarak başlamak çok kolay! Adım adım kullanıcı rehberlerimizden faydalanarak hızlıca sistemi keşfedebilirsiniz. Başlamak için aşağıdaki adımları takip edin:

1. **[Giriş Yapın](./kullanici-rehberleri/giris-sayfasi)**: İlk adım olarak platforma giriş yapın ve hesabınızı aktif hale getirin.
2. **[Acentenizi Kurun](./kullanici-rehberleri/acente-bilgileri-ve-kurulum-adimlari)**: Acente bilgilerinizi girerek kurulum işlemini tamamlayın.
3. **[Kullanıcılarınızı Ekleyin](./kullanici-rehberleri/kullanicilar)**: Acenteniz için yeni kullanıcılar davet edin ve yetkilendirmeleri yapın.
4. **[Tekliflerinizi ve Poliçelerinizi Yönetin](./kullanici-rehberleri/teklifler)**: Hızlıca teklif hazırlayın ve poliçe süreçlerinizi yönetin.

## 📚 Kullanıcı Rehberleri

Platformdaki tüm modüller hakkında detaylı bilgi almak için [Kullanıcı Rehberleri](./kullanici-rehberleri) sayfamıza göz atabilirsiniz. Burada sistemdeki her özellik için adım adım açıklamalar bulacaksınız. Rehberlerimiz, sıkça karşılaşılan sorunlara ve merak edilen özelliklere dair pratik çözümler sunar.

## 📞 Yardıma mı ihtiyacınız var?

Herhangi bir konuda desteğe ihtiyaç duyarsanız, [Kullanıcı Rehberleri](./kullanici-rehberleri) sayfasından yardım alabilir veya [Destek Ekibi](mailto:destek@insurup.com) ile iletişime geçebilirsiniz.

---

InsurUp ile sigorta operasyonlarınızı daha verimli hale getirin, işinizi büyütün ve müşteri memnuniyetini artırın. Şimdi başlayın ve InsurUp'ın avantajlarını keşfedin! 🎉
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
---
title: "Acente Bilgileri ve Kurulum Adımları"
sidebar_position: 2
---

# Acente Bilgileri ve Kurulum Adımları

## Acente Bilgileri Ekranı

Bu ekranda acente adına, vergi numarasına ve levha kayıt numarasına dair bilgiler talep edilmektedir.

- **Acente Adı**: Acentenin resmi adını girmeniz gereken zorunlu bir alandır.
- **Vergi Numarası**: Acentenin vergi numarasını girmelisiniz. Bu alan da zorunludur.
- **Levha Kayıt No**: Acentenin levha kayıt numarasını bu alana girebilirsiniz. Bu alan zorunlu değildir ancak girilmesi önerilir.

Gerekli alanlar doldurulduktan sonra **"İleri"** butonuna tıklayarak bir sonraki adıma geçebilirsiniz.

## Acente Temsilcisi Ekranı

Bu adımda acente için InsurUp uygulamasına ilk giriş yapacak olan admin kullanıcı bilgileri girilmelidir.

- **Ad**: Acente temsilcisinin adı zorunlu olarak girilmelidir.
- **Soyadı**: Temsilcinin soyadı da zorunludur.
- **E-posta**: Temsilcinin kullanacağı e-posta adresini bu alana girmelisiniz. E-posta adresi, giriş işlemlerinde kullanılacaktır.
- **Parola**: Temsilci, bu alanda kendi belirleyeceği parolayı oluşturmalıdır. Parola daha sonra girişlerde kullanılacaktır.

Bu bilgilerin tamamı girildikten sonra yine **"İleri"** butonuna tıklayarak son adıma geçebilirsiniz.

## Sigorta Şirketi Bağlantısı Ekranı

Son adımda, acentenizle çalıştığınız sigorta şirketleriyle ilgili bağlantıların kurulması sağlanmaktadır.

### Sigorta Şirketi Eklemek

Bu adım zorunlu değildir, dilerseniz **"+"** butonuna tıklayarak sigorta şirketi bilgilerini ekleyebilirsiniz. Bu işlem için iki seçenek bulunur:

- **Web Servis**: Sigorta şirketleriyle olan bağlantıları web servisi aracılığıyla ekleyebilirsiniz.
- **Robot**: Sigorta şirketi bağlantılarını robot ile entegre edebilirsiniz.

Bağlantı kurulduktan veya bu adım atlandıktan sonra **"Tamamla"** butonuna tıklayarak InsurUp kurulum işlemini tamamlayabilirsiniz.

:::note
Bu işlemi uygulamaya giriş yaptıktan sonra da yapabilirsiniz.
:::
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
title: "Giriş Sayfası"
sidebar_position: 1
---

# Giriş Sayfası

Bu ekran, InsurUp CRM'e erişim sağlamak isteyen kullanıcıların e-posta adresi ve şifre bilgileri ile sisteme giriş yapabilecekleri alandır. InsurUp'ı kullanan tüm acente ve broker kullanıcıları, kendilerine tanımlanan e-mail adreslerini ve şifrelerini kullanarak sisteme giriş yapabilirler.

## Giriş Yapma

- **E-mail Adresi**: Bu alana, daha önce sistem tarafından tanımlanmış e-posta adresinizi girin.
- **Şifre**: Sisteme giriş yaparken kullanacağınız şifreyi bu alana yazın.

Giriş bilgilerinizi girdikten sonra **"Giriş Yap"** butonuna basarak sisteme giriş yapabilirsiniz.

## Şifremi Unuttum

Bu ekran, şifrenizi hatırlamadığınız durumlarda yeni bir şifre talep edebileceğiniz bölümdür.

- **E-posta Adresi**: Sisteme kayıtlı olan e-posta adresinizi bu alana girin.

E-posta adresinizi girdikten sonra **"Gönder"** butonuna tıklayın. Bu işlem sonrası, şifrenizi sıfırlayabilmeniz için size bir bağlantı gönderilecektir. Gönderilen e-postadaki bağlantıya tıklayarak yeni bir şifre belirleyebilirsiniz.
Loading

0 comments on commit 4759f8e

Please sign in to comment.