Kullanım Kılavuzu API Başvuru Kılavuzu

Makaleden Konuşmaya (ATS)

Tam bir makaleyi seslendirilmiş bir kayda ve metin dökümüne dönüştürün; bunlar geri çağırma (callback) URL’nize asenkron olarak iletilecektir.

GÖNDERİ https://api.moknah.io/process-text

Article to Speech (ATS) uç noktası, bir makalenin metnini alır ve MP3 formatında bir seslendirme ile buna senkronize edilmiş bir döküm (.srt) dosyası oluşturur. Oluşturma işlemi asenkron olarak gerçekleşir: istek anında 202 Accepted yanıtıyla döner ve tamamlanan dosyalar, belirttiğiniz callbackURL adresine iletilir. Bu, ATS WordPress eklentisine güç veren hizmetin aynısıdır.

Tasarımdan gelen asenkron yapı

Ses dosyanız için HTTP yanıtını beklemeyin. Uç nokta (endpoint) hemen 202 yanıtı döner ve oluşturma işlemi tamamlandığında sonucu callbackURL adresinize POST eder.

Kimlik Doğrulama

Şirketinizin API anahtarını Authorization başlığına Bearer token olarak ekleyin.

Authorization: Bearer your_api_key

İstek Gövdesi

Ham makale metnini ve isteği tanımlayan bir postData nesnesini içeren bir JSON gövdesi gönderin.

Parametre Gerekli Tür Açıklama
text gerekli ip Konuşmaya dönüştürülecek makale metninin tamamı.
postData gerekli nesne İstek üstverisi. Aşağıdaki alanlara bakın.

postData Nesnesi

Alan Gerekli Tür Varsayılan Açıklama
name gerekli ip — Makalenin başlığı. Oluşturulan ses talebinin başlığı olarak kullanılır.
articleId gerekli ip — Makale için belirlediğiniz benzersiz tanımlayıcı. İdempotency (eşgüçlülük) anahtarı işlevi görür (aşağıdaki İdempotency bölümüne bakın) ve geri çağrıda (callback) aynen geri iletilir.
voiceId gerekli ip — Anlatımda kullanılacak ses. Şuradan bir kimlik (ID) kullanın: ses listesi.
callbackURL gerekli dizge (URL) — Moknah’nın tamamlanan ses ve transkripsiyon URL’lerini POST edeceği HTTPS URL’si. Şirket için en güncel değer saklanır.
preprocessType isteğe bağlı ip "0" Metin hazırlama modu; bir metin dizisi (string) olarak gönderilmelidir. İşlem yapılmaması (metnin olduğu gibi seslendirilmesi) için ”0”, yapay zeka ön işleme (daha temiz bir seslendirme; karakter maliyetini iki katına çıkarır) için ise ”2” değerini kullanın. Bu değer bir JSON metin dizisi olmalıdır; 0 veya 2 gibi yalın sayılar metin işleme sırasında reddedilir.
regenerate isteğe bağlı mantıksal false True (doğru) olarak ayarlandığında, bu articleId daha önce oluşturulmuş olsa bile yeniden oluşturulmasını zorunlu kılar.

Örnek Talep

curl -X POST "https://api.moknah.io/process-text" \
  -H "Authorization: Bearer your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "الذكاء الاصطناعي يتطور بسرعة كبيرة في كل المجالات.",
    "postData": {
        "name": "AI is evolving fast",
        "articleId": "post-123",
        "voiceId": "12",
        "callbackURL": "https://your-site.com/wp-json/ats/v1/callback",
        "preprocessType": "0",
        "regenerate": false
    }
  }'
import requests

response = requests.post(
    "https://api.moknah.io/process-text",
    headers={
        "Authorization": "Bearer your_api_key",
        "Content-Type": "application/json"
    },
    json={
        "text": "الذكاء الاصطناعي يتطور بسرعة كبيرة في كل المجالات.",
        "postData": {
            "name": "AI is evolving fast",
            "articleId": "post-123",
            "voiceId": "12",
            "callbackURL": "https://your-site.com/wp-json/ats/v1/callback",
            "preprocessType": "0",
            "regenerate": False
        }
    }
)

# 202 Accepted — the audio is delivered to your callbackURL
print(response.status_code, response.text)
const response = await fetch(
    'https://api.moknah.io/process-text',
    {
        method: 'POST',
        headers: {
            'Authorization': 'Bearer your_api_key',
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
            text: 'الذكاء الاصطناعي يتطور بسرعة كبيرة في كل المجالات.',
            postData: {
                name: 'AI is evolving fast',
                articleId: 'post-123',
                voiceId: '12',
                callbackURL: 'https://your-site.com/wp-json/ats/v1/callback',
                preprocessType: '0',
                regenerate: false
            }
        })
    }
);

// 202 Accepted — result arrives at your callbackURL

Anında Müdahale

İstek kabul edilirse, uç nokta derhal yanıt verir:

Processing started. Results will be sent to the callback URL.

Geri Çağırma Yükü

Oluşturma işlemi tamamlandığında, Moknah, callbackURL adresinize şu JSON gövdesiyle bir POST isteği gönderir:

{
    "articleId": "post-123",
    "response": {
        "audioFile": "https://api-storage.moknah.io/.../******.mp3",
        "srtFile": "https://api-storage.moknah.io/.../******.srt",
        "signature": "<hmac-sha256-hex>"
    }
}
Alan Açıklama
articleId İstekte gönderdiğiniz articleId’nin aynısı.
response.audioFile Oluşturulan MP3 seslendirmesinin herkese açık URL’si; oluşturma başarısız olursa null.
response.srtFile Senkronize edilmiş transkripsiyon (.srt) dosyasının herkese açık URL’si veya oluşturma başarısız olduysa null.
response.signature Payload’un (veri yükünün) gerçekliğini doğrulamak için kullanabileceğiniz HMAC-SHA256 imzası (bkz. aşağısı).
Başarısız nesilleri ele al

Üretim sonucunda herhangi bir ses dosyası oluşmadığında da bir geri çağırım (callback) gönderilir. Bu durumda response.audioFile ve response.srtFile değerleri null olur (imza yine de articleId|null|null yapısını içerir). audioFile veya srtFile değeri null olan geri çağırımları başarısızlık olarak değerlendirin: makaleyi tamamlandı olarak işaretlemeyin ve regenerate parametresini true olarak ayarlayıp yeniden gönderin.

İmzanın Doğrulanması

İmza, API anahtarınızın SHA-256 hex özeti (digest) ile anahtarlanmış; articleId|audioFile|srtFile dizisinin HMAC-SHA256 (hex) değeridir. Geri çağrının (callback) Moknah’tan geldiğini ve üzerinde değişiklik yapılmadığını doğrulamak için bu değeri kendi tarafınızda yeniden hesaplayıp karşılaştırın.

import crypto from 'crypto';

const keyHash = crypto.createHash('sha256').update(API_KEY).digest('hex');
const payload = `${articleId}|${audioFile}|${srtFile}`;
const expected = crypto.createHmac('sha256', keyHash).update(payload).digest('hex');

const isValid = expected === signature;
import hashlib, hmac

key_hash = hashlib.sha256(API_KEY.encode()).hexdigest()
payload = f"{article_id}|{audio_file}|{srt_file}"
expected = hmac.new(key_hash.encode(), payload.encode(), hashlib.sha256).hexdigest()

is_valid = hmac.compare_digest(expected, signature)

İdempotentlik ve Yeniden Oluşturma

  • İstekler, şirket bazında articleId’ye göre tanımlanır. Yeni bir articleId, yeni bir üretim sürecini başlatır.
  • Halihazırda bir makale oluşturuluyorsa, yinelenen istekler 409 ALREADY_PROCESSING hatasıyla reddedilir.
  • Bir makale halihazırda oluşturulmuşsa ve `regenerate` parametresi `false` olarak ayarlanmışsa, mevcut ses dosyası yeniden oluşturulmadan (ve yeniden ücretlendirme yapılmadan) `callbackURL` adresinize tekrar iletilir.
  • Mevcut bir articleId için sıfırdan bir oluşturma işlemini zorunlu kılmak üzere regenerate değerini true olarak ayarlayın.
  • Önceki bir deneme başarısız olduysa, ilgili articleId için saklanan sonuç boş olabilir. Daha sonra regenerate parametresi false olarak yapılan bir istek bu boş sonucu tekrar döndürebilir; bu nedenle durumu düzeltmek için isteği regenerate parametresi true olacak şekilde yeniden gönderin (veya yeni bir articleId kullanın).

Eşzamanlılık ve iş hacmi

Her bir makale, cümlelerinin tüm hesabınız genelinde paylaşılan bir eşzamanlılık sınırına tabi olan metin-ses dönüştürme sağlayıcısı nezdinde paralel olarak oluşturulmasıyla seslendirilir. Aynı anda çok sayıda makale gönderilmesi bu sınırı aşabilir ve tekil cümlelerin —dolayısıyla makalelerin tamamının— işlenememesine yol açabilir.

  • Çok bölümlü bir sayfayı hazırlarken, tüm bölümleri aynı anda göndermek yerine, bir seferde yalnızca birkaçını (yaklaşık üç tane) işleme alın.
  • Başarısız olan makaleleri, `regenerate` parametresini `true` olarak ayarlayarak yeniden deneyin; halihazırda oluşturulmuş makaleler önbelleğe alınmıştır ve yeniden gönderilmeleri gerekmez.
  • /process-text uç noktası da istemci başına hız sınırına tabidir; sınırı aşan ani yoğunluklar ”429 Too Many Requests” (Çok Fazla İstek) hatasıyla sonuçlanır; bu nedenle isteklerinizi zamana yaymalı veya toplu halde göndermelisiniz.

Faturalandırma

Karakter maliyeti, text karakter sayısı ile ön işleme faktörünün (varsayılan olarak 1; preprocessType değeri 2 olduğunda ise 2) çarpılmasıyla hesaplanır. Krediler yalnızca üretim işlemi fiilen gerçekleştiğinde düşülür. Daha önce üretilmiş bir makalenin yeniden iletilmesi ücretsizdir; üretim veya iletim işleminin başarısız olması durumunda ise düşülen krediler otomatik olarak iade edilir.

Hatalar

Durum Kod Açıklama
401 AUTH_FAILED Authorization başlığı eksik veya API anahtarı geçersiz.
422 VALIDATION_ERROR Eksik metin ya da geçersiz/eksik postData alanları.
400 INVALID_VOICE_ID Sağlanan voiceId mevcut değil.
409 ALREADY_PROCESSING Bu makale halihazırda oluşturuluyor. İşlem tamamlandıktan sonra tekrar deneyin.
422 PROCESSING_ERROR Oluşturma başarısız oldu. Kesilen krediler iade edilir.
422 REFUND_FAILED İşlem başarısız oldu ve otomatik iade tamamlanamadı. api@moknah.io adresiyle iletişime geçin.
API Desteği

API ile ilgili soru veya sorunlarınız için bizimle şu adresten iletişime geçin: api@moknah.io.