UNPKG

@anjir/app-novinhub

Version:

نوین هاب - پلتفرم کامل مدیریت شبکه‌های اجتماعی، دایرکت هوشمند، و خودکارسازی پیام‌رسانی

186 lines 9.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.novinhubWebhookTrigger = void 0; const apps_framework_1 = require("@anjir/apps-framework"); const apps_common_1 = require("@anjir/apps-common"); const index_1 = require("../../index"); const common_1 = require("../common"); // تابع کمکی برای بررسی سریع دسترسی API (اختیاری) async function checkApiAccess(auth) { try { const testRequest = { method: apps_common_1.HttpMethod.GET, url: (0, common_1.buildApiUrl)('/account?limit=1'), headers: { 'Authorization': `Bearer ${auth.access_token}`, 'Content-Type': 'application/json', }, }; await apps_common_1.httpClient.sendRequest(testRequest); return true; } catch (error) { console.warn('❌ خطا در دسترسی به API نوین‌هاب:', error); return false; } } // تابع کمکی برای توضیح انواع رویدادها function getEventDescription(type) { switch (type) { case common_1.WEBHOOK_EVENT_TYPES.MESSAGE_CREATED: return 'پیغام جدید (دایرکت) در اکانت کاربر ثبت شده'; case common_1.WEBHOOK_EVENT_TYPES.COMMENT_CREATED: return 'کامنت جدید در اکانت کاربر ثبت شده'; case common_1.WEBHOOK_EVENT_TYPES.AUTOFORM_COMPLETED: return 'فرم دایرکت هوشمند توسط کاربر تکمیل شده'; case common_1.WEBHOOK_EVENT_TYPES.LEED_CREATED: return 'شماره تماس در پیام‌ها دریافت شده'; case common_1.WEBHOOK_EVENT_TYPES.REVALIDATE: return 'درخواست احراز هویت مجدد - وب‌هوک اپلیکیشن غیرفعال شده'; case common_1.WEBHOOK_EVENT_TYPES.ALL: return 'تمام انواع رویدادها'; default: return `رویداد نامشخص: ${type}`; } } // تابع کمکی برای بررسی اینکه آیا رویداد باید پردازش شود یا نه function shouldProcessEvent(eventType, filterType) { // اگر فیلتر روی "همه" تنظیم شده، همه رویدادها پردازش شوند if (filterType === common_1.WEBHOOK_EVENT_TYPES.ALL) { return true; } // اگر نوع رویداد دقیقاً با فیلتر مطابقت داشته باشد return eventType === filterType; } exports.novinhubWebhookTrigger = (0, apps_framework_1.createTrigger)({ auth: index_1.novinhubAuth, name: 'webhook_events', displayName: 'رویداد وب‌هوک نوین‌هاب', description: 'رویدادهای دریافتی از نوین‌هاب (پیام، کامنت، فرم، لید). این تریگر را برای شروع جریان‌های خودکار استفاده کنید.', type: apps_framework_1.TriggerStrategy.APP_WEBHOOK, props: { event_type: apps_framework_1.Property.StaticDropdown({ displayName: 'نوع رویداد', description: 'فقط همین نوع رویداد را عبور بده', required: true, defaultValue: common_1.WEBHOOK_EVENT_TYPES.ALL, options: { disabled: false, options: [ { label: 'همه رویدادها', value: common_1.WEBHOOK_EVENT_TYPES.ALL }, { label: ' پیام جدید (دایرکت)', value: common_1.WEBHOOK_EVENT_TYPES.MESSAGE_CREATED }, { label: ' کامنت جدید', value: common_1.WEBHOOK_EVENT_TYPES.COMMENT_CREATED }, { label: ' فرم تکمیل شده', value: common_1.WEBHOOK_EVENT_TYPES.AUTOFORM_COMPLETED }, { label: ' شماره تماس دریافتی', value: common_1.WEBHOOK_EVENT_TYPES.LEED_CREATED }, { label: ' احراز هویت مجدد', value: common_1.WEBHOOK_EVENT_TYPES.REVALIDATE }, ], }, }), webhook_instructions: apps_framework_1.Property.MarkDown({ value: ` راهنمای سریع تنظیم وب‌هوک در نوین‌هاب: 1) پنل نوین‌هاب > تنظیمات > توسعه‌دهندگان 2) برنامه را **ویرایش** کنید یا **جدید** بسازید 3) مقادیر زیر را وارد کنید: - وضعیت وب‌هوک: فعال - لینک وبهوک زیر را کپی کرده و در پنل نوین‌هاب قرار دهید - نوع احراز هویت: authorization_code, refresh_token - دسترسی‌ها: basic, email, mobile, offline_access, account, post, publish, comment, inbox `, }), }, async onEnable(context) { const selectedEventType = context.propsValue.event_type; const allEvents = [ common_1.WEBHOOK_EVENT_TYPES.MESSAGE_CREATED, common_1.WEBHOOK_EVENT_TYPES.COMMENT_CREATED, common_1.WEBHOOK_EVENT_TYPES.AUTOFORM_COMPLETED, common_1.WEBHOOK_EVENT_TYPES.LEED_CREATED, common_1.WEBHOOK_EVENT_TYPES.REVALIDATE, ]; const eventsToRegister = selectedEventType === common_1.WEBHOOK_EVENT_TYPES.ALL ? allEvents : [selectedEventType]; await context.app.createListeners({ events: eventsToRegister, // در حال حاضر به صورت ثابت؛ در آینده می‌توان بر اساس user_id یکتا کرد identifierValue: 'novinhub', }); }, async onDisable(context) { // Webhook trigger غیرفعال شد }, async run(context) { const body = context.payload.body; const selectedEventType = context.propsValue.event_type; // بررسی ساختار webhook نوین هاب if (body && typeof body === 'object' && body.type && body.user_id !== undefined && body.payload) { // بررسی فیلتر رویداد if (!shouldProcessEvent(body.type, selectedEventType)) { return []; } return [ { type: body.type, user_id: body.user_id, payload: body.payload, timestamp: new Date().toISOString(), event_description: getEventDescription(body.type), filtered_by: selectedEventType, received_at: new Date().toISOString(), webhook_source: 'novinhub_real_event', // فیلدهای اضافی برای راحتی کار is_message: body.type === common_1.WEBHOOK_EVENT_TYPES.MESSAGE_CREATED, is_comment: body.type === common_1.WEBHOOK_EVENT_TYPES.COMMENT_CREATED, is_form_completed: body.type === common_1.WEBHOOK_EVENT_TYPES.AUTOFORM_COMPLETED, is_leed: body.type === common_1.WEBHOOK_EVENT_TYPES.LEED_CREATED, is_revalidation: body.type === common_1.WEBHOOK_EVENT_TYPES.REVALIDATE, }, ]; } return []; }, // test عمداً حذف شد تا UI از webhook-simulation استفاده کند و منتظر رویداد واقعی بماند sampleData: { body: { type: 'message_created', user_id: '12345', payload: { id: 67890, message_id: 'msg_12345', type: 'text', text: 'سلام، چطور می‌توانم محصولاتتان را سفارش دهم؟', date: new Date().toISOString().slice(0, 19) + 'Z', can_delete: 1, can_reaction: 1, social_user_id: 98765, account_id: 54321, conversation_id: 11111, reactions: [], attachment: null, account: { id: 54321, identifier: 'my_business_page_id', name: 'my_business_page', type: 'instagram', profile_url: 'https://instagram.com/my_business_page', picture_url: 'https://example.com/account_pic.jpg', info: 'صفحه تجاری نمونه', direct_subscribe: 1, comment_subscribe: 1, login_required: 0, date: '2024-01-01T00:00:00Z' }, socialUser: { id: 98765, user_id: 'novinhub_user_98765', username: 'customer_user', name: 'مشتری نمونه', image: 'https://example.com/profile.jpg', social: 'instagram' } } } }, }); //# sourceMappingURL=webhook-events.js.map