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
- Webhook’lar kartında Adres alanına uç noktanızı yazın. Herkese açık bir
https://adresi olmalıdır; düzhttp, özel ağ adresleri ve çözümlenemeyen alan adları kabul edilmez. - Almak istediğiniz olayları işaretleyin (dördü de varsayılan olarak işaretlidir).
- Ekle'ye tıklayın.
- 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
| Olay | Ne zaman gönderilir | data 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-completed | Bir 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-finished | Bir 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:
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ça | Anlamı |
|---|---|
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. |
event | Olayın adı, bir kez daha. |
createdAt | Gönderim zamanı, UTC'de ISO 8601. |
data | Yukarıdaki tablodaki olay alanları. |
Bir significant-change gövdesi şöyle görünür:
{
"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:
- 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.
Rixe-Signaturebaşlığını virgüllerden bölüptvev1değerlerini alın.tsizin saatinizden 5 dakikadan fazla uzaksa çağrıyı reddedin. Böylece ele geçirilmiş bir çağrı sonradan tekrar oynatılamaz.- Sırrınızla
t + "." + hamGövdemetninin HMAC-SHA256 değerini hesaplayın ve sabit sürede karşılaştırarakv1ile eşleştirin.
Node.js (Express)
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)
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 "", 200Gö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.
301ya da302hata 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
createdAtvedataiç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.