Entegrasyonlar ve API

Webhook'lar

Görünürlük ciddi biçimde değiştiğinde, bir denetim bittiğinde, içerik yayınlandığında ya da bir iş akışı istediğinde imzalı bir HTTPS POST alın.

Webhook, Rixe'nin bir şey olduğunda çağırdığı, sizin tarafınızdaki bir adrestir. REST API'yi sürekli sorgulamak yerine sisteminiz, olay gerçekleştiği anda imzalı bir JSON mesaj alır. Zapier, Make, Slack botları, kendi arka ucunuz ya da bir veri hattı için kullanabilirsiniz.

Nerede bulunur

Kenar çubuğunun altındaki kullanıcı menüsünü açın, Ayarlar › Geliştirici bölümüne gidin ve Webhook’lar kartına inin. Bağlantılar › Webhook’lar da aynı yere götürür.

Webhook'lar her pakette vardır. Eklemeyi ve silmeyi yalnızca sahip ve yöneticiler yapabilir.

Webhook ekleme

  1. Webhook’lar kartında Adres alanına uç noktanızı yazın. Herkese açık bir https:// adresi olmalıdır; düz http, özel ağ adresleri ve çözümlenemeyen alan adları kabul edilmez.
  2. Almak istediğiniz olayları işaretleyin (dördü de varsayılan olarak işaretlidir).
  3. Ekle'ye tıklayın.
  4. Sarı uyarıdaki imza sırrını kopyalayın; whsec_ ile başlar. İmza sırrı yalnız şimdi gösterilir. Her çağrıyı doğrulamak için gerekecek, alıcınızın yanında saklayın.

Liste her uç noktayı olaylarıyla, durumuyla (aktif ya da kapalı) ve varsa son hatayla gösterir. Sil bir uç noktayı kaldırır.

Listede zaten olan bir adresi yeniden eklerseniz olayları güncellenir ve uç nokta yeniden açılır. Yeni bir imza sırrı istiyorsanız uç noktayı silip yeniden ekleyin.

Olaylar

OlayNe zaman gönderilirdata içinde ne var
significant-changeÖnemli değişim türünde bir bildirim oluştuğunda: görünürlük ya da sıra eşiği aşıldı, bir rakip sıçradı, yeni bir kaynak çıktı.notificationId, workspaceId, workspaceName, title, body
audit-completedBir teknik site denetimi bittiğinde.workspaceId, url, score
content-publishedİçerik bir CMS bağlantısı üzerinden sitenizde yayınlandığında.workspaceId, contentId, url
workflow-finishedBir iş akışı Webhook gönder adımına geldiğinde.workflowId, workflowName, label, runId, partial, summary, findings ve adımda kapatılmadıysa context

significant-change bildirim ayarlarınıza da bağlıdır: Ayarlar › Bildirimler altında Önemli değişim satırının bir Webhook sütunu vardır ve varsayılan olarak açıktır. Orada kapatırsanız bu olay hiçbir webhook'a gönderilmez. title ve body kurumunuzun dilinde yazılır. Ayrıntılar: Uyarılar ve gelen kutusu.

workflow-finished yalnızca Webhook gönder adımı içeren iş akışlarından gelir. Akış sürerken gönderildiği için partial değeri true olur: sonraki adımlar sonucu hâlâ değiştirebilir. Adım, yalnızca bulgu varken gönderecek şekilde ayarlanabilir. Ayrıntılar: Otopilot ve iş akışları.

Bir gönderim neye benzer

Rixe JSON gövdeli bir POST gönderir:

http
POST /rixe-hook HTTP/1.1
Host: hooks.example.com
Content-Type: application/json
Rixe-Event: audit-completed
Rixe-Signature: t=1761379200,v1=5f0c8e6b2a…

{"event":"audit-completed","createdAt":"2026-10-25T08:00:00.000Z","data":{"workspaceId":"9b1f6c2e-4d1a-4f0e-8a51-2f3c7d9e1a10","url":"https://flowcrm.io","score":82}}
ParçaAnlamı
Rixe-Event başlığıOlayın adı; gövdeyi ayrıştırmadan yönlendirme yapabilirsiniz.
Rixe-Signature başlığıt=<unix saniye>,v1=<onaltılık HMAC-SHA256>. Aşağıya bakın.
eventOlayın adı, bir kez daha.
createdAtGönderim zamanı, UTC'de ISO 8601.
dataYukarıdaki tablodaki olay alanları.

Bir significant-change gövdesi şöyle görünür:

json
{
  "event": "significant-change",
  "createdAt": "2026-10-25T07:15:00.000Z",
  "data": {
    "notificationId": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
    "workspaceId": "9b1f6c2e-4d1a-4f0e-8a51-2f3c7d9e1a10",
    "workspaceName": "FlowCRM – US",
    "title": "…",
    "body": "…"
  }
}

İmzayı doğrulama

İmza Stripe'takiyle aynı mantıkta çalışır. Rixe t zaman damgasını alır, istek gövdesinin ham hâline bir noktayla ekler (t + "." + gövde) ve bu metnin HMAC-SHA256 değerini, anahtar olarak imza sırrınızın tamamını (whsec_ ön eki dahil) kullanarak hesaplar. Onaltılık çıktı v1 değeridir.

Bir çağrıyı doğrulamak için:

  1. Gövdeyi tam geldiği gibi, ham olarak okuyun. JSON'u önce ayrıştırıp yeniden yazmayın; tek bir boşluk farkı imzayı bozar.
  2. Rixe-Signature başlığını virgüllerden bölüp t ve v1 değerlerini alın.
  3. t sizin saatinizden 5 dakikadan fazla uzaksa çağrıyı reddedin. Böylece ele geçirilmiş bir çağrı sonradan tekrar oynatılamaz.
  4. Sırrınızla t + "." + hamGövde metninin HMAC-SHA256 değerini hesaplayın ve sabit sürede karşılaştırarak v1 ile eşleştirin.

Node.js (Express)

ts
import crypto from 'node:crypto';
import express from 'express';

const SECRET = process.env.RIXE_WEBHOOK_SECRET!; // whsec_...
const app = express();

function verify(rawBody: string, header: string, secret: string, toleranceSeconds = 300): boolean {
  const parts = Object.fromEntries(header.split(',').map((p) => p.trim().split('=')));
  const t = Number(parts.t);
  if (!Number.isFinite(t) || Math.abs(Date.now() / 1000 - t) > toleranceSeconds) return false;
  const expected = crypto.createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex');
  const a = Buffer.from(expected, 'hex');
  const b = Buffer.from(parts.v1 ?? '', 'hex');
  return a.length === b.length && crypto.timingSafeEqual(a, b);
}

app.post('/rixe-hook', express.raw({ type: 'application/json' }), (req, res) => {
  const raw = req.body.toString('utf8');
  if (!verify(raw, req.header('rixe-signature') ?? '', SECRET)) return res.sendStatus(400);
  const event = JSON.parse(raw);
  // event.event / event.data burada işlenir; sonra hızla cevap verin.
  res.sendStatus(200);
});

Python (Flask)

python
import hashlib, hmac, os, time
from flask import Flask, request, abort

SECRET = os.environ["RIXE_WEBHOOK_SECRET"].encode()  # whsec_...
app = Flask(__name__)

def verify(raw: bytes, header: str, tolerance: int = 300) -> bool:
    parts = dict(p.strip().split("=", 1) for p in header.split(",") if "=" in p)
    try:
        t = int(parts["t"])
    except (KeyError, ValueError):
        return False
    if abs(time.time() - t) > tolerance:
        return False
    expected = hmac.new(SECRET, f"{t}.".encode() + raw, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, parts.get("v1", ""))

@app.post("/rixe-hook")
def rixe_hook():
    if not verify(request.get_data(), request.headers.get("Rixe-Signature", "")):
        abort(400)
    event = request.get_json()
    return "", 200

Gönderim kuralları

  • 15 saniye içinde 2xx durum koduyla cevap verin. Zaman aşımı dahil başka her şey hata sayılır.
  • Yönlendirmeler izlenmez. 301 ya da 302 hata sayılır; Rixe'ye son adresi verin.
  • Her olay her uç noktaya bir kez denenir. Başarısız gönderim kaydedilir (son hata listede görünür) ama yeniden gönderilmez; uzun süren işleri cevap verdikten sonra yapın.
  • Art arda 10 hata uç noktayı kapatır. Durumu kapalı olur ve artık gönderim yapılmaz. Tek bir başarılı gönderim sayacı sıfırlar. Alıcınızı düzelttikten sonra aynı adresi yeniden ekleyerek açın.
  • Gönderimler herhangi bir sırayla gelebilir. Sıra önemliyse createdAt ve data içindeki kimlikleri kullanın; işleyicinizin aynı kimlik için iki kez çalışması bir sorun yaratmasın.

Zapier ve Make

Özel bir uygulama gerekmez. Zapier'da Webhooks by Zapier › Catch Hook tetikleyicisini, Make'te Custom webhook modülünü kullanın. Verdikleri adresi Webhook’lar kartına yapıştırın. Zapier ve Make imzayı kendiliğinden doğrulayamaz; bu yüzden adresi bir sır gibi saklayın. Aynı senaryoda Rixe'den veri okumak için bir API anahtarıyla REST API'yi çağırın.

Sık sorulanlar

Uç noktam "kapalı" görünüyor. Art arda on kez başarısız oldu. Adresin altındaki son hataya bakın, alıcıyı düzeltin, sonra aynı adresi yeniden ekleyin.

İmza sırrını kaybettim. Bir daha gösterilemez. Yenisini almak için uç noktayı silip yeniden ekleyin, sonra alıcınızı güncelleyin.

significant-change çok sık geliyor ya da hiç gelmiyor. Bu olay Ayarlar › Bildirimler ayarına bağlıdır. Önemli değişim satırındaki Webhook sütununa bakın.

İlgili sayfalar

Takıldığınız bir yer mi var? [email protected] adresine yazın, bir kişi cevap verir.