پرش به مطلب اصلی

ارسال پیام چت

ارسال پیام چت

این سرویس (endpoint) برای ارسال پیام به چت‌بات استفاده می‌شود و پاسخ‌ها به صورت استریم (streaming) با استفاده از رویدادهای SSE ارسال می‌شوند. پاسخ‌ها می‌توانند شامل پیام‌های جزئی، پیام نهایی، و رویدادهای تبدیل متن به گفتار (TTS) باشند.

برای استفاده از این سرویس، ارسال پارامتر user به‌صورت فیلدی در بدنه درخواست (Request Body) الزامی است.

مسیر سرویس

POST /api/v1/core/agent/{agent_pk}/chat-messages

پارامترهای مسیر (Path Parameters)

نامنوعتوضیحات
agent_pkعدد صحیحشناسه دستیار (Agent)

هدرها (Headers)

هدرمقدارتوضیح
AuthorizationToken api-tokenتوکن احراز هویت
Content-Typeapplication/jsonنوع داده ارسالی (در این مثال JSON)

نحوه استفاده

شروع یک مکالمه جدید

  • فیلد conversation_id را خالی بگذارید تا مکالمه جدید آغاز شود.
  • برای ادامه همان مکالمه در دفعات بعدی، از conversation_id که در پاسخ پیام اول دریافت میکنید، استفاده کنید.

ارسال فایل در پیام

در صورت نیاز به ارسال فایل یا عکس در پیام، مراحل زیر را انجام دهید.

  1. ابتدا فایل را از طریق مسیر /api/v1/core/agent/{agent_pk}/file/upload/ آپلود کنید.(آپلود فایل)
  2. سپس در payload پیام، فایل را با فرمت زیر اضافه کنید:
"files": [
{
"type": "file", // یا "image"
"transfer_method": "local_file",
"upload_file_id": "<شناسه فایل بازگشتی از آپلود>"
}
]

فقط فایل‌هایی که از طریق endpoint آپلود ارسال شده‌اند، قابل ارجاع هستند.

ورودی‌ها (inputs)

این پارامتر امکان وارد کردن مقادیر مختلفی از متغیرهایی را که توسط اپلیکیشن تعریف شده‌اند فراهم می‌کند. inputs شامل چندین جفت کلید/مقدار است که در آن:

  • هر کلید (key) نمایانگر یک متغیر خاص است.
  • هر مقدار (value)، مقدار مشخص شده برای آن متغیر می‌باشد.

فرمت پیش‌فرض: {} (یک شیء خالی)

مثال:

{
"inputs": {
"color": "red",
"length": 300
}
}

ساختار بدنه درخواست (Request Body)

{
"query": "متن پرسش",
"conversation_id": "uuid یا خالی برای مکالمه جدید",
"user": "نام کاربر",
"files": [ // اختیاری
{
"type": "file" یا "image",
"transfer_method": "local_file",
"upload_file_id": "uuid فایل آپلود شده"
}
],
"inputs": { // اختیاری، پارامترهای سفارشی
"color": "red",
"length": 300
}
}

نام فیلدنوعتوضیحات
queryرشته (string)متن پرسش ارسال‌شده توسط کاربر
userرشته (string)الزامی. شناسه کاربری که پیام را ارسال می‌کند
conversation_idUUID یا خالیشناسه مکالمه برای ادامه مکالمه قبلی یا ایجاد جدید
filesآرایه‌ای از اشیاء(اختیاری) لیست فایل‌ها یا تصاویر مرتبط
typefile یا imageنوع فایل (در هر شیء داخل files)
transfer_methodرشته (string)روش انتقال، "local_file"
upload_file_idUUIDشناسه فایل آپلود شده
inputsشیء (object)(اختیاری) پارامترهای سفارشی برای پردازش هوش مصنوعی


مثال با CURL

curl --location 'https://app.houshyar24.ir/api/v1/core/agent/1/chat-messages' \
--header 'Authorization: Token <your-token>' \
--header 'Content-Type: application/json' \
--data '{
"query": "Hello!",
"conversation_id": "",
"user":"ali",
"files": [
{
"type": "file",
"transfer_method": "local_file",
"upload_file_id": "769de53c-6558-40ef-b10e-38d12daac91e"
}
]
}'

پاسخ موفق (200)

پاسخ‌ها به صورت جریانی (SSE) ارسال می‌شوند و می‌توانند شامل انواع مختلفی از رویدادها باشند:

پیام جزئی (Partial Message Chunk)

{
"event": "message",
"message_id": "uuid",
"conversation_id": "uuid",
"answer": " I'm",
"created_at": 1679586595
}

پیام نهایی به همراه منابع بازیابی‌شده (Final Message)

{
"event": "message_end",
"id": "uuid",
"conversation_id": "uuid",
"retriever_resources": [
{
"position": 1,
"dataset_id": "uuid",
"dataset_name": "iPhone",
"document_id": "uuid",
"document_name": "my_doc",
"segment_id": "uuid",
"score": 0.98457545,
"content": "\"This\",\"is\",\"test\", ..."
}
]
}

پیام صوتی TTS (قطعه‌ای)

{
"event": "tts_message",
"conversation_id": "uuid",
"message_id": "uuid",
"created_at": 1721205487,
"task_id": "uuid",
"audio": "base64 audio chunk"
}

پایان پیام صوتی TTS

{
"event": "tts_message_end",
"conversation_id": "uuid",
"message_id": "uuid",
"created_at": 1721205487,
"task_id": "uuid",
"audio": ""
}