كيف تفرّغ تسجيلات Zoom أو Meet أو Teams مع تمييز المتحدثين
صدّر ملف التسجيل (بصيغة MP4 أو M4A) وأرسل رابطه إلى POST /transcribe مع تفعيل include_diarization بالقيمة true. سيعود كل مقطع مرفقًا بالحقل speaker وتوقيت البداية والنهاية. مرّر هذا التفريغ بعد ذلك إلى نموذجك اللغوي ليصيغ محضر الاجتماع ويستخرج مهام العمل. تعمل الواجهة على ملفات التسجيل التي تزودها بها، ولا تدخل كبوت في الاجتماعات المباشرة.
تفريغ التسجيل مع تحديد المتحدثين
ارفع الملف عبر POST /upload (بحد أقصى 100 MiB، وإذا كان التسجيل أطول استخرج المسار الصوتي أولًا بـ ffmpeg)، أو مرّر رابطًا عامًا للملف، ثم ابدأ المهمة. المعامل num_speakers اختياري، ويفيد تمريره إذا كنت تعرف مسبقًا عدد المتحدثين في الاجتماع.
curl https://app.kolwrite.com/transcribe \
-H "x-api-key: $KOLWRITE_API_KEY" -H "Content-Type: application/json" \
-d '{"audio_url": "https://example.com/weekly-sync.mp4", "model": "oracle", "language": "auto",
"include_diarization": true, "num_speakers": 4, "output_format": "json"}'
تابع حالة المهمة عبر GET /transcribe/{jobId}، أو مرّر رابط webhook_url لتنبيه خادمك تلقائيًا فور انتهاء تفريغ الاجتماعات الطويلة.
يتضمن كل مقطع رمز المتحدث وتوقيته الزمني وكلماته:
{
"jobId": "34c63d45-4cb5-473b-bc60-25c175e69c57",
"status": "COMPLETED",
"result": {
"language": "en",
"segments": [
{
"start": 1.0,
"end": 3.75,
"text": "Hello everyone and welcome to the show.",
"speaker": "Speaker 1",
"words": [
{ "start": 1.0, "end": 1.35, "word": "Hello" },
{ "start": 1.4, "end": 1.75, "word": "everyone" }
]
}
]
}
}
تسمية المتحدثين بأسمائهم
تُرجع الواجهة تسميات عامة للمتحدثين مثل Speaker 1 وSpeaker 2. ربط كل تسمية بالشخص الفعلي خطوة تحددها أنت، بالاعتماد مثلًا على قائمة الحضور أو من يبدأ بالتعريف بنفسه في التسجيل. يمكنك ربط التسميات بالأسماء مباشرة بقاموس بسيط في الكود:
minutes.py
# minutes.py — turn the diarized result into text an LLM can summarize
NAMES = {"Speaker 1": "Dana", "Speaker 2": "Omar", "Speaker 3": "Lee"} # you decide who is who
def clock(seconds):
m, s = divmod(int(seconds), 60)
h, m = divmod(m, 60)
return f"{h}:{m:02}:{s:02}" if h else f"{m}:{s:02}"
def meeting_text(result):
lines = []
for segment in result["segments"]:
who = NAMES.get(segment.get("speaker"), segment.get("speaker", "Unknown"))
lines.append(f'[{clock(segment["start"])}] {who}: {segment["text"]}')
return "\n".join(lines)
PROMPT = """Below is a meeting transcript with timestamps. Write: (1) a five-line summary,
(2) decisions, (3) action items as "owner - task - [timestamp]". Use only what is in the transcript.
"""
# Send PROMPT + meeting_text(result) to the model you use.
محضر الاجتماع وبنود العمل
مهمة KolWrite هي إعطاؤك نصًا مفرغًا ومرتبًا بالتوقيت والمتحدثين، أما التلخيص واستخراج مهام العمل فيتولاهما النموذج اللغوي الذي تعتمده في نظامك. احتفظ بالأوقات الزمنية داخل النص المرسل للنموذج ليربط كل بند باللحظة التي ذُكر فيها، ووجّهه للاعتماد حصريًا على ما ورد في التفريغ.
تسجيلات المكالمات التي تضع كل متحدث في قناة مستقلة
إذا كان تسجيل المكالمة بنظام ستيريو (الموظف في القناة اليسرى والعميل في اليمنى)، فلا داعي لتمييز المتحدثين؛ افصل بينهم حسب القناة مباشرة. يعمل هذا الخيار مع 2 إلى 8 قنوات، ولا يمكن جمعه مع include_diarization.
{
"audio_url": "https://example.com/support-call.wav",
"model": "oracle",
"channel_speaker_separation": "standard",
"channel_labels": { "0": "Agent", "1": "Customer" },
"output_format": "json"
}
اختر overlap بدلًا من standard عندما يتداخل كلام المتحدثين. وتُحسب تكلفة النموذج حينها بناءً على القيمة الأكبر بين مدة التسجيل ومجموع الكلام المكتشف عبر القنوات.
التكلفة
| المهمة | النموذج | التكلفة |
|---|---|---|
| اجتماع مدته ساعة مع تمييز المتحدثين | oracle | 1.44 دولار |
| الاجتماع نفسه مع ميزة Pro diarization للصوت الصعب | oracle + pro_diarization | 1.68 دولار |
| 30 دقيقة، صوت صعب، مع Pro diarization | oracle_max + pro_diarization | 1.92 دولار |
تمييز المتحدثين العادي وفصل القنوات القياسي مجانيان ولا يضيفان أي رسوم على السعر الأساسي. راجع الأسعار: /llms/pricing.md.
أمور تجب مراعاتها قبل الاعتماد على النتيجة
- تحتوي الاجتماعات على بيانات شخصية. أبلغ الحاضرين بأن الاجتماع يُسجل ويُفرغ نصيًا، واحمِ ملفات التفريغ بنفس مستوى الحماية الذي تطبقه على التسجيلات الصوتية.
- تقل دقة تمييز المتحدثين عندما يتداخل الكلام أو تتشابه نبرات الصوت أو تكون الميكروفونات رديئة. في التسجيلات الصعبة، جرّب تفعيل
pro_diarizationأو استخدم فصل القنوات إن أمكن. - إذا كان الاجتماع يدور بلغة واحدة، حدّد قيمتها صراحةً في المعامل
language، لأن ميزة الاكتشاف التلقائي تختار لغة واحدة للملف بأكمله. - راجع الأسماء والأرقام والقرارات بنفسك قبل اعتماد المحضر وتنفيذ ما فيه.
أسئلة وأجوبة
كيف أفرّغ تسجيل Zoom بأسماء المتحدثين؟
نزّل التسجيل وأرسله إلى POST /transcribe مع تفعيل include_diarization: true، ثم اربط Speaker 1 وSpeaker 2 بالأسماء الحقيقية داخل شيفرتك. دور الواجهة هو تمييز المتحدثين بتسميات عامة، أما ربطها بالأسماء فيبقى عندك.
هل تستطيع الانضمام إلى مكالمة Google Meet أو Teams؟
لا. تفرّغ KolWrite ملفات التسجيل التي ترفعها إليها، ولا تعمل ببث فوري أو تحضر الاجتماعات المباشرة.
هل تكتب محضر الاجتماع وبنود العمل؟
الواجهة تعطيك التفريغ مع التوقيت وتسميات المتحدثين، ثم يتولى نموذجك اللغوي استخراج المحضر وبنود العمل منه.
كيف تُعالَج المكالمات الهاتفية بين متحدثين؟
إذا كان كل متحدث مسجّلًا على قناة صوتية مستقلة، استخدم channel_speaker_separation مع channel_labels بدل تمييز المتحدثين.
أي اللغات تعمل في الاجتماعات؟
جميع اللغات المئة الموجودة في قائمة اللغات، بما فيها العربية والعبرية. عندما يكون الاجتماع بلغة واحدة، مرّر رمزها في المعامل language.