Uygulamayı aç
Moonborn — Developers

Voice drift'i ele al

Drift eşiğini ayarla, uyarı davranışını seç, webhook ile kalite kontrol kuyruğuna bağla, başarısız gönderimleri yeniden gönder.

Bir karakter uzun konuşmalarda yavaş yavaş "genel asistan" tonuna kayabilir. Moonborn her sohbet yanıtının yanına bir drift zarfı (envelope) ekler — yanıtın karakterin voice fingerprint'inden ne kadar uzaklaştığını söyleyen küçük bir JSON. Bu rehber o skoru operasyonel bir şeye dönüştürür: doğru eşik, doğru uyarı davranışı, webhook ile kalite kontrol (QA) kuyruğuna bağlanma, başarısız gönderimleri yeniden gönderme.

Bir persona ile sohbet oturumu kur rehberinde drift zarfını gördün. Burada onunla ne yapacağını kurarsın.

Bu rehberi bitirdiğinde

  • Çalışma alanı ve persona kapsamında drift eşiğini ayarlayabileceksin.
  • warn / auto_recover / block davranışlarından ürün ihtiyacına uygun olanı seçebileceksin.
  • persona.audit_failed webhook'una abone olup imzasını doğrulayabileceksin.
  • Webhook kesintisinden sonra başarısız gönderimleri elle yeniden gönderebileceksin.

Ön koşul: API anahtarı, en az bir persona ve test edebileceğin bir sohbet oturumu.

1. Doğru eşiği seç

Varsayılan engine.pipeline.drift_detection.threshold = 0.30 orta yol bir tercihtir. Yüzeyin ne kadar toleranslı olduğuna göre ayarla:

YüzeyÖnerilen eşikNeden
Müşteri desteği, marka kanalı0.20Karakter daha disiplinli kalmalı; küçük sapma bile işaretlensin
Varsayılan — sohbet ürünü, asistan0.30Dengeli; çoğu yanıt geçer, açık sapmalar tutulur
Yaratıcı rol-yapma, oyun NPC'leri0.40 – 0.45Karakterin doğaçlama yapmasına izin verir; sadece büyük kaymalarda işaret
await client.config.setItem({
  key: 'engine.pipeline.drift_detection.threshold',
  value: 0.2,
  scope: 'workspace',
  scopeId: 'ws_...',
});

2. Uyarı davranışını seç

engine.pipeline.drift_detection.action_on_alert değeri eşik aşıldığında ne olacağını belirler:

Yanıt kullanıcıya gider. driftAlert: true kayda
düşer, persona.audit_failed webhook'u tetiklenir.

Tipik desenler:

  • Müşteri desteğiauto_recover + webhook ile üst makama iletme (yanıt yine gider ama kalite ekibi görür)
  • Yaratıcı oyunwarn + arayüz rozeti ("bu mesajda karakter biraz dışına çıktı")
  • Uyumluluk-kritik alanblock + elle inceleme akışı
await client.config.setItem({
  key: 'engine.pipeline.drift_detection.action_on_alert',
  value: 'auto_recover',
  scope: 'workspace',
  scopeId: 'ws_...',
});

3. persona.audit_failed webhook'una abone ol

Drift uyarısı tetiklendiğinde (ve diğer denetim hatalarında) persona.audit_failed olayı atılır. Uç noktanı (endpoint) abone et:

const hook = await client.webhooks.create({
  url: 'https://your-app.com/webhooks/moonborn',
  events: ['persona.audit_failed'],
  description: 'Drift escalations → CX QA queue',
});
 
console.log('Bu gizli anahtar (secret) bir kerelik döner. Şimdi sakla:', hook.signingSecret);

4. İmzayı doğrula

Her gönderim X-Moonborn-Signature başlığını taşır. Uç noktanda zaman-güvenli (timing-safe) karşılaştırma yap:

import crypto from 'node:crypto';
 
export function verifyMoonbornSignature(
  rawBody: string,
  signatureHeader: string,
  secret: string,
): boolean {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(rawBody)
    .digest('hex');
  const expectedHeader = `sha256=${expected}`;
 
  if (expectedHeader.length !== signatureHeader.length) return false;
  return crypto.timingSafeEqual(
    Buffer.from(expectedHeader),
    Buffer.from(signatureHeader),
  );
}

Beklenen yük (payload):

{
  "id": "evt_01H...",
  "type": "persona.audit_failed",
  "occurredAt": "2026-05-16T12:00:00Z",
  "data": {
    "personaId": "per_01H...",
    "sessionId": "ses_01H...",
    "messageId": "msg_01H...",
    "driftScore": 0.41,
    "driftThreshold": 0.30,
    "reason": "voice_drift"
  }
}

Bu olayı kalite kontrol kuyruğuna, Slack uyarısına veya olay müdahale el kitabına (runbook) bağla — ekibinin sahiplendiği akış neyse.

5. Kesinti sonrası yeniden gönderim

Webhook'lar başarısız olduğunda Moonborn beş kez üstel geri çekilme (exponential backoff) ile yeniden dener (1dk → 2dk → 5dk → 30dk → 2sa), sonra dead-letter (ölü mektup) kuyruğuna düşer. Uç noktan tekrar ayaktayken eski gönderimleri elle yeniden gönderebilirsin:

const failed = await client.webhooks.listDeliveries({
  webhookId: hook.id,
  status: 'failed',
});
 
for (const d of failed.data) {
  await client.webhooks.replayDelivery({
    webhookId: hook.id,
    deliveryId: d.id,
  });
}

Başardın

Eşiğin doğru değerde, uyarı davranışı ürün ihtiyacına uygun, webhook abone, imza doğrulaması yerinde ve yeniden gönderim yolu açıksa drift ele alma akışın tamamdır.

Sonraki adım

Drift detection kavramı

driftScore'un arkasında neyin ölçüldüğü, eşiklerin neye göre kalibre edildiği.

Open →
Kitleye göre eşik ayarı

Destek, oyun ve marka kanalı için daha keskin eşik ayarları.

Open →
Webhook olay kataloğu

Tüm olay tipleri, yük şemaları ve yeniden deneme davranışları.

Open →
Webhook entegrasyonu

HMAC imza formatı, gönderim paneli, dead-letter kuyruğu.

Open →