الرابط الأساسي https://api.echonova.ai

المطورون

المصطلحات المخصصة

أرسل أسماءك ومنتجاتك واختصاراتك مع طلب التفريغ، واحصل على النص المفرّغ مكتوبًا بطريقتك، مع قائمة بكل تصحيح، ومطابقات قريبة للمراجعة، والمصطلحات نفسها في البث المباشر.

يكتب تحويل الكلام إلى نص ما يسمعه. فاسم بنك أو منتج أو اختصار يخرج غالبًا مكتوبًا كما يُنطق: امريتس ان بي دي بدل Emirates NBD، أو kay why see بدل KYC. أرسل مصطلحاتك في الحقل terminology، فتحمل النتيجة نسخة مصحَّحة من النص المفرّغ، مع قائمة بكل تغيير.

لا تضيع الكلمات كما سُمعت أبدًا. يبقى transcription كما فُرِّغ تمامًا، والنص المصحَّح في terminology.corrected.

متى تستخدمها

  • يذكر عملاؤك أسماء علامات تجارية أو منتجات أو أماكن يكتبها النموذج العام بطريقته.
  • تحتاج إلى كتابة الاختصارات حروفًا: KYC وIBAN وSWIFT.
  • يُقال الاسم نفسه بالعربية والإنجليزية، وتريد له كتابة واحدة.

لا تغيّر المصطلحات ما يسمعه النموذج. فهي تصحّح النص بعد التفريغ، ولذلك لا يمكن إضافة كلمة فاتت النموذج كليًا.

مثال سريع

أرسل terminology نصَّ JSON إلى جانب file وlanguage. يعمل الحقل مع POST /v1/speech-to-text/sync وPOST /v1/speech-to-text.

curl -X POST "https://api.echonova.ai/v1/speech-to-text/sync" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@call.mp3;type=audio/mpeg" \
  -F "language=ar" \
  -F 'terminology={"keywords": ["KYC", {"term": "Emirates NBD", "variants": ["امريتس ان بي دي"]}]}'
import json
import requests

terminology = {
    "keywords": [
        "KYC",
        {"term": "Emirates NBD", "variants": ["امريتس ان بي دي"]},
        {"term": "SWIFT", "context_words": ["transfer", "تحويل"]},
    ]
}

with open("call.mp3", "rb") as audio:
    response = requests.post(
        "https://api.echonova.ai/v1/speech-to-text/sync",
        headers={"Authorization": "Bearer YOUR_API_KEY"},
        files={"file": ("call.mp3", audio, "audio/mpeg")},
        data={"language": "ar", "terminology": json.dumps(terminology)},
    )

data = response.json()["data"]
print(data["transcription"])              # as heard
print(data["terminology"]["corrected"])   # spelled your way

يضيف الرد كائن terminology:

{
  "transcription": "حولت المبلغ عبر السويفت إلى امريتس ان بي دي أمس.",
  "terminology": {
    "raw": "حولت المبلغ عبر السويفت إلى امريتس ان بي دي أمس.",
    "corrected": "حولت المبلغ عبر الـSWIFT إلى Emirates NBD أمس.",
    "edits": [
      { "start": 16, "end": 23, "original": "السويفت", "replacement": "الـSWIFT", "stage": "phonetic", "score": 1 },
      { "start": 28, "end": 43, "original": "امريتس ان بي دي", "replacement": "Emirates NBD", "stage": "exact", "score": 1 }
    ],
    "nearMisses": [],
    "warnings": [],
    "mapperStatus": "applied",
    "mapperVersion": "3.0.0"
  }
}

مع النقطة غير المتزامنة، يظهر الكائن نفسه في المهمة من GET /v1/speech-to-text/jobs/{jobId} حين تكتمل، وفي حدث job.completed عبر Webhook.

حقول الكلمة المفتاحية

terminology هو {"keywords": [...]}. كل كلمة مفتاحية نص عادي، أو كائن حين تريد تحكمًا أكبر.

الحقل النوع ما يفعله
term نص، مطلوب الكتابة التي تريدها في المخرجات. الكلمة المفتاحية النصية العادية تساوي {"term": "..."}.
variants قائمة نصوص، حتى 10 الطرق التي يُسمع بها المصطلح خطأً ورأيتها. يُطابَق كلٌّ منها مطابقة تامة.
blocked قائمة نصوص، حتى 20 عبارات يجب ألا تصبح هذا المصطلح أبدًا، مثل swift delivery لـ SWIFT.
context_words قائمة نصوص، حتى 20 كلمات تسمح، حين تظهر إحداها في نطاق ثماني كلمات، بتطبيق مطابقة أقل يقينًا.
needs_context قيمة منطقية true تطبّق المصطلح فقط بجوار كلمة سياق أو كلمة مفتاحية أخرى. اتركه ويُقرَّر عنك حين يكون المصطلح كلمة يومية.
output_script latin أو arabic أو as_typed الخط الذي يُكتب به المصطلح. يُكتب المصطلح دائمًا كما كتبته.

المصطلحات والصيغ والعبارات الأخرى حتى 100 حرف لكلٍّ منها. تُتجاهل الحقول غير الواردة في هذا الجدول.

كيف تعمل المطابقة

تتجاهل المطابقة حالة الأحرف، وأشكال الهمزة العربية (أ إ آ)، وى وة، والتشكيل. المطابقة دائمًا على كلمات كاملة، ولا تتجاوز فاصلة أو نهاية جملة.

stage ما طابق
exact المصطلح نفسه، أو إحدى صيغك، أو اختصار منطوق حرفًا حرفًا (kay why see وكي واي سي ← KYC).
phonetic كلمات تُنطق مثل المصطلح، بأي من الخطين.
fuzzy كلمات قريبة في كتابتها من المصطلح.

تتراوح score من 0 إلى 1. تُطبَّق المطابقات التامة والصوتية. وتُطبَّق المطابقة التقريبية حين تكون قريبة بما يكفي، أو حين تكون أقل قربًا قليلًا لكن إحدى context_words أو كلمة مفتاحية أخرى قريبة منها. والاختصارات القصيرة مثل IT أو API تُطابَق مطابقة تامة فقط، فلا تحل أبدًا محل كلمة يومية.

تبقى البادئات العربية على الكلمة: السويفت تصبح الـSWIFT، وبالكي واي سي تصبح بالـKYC. ولا تتغير الأرقام وعناوين البريد الإلكتروني وعناوين URL أبدًا.

اقرأ النتيجة

الحقل ما يحتويه
raw النص المفرّغ كما سُمع: النص نفسه في transcription.
corrected raw بعد تطبيق مصطلحاتك. وهو مطابق لـ raw خارج التعديلات.
edits كل استبدال، بالترتيب. start وend موضعا حرفين في raw، والنهاية غير مشمولة.
nearMisses مطابقات قريبة لم تُطبَّق. انظر أدناه.
warnings أي شيء حدّ من المطابقة، لكلٍّ منه code وdetail.
mapperStatus applied أو no_keywords، أو skipped حين تعذّر تشغيل المطابقة، ويكون corrected حينها مساويًا لـ raw.
mapperVersion إصدار المطابِق الذي أجاب.

استخدم المواضع لتمييز التصحيحات في واجهتك: raw.slice(edit.start, edit.end) يساوي دائمًا edit.original.

من دون الحقل terminology لا يحتوي الرد على مفتاح terminology إطلاقًا، وتعمل النقطة تمامًا كما كانت.

التنزيلات تبقى كما سُمعت

يبني GET /v1/speech-to-text/jobs/{jobId}/export ملفات TXT وSRT وJSON من transcription ومقاطعه الموقّتة، فتحتفظ التنزيلات بالكلمات كما سُمعت. خذ terminology.corrected من المهمة للنص المصحَّح.

المطابقات القريبة

المطابقة القريبة مطابقة لم تكن الخدمة متأكدة منها بما يكفي لتطبيقها، مثل اونلاين بانكنق لـ Online Banking بدرجة 0.81. تُدرج في nearMisses مع الكلمات المسموعة والمصطلح المرشّح candidate والدرجة score، ويبقى النص دون تغيير في ذلك الموضع.

لا يُحفظ شيء بين الطلبات. لتُصحَّح مطابقة قريبة في المرة القادمة، اعرضها على شخص، وحين يؤكدها أضف الكلمات المسموعة إلى variants ذلك المصطلح في القائمة التي ترسلها.

البث المباشر

على wss://api.echonova.ai/v1/speech-to-text/stream، أرسل رسالة terminology في أي وقت. تنطبق على كل مقطع بعدها:

{
  "type": "terminology",
  "terminology": { "keywords": ["KYC", { "term": "Emirates NBD", "variants": ["امريتس ان بي دي"] }] }
}

يرد الخادم بـ {"type": "terminology.set", "active": true}، وتحمل حينها كل رسالة transcript كائن terminology لمقطعها، بمواضع داخل text ذلك المقطع. أرسلها مرة أخرى لاستبدال القائمة، أو مع "terminology": null لمسحها.

القائمة غير الصالحة تحصل على رسالة error برمز validation_failed وتُتجاهل، وتستمر الجلسة بالمصطلحات التي كانت لديها. ويجب أن تتسع الرسالة في إطار واحد حجمه 64 كيلوبايت، وهو يتسع لبضع مئات من الكلمات المفتاحية.

الحدود

الحد القيمة
الكلمات المفتاحية 500 لكل طلب
حجم الحقل 256 كيلوبايت في نقاط الملفات، وإطار واحد بحجم 64 كيلوبايت في البث
المصطلح أو الصيغة أو العبارة 100 حرف
الصيغ 10 لكل كلمة مفتاحية
العبارات المحظورة وكلمات السياق 20 لكلٍّ منها لكل كلمة مفتاحية

المصطلحات مجانية: تكلفة الطلب واحدة بها أو من دونها.

الأخطاء

الحقل terminology الذي تتعذر قراءته يحصل على 400 قبل تفريغ أي شيء أو خصم أي رصيد.

الحالة errorMessage الحل
400 terminology must be a JSON object with a keywords list أرسل نص JSON مثل {"keywords": ["KYC"]}.
400 each terminology keyword needs a term of 1 to 100 characters أعطِ كل كلمة مفتاحية مصطلحًا من 1 إلى 100 حرف.
400 terminology variants, blocked and context_words must be lists of text of up to 100 characters; at most 10 variants and 20 of the others أرسل قوائم عبارات قصيرة ضمن الحدود.
400 terminology needs_context must be true or false, and output_script latin, arabic or as_typed صحّح القيمة، أو اترك الحقل.
400 terminology allows at most 500 keywords أرسل المصطلحات التي يُرجَّح أن يحتويها هذا الصوت.
400 terminology must be at most 256 KB أرسل قائمة أقصر.

إن فشلت المطابقة نفسها أو استغرقت وقتًا طويلًا، يكتمل التفريغ مع ذلك: تكون mapperStatus هي skipped، وcorrected مساويًا لـ raw، وتقول warnings السبب.

الأسئلة الشائعة

هل تبطئ المصطلحات التفريغ؟

بالكاد. قائمة من بضعة آلاف من الكلمات المفتاحية على مكالمة مدتها خمس دقائق تضيف أقل من ثانية بكثير.

هل يمكنني حفظ قائمة والإشارة إليها باسم؟

لا. أرسل القائمة كاملة مع كل طلب. احفظها في نظامك، وأضف إليها المطابقات القريبة المؤكدة مع الوقت.

لماذا لم يُطبَّق مصطلح؟

تحقّق من nearMisses أولًا، فربما كانت المطابقة غير مؤكدة بما يكفي. ثم أضف الكلمات المسموعة صيغةً، أو أضف context_words لتُطبَّق المطابقة القريبة حين تكون تلك الكلمات قريبة.

هل ميزة ساحة تجربة تحويل الكلام إلى نص هي الميزة نفسها؟

نعم. يرسل خيار المصطلحات في ساحة التجربة الحقل نفسه، ويعرض النص المصحَّح مع تمييز كل تغيير.