راهنمای سیستم اتوماسیون میزکار

راهنمای سیستم اتوماسیون میزکار

پشتیبانی میزکار
1405 تیر 28

راهنمای شروع (زبان ساده): اگر تازه با اتوماسیون آشنا می‌شوید، اول اتوماسیون میزکار چیست و چطور کار می‌کند؟ را بخوانید. این پست مرجع فنی است (فیلدها، Expression، توکن‌ها) — برای تیم پشتیبانی و پیاده‌سازی سناریوهای پیشرفته.

با خواندن این راهنما می‌توانید…

  • ساختار کامل یک قانون (Scope، Event، Expression، Action) را بشناسید
  • فیلدهای هر موجودیت را برای نوشتن شرط (Expression) پیدا کنید
  • پارامترهای هر نوع اکشن و توکن‌های پیامک را ببینید
  • با لاگ و تاریخچه، اجرای یک قانون را عیب‌یابی کنید

این بخش چیست؟

اتوماسیون به شما اجازه می‌دهد بدون کدنویسی، وقتی روی موجودیت‌های میزکار رویدادی رخ می‌دهد (ایجاد، ویرایش، حذف، تغییر وضعیت فرایند)، شرطی را بررسی کنید و اکشن خودکار اجرا شود: پیامک، تسک، یادداشت، نوتیفیکیشن، ساخت آیتم فرم، وب‌هوک، تغییر گام فرایند، یا مسدود کردن عملیات.

هر قانون از این بخش‌ها تشکیل شده:

فیلد توضیح
Scope نوع موجودیت هدف (مثلاً InvoiceSales)
EventType Created, Updated, Deleted, StatusChanged
TrackStepId فقط برای StatusChanged — گام فعلی موجودیت
ScopeEntityId فقط برای FormItem — شناسه فرم (FormId)
Expression شرط اختیاری (خالی = همیشه اجرا)
ActionType + پارامترها اکشن و JSON پارامترها
OrderIndex ترتیب ارزیابی (کمتر = زودتر)
IsActive فعال / غیرفعال

از کجا پیدایش کنم؟

بخش مسیر در پنل
قوانین تنظیمات → فرایندها → قوانین اتوماسیون
لاگ اجرا تنظیمات → فرایندها → لاگ اتوماسیون
تاریخچه زیر موجودیت صفحه جزئیات فاکتور، تراکنش، قرارداد، پروژه، کارمند، سند انبار، مخاطب
قوانین مرتبط با گام تنظیمات → گام‌های فرایند → ویرایش گام

قدم‌به‌قدم — عیب‌یابی یک قانون

  1. در صفحهٔ جزئیات رکورد، کارت تاریخچه اتوماسیون را باز کنید تا ببینید کدام قوانین روی آن اجرا شده‌اند.
  2. برای جزئیات کامل‌تر، لاگ اتوماسیون را باز کنید و بر اساس تاریخ، Scope یا نوع اکشن فیلتر کنید.
  3. فیلد matched را ببینید — اگر false است، شرط (Expression) برقرار نبوده.
  4. اگر evalError دارد، متن Expression یا پارامترهای اکشن را بررسی کنید.
  5. وضعیت صف اکشن (AutomationActionQueue) را چک کنید تا مطمئن شوید اکشن اجرا شده، نه فقط match شده.

مثال واقعی

برای مسدود کردن تغییر مرحلهٔ فاکتور مشتری بدهکار، قانونی با این مقادیر تعریف می‌شود:

  • Scope: InvoiceSales
  • EventType: StatusChanged
  • Expression: Contact.Balance < 0
  • ActionType: Block با پارامتر message

وقتی فاکتور به مرحلهٔ بعد می‌رود، موتور اتوماسیون Contact.Balance را از context غنی‌شده می‌خواند؛ اگر منفی بود، عملیات با پیام تعیین‌شده متوقف می‌شود و در لاگ matched: true ثبت می‌شود.


اگر این اتفاق افتاد…

علامت در لاگ یعنی چه
matched: false شرط (Expression) برقرار نبوده — رویداد و Scope درست بوده
evalError پر است خطای نحوی یا فیلد نادرست در Expression یا پارامتر اکشن
اکشن در صف مانده مشکل موقتی پردازش صف — دوباره بررسی یا با تیم فنی هماهنگ شود
هیچ ردیفی در لاگ نیست Scope یا EventType با رویداد واقعی مطابقت ندارد؛ یا IsActive = false

قدم بعدی

مسیر فنی (برای پشتیبانی)

بخش مسیر
قوانین /settings/automation-rules
لاگ اجرا /settings/automation-logs

Scopeها (موجودیت هدف)

Scope موجودیت رویدادهای پشتیبانی‌شده
Contact مخاطب Created, Updated, Deleted
InvoiceSales فاکتور فروش همه + StatusChanged
InvoicePurchase فاکتور خرید همه + StatusChanged
TransactionReceipt تراکنش دریافت همه + StatusChanged
TransactionPayment تراکنش پرداخت همه + StatusChanged
TransactionCost تراکنش هزینه همه + StatusChanged
FormItem آیتم فرم همه + StatusChanged (+ ScopeEntityId)
Project پروژه همه + StatusChanged
Employee کارمند همه + StatusChanged
Contract قرارداد همه + StatusChanged
WarehouseDocument سند انبار همه + StatusChanged

متغیرهای مشترک Expression

در همه scopeها این متغیرها در دسترس‌اند:

متغیر معنی
نام موجودیت مبدأ (Invoice, Contact, …) شیء کامل موجودیت رویداد
Entity همان موجودیت (alias)
Scope رشته scope (مثلاً InvoiceSales)
Operation نوع رویداد (Created, …)
CurrentStep / NextStep فقط StatusChanged — شیء TrackStep

غنی‌سازی خودکار context (AutomationContextEnricher)

کلید اضافه‌شده چه زمانی
Contact وقتی موجودیت مبدأ یا مرتبط مشتری دارد
ContactId شناسه مشتری resolve‌شده
ContactTagIds آرایه شناسه تگ‌ها — برای Contains در expression
Invoice تراکنش دارای InvoiceId
Project تراکنش دارای ProjectId (وقتی Contact مستقیم نیست)

فیلدهای موجودیت در Expression (به تفکیک context)

فیلدهای پایه (همه WorkSpaceEntity)

فیلد نوع توضیح
Id int شناسه
WorkSpaceId int میزکار
CreatedOn DateTimeOffset زمان ایجاد
ModifiedOn DateTimeOffset? آخرین ویرایش
CreatedById int ایجادکننده
ModifiedById int? ویرایش‌کننده
IsDeleted bool حذف منطقی

فیلدهای فرایند (WorkSpaceTrackableEntity)

فیلد نوع توضیح
TrackStatus enum Draft, Active, Completed, Canceled
TrackId int? فرایند
TrackStepId int? گام فعلی
AssignToUserId int? مسئول
AssignToRoleId int? نقش مسئول
EntityTitle string عنوان نمایشی

Contact (Scope: Contact)

فیلد نوع
IsAccount bool — شخص / شرکت
Title, FirstName, LastName, Name string
DisplayName string (محاسباتی)
ContactPrefixId int?
NationalCode, EconomicCode string
BirthDate date?
Balance decimal
ParentId, LeadSourceId, AssignToId int?
ExternalCode1, ExternalCode2 string
Description string
Addresses collection — Count در expression
Links collection — موبایل در LinkType == Mobile
ContactInContactTags collection

Context اضافه: ContactTagIds (آرایه int)

Invoice — Scope: InvoiceSales / InvoicePurchase

فیلد نوع
Type Sales / Purchase
Code, PublicToken string
ExternalCode1, ExternalCode2 string
HeaderNote, FooterNote string
TotalItemsAmount, TotalItemsTaxAmount, FinalAmount decimal
TotalCosts, TotalCommission, TotalPayments, TotalReceipts decimal
RemainingAmount decimal (محاسباتی)
Profit, NetProfit decimal?
DueDate, SettlementDate, DeliveryDate DateTimeOffset
AveragePaymentDate, AverageReceiptDate DateTimeOffset?
ContactId, CompanyId, ProjectId, FormItemId int?
SalesPersonId, MarketerId, SalesTeamId int
DeliveryAddressId, DeliveryAddressFull
IsSupplyCompleted bool
InvoiceItems collection
EntityTitle string

Context اضافه: Contact, ContactId, ContactTagIds

Transaction — Scope: TransactionReceipt / Payment / Cost

فیلد نوع
TransactionType enum
ExternalCode1, ExternalCode2 string
TransactionCategoryId, TransactionMethodId int
DueDate, PaidDate DateTimeOffset
Amount decimal
AllocatedAmount, RemainingAmount decimal (محاسباتی)
InvoiceId, ContactId, ProjectId, ContractId, EmployeeId, FormItemId, WarehouseDocumentId int?
ContactFullName, CardNumber, ShebaNumber, Description string
EntityTitle string

Context اضافه: Contact, ContactId, ContactTagIds, Invoice (اگر InvoiceId دارد), Project (اگر ProjectId و بدون Contact مستقیم)

FormItem — Scope: FormItem (+ ScopeEntityId = FormId)

فیلد نوع
FormId int
Code int
PublicCode string — برای لینک عمومی
JsonData string — داده JSON فرم
Related collection ارتباط با Invoice, Contact, …
EntityTitle string

Context اضافه: Contact از Relatedهای فرم

Project — Scope: Project

فیلد نوع
Code int
Title, Description string
ContactId, ManagerId int?
StartDate, EndDate DateTimeOffset?
EntityTitle string

Context اضافه: Contact اگر ContactId دارد

Employee — Scope: Employee

فیلد نوع
Code, ExternalCode string
FirstName, LastName string
DateOfBirth, Gender, IsMarried, NumberOfChildren
EducationDegreeId, JobPositionId, UserId, ManagerId int?
NationalCode, FatherName string
BankId, BankIBAN, BankNumber
BaseDailyWage, BaseMonthlySalary, … long (مزایا)
Email, Mobile1, Mobile2, Tel1, Tel2 string
StateId, CityId, Address, ZipCode
EntityTitle string

Contract — Scope: Contract

فیلد نوع
Code, ExternalCode string
DurationType, Duration
FromDate, ToDate DateTimeOffset
Terms string
Amount decimal
CompanyId, ContactId, ProjectId, EmployeeId, JobPositionId int?
TemplateId, OutputPdfFileId int
EntityTitle string

Context اضافه: Contact اگر ContactId دارد

WarehouseDocument — Scope: WarehouseDocument

فیلد نوع
WarehouseDocumentTypeId int
Type enum (Receipt, Issue, Transfer, …)
Code, ExternalCode string
DocumentDate DateTimeOffset
SourceWarehouseId, DestinationWarehouseId int?
InvoiceId, FormItemId, ContactId int?
ResponsibleUserId int?
Note string
WarehouseDocumentItems collection
EntityTitle string

Context اضافه: Contact اگر ContactId دارد

TrackStep (در CurrentStep / NextStep)

فیلد نوع
Id, TrackId int
Title, Description string
OrderIndex int
TrackStatus enum
Color string
OwnerId, OwnerRoleId int?
AssignmentType FixedOwner, CreatedBy, CreatedByManager
IsReadOnly, IsPrintExportDisabled, IsDescriptionRequired bool

اکشن‌ها و پارامترها

ActionType پارامترهای اصلی
CreateFormItem formId, skipIfExists, jsonData
SendSms message, receptor / receptorFrom: Contact
CreateNote text, fileId
CreateNotification receiverUserId یا receiverFrom, message
CreateTask title, description, dueInHours, assignToId, priority, tags
CallWebhook url, method, headers, body, includeEntity
ChangeTrackStep trackStepId — inline، ارزیابی متوقف می‌شود
Block message — عملیات را در همان تراکنش متوقف می‌کند

توکن‌های پیامک (SendSms)

وقتی receptorFrom: Contact باشد، در message می‌توانید از {{...}} استفاده کنید:

توکن منبع
Contact.FirstName, Contact.LastName, Contact.Name, Contact.DisplayName مخاطب
Contact.Mobile اولین لینک نوع Mobile
Invoice.Code, Invoice.FinalAmount, Invoice.DueDate فاکتور
Form.Title تعریف فرم
FormItem.PublicCode, FormItem.Code آیتم فرم
FormItemLink لینک عمومی ویرایش فرم
Transaction.Amount, Transaction.DueDate تراکنش
Project.Title, Project.Code پروژه

دکمه پیش‌نمایش پیام در modal قانون (برای SendSms) نمونه resolve را نشان می‌دهد.

Expression — نمونه‌های رایج

Invoice.FinalAmount > 5000000
Contact.Balance < 0
Contact.LeadSourceId == null
Contact.Addresses.Count == 0
ContactTagIds.Contains(15)
Invoice.FinalAmount >= 100 && NextStep.Id == 42

Expression خالی = قانون همیشه (در صورت match شدن scope/event) اجرا می‌شود.

  • Task: MZK-2026-055-automation-rules-system

نظرات

0

هنوز نظری ثبت نشده است.

سؤال امنیتی: