เชื่อมต่อ Discord
Ocriva สามารถโพสต์การแจ้งเตือนการประมวลผลเอกสารไปยังช่อง Discord โดยตรงผ่านฟีเจอร์ Incoming Webhooks ของ Discord เมื่อเอกสารถูกประมวลผล เกิดข้อผิดพลาด หรือ Batch ประมวลผลเสร็จสิ้น Ocriva จะส่งข้อความ Embed แบบสวยงามไปยังช่องที่คุณเลือก — ไม่ต้องใช้บอท ไม่ต้องทำ OAuth Flow ไม่ต้องพึ่งพา Middleware จากบุคคลที่สาม
NOTE
การเชื่อมต่อนี้ใช้ฟีเจอร์ Webhook ของ Discord โดยตรง คุณไม่จำเป็นต้องมี Discord Application ที่ผ่านการยืนยันหรือ Bot Token สมาชิกเซิร์ฟเวอร์ที่มีสิทธิ์ Manage Webhooks สามารถตั้งค่าได้ภายในสองนาที
สิ่งที่ต้องเตรียม
ก่อนเริ่มต้น ตรวจสอบว่าคุณมีสิ่งต่อไปนี้:
- Discord Server ที่คุณมีสิทธิ์ Manage Webhooks (หรือเป็นเจ้าของเซิร์ฟเวอร์)
- บัญชี Ocriva ที่สามารถเข้าถึงส่วน Integrations ได้
- Project และ Template ที่ใช้งานอยู่อย่างน้อยหนึ่งรายการใน Ocriva
ขั้นตอนที่ 1: สร้าง Discord Webhook
- เปิด Discord และไปยังเซิร์ฟเวอร์ที่ต้องการรับการแจ้งเตือน
- คลิกขวาที่ช่องเป้าหมาย (เช่น
#ocriva-alerts) แล้วเลือก Edit Channel - ไปที่ Integrations ในแถบด้านซ้าย
- คลิก Webhooks แล้วคลิก New Webhook
- ตั้งชื่อ Webhook ให้สื่อความหมาย เช่น
Ocriva Notifications - อัปโหลดรูปภาพ Avatar เพื่อให้สังเกตข้อความได้ง่าย (ไม่บังคับ)
- ตรวจสอบว่าเลือกช่องที่ถูกต้องใน Dropdown Channel
- คลิก Copy Webhook URL — URL นี้คือ Delivery Endpoint ของคุณ
WARNING
Webhook URL มี Secret Token ฝังอยู่ ให้ปฏิบัติเหมือนกับเป็นรหัสผ่าน ใครก็ตามที่มี URL นี้สามารถโพสต์ข้อความไปยังช่องของคุณได้ อย่า Commit ลง Source Control หรือแชร์ในช่องสาธารณะ
ขั้นตอนที่ 2: กำหนดค่าใน Ocriva
- ในแดชบอร์ด Ocriva ไปที่ Integrations ในแถบด้านซ้าย
- เลือก Template Discord จากรายการ Integration Template ที่รองรับ
- วาง Webhook URL ที่คัดลอกจาก Discord ลงในช่อง Webhook URL
- ภายใต้ Events เลือก Event ที่ต้องการรับ:
document.processed— เกิดขึ้นเมื่อเอกสารถูกดึงข้อมูลสำเร็จdocument.failed— เกิดขึ้นเมื่อการดึงข้อมูลล้มเหลวbatch.completed— เกิดขึ้นเมื่อเอกสารทั้งหมดใน Batch ประมวลผลเสร็จสิ้น
- ตรวจสอบ Payload Template ใน Editor Payload (ดูรายละเอียดในหัวข้อถัดไป)
- คลิก Save เพื่อเปิดใช้งานการเชื่อมต่อ
TIP
เริ่มต้นด้วยการเปิดเฉพาะ document.failed และ batch.completed เท่านั้น วิธีนี้ช่วยให้ช่อง Discord ของคุณเงียบในช่วงการทำงานปกติ และแจ้งเตือนเฉพาะเมื่อต้องดำเนินการ คุณสามารถเปิด document.processed ในภายหลังหากต้องการรับข้อความยืนยันสำหรับทุกไฟล์
Payload Template
Discord Payload เริ่มต้นใช้รูปแบบ Embed เพื่อสร้างการ์ดการแจ้งเตือนที่สะอาดและมีโครงสร้างในช่องของคุณ:
{
"content": "**{{eventType}}** - {{payload.fileName}}",
"embeds": [
{
"title": "{{eventType}}",
"description": "File: {{payload.fileName}}\nStatus: {{payload.status}}",
"color": 5814783,
"timestamp": "{{timestamp}}"
}
]
}ตารางอ้างอิง Variable
| Variable | ค่าที่แทน |
|---|---|
{{eventType}} | ชื่อ Event เช่น document.processed |
{{payload.fileName}} | ชื่อไฟล์ต้นฉบับของเอกสาร |
{{payload.status}} | สถานะการประมวลผล เช่น completed หรือ failed |
{{timestamp}} | Timestamp UTC ของ Event ในรูปแบบ ISO 8601 |
{{payload.batchId}} | ตัวระบุ Batch (รองรับใน Event batch.completed) |
{{organizationId}} | ID องค์กรของคุณ |
สีของ Embed
ค่าสีเริ่มต้น 5814783 คือการแสดงค่าทศนิยมของ #58B9FF — สีฟ้าอ่อนที่ดูดีทั้งใน Theme สว่างและมืดของ Discord หากต้องการเปลี่ยน ให้แปลงสี Hex ที่ต้องการเป็นทศนิยม (เช่น #ED4245 → 15548997 สำหรับสีแดงของ Discord)
NOTE
Discord ต้องการสี Embed เป็นเลขจำนวนเต็มทศนิยม ไม่ใช่ Hex String ใช้ parseInt("ED4245", 16) ใน Browser Console หรือ Online Converter ใดก็ได้
การปรับแต่ง Payload
คุณสามารถขยาย Template เริ่มต้นเพื่อเพิ่มรายละเอียดใน Embed ได้
การเพิ่มฟิลด์ใน Embed
Discord Embed รองรับ Array fields ที่แสดงผลเป็น Grid สองคอลัมน์ภายในการ์ด:
{
"content": "**{{eventType}}** - {{payload.fileName}}",
"embeds": [
{
"title": "{{eventType}}",
"description": "File: {{payload.fileName}}\nStatus: {{payload.status}}",
"color": 5814783,
"timestamp": "{{timestamp}}",
"fields": [
{
"name": "Organization",
"value": "{{organizationId}}",
"inline": true
},
{
"name": "Processing Time",
"value": "{{payload.processingTime}}ms",
"inline": true
}
],
"footer": {
"text": "Ocriva · Document Processing"
}
}
]
}การเปลี่ยนสี Embed ตามแต่ละ Event
หากต้องการให้ Embed แยกแยะความสำเร็จและความล้มเหลวด้วยสายตา ให้สร้างการกำหนดค่า Webhook สองอัน — อันหนึ่งสำหรับ document.processed (สีฟ้า 5814783) และอีกอันสำหรับ document.failed (สีแดง 15548997)
ตัวอย่าง: การแจ้งเตือนการประมวลผลเอกสาร
สถานการณ์: ผู้ใช้อัปโหลด invoice-2026-03.pdf AI ของ Ocriva ดึงข้อมูลเสร็จสิ้นและส่ง Event document.processed
Payload ที่ Ocriva ส่งไปยัง Discord มีลักษณะดังนี้:
{
"content": "**document.processed** - invoice-2026-03.pdf",
"embeds": [
{
"title": "document.processed",
"description": "File: invoice-2026-03.pdf\nStatus: completed",
"color": 5814783,
"timestamp": "2026-04-05T09:15:00.000Z"
}
]
}Discord แสดงผลเป็นการ์ด Embed สีฟ้าในช่องของคุณ พร้อมหัวข้อ Event ชื่อไฟล์ สถานะ และ Timestamp ที่มองเห็นได้ทันที
TIP
สำหรับ Batch Event ค่า {{payload.fileName}} จะว่างเปล่าเนื่องจาก Batch มีหลายไฟล์ ให้ปรับแต่ง description สำหรับ Batch Event โดยใช้ {{payload.batchId}} และฟิลด์ระดับ Batch เช่น {{payload.totalFiles}} และ {{payload.failedFiles}} แทน
การทดสอบการเชื่อมต่อ
หลังจากบันทึกการกำหนดค่าแล้ว ใช้เครื่องมือทดสอบในตัวเพื่อยืนยันการส่งก่อนนำไปใช้งานจริง:
- ในแผง Integrations ของ Ocriva เปิดการกำหนดค่า Discord Webhook ของคุณ
- คลิก Send Test Event
- Ocriva ส่ง Payload ตัวอย่าง
document.processedไปยัง Discord Webhook URL ของคุณ - ตรวจสอบช่อง Discord ของคุณ — การ์ด Embed ควรปรากฏภายในไม่กี่วินาที
- หากไม่มีข้อความปรากฏ คลิก View Delivery Log เพื่อตรวจสอบ HTTP Response Code และ Response Body ที่ Discord ส่งกลับมา
NOTE
การส่งที่สำเร็จจะได้รับ HTTP 204 No Content จาก Discord การตอบกลับ 4xx ใดก็ตามบ่งชี้ว่ามีปัญหากับ URL หรือโครงสร้าง Payload (ดูการแก้ไขปัญหาด้านล่าง)
การแก้ไขปัญหา
ไม่มีข้อความปรากฏใน Discord
- ตรวจสอบว่าวาง Webhook URL ถูกต้องโดยไม่มีช่องว่างหรือการขึ้นบรรทัดใหม่เกินมา
- ตรวจสอบ Delivery Log ใน Ocriva สำหรับ HTTP Status Code
- ยืนยันว่า Webhook ยังไม่ถูกลบใน Discord (Server Settings → Integrations → Webhooks)
HTTP 400 Bad Request
Payload JSON ไม่ถูกต้องหรือมีค่าที่ไม่ถูกต้อง สาเหตุที่พบบ่อย:
| สาเหตุ | วิธีแก้ไข |
|---|---|
color ของ Embed เป็น Hex String ("#58B9FF") | เปลี่ยนเป็นเลขจำนวนเต็มทศนิยม (5814783) |
ขาด Array embeds ที่จำเป็น | ตรวจสอบว่ามี Key embeds และเป็น Array |
รูปแบบ timestamp ไม่ใช่ ISO 8601 | ใช้ {{timestamp}} — Ocriva ส่งค่าในรูปแบบ ISO 8601 เสมอ |
HTTP 404 Not Found
Webhook URL ไม่มีผลบังคับใช้อีกต่อไป เกิดขึ้นเมื่อ Webhook ถูกลบใน Discord สร้าง Webhook ใหม่ใน Discord คัดลอก URL ใหม่ และอัปเดตการกำหนดค่าใน Ocriva
HTTP 429 Too Many Requests
Discord จำกัด Webhook ที่ 30 คำขอต่อนาทีต่อ Webhook หนึ่งอัน หากคุณประมวลผล Batch จำนวนมากอย่างรวดเร็ว ให้พิจารณา:
- เปิดเฉพาะ
batch.completedแทนdocument.processedเพื่อลดปริมาณข้อความ - สร้าง Webhook ที่สองในช่องอื่นและแบ่งประเภท Event ระหว่างกัน
WARNING
การเกิน Rate Limit ของ Discord ทำให้ Ocriva จัดคิวและลองส่งใหม่โดยอัตโนมัติ อย่างไรก็ตาม หาก Webhook ถูก Rate Limit เป็นระยะเวลานาน Event ที่รออยู่ในคิวที่เก่ากว่าอาจถูกตัดทิ้ง ดูรายละเอียด Retry Policy ของ Ocriva ที่คู่มือ Retry & Rate Limiting
