---
title: Webhook
description: ikas webhook'larının nasıl çalıştığını, hangi scope'ların bulunduğunu ve uygulamanız için nasıl webhook kaydedeceğinizi öğrenin.
---

## Webhook Nedir?

Kısaca webhook, hedeflenen bir olay gerçekleştiğinde belirlenen bir URL'ye POST isteği gönderilmesidir.

## ikas'ta Webhook'lar Nasıl Çalışır?

ikas'ta toplam 13 webhook scope'u tanımlıdır. Webhook, backend tarafında bir abone (subscriber) olarak kaydedilir. Böylece sistemi düzenli aralıklarla kontrol etmek yerine, backend'de bir değişiklik olduğu anda webhook tetiklenir.

![ikas'ta webhook'ların çalışma şekli](https://builders.ikas.com/media/ikas-dev/how-webhooks-work-in-ikas-580cc7168bd554a26954471dbc802f3b.jpg)

### Örnek Senaryo

**İstenen:** Kullanıcı bir ürünü favorilerine eklerse 1 gün sonra bir hatırlatma e-postası gönderilsin.

**Sırasıyla uygulanacak adımlar:**

1. Kullanıcı bir ürünü favorilerine ekler.
2. Bu aşamada `CUSTOMER_FAVORITE_PRODUCTS_CREATED` webhook'u tetiklenir.
3. Webhook, bağlı olduğu kod bloğunu çalıştırır.
4. Kod bloğunda, 1 gün sonra hatırlatma e-postası gönderen bir cronjob çalışır.

## ikas'taki Webhook Scope'ları [#webhook-scopes-in-ikas]

ikas'ta 13 webhook bulunur. Bu webhook scope'ları aşağıdaki tabloda listelenmiştir.

| Webhook | Açıklama |
|---|---|
| `ORDER_CREATED` | Müşteri tarafından bir sipariş oluşturulduğunda tetiklenir. |
| `ORDER_UPDATED` | Müşteri tarafından bir sipariş güncellendiğinde tetiklenir. |
| `PRODUCT_CREATED` | Yönetici tarafından bir ürün oluşturulduğunda tetiklenir. |
| `PRODUCT_UPDATED` | Yönetici tarafından bir ürün güncellendiğinde tetiklenir. |
| `PRODUCT_DELETED` | Yönetici tarafından bir ürün silindiğinde tetiklenir. |
| `CUSTOMER_CREATED` | Müşteri tarafından bir hesap oluşturulduğunda tetiklenir. |
| `CUSTOMER_UPDATED` | Müşteri tarafından bir hesap güncellendiğinde tetiklenir. |
| `CUSTOMER_FAVORITE_PRODUCTS_CREATED` | Müşteri tarafından favorilere bir ürün eklendiğinde tetiklenir. |
| `CUSTOMER_FAVORITE_PRODUCTS_UPDATED` | Müşteri tarafından favorilerdeki bir ürün güncellendiğinde tetiklenir. |
| `STOCK_CREATED` | Yönetici tarafından bir stok kaydı oluşturulduğunda tetiklenir. |
| `STOCK_UPDATED` | Yönetici tarafından bir stok kaydı güncellendiğinde tetiklenir. |
| `APP_DELETED` | Yönetici tarafından bir uygulama silindiğinde tetiklenir. |
| `APP_PAYMENT` | Yönetici bir uygulama için ödeme yaptığında tetiklenir. |

## Webhook Oluşturma

<Callout type="warn" title="App Webhook Url alanı zorunlu">
Webhook URL adresinizi [partner sayfasındaki](https://builders.ikas.com/docs/app-development/nextjs-tutorial#create-app-ikas-partners) App Webhook Url alanına eklemeniz gerekir. Bu alan doldurulmadan webhook oluşturulamaz.
</Callout>

Bir webhook'u kullanabilmek için önce kaydetmeniz gerekir. Bunun için Admin API'deki bir mutation'ı kullanıyoruz.

```typescript
await ikas.adminApi.mutations.saveWebhook({
  variables: {
    input: {
      scopes: [],
      endpoint: '',
      salesChannelIds: [],
    },
  },
});
```

`saveWebhook` üç değer alır:

- **scopes:** Webhook'u tetikleyecek olayları belirtir. Bu webhook olayları yukarıdaki [tabloda](#webhook-scopes-in-ikas) listelenmiştir.
- **endpoint:** Webhook tetiklendiğinde POST isteğinin gönderileceği URL'dir.
- **salesChannelIds:** Webhook'un hangi satış kanallarından tetikleneceğini belirtir.

<Callout type="info" title="Webhook'lar nerede oluşturulur?">
Genellikle uygulamaların tüm webhook'ları [callback](https://builders.ikas.com/docs/app-development/nextjs-tutorial/authorization/oauth-callback-api) sürecinde oluşturulur.
</Callout>

### Örnek Senaryo

Kullanıcı bir sipariş verdiğinde veya sipariş güncellendiğinde uygulamanın webhook'u tetiklemesini istiyoruz.

```typescript
const ikas = getIkas(authToken);
await ikas.adminApi.mutations.saveWebhook({
  variables: {
    input: {
      scopes: [WebhookScope.ORDER_CREATED, WebhookScope.ORDER_UPDATED],
      endpoint: `${config.deployUrl}/api/ikas/webhook`,
      salesChannelIds: [],
    },
  },
});
```

Yukarıdaki işlemde `scopes` alanına `ORDER_CREATED` ve `ORDER_UPDATED` eklenmiştir. Bu webhook'lar tetiklendiğinde `endpoint` alanında belirtilen URL adresine bir POST isteği gönderilir.

<Accordions>
<Accordion title="endpoint değeri environment dosyasından alınır">

```bash title="File: .env"
NEXT_PUBLIC_APP_KEY = ...
APP_SECRET = ...
DEPLOY_URL = ...
```

Buradaki değerler config dosyasında dışa aktarılır.

```typescript title="File: globals/config.ts"
export const config = {
  appId: process.env.NEXT_PUBLIC_APP_KEY || '',
  appSecret: process.env.APP_SECRET || '',
  scope: 'read_products,write_products',
  deployUrl: process.env.DEPLOY_URL || 'http://localhost:3000',
  callbackUrl: (process.env.DEPLOY_URL || 'http://localhost:3000') + '/api/oauth/callback',
};
```

</Accordion>
</Accordions>
