المطورون / نص إلى كلام
إنشاء الكلام بشكل متزامن (يعيد رابط المقطع الصوتي في طلب واحد، بحد أقصى 500 حرف)
https://api.echonova.ai/v1/text-to-speech/syncتُنشئ كلامًا لنص من 1 إلى 500 حرف في طلب واحد، وتعيد رابط المقطع الصوتي مع الرصيد المخصوم.
Headers
كلمة Bearer ثم مسافة ثم مفتاح API الذي يبدأ بـ ek_. أنشئ المفاتيح في البوابة من المطورون، ثم مفاتيح واجهة برمجة التطبيقات.
متن الطلب
application/json
النص المراد نطقه، من 1 إلى 500 حرف. تُحذف المسافات في بداية النص ونهايته.
معرّف صوت من قائمة عرض الأصوات المتاحة. الصوت يحدد اللهجة.
سرعة نطق الصوت.
مدى التزام الصوت بالنص. اتركه على القيمة الافتراضية إلا إذا كنت تضبط القيم.
خطوات Diffusion. كلما زادت الخطوات كان التوليد أبطأ وأنظف.
يضيف الحركات إلى النص العربي قبل نطقه. ينطبق على أصوات الفصحى فقط.
ينطق الأرقام والتواريخ والأوقات والمبالغ والوحدات والروابط والبريد الإلكتروني كما ينطقها متحدث بلهجة الصوت. مفعّل ما لم ترسل `false`.
الاستجابة
200 application/json كل استجابة تستخدم هذا الغلاف.
النتيجة.
معرّف المهمة التي أنشأها الطلب.
`completed`. يُنشئ الطلب المتزامن مهمته مكتملة من البداية.
رابط موقّع لملف WAV. ينتهي صلاحيته، لذا اقرأ المهمة مرة أخرى للحصول على رابط جديد.
مدة المقطع الصوتي بالثواني.
الرصيد المخصوم، رقم صحيح.
قيمته true عند نجاح الطلب.
يكرر رمز حالة HTTP.
قيمته null عند النجاح.
الأخطاء
الغلاف نفسه، مع success بقيمة false و data بقيمة null. كل الأخطاء
متى يحدث. `text` نص فارغ، أو يحتوي على مسافات فقط.
الحل. أرسل حرفًا واحدًا على الأقل غير مسافة.
متى يحدث. `text` غير موجود أو `null`، فتفشل كل قواعد الحقل معًا.
الحل. أرسل `text` كسلسلة نصية في JSON.
متى يحدث. `text` رقم، أو قيمة منطقية، أو كائن.
الحل. أرسل `text` كسلسلة نصية في JSON.
متى يحدث. `text` يتجاوز الحد البالغ 500 حرف.
الحل. قسّم النص إلى عدة طلبات.
متى يحدث. `voiceId` نص فارغ.
الحل. أرسل معرّفًا من `GET /v1/text-to-speech/voices`.
متى يحدث. `voiceId` غير موجود أو `null`.
الحل. أرسل معرّفًا من `GET /v1/text-to-speech/voices`.
متى يحدث. `speed` أقل من 0.5.
الحل. أرسل سرعة من 0.5 إلى 2.
متى يحدث. `speed` أكبر من 2.
الحل. أرسل سرعة من 0.5 إلى 2.
متى يحدث. `speed` ليس رقمًا في JSON، مثل النص `"1"`.
الحل. أرسل رقمًا، لا نصًا.
متى يحدث. `cfg` أقل من 1.
الحل. أرسل قيمة `cfg` من 1 إلى 5.
متى يحدث. `cfg` أكبر من 5.
الحل. أرسل قيمة `cfg` من 1 إلى 5.
متى يحدث. `cfg` ليس رقمًا في JSON، مثل النص `"1"`.
الحل. أرسل رقمًا، لا نصًا.
متى يحدث. `numSteps` قيمة غير القيم المسموح بها.
الحل. أرسل إحدى القيم الخمس.
متى يحدث. `tashkeel` ليس `true` أو `false`.
الحل. أرسل قيمة منطقية في JSON.
متى يحدث. متن الطلب أو الاستعلام يحمل حقلًا لا تعرّفه نقطة النهاية.
الحل. احذف الحقل.
متى يحدث. `voiceId` ليس معرّفًا صالحًا بالصيغة المطلوبة.
الحل. انسخ المعرّف كما أعادته `GET /v1/text-to-speech/voices` تمامًا.
متى يحدث. header `Authorization` مفقود، أو قيمته لا تبدأ بـ `Bearer ek_...`، أو أن الرمز لا يطابق أي مفتاح، أو أن المفتاح محذوف أو معطّل، أو أن حسابه مغلق.
الحل. أرسل `Authorization: Bearer ek_...` بمفتاح API مفعّل.
متى يحدث. رصيد مساحة العمل لا يكفي تكلفة هذا الطلب؛ لم يُنفَّذ شيء، ولم يُخصم أي رصيد.
الحل. أضف رصيدًا إلى مساحة العمل.
متى يحدث. مساحة العمل التي يتبعها المفتاح ليس لديها اشتراك.
الحل. تحقّق من خطة مساحة العمل في البوابة.
متى يحدث. حالة الاشتراك ليست نشطة ولا تجريبية.
الحل. جدّد الاشتراك.
متى يحدث. المفتاح مقيّد، وتحويل النص إلى كلام ليس من الخدمات المسموح بها له.
الحل. عدّل المفتاح وامنحه تحويل النص إلى كلام، أو استخدم مفتاحًا آخر.
متى يحدث. لا يوجد صوت نشط بهذا `voiceId`.
الحل. اعرض الأصوات مرة أخرى واختر صوتًا.
متى يحدث. جسم JSON أكبر من 100 كيلوبايت؛ يُرفض الطلب قبل فحص مفتاح API، فلا يحصل على صف في النشاط.
الحل. أرسل جسمًا أصغر؛ النص الطويل مكانه عدة طلبات.
متى يحدث. للطلب جسم وقيمة `Content-Type` فيه ليست `application/json`.
الحل. أرسل `Content-Type: application/json`.
متى يحدث. المفتاح أرسل أكثر من 100 طلب إلى نقطة نهاية واحدة خلال 60 ثانية، أو أن عنوان IP واحدًا أرسل أكثر من 100 طلب إلى نقطة نهاية واحدة خلال 60 ثانية (يُحسب حد عنوان IP قبل فحص المفتاح، لذلك قد يرد الخادم دون أي مفتاح)؛ و header `Retry-After` يحمل عدد الثواني المطلوب انتظارها.
الحل. انتظر عدد الثواني المذكور في `Retry-After`، ثم أعد المحاولة.
متى يحدث. الطلب سيتجاوز حد الرصيد الخاص بالمفتاح لدورة الفوترة هذه؛ لم يُنفَّذ شيء، ولا يوجد header `Retry-After`.
الحل. ارفع حد الرصيد على المفتاح أو أزِله، أو انتظر دورة الفوترة التالية.
متى يحدث. خطأ لم تصنّفه API.
الحل. تحقّق من الطلب، ثم أعد المحاولة بعد لحظة قصيرة؛ وتواصل مع الدعم إذا تكرر الخطأ.
متى يحدث. خدمة إنشاء الكلام غير متاحة لهذا الطلب؛ وسيُعاد الرصيد المخصوم.
الحل. أعد المحاولة بعد لحظة قصيرة.
متى يحدث. انقطاع مؤقت داخل API.
الحل. أعد المحاولة بعد لحظة قصيرة.
متى يحدث. انتهاء مهلة مؤقت داخل API.
الحل. أعد المحاولة بعد لحظة قصيرة.
curl -X POST "https://api.echonova.ai/v1/text-to-speech/sync" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"الطقس اليوم جميل والسماء صافية في المدينة","voiceId":"66e5ef3a9c1d2b4f8a7e6c01"}'{
"data": {
"jobId": "66e5f0c2a1b2c3d4e5f60718",
"status": "completed",
"audioUrl": "https://storage.example.com/tts/tts-output.wav?X-Amz-Signature=...",
"durationSeconds": 3.4,
"creditsConsumed": 41
},
"success": true,
"statusCode": 200,
"errorMessage": null
}