Ocriva Logo

Documents

ประเภท Event และ Payload

Reference ครบถ้วนสำหรับทุก Webhook Event Type และโครงสร้าง Payload

webhookseventspayloadsreference

Published: 3/31/2026

ประเภท Event และ Payload

หน้านี้คือ Reference ครบถ้วนสำหรับทุก Webhook Event ที่ Ocriva สามารถส่งออกได้ แต่ละส่วนอธิบาย Event พร้อมรายการ Field ใน Object payload และตัวอย่าง JSON จริง


โครงสร้าง Payload มาตรฐาน

ทุก Webhook Delivery — ไม่ว่าจะเป็น Event ประเภทใด — มีโครงสร้างภายนอกที่เหมือนกัน:

{
  "eventType": "document.processed",
  "eventId": "evt_1743418800000_abc123",
  "timestamp": "2026-03-31T12:00:00.000Z",
  "organizationId": "org_abc123",
  "projectId": "proj_xyz789",
  "payload": {
    // ข้อมูลเฉพาะของแต่ละ Event
  }
}
FieldTypeคำอธิบาย
eventTypestringEvent ที่ทำให้เกิด Webhook นี้ (เช่น document.processed)
eventIdstringIdentifier เฉพาะสำหรับ Delivery ครั้งนี้
timestampstringTimestamp ISO 8601 UTC ของเวลาที่ Event เกิดขึ้น
organizationIdstringID ขององค์กรที่เป็นเจ้าของ Resource
projectIdstringID ของ Project ที่ Resource นั้นอยู่
payloadobjectข้อมูลเฉพาะของ Event (ดูแต่ละส่วนด้านล่าง)

NOTE

eventId ใช้รูปแบบ evt_{unixMs}_{random6chars} — ตัวอย่างเช่น evt_1743418800000_abc123 ส่วน Unix Timestamp แสดงเวลาที่ Event ถูกสร้าง ไม่ใช่เวลาที่ส่ง Delivery

TIP

ใช้ eventId เพื่อสร้าง Event Handler ที่เป็น Idempotent บันทึก Event ID ที่ประมวลผลแล้ว และข้ามการประมวลผลหากได้รับ ID เดิมซ้ำ ซึ่งปกป้องคุณจาก Delivery ซ้ำที่เกิดจาก Retry


Document Events

Document Events จะทำงานเมื่อไฟล์แต่ละชิ้นเคลื่อนผ่านขั้นตอนการประมวลผล

document.uploaded

ทำงานทันทีเมื่อไฟล์ถูก Upload ไปยัง Ocriva สำเร็จ ก่อนที่ AI จะเริ่มประมวลผล

Field ใน Payload:

FieldTypeคำอธิบาย
idstringID ของ Upload Record
fileNamestringชื่อไฟล์ต้นฉบับ
fileSizenumberขนาดไฟล์เป็น Bytes
mimeTypestringMIME Type (เช่น application/pdf)
statusstringเป็น uploaded เสมอในขั้นตอนนี้
templateIdstringID ของ Template ที่กำหนดสำหรับประมวลผล
uploadedBystringUser ID ที่เริ่มการ Upload
createdAtstringTimestamp ISO 8601 UTC

ตัวอย่าง:

{
  "eventType": "document.uploaded",
  "eventId": "evt_1743418800000_upl001",
  "timestamp": "2026-03-31T11:59:00.000Z",
  "organizationId": "org_abc123",
  "projectId": "proj_xyz789",
  "payload": {
    "id": "doc_upl_001",
    "fileName": "invoice_march.pdf",
    "fileSize": 204800,
    "mimeType": "application/pdf",
    "status": "uploaded",
    "templateId": "tmpl_invoice_v2",
    "uploadedBy": "user_wicha01",
    "createdAt": "2026-03-31T11:59:00.000Z"
  }
}

document.processed

ทำงานเมื่อเอกสารผ่านการประมวลผล AI สำเร็จ นี่คือ Event ที่ใช้บ่อยที่สุด เพราะมีข้อมูลที่ดึงออกมาซึ่งระบบ Downstream ของคุณต้องการ

Field ใน Payload:

FieldTypeคำอธิบาย
idstringID ของ Upload Record
fileNamestringชื่อไฟล์ต้นฉบับ
statusstringเป็น completed เสมอ
extractedDataobjectข้อมูลที่มีโครงสร้างที่ AI ดึงออกมา
confidencenumberคะแนนความมั่นใจในการดึงข้อมูล (0–1)
processingTimenumberเวลาที่ใช้ประมวลผลเป็น Milliseconds
processedAtstringTimestamp ISO 8601 UTC ของเวลาที่เสร็จสิ้น

ตัวอย่าง:

{
  "eventType": "document.processed",
  "eventId": "evt_1743418800000_prc002",
  "timestamp": "2026-03-31T12:00:03.241Z",
  "organizationId": "org_abc123",
  "projectId": "proj_xyz789",
  "payload": {
    "id": "doc_upl_001",
    "fileName": "invoice_march.pdf",
    "status": "completed",
    "extractedData": {
      "invoiceNumber": "INV-2026-0331",
      "vendor": "Acme Supplies Co.",
      "vendorTaxId": "0105560012345",
      "customer": "Beta Corp Ltd.",
      "issueDate": "2026-03-31",
      "dueDate": "2026-04-30",
      "subtotal": 14400.00,
      "vatAmount": 1008.00,
      "totalAmount": 15408.00,
      "currency": "THB",
      "lineItems": [
        {
          "description": "Cloud Storage (มีนาคม)",
          "quantity": 12,
          "unitPrice": 1200.00,
          "amount": 14400.00
        }
      ]
    },
    "confidence": 0.97,
    "processingTime": 3241,
    "processedAt": "2026-03-31T12:00:03.241Z"
  }
}

document.failed

ทำงานเมื่อเอกสารไม่สามารถประมวลผลได้สำเร็จ ใช้ Event นี้เพื่อเรียกใช้ Error Handling การแจ้งเตือน หรือ Workflow การตรวจสอบด้วยมือ

Field ใน Payload:

FieldTypeคำอธิบาย
idstringID ของ Upload Record
fileNamestringชื่อไฟล์ต้นฉบับ
statusstringเป็น failed เสมอ
errorMessagestringคำอธิบายที่อ่านได้ว่าเกิดอะไรขึ้น
processingTimenumberเวลาที่ผ่านไปก่อนเกิด Failure เป็น Milliseconds

ตัวอย่าง:

{
  "eventType": "document.failed",
  "eventId": "evt_1743418900000_fail003",
  "timestamp": "2026-03-31T12:01:40.000Z",
  "organizationId": "org_abc123",
  "projectId": "proj_xyz789",
  "payload": {
    "id": "doc_upl_002",
    "fileName": "corrupted_scan.pdf",
    "status": "failed",
    "errorMessage": "Unable to extract text: document appears to be a scanned image with insufficient resolution (below 150 DPI).",
    "processingTime": 1820
  }
}

Batch Events

Batch Events ทำงานเมื่อกลุ่มเอกสารถูก Upload หรือประมวลผลเสร็จพร้อมกัน

batch.uploaded

ทำงานเมื่อการ Upload แบบ Batch เสร็จสมบูรณ์ — ไฟล์ทั้งหมดใน Batch ได้รับโดย Ocriva และอยู่ในคิวรอประมวลผล

Field ใน Payload:

FieldTypeคำอธิบาย
batchIdstringIdentifier เฉพาะของ Batch
namestringชื่อ Batch ที่ระบุตอน Upload
totalFilesnumberจำนวนไฟล์ทั้งหมดใน Batch
templateIdstringTemplate ที่ใช้กับทุกไฟล์ใน Batch นี้
uploadedBystringUser ID ที่เริ่มการ Upload แบบ Batch
createdAtstringTimestamp ISO 8601 UTC
uploadIdsstring[]Array ของ Upload Record ID แต่ละชิ้น

ตัวอย่าง:

{
  "eventType": "batch.uploaded",
  "eventId": "evt_1743418800000_bat004",
  "timestamp": "2026-03-31T12:00:00.000Z",
  "organizationId": "org_abc123",
  "projectId": "proj_xyz789",
  "payload": {
    "batchId": "batch_march_invoices",
    "name": "ใบแจ้งหนี้มีนาคม 2026",
    "totalFiles": 47,
    "templateId": "tmpl_invoice_v2",
    "uploadedBy": "user_wicha01",
    "createdAt": "2026-03-31T12:00:00.000Z",
    "uploadIds": [
      "doc_upl_101",
      "doc_upl_102",
      "doc_upl_103"
    ]
  }
}

batch.completed

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

Field ใน Payload:

FieldTypeคำอธิบาย
batchIdstringIdentifier เฉพาะของ Batch
namestringชื่อ Batch
totalFilesnumberจำนวนไฟล์ทั้งหมดที่ส่งเข้ามา
completedFilesnumberจำนวนไฟล์ที่ประมวลผลสำเร็จ
failedFilesnumberจำนวนไฟล์ที่ล้มเหลว
statusstringcompleted ถ้าทั้งหมดสำเร็จ, partial ถ้าบางส่วนล้มเหลว
completedAtstringTimestamp ISO 8601 UTC ของเวลาที่ไฟล์สุดท้ายเสร็จสิ้น

ตัวอย่าง:

{
  "eventType": "batch.completed",
  "eventId": "evt_1743422400000_bat005",
  "timestamp": "2026-03-31T13:00:00.000Z",
  "organizationId": "org_abc123",
  "projectId": "proj_xyz789",
  "payload": {
    "batchId": "batch_march_invoices",
    "name": "ใบแจ้งหนี้มีนาคม 2026",
    "totalFiles": 47,
    "completedFiles": 45,
    "failedFiles": 2,
    "status": "partial",
    "completedAt": "2026-03-31T13:00:00.000Z"
  }
}

Template Events

Template Events ทำงานเมื่อ Template ในองค์กรของคุณถูกสร้าง แก้ไข หรือลบ Event เหล่านี้มีประโยชน์สำหรับการ Sync Metadata ของ Template ไปยังระบบภายนอก หรือการบันทึก Audit Log

template.created

ทำงานเมื่อมีการสร้าง Template ใหม่ในองค์กร ใช้ Event นี้เพื่อ Sync Metadata ของ Template ไปยังระบบภายนอก หรือเริ่มต้นการตั้งค่า Downstream

Field ใน Payload:

FieldTypeคำอธิบาย
idstringIdentifier เฉพาะของ Template
namestringชื่อแสดงผลของ Template
descriptionstringคำอธิบายที่อ่านได้ว่า Template นี้ดึงข้อมูลอะไร
projectIdstringID ของ Project ที่ Template นี้อยู่
resultFormatstringรูปแบบ Output ที่ตั้งค่าไว้สำหรับ Template นี้ (เช่น json, csv)
createdBystringUser ID ที่สร้าง Template
createdAtstringTimestamp ISO 8601 UTC ของเวลาที่สร้าง

ตัวอย่าง:

{
  "eventType": "template.created",
  "eventId": "evt_1743418800000_tpl006",
  "timestamp": "2026-03-31T12:00:00.000Z",
  "organizationId": "org_abc123",
  "projectId": "proj_xyz789",
  "payload": {
    "id": "tmpl_invoice_v2",
    "name": "Invoice Extractor v2",
    "description": "Extracts vendor, line items, totals, and tax details from Thai-language invoices.",
    "projectId": "proj_xyz789",
    "resultFormat": "json",
    "createdBy": "user_wicha01",
    "createdAt": "2026-03-31T12:00:00.000Z"
  }
}

template.updated

ทำงานเมื่อมีการอัปเดต Field ใด ๆ ใน Template ไม่ว่าจะเป็นการเปลี่ยน Schema การตั้งค่าโมเดล หรือการแก้ไข Name/Description

Field ใน Payload:

FieldTypeคำอธิบาย
idstringIdentifier เฉพาะของ Template
namestringชื่อแสดงผลของ Template (หลังอัปเดต)
descriptionstringคำอธิบาย Template (หลังอัปเดต)
projectIdstringID ของ Project ที่ Template นี้อยู่
resultFormatstringรูปแบบ Output ที่ตั้งค่าไว้สำหรับ Template นี้
updatedBystringUser ID ที่ทำการอัปเดต
updatedAtstringTimestamp ISO 8601 UTC ของเวลาที่อัปเดต
changesstring[]Array ของชื่อ Field ที่ถูกแก้ไขในการอัปเดตครั้งนี้

ตัวอย่าง:

{
  "eventType": "template.updated",
  "eventId": "evt_1743422400000_tpl007",
  "timestamp": "2026-03-31T13:00:00.000Z",
  "organizationId": "org_abc123",
  "projectId": "proj_xyz789",
  "payload": {
    "id": "tmpl_invoice_v2",
    "name": "Invoice Extractor v2",
    "description": "Extracts vendor, line items, totals, tax details, and payment terms from Thai-language invoices.",
    "projectId": "proj_xyz789",
    "resultFormat": "json",
    "updatedBy": "user_wicha01",
    "updatedAt": "2026-03-31T13:00:00.000Z",
    "changes": ["description", "resultFormat"]
  }
}

template.deleted

ทำงานเมื่อมีการลบ Template Payload เก็บข้อมูลเพียงพอสำหรับการอ้างอิง Template ที่ถูกลบแม้ว่าจะไม่มีอยู่ในระบบแล้วก็ตาม ซึ่งมีประโยชน์สำหรับการบันทึก Audit Log และการทำความสะอาด Reference ภายนอก

Field ใน Payload:

FieldTypeคำอธิบาย
idstringIdentifier เฉพาะของ Template ที่ถูกลบ
namestringชื่อแสดงผลของ Template ที่ถูกลบ
projectIdstringID ของ Project ที่ Template นี้เคยอยู่
deletedBystringUser ID ที่ลบ Template
deletedAtstringTimestamp ISO 8601 UTC ของเวลาที่ลบ

ตัวอย่าง:

{
  "eventType": "template.deleted",
  "eventId": "evt_1743426000000_tpl008",
  "timestamp": "2026-03-31T14:00:00.000Z",
  "organizationId": "org_abc123",
  "projectId": "proj_xyz789",
  "payload": {
    "id": "tmpl_invoice_v1",
    "name": "Invoice Extractor v1",
    "projectId": "proj_xyz789",
    "deletedBy": "user_wicha01",
    "deletedAt": "2026-03-31T14:00:00.000Z"
  }
}