@anjir/app-novinhub
Version:
نوین هاب - پلتفرم کامل مدیریت شبکههای اجتماعی، دایرکت هوشمند، و خودکارسازی پیامرسانی
186 lines • 9.07 kB
JavaScript
;
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