UNPKG

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
"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;