#P1568
برگهٔ تازه
Route Info
| Method |
Endpoint |
Controller |
| GET |
/api/v2/support/ticket/notes/list |
OfficialController@listNotesTicketSupport |
شرح عملکرد (Functionality)
این متد وظیفه بازگرداندن جزئیات کامل یک تیکت و لیست گفتگوهای (Notes) آن را بر عهده دارد. همچنین به صورت همزمان عملیات "خوانده شدن" پیامها را انجام میدهد. نکات فنی و منطقی آن عبارتند از:
- کنترل دسترسی (Access Control): سیستم بررسی میکند که کاربر جاری اجازه مشاهده تیکت را دارد یا خیر. کاربر مجاز است اگر:
- درخواستکننده (Requester) تیکت باشد.
- اپراتور (Operator) تخصیص داده شده به تیکت باشد.
- عضو لیست
members دپارتمان مربوطه باشد.
- مدیر دپارتمان باشد (که در این صورت نقش مدیریتی او به عضویت عادی تبدیل شده و پردازش میشود).
* در صورت عدم دسترسی، status: false و پیام خطا برگردانده میشود.
- منطق "خوانده شدن" (Mark as Read):
- پیامهایی که توسط خود کاربر نوشته شدهاند، نادیده گرفته میشوند.
- اگر کاربر جاری عضو دپارتمان باشد (پشتیبان)، سیستم فقط پیامهایی را به عنوان "خوانده شده" علامت میزند که نویسنده آنها عضو دپارتمان نباشد (یعنی پیامهای مشتری).
- فیلدهای
read_by و read_on در دیتابیس بهروزرسانی میشوند.
- فرمتدهی محتوا (HTML Content):
- اگر نوع پیام
attachment باشد، بکاند به جای بازگرداندن صرفِ URL، کد HTML تولید میکند.
- برای تصاویر: تگ
<img> درون لینک قرار میگیرد.
- برای فایلها: نام فایل به همراه یک آیکون SVG درون لینک قرار میگیرد.
- آدرس فایلها به دامین
storage.service01.ir اشاره دارد.
- هیدراتاسیون دادهها: اطلاعات کاربران (نویسنده پیام، درخواستکننده، اپراتور) با استفاده از متد
StaticController::getOperators به آبجکت کامل تبدیل میشود.
پارامترهای ورودی (Input Parameters)
| نام پارامتر |
نوع |
الزامی؟ |
توضیحات |
| ticket |
Integer |
بله |
شناسه تیکت مورد نظر برای دریافت جزئیات و گفتگوها. |
نمونه خروجی (Response)
{
"status": true,
"time": 1732623000,
"data": {
"department": {
"id": 3,
"type": "send", // 'send' if user is requester, else 'receive'
"title": {
"fa": "پشتیبانی فنی",
"en": "Technical Support"
}
},
"requester": { // آبجکت کامل کاربر درخواست دهنده
"id": 10,
"text": "1001 - نام کاربر",
"query": {
"id": 10,
"sex": "male",
"first_name": "Ali",
"last_name": "Rezaei",
"avatar": "...",
"position": "...",
"personnel_id": 1001
}
},
"operator": false, // یا آبجکت کامل اپراتور پاسخگو
"ticket": {
"status": 1,
"score": 0
},
"notes": [
{
"id": 1205,
"type": "text",
"operator": { ... }, // نویسنده پیام
"note": "سلام، لطفا بررسی کنید.", // متن پیام
"read_by": false, // یا آبجکت کاربری که پیام را خوانده
"read_on": false, // تاریخ خوانده شدن
"created_at": "2024-11-26 10:00:00"
},
{
"id": 1206,
"type": "text", // نوع در دیتابیس attachment است اما در خروجی text ست میشود (چون به HTML تبدیل شده)
"operator": { ... },
"note": "
", // خروجی HTML
"read_by": { ... },
"read_on": "2024-11-26 10:05:00",
"created_at": "2024-11-26 10:01:00"
}
]
}
}
نمونه خطا (عدم دسترسی):
{
"status": false,
"time": 1732623000,
"message": "شما اجازه دسترسی به این گفتگو را ندارید"
}