@php $breadcrumbs = [ 'Chatbot FAQ' => '' ]; @endphp @extends('layouts.master') @section('title') Chatbot FAQ Management @endsection @section('style') @endsection @section('content')


Chatbot Knowledge Base

จัดการเมนูคำถามแนะนำแบบหลายชั้น (หัวข้อ → ตัวเลือกย่อย → คำตอบ) และไฟล์/ข้อความอ้างอิงที่ Chatbot ใช้ตอบคำถาม

@if(session('success'))
{{ session('success') }}
@endif
@if(Auth::check() && Auth::user()->hasRole('Admin')) @endif
{{-- ============ TAB 1: FAQ ============ --}}
{{-- Breadcrumb: บอกว่าตอนนี้กำลังดูหัวข้อย่อยของอะไรอยู่ --}}

@if($parent) กำลังจัดการหัวข้อย่อยของ "{{ $parent->question }}" — ตัวเลือกในตารางนี้จะโชว์พร้อมกันตอนผู้ใช้เลือก "{{ $parent->question }}" ในแชท @else แถวในตารางนี้คือ "หัวข้อหลัก" ที่โชว์เป็นปุ่มตอนผู้ใช้เปิดแชทครั้งแรก — กด "ดูหัวข้อย่อย" ที่แถวไหนเพื่อจัดการตัวเลือกข้างในหัวข้อนั้น @endif   🔗📄🖼️ = มีไฟล์/ลิงก์แนบอยู่

@if(!$parent)
👋 ข้อความเริ่มต้น

ข้อความที่บอทจะพิมพ์ทันทีตอนผู้ใช้เปิดแชทครั้งแรก — ใส่ได้หลายข้อความ (สูงสุด 5) จะแสดงเรียงเป็นบับเบิลตามลำดับที่ใส่ไว้ ช่องที่เว้นว่างจะถูกข้ามไป

@foreach($greetingMessages as $i => $msg)
@if(in_array($msg['attachment_type'], ['image','pdf']) && $msg['attachment_path'])
ไฟล์ปัจจุบัน: เปิดดูไฟล์ (ไม่อัปโหลดใหม่ = ใช้ไฟล์เดิมต่อ)
@endif
@endforeach
💬 ข้อความตอนบอทตอบไม่ได้

ข้อความนี้จะถูกใช้ทุกครั้งที่บอทหาข้อมูลไม่เจอ (ทั้งกรณีไม่มีข้อมูลในระบบเลย และกรณี AI พิจารณาแล้วว่าข้อมูลที่มีไม่ตรงกับคำถามพอจะตอบ) — ใส่ลิงก์แนบได้ไม่บังคับ เช่น ลิงก์ไปหน้าติดต่อเจ้าหน้าที่ หรือ Line OA

@endif
@forelse($faqs as $faq) @empty @endforelse
ลำดับ หัวข้อ/คำถาม คำตอบ คีย์เวิร์ด สถานะ จัดการ
{{ $faq->order }} @if($faq->icon_type === 'emoji' && $faq->icon_value) {{ $faq->icon_value }} @elseif($faq->icon_type === 'image' && $faq->icon_value) @endif {{ $faq->question }} @if($faq->attachment_type === 'image') 🖼️ @elseif($faq->attachment_type === 'pdf') 📄 @elseif($faq->attachment_type === 'link') 🔗 @endif {{ $faq->answer ? \Illuminate\Support\Str::limit($faq->answer, 80) : '—' }} {{ $faq->keywords }} @if($faq->status === 'active') Active @else Inactive @endif ดูหัวข้อย่อย @if($faq->child_count) ({{ $faq->child_count }}) @endif ลบ
ยังไม่มีข้อมูลในชั้นนี้
{{-- ============ TAB 2: DOCUMENTS ============ --}}
📄 อัปโหลด PDF

ระบบจะดึงข้อความในไฟล์มาทำดัชนีค้นหาอัตโนมัติ

🖼️ อัปโหลดรูปภาพ

เก็บไว้เป็นข้อมูลอ้างอิงเท่านั้น (ยังไม่รองรับค้นข้อความในรูป)

✍️ เพิ่มข้อความ

พิมพ์รายละเอียดเว็บ/บริการ ที่อยากให้บอทใช้ตอบ

@forelse($documentGroups as $batchId => $chunks) @php $first = $chunks->first(); @endphp @empty @endforelse
ประเภท ชื่อ/หัวข้อ จำนวนส่วน อัปโหลดเมื่อ จัดการ
{{ strtoupper($first->type) }} {{ $first->title }} @if($first->file_path)
ดูไฟล์ต้นฉบับ @elseif($first->type === 'text')
@endif
{{ $chunks->count() }} {{ $first->created_at->format('d/m/Y H:i') }} ลบ
ยังไม่มีไฟล์/ข้อมูลอัปโหลด
{{-- ============ TAB: Log คำถาม ============ --}}

รายการคำถามที่ผู้ใช้พิมพ์ถามบอทเอง (ไม่รวมการกดปุ่มเมนูคำถามแนะนำ) — พื้นหลังสีแดง = บอทตอบไม่ได้, พื้นหลังปกติ = บอทตอบได้ (แสดง 200 รายการล่าสุด)

@forelse($questionLogs as $log) is_answered) style="background:#fdecec;" @endif> @empty @endforelse
เวลา คำถาม คำตอบ สถานะ จัดการ
{{ $log->created_at?->format('d/m/Y H:i') }} {{ $log->question }} {{ $log->reply }} @if($log->is_answered) ตอบได้ @else ตอบไม่ได้ @endif ลบ
ยังไม่มี log คำถาม
{{-- ============ TAB 3: System Menu (Admin only) ============ --}} @if(Auth::check() && Auth::user()->hasRole('Admin'))

ผูกแชทบอทเข้ากับตารางข้อมูลจริงในระบบ (เช่น quotation, invoice) ให้ผู้ใช้ดู/เพิ่ม/แก้ไข/ลบข้อมูลผ่านการคุยกับบอทได้ — เข้าถึงแท็บนี้ได้เฉพาะ Admin เท่านั้น

ลำดับ ชื่อระบบ ตาราง DB Action ที่เปิด สถานะ จัดการ
กำลังโหลด...
@endif
{{-- Modal ดูเนื้อหาข้อความที่บันทึกไว้ (สำหรับรายการ type = text ที่ไม่มีไฟล์ต้นฉบับให้ดู) --}} {{-- Modal เพิ่ม/แก้ไข FAQ (custom, ไม่พึ่ง Bootstrap JS) --}}
@if(Auth::check() && Auth::user()->hasRole('Admin')) {{-- โมดัลขั้นที่ 2: ตั้งค่าฟิลด์ข้อมูล + Action ของระบบ (เปิดหลังบันทึกขั้นที่ 1 หรือกด "ตั้งค่าฟิลด์/Action" จากตาราง) --}} @endif @endsection