n8n-nodes-zalo-tools
Version:
Các node hỗ trợ Zalo cho n8n
131 lines • 5.57 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ZaloFriendTrigger = void 0;
const n8n_workflow_1 = require("n8n-workflow");
const zca_js_1 = require("zca-js");
const helper_1 = require("../utils/helper");
let triggerApi;
let reconnectTimer;
class ZaloFriendTrigger {
constructor() {
this.description = {
displayName: 'Zalo Friend Trigger',
name: 'zaloFriendTrigger',
icon: 'file:../shared/zalo.svg',
group: ['trigger'],
version: 1,
description: 'Lắng nghe sự kiện kết bạn trên Zalo',
defaults: {
name: 'Zalo Friend Trigger',
},
inputs: [],
outputs: ["main"],
webhooks: [
{
name: 'default',
httpMethod: 'POST',
responseMode: 'onReceived',
path: 'webhook',
},
],
credentials: [
{
name: 'zaloApi',
required: true,
displayName: 'Zalo Credential to connect with',
},
],
properties: [
{
displayName: 'Event Types',
name: 'eventTypes',
type: 'multiOptions',
options: [
{
name: 'Friend Requests',
value: zca_js_1.FriendEventType.REQUEST,
description: 'Nghe sự kiện yêu cầu kết bạn',
},
],
default: [zca_js_1.FriendEventType.REQUEST],
required: true,
description: 'Friend events to listen for',
},
],
};
this.webhookMethods = {
default: {
async checkExists() {
const webhookData = this.getWorkflowStaticData('node');
return !!webhookData.isConnected;
},
async create() {
const credentials = await this.getCredentials('zaloApi');
if (!credentials) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'No credentials found');
}
try {
const cookieFromCred = JSON.parse(credentials.cookie);
const imeiFromCred = credentials.imei;
const userAgentFromCred = credentials.userAgent;
const zalo = new zca_js_1.Zalo({ imageMetadataGetter: helper_1.getImageMetadata });
triggerApi = await zalo.login({
cookie: cookieFromCred,
imei: imeiFromCred,
userAgent: userAgentFromCred,
});
if (!triggerApi) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'No API instance found. Please make sure to provide valid credentials.');
}
const webhookUrl = this.getNodeWebhookUrl('default');
triggerApi.listener.on('friend_event', async (event) => {
const nodeEventTypes = this.getNodeParameter('eventTypes', 0);
if (nodeEventTypes.includes(event.type)) {
this.helpers.httpRequest({
method: 'POST',
url: webhookUrl,
body: {
friendEvent: event.data,
},
headers: {
'Content-Type': 'application/json',
},
});
}
});
triggerApi.listener.start();
const webhookData = this.getWorkflowStaticData('node');
webhookData.isConnected = true;
webhookData.eventTypes = this.getNodeParameter('eventTypes', 0);
return true;
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Zalo connection failed');
}
},
async delete() {
const webhookData = this.getWorkflowStaticData('node');
if (triggerApi) {
triggerApi.listener.stop();
triggerApi = undefined;
}
if (reconnectTimer) {
clearTimeout(reconnectTimer);
reconnectTimer = undefined;
}
delete webhookData.isConnected;
delete webhookData.eventTypes;
return true;
},
},
};
}
async webhook() {
const req = this.getRequestObject();
return {
workflowData: [this.helpers.returnJsonArray(req.body)],
};
}
}
exports.ZaloFriendTrigger = ZaloFriendTrigger;
//# sourceMappingURL=ZaloFriendTrigger.node.js.map