n8n-nodes-livo
Version:
n8n Livo App integration with triggers and actions for orders, products, customers, and repairs
174 lines (173 loc) • 9.02 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RepairNode = void 0;
const n8n_workflow_1 = require("n8n-workflow");
class RepairNode {
constructor() {
this.description = {
displayName: 'Dịch vụ sửa chữa',
name: 'repairNode',
icon: 'file:repair.svg',
group: ['trigger'],
version: 1,
subtitle: '={{$parameter["event"]}}',
description: 'Trigger webhook events cho dịch vụ sửa chữa (tạo phiếu, cập nhật, thanh toán, giao nhận)',
defaults: {
name: 'Dịch vụ sửa chữa',
},
inputs: [],
outputs: ['main'],
webhooks: [
{
name: 'default',
httpMethod: 'POST',
responseMode: 'onReceived',
path: 'webhook',
},
],
properties: [
{
displayName: 'Event',
name: 'event',
type: 'options',
options: [
{
name: 'Lấy danh sách phiếu sửa chữa',
value: 'repair.list',
description: 'Trigger khi lấy danh sách phiếu sửa chữa',
},
{
name: 'Chi tiết phiếu sửa chữa',
value: 'repair.detail',
description: 'Trigger khi xem chi tiết phiếu sửa chữa',
},
{
name: 'Tạo phiếu sửa chữa',
value: 'repair.created',
description: 'Trigger khi tạo mới phiếu sửa chữa',
},
{
name: 'Cập nhật phiếu sửa chữa',
value: 'repair.updated',
description: 'Trigger khi cập nhật phiếu sửa chữa',
},
{
name: 'Thanh toán phiếu sửa chữa',
value: 'repair.paid',
description: 'Trigger khi thanh toán phiếu sửa chữa',
},
{
name: 'Xác nhận giao khách',
value: 'repair.customer_confirmed',
description: 'Trigger khi xác nhận giao khách thành công',
},
],
default: 'repair.created',
required: true,
}
],
};
}
async webhook() {
const bodyData = this.getBodyData();
const headers = this.getHeaderData();
const query = this.getQueryData();
const req = this.getRequestObject();
const expectedEvent = this.getNodeParameter('event');
const advancedFilters = this.getNodeParameter('advancedFilters', {});
const authentication = this.getNodeParameter('authentication', {});
if (authentication.secretToken) {
const headerName = authentication.headerName || 'X-Webhook-Secret';
const receivedToken = headers[headerName.toLowerCase()] || headers[headerName];
if (!receivedToken || receivedToken !== authentication.secretToken) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Xác thực webhook thất bại: Token không hợp lệ');
}
}
if (!bodyData || typeof bodyData !== 'object') {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Dữ liệu webhook không hợp lệ');
}
const repairData = bodyData;
const receivedEvent = repairData.event || headers['x-event-type'];
if (receivedEvent !== expectedEvent) {
return { noWebhookResponse: true };
}
if (advancedFilters.customerId && repairData.customer_id !== advancedFilters.customerId) {
return { noWebhookResponse: true };
}
if (advancedFilters.deviceType && repairData.device_type !== advancedFilters.deviceType) {
return { noWebhookResponse: true };
}
if (advancedFilters.technician && repairData.technician !== advancedFilters.technician) {
return { noWebhookResponse: true };
}
if (advancedFilters.minCost && (repairData.repair_cost || 0) < advancedFilters.minCost) {
return { noWebhookResponse: true };
}
if (advancedFilters.repairStatus && repairData.repair_status !== advancedFilters.repairStatus) {
return { noWebhookResponse: true };
}
if (advancedFilters.branch && repairData.branch !== advancedFilters.branch) {
return { noWebhookResponse: true };
}
const outputData = {
event: receivedEvent,
event_time: new Date().toISOString(),
event_category: 'repair',
repair_id: repairData.repair_id || repairData.ma_phieu_sua,
repair_code: repairData.repair_code || repairData.ma_phieu,
ticket_number: repairData.ticket_number || repairData.so_phieu,
customer_id: repairData.customer_id || repairData.ma_khach_hang,
customer_name: repairData.customer_name || repairData.ten_khach_hang,
customer_phone: repairData.customer_phone || repairData.so_dien_thoai,
customer_email: repairData.customer_email || repairData.email,
customer_address: repairData.customer_address || repairData.dia_chi,
device_info: repairData.device_info || repairData.thong_tin_thiet_bi,
device_type: repairData.device_type || repairData.loai_thiet_bi,
device_brand: repairData.device_brand || repairData.hang_thiet_bi,
device_model: repairData.device_model || repairData.model_thiet_bi,
serial_number: repairData.serial_number || repairData.so_serial,
issue_description: repairData.issue_description || repairData.mo_ta_su_co,
issue_type: repairData.issue_type || repairData.loai_su_co,
symptoms: repairData.symptoms || repairData.trieu_chung,
diagnosis: repairData.diagnosis || repairData.chan_doan,
repair_actions: repairData.repair_actions || repairData.hanh_dong_sua_chua,
replacement_parts: repairData.replacement_parts || repairData.linh_kien_thay_the || [],
technician: repairData.technician || repairData.ky_thuat_vien,
technical_notes: repairData.technical_notes || repairData.ghi_chu_ky_thuat,
estimated_time: repairData.estimated_time || repairData.thoi_gian_du_kien,
actual_time: repairData.actual_time || repairData.thoi_gian_thuc_te,
start_date: repairData.start_date || repairData.ngay_bat_dau,
completion_date: repairData.completion_date || repairData.ngay_hoan_thanh,
delivery_date: repairData.delivery_date || repairData.ngay_giao_khach,
repair_cost: repairData.repair_cost || repairData.chi_phi_sua_chua,
parts_cost: repairData.parts_cost || repairData.tien_linh_kien,
labor_cost: repairData.labor_cost || repairData.tien_cong,
total_cost: repairData.total_cost || repairData.tong_chi_phi,
paid_amount: repairData.paid_amount || repairData.da_thanh_toan,
remaining_amount: repairData.remaining_amount || repairData.con_lai,
repair_status: repairData.repair_status || repairData.trang_thai_sua_chua,
priority: repairData.priority || repairData.do_uu_tien,
warranty_status: repairData.warranty_status || repairData.tinh_trang_bao_hanh,
status: repairData.status || repairData.trang_thai,
created_date: repairData.created_date || repairData.ngay_tao,
updated_date: repairData.updated_date || repairData.ngay_cap_nhat,
assigned_staff: repairData.assigned_staff || repairData.nhan_vien_tiep_nhan,
branch: repairData.branch || repairData.chi_nhanh,
notes: repairData.notes || repairData.ghi_chu,
raw_data: repairData,
headers: headers,
query: query,
webhook_url: req.url,
};
return {
workflowData: [
[
{
json: outputData,
},
],
],
};
}
}
exports.RepairNode = RepairNode;