راهنمای شروع (زبان ساده): اگر تازه با اتوماسیون آشنا میشوید، اول اتوماسیون میزکار چیست و چطور کار میکند؟ را بخوانید. این پست مرجع فنی است (فیلدها، Expression، توکنها) — برای تیم پشتیبانی و پیادهسازی سناریوهای پیشرفته.
با خواندن این راهنما میتوانید…
- ساختار کامل یک قانون (Scope، Event، Expression، Action) را بشناسید
- فیلدهای هر موجودیت را برای نوشتن شرط (Expression) پیدا کنید
- پارامترهای هر نوع اکشن و توکنهای پیامک را ببینید
- با لاگ و تاریخچه، اجرای یک قانون را عیبیابی کنید
این بخش چیست؟
اتوماسیون به شما اجازه میدهد بدون کدنویسی، وقتی روی موجودیتهای میزکار رویدادی رخ میدهد (ایجاد، ویرایش، حذف، تغییر وضعیت فرایند)، شرطی را بررسی کنید و اکشن خودکار اجرا شود: پیامک، تسک، یادداشت، نوتیفیکیشن، ساخت آیتم فرم، وبهوک، تغییر گام فرایند، یا مسدود کردن عملیات.
هر قانون از این بخشها تشکیل شده:
| فیلد |
توضیح |
| Scope |
نوع موجودیت هدف (مثلاً InvoiceSales) |
| EventType |
Created, Updated, Deleted, StatusChanged |
| TrackStepId |
فقط برای StatusChanged — گام فعلی موجودیت |
| ScopeEntityId |
فقط برای FormItem — شناسه فرم (FormId) |
| Expression |
شرط اختیاری (خالی = همیشه اجرا) |
| ActionType + پارامترها |
اکشن و JSON پارامترها |
| OrderIndex |
ترتیب ارزیابی (کمتر = زودتر) |
| IsActive |
فعال / غیرفعال |
از کجا پیدایش کنم؟
| بخش |
مسیر در پنل |
| قوانین |
تنظیمات → فرایندها → قوانین اتوماسیون |
| لاگ اجرا |
تنظیمات → فرایندها → لاگ اتوماسیون |
| تاریخچه زیر موجودیت |
صفحه جزئیات فاکتور، تراکنش، قرارداد، پروژه، کارمند، سند انبار، مخاطب |
| قوانین مرتبط با گام |
تنظیمات → گامهای فرایند → ویرایش گام |
قدمبهقدم — عیبیابی یک قانون
- در صفحهٔ جزئیات رکورد، کارت تاریخچه اتوماسیون را باز کنید تا ببینید کدام قوانین روی آن اجرا شدهاند.
- برای جزئیات کاملتر، لاگ اتوماسیون را باز کنید و بر اساس تاریخ، Scope یا نوع اکشن فیلتر کنید.
- فیلد
matched را ببینید — اگر false است، شرط (Expression) برقرار نبوده.
- اگر
evalError دارد، متن Expression یا پارامترهای اکشن را بررسی کنید.
- وضعیت صف اکشن (
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هنوز نظری ثبت نشده است.