اجزای گردش کاری
مؤلفهها بلوکهاییاند که پس از تریگر اضافه میکنید. هر کدام یک کار انجام میدهد — پیامی میفرستد، یک API را فرامیخواند، شرطی را بررسی میکند، رکوردی از Status200 را تغییر میدهد — و سپس یکی از خروجیهایش را به سوی بلوکهایی که به آن وصلاند انتخاب میکند. این صفحه کاتالوگ است: هر بلوک به چه نیاز دارد، چه برمیگرداند و کی هر خروجی را انتخاب میکند.
هنگام ساختن بهندرت لازم است این صفحه باز باشد. تنظیمات هر بلوک با How to use تمام میشود: کاری که بلوک میکند، گامهای پیکربندیاش، نمونهای ساختهشده از گردش کاری خودتان و اشتباههایی که افراد معمولاً میکنند. برای افزودن و وصل کردن بلوکها، نوشتن یک گردش کاری را ببینید.
کدام مؤلفه را به کار ببرم؟
| برای اینکه… | از این استفاده کنید |
|---|---|
| در یک ابزار گفتوگو پیام بگذارید | Slack، Microsoft Teams، Discord، Telegram، IRC یا Mattermost |
| از طریق کارساز ایمیل خودتان ایمیل بفرستید | |
| یک فرد، یک تیم یا فرد آنکال را فرا بخوانید | Paging |
| هر API دیگر یا سرویس خودتان را فرابخوانید | API |
| متن را خلاصه، دستهبندی یا پیشنویس کنید | Generate Text with AI |
| بسته به یک مقدار این مسیر یا آن مسیر را بروید | Conditions |
| بسته به یک مقدار یکی از چند مسیر را بروید | Switch / Case |
| داده را بین دو بلوک تغییر شکل دهید | JSON یا Custom Code |
| پیش از بلوک بعدی صبر کنید | Sleep |
| یک گردش کاری دیگر را شروع کنید | Execute Workflow |
| حوادث، مانیتورها و رکوردهای دیگر را بخوانید یا تغییر دهید | مؤلفههای داده Status200 |
یک بلوک اختصاصی از یک بلوک عمومی بهتر است: بلوک Slack محدودیتهای Slack را میشناسد و یک بلوک رکورد فیلدهای رکورد را، پس خطاها و لاگهای روشنتری از یک بلوک API که همان کار را میکند میگیرید.
هر بلوک چگونه کار میکند
یک بلوک وقتی اجرا میشود که بلوک پیش از آن خروجیای را که به آن وصل است انتخاب کند. تنظیماتش را میخواند، کارش را انجام میدهد و سپس یکی از خروجیهایش را انتخاب میکند. پس از آن فقط بلوکهایی اجرا میشوند که به همان خروجی وصلاند.
یک بلوک یکی از خروجیهایش را انتخاب میکند
- تنظیمات همان چیزی است که پر میکنید. تنظیماتی که با (اختیاری) مشخص شدهاند میتوانند خالی بمانند. تنظیماتی که کمتر به کار میروند زیر فیلدهای بیشتر جمع شدهاند.
- Outputs نقطههای لبه پاییناند. بیشتر بلوکها Success و Error دارند؛ Conditions دارای Yes و No است، و Switch / Case برای هر حالتش یک خروجی و افزون بر آن Default دارد.
- Returns مقدارهاییاند که یک بلوک به بلوکهای بعدی میدهد، مانند Response Body یک API. یک بلوک بعدی هر کدام را با
{{local.components.<block ID>.returnValues.<value ID>}}میخواند؛ دکمه { } در یک تنظیم آن را برایتان درج میکند. متغیرها را ببینید.
بلوکی که Error را انتخاب کند اجرا را ناموفق نمیکند: اجرا مسیر Error را دنبال میکند، یا اگر چیزی به آن وصل نباشد همانجا تمام میشود. در مقابل، یک تنظیم الزامی که خالی مانده، یا تنظیمی که هرگز نمیتواند کار کند، اجرا را با خطا متوقف میکند.
API
به هر نشانی یک درخواست HTTP بفرستید. برای هر روش یک بلوک هست: API Get (JSON)، API Post (JSON)، API Put (JSON)، API Patch (JSON) و API Delete (JSON).
| تنظیم | کاری که میکند |
|---|---|
| URL | نشانیای که فراخوانده میشود، http یا https. |
| Request Body | JSON برای فرستادن. معمولاً فقط درخواستهای POST، PUT و PATCH به آن نیاز دارند. |
| Request Headers | هدرهایی که همراه فرستاده میشوند، مانند یک کلید API. زیر فیلدهای بیشتر. مقدارهایشان در لاگ اجرا پنهان میشوند. |
| خروجی | چه زمانی |
|---|---|
| Success | کارساز با وضعیت 2xx پاسخ داد. |
| Error | درخواست شکست خورد: کارساز در دسترس نبود، یا با وضعیت دیگری پاسخ داد. |
در هر حال، بلوک Response Status، Response Headers و Response Body را برمیگرداند، و وقتی شکست بخورد Error را هم با دلیلش. فیلدی از یک پاسخ JSON را با افزودن نامش به ارجاع بخوانید، مانند {{local.components.api-get-1.returnValues.response-body.id}}.
تغییرمسیرها دنبال نمیشوند، پس بلوک را به نشانیای که پاسخ میدهد نشانه بگیرید. درخواستها از Status200 بیرون میروند: نشانیای که به یک نشانی شبکه خصوصی تحلیل شود رد میشود، مگر اینکه مدیر یک نصب خودمیزبان اجازهاش را بدهد، و اجرا با دلیلش متوقف میشود. دسترسی شبکه خروجی را ببینید.
AI
Generate Text with AI
از یک پرامپت و زمینه JSON اختیاری، یک پاسخ متنی تولید کنید. بلوک از ارائهدهنده پیشفرض LLM پروژه استفاده میکند، یا وقتی پروژه هیچ ندارد از ارائهدهنده سراسری نصب. ارائهدهندگان بهطور متمرکز در تنظیمات پروژه → هوش مصنوعی → ارائهدهندگان LLM پیکربندی میشوند؛ کلیدها و نقطههای پایانی آنها هرگز جزو تنظیمات بلوک نیستند.
| تنظیم | کاری که میکند |
|---|---|
| System Instructions | راهنمایی اختیاری درباره نقش، لحن و محدودیتهای مدل. |
| Prompt | کار. دقیقاً همانطور که مینویسید فرستاده میشود، پس Markdown مشکلی ندارد، و میتواند متغیرها و مقدارهای بلوکهای قبلی را در خود داشته باشد. |
| Context | JSON اختیاری که آگاهانه همراه میفرستید. پس از یک نشانگر صریح پایان پیام افزوده میشود و داده غیرقابلاعتماد به حساب میآید. |
| Temperature | زیر فیلدهای بیشتر. میزان تنوع از 0 تا 1؛ پیشفرض 0.2 است، برای خودکارسازی پیشبینیپذیر. مدلهای کنونی Claude، یعنی Opus 4.7 و پس از آن و همه مدلهای Claude 5، خودشان نمونهبرداری را انتخاب میکنند: Status200 Temperature را از درخواستهای آنها حذف میکند، پس روی آنها اثری ندارد. |
| Maximum Output Tokens | زیر فیلدهای بیشتر. از 1 تا 4096؛ پیشفرض 1024 است. |
System Instructions، Prompt و Context سریالشده روی هم به ۵۰٬۰۰۰ نویسه محدودند. تصویری که به شکل base64 در آنها جاسازی شده، مانند نماگرفت یک مانیتور مصنوعی در توضیحات یک حادثه، پیش از اندازهگیری با یادداشت کوتاهی مانند [image omitted: PNG, 340 KB] جایگزین میشود، چون مدل متن میخواند، نه تصویر. لاگ اجرا میگوید چه چیزی کنار گذاشته شد. درخواست به ارائهدهنده حداکثر ۶۰ ثانیه طول میکشد و یک بار تلاش میشود. در هر پروژه حداکثر سه درخواست هوش مصنوعی گردش کاری میتوانند همزمان اجرا شوند.
این بلوک Response (متن تولیدشده)، Provider و Model (آنچه پاسخ داد)، Total Tokens و Completion Tokens (مصرفی که ارائهدهنده گزارش کرد)، LLM Log ID (مدخل این فراخوانی در لاگهای هوش مصنوعی) و Error را برمیگرداند.
Success را به بلوکهایی که از پاسخ استفاده میکنند وصل کنید و Error را به یک جایگزین: شکستهای اعتبارسنجی، دسترسی، ارائهدهنده، بودجه، صورتحساب و مهلت زمانی همه آن مسیر را میروند. بلوک هیچ ابزاری نمیفرستد، پس مدل نمیتواند خودش Status200 را پرسوجو کند، APIها را فرابخواند یا داده را تغییر دهد.
خروجی مدل متنی غیرقابلاعتماد است. پیش از رسیدنش به مشتریان بازبینیاش کنید و هرگز اجازه ندهید متن آزاد هوش مصنوعی بهتنهایی درباره یک کنش ویرانگر تصمیم بگیرد. برای اینکه چه چیزی به ارائهدهنده فرستاده میشود، چه چیزی لاگ میشود و هزینهاش چیست، مؤلفههای هوش مصنوعی را ببینید.
Slack
از طریق یک وبهوک ورودی در یک کانال Slack پیام بگذارید.
| تنظیم | کاری که میکند |
|---|---|
| Slack Incoming Webhook URL | وبهوک کانالی که باید در آن پیام گذاشته شود. باید با https://hooks.slack.com/services/ شروع شود. راهنمای Slack برای ساختن یکی چند دقیقه طول میکشد. |
| Message Text | متنی که فرستاده میشود. دقیقاً همانطور که مینویسید فرستاده میشود، پس از قالببندی خود Slack استفاده کنید: *bold*، _italic_، ~strikethrough~ و `<https://example.com |
Success وقتی فعال میشود که Slack پیام را پذیرفت، و Error وقتی Slack آن را رد کرد، با دلیل Slack در Error. این بلوکها از طریق وبهوک تنظیماتشان پیام میگذارند، نه از طریق اتصال Slack پروژه شما.
Microsoft Teams
در یک کانال Microsoft Teams پیام بگذارید. نام این بلوک Send Message to Teams است.
| تنظیم | کاری که میکند |
|---|---|
| Teams Incoming Webhook URL | وبهوک کانالی که باید در آن پیام گذاشته شود، یک نشانی https روی office.com، office365.com، logic.azure.com یا environment.api.powerplatform.com. راهنمای Microsoft نشان میدهد چگونه با Teams Workflows یکی بسازید. |
| Message Text | متنی که فرستاده میشود. پیامی بزرگتر از آنچه یک وبهوک ورودی میپذیرد (حدود ۱۲٬۰۰۰ نویسه، به شکلی که فرستاده میشود اندازهگیری میشود) بریده میشود و با "… (обрезано — полный текст в Status200)" پایان مییابد. |
Discord
از طریق یک وبهوک ورودی در یک کانال Discord پیام بگذارید.
| تنظیم | کاری که میکند |
|---|---|
| Discord Incoming Webhook URL | وبهوک کانال، یک نشانی https روی discord.com یا discordapp.com. |
| Message Text | متنی که فرستاده میشود. پیامی بیش از ۲٬۰۰۰ نویسه، که حد Discord است، بریده میشود و با "… (обрезано — полный текст в Status200)" پایان مییابد. |
Telegram
با یک ربات به یک گفتوگوی Telegram پیام بفرستید.
| تنظیم | کاری که میکند |
|---|---|
| Telegram Bot Token | توکنی که BotFather به ربات شما داد، مانند 123456789:ABCdef…. توکنی با هر شکل دیگری اجرا را متوقف میکند، بدون اینکه توکن در لاگ نوشته شود. |
| Chat ID | گفتوگویی که باید در آن پیام گذاشته شود: شناسه آن، یا @username یک کانال. اول ربات را به گروه یا کانال اضافه کنید. برای نوشتن به یک فرد، آن فرد باید گفتوگویی را با ربات شروع کرده باشد. |
| Message Text | متنی که فرستاده میشود. پیامی بیش از ۴٬۰۹۶ نویسه، که حد Telegram است، بریده میشود و با "… (обрезано — полный текст в Status200)" پایان مییابد. |
وقتی Telegram پیام را رد کند، Error با دلیل Telegram فعال میشود.
IRC
در یک کانال IRC روی هر شبکه IRC پیام بگذارید: Libera.Chat، OFTC یا کارساز خودتان. IRC وبهوک ندارد، پس بلوک خودش به کارساز وصل میشود، وارد کانال میشود، پیام را میفرستد و دوباره بیرون میرود.
| تنظیم | کاری که میکند |
|---|---|
| IRC Server | نام میزبان کارساز، مانند irc.libera.chat. فقط نام: بدون ircs:// و بدون درگاه. |
| Channel | کانالی که باید در آن پیام گذاشته شود، مانند #ops. باید یک کانال باشد: نام مستعاری که اینجا تایپ شود به جای گرفتن پیام خصوصی رد میشود. |
| Message Text | متنی که فرستاده میشود. هر سطر بهعنوان یک پیام IRC جداگانه فرستاده میشود، و سطر بلند شکسته میشود تا جا شود. یک پیام حداکثر به شکل ۱۵ سطر IRC فرستاده میشود: بلندتر از آن بریده میشود و سطر آخرش همین را میگوید. IRC مارکداون ندارد، پس متن همانطور که نوشته شده فرستاده میشود؛ کدهای قالببندی خود IRC، مانند پررنگ و رنگها، کار میکنند. |
زیر فیلدهای بیشتر:
| تنظیم | کاری که میکند |
|---|---|
| Nickname | پیام از طرف چه کسی است. پیشفرض Status200 است. اگر نام مستعار گرفته شده باشد، بلوک آن را با یک زیرخط یا عدد افزوده امتحان میکند، و سپس برای کارسازی که نام مستعار بلندتری نمیپذیرد، با چنین نویسهای به جای آخرین نویسهها. |
| Port | درگاه کارساز. پیشفرض 6697 است، یا 6667 وقتی Disable TLS روشن باشد. |
| Disable TLS | بلوک از طریق TLS وصل میشود و گواهی کارساز را بررسی میکند. این را فقط برای کارسازی روشن کنید که TLS ارائه نمیدهد؛ آنوقت گذرواژه، اگر باشد، رمزنگارینشده فرستاده میشود. برای اعتماد به گواهیای از مرجع صدور گواهی خودتان، یک نصب خودمیزبان به جای آن NODE_EXTRA_CA_CERTS را تنظیم میکند. |
| Channel Key | کلید کانالی که کلید دارد (حالت +k). |
| Send Without Joining | بدون ورود به کانال پیام میگذارد، تا کانال آمدن و رفتن بلوک را نبیند. فقط جایی کار میکند که کانال پیامهای بیرونی را بپذیرد (بدون حالت +n). |
| Server Password | گذرواژهای که کارساز یا بانسر شما هنگام اتصال میخواهد. |
| SASL Username و SASL Password | در شبکههایی که از SASL استفاده میکنند وارد حساب خود شوید، مانند Libera.Chat که آن را برای اتصال از برخی نشانیهای ابری و VPN الزامی میکند. هر دو را پر کنید یا هیچکدام را. |
Success وقتی فعال میشود که کارساز همه سطرها را پذیرفته باشد. بلوک این را با خواستن پاسخ به یک ping پس از سطر آخر بررسی میکند: کارساز به ترتیب پاسخ میدهد، پس اگر پیام رد شده باشد، رد شدن زودتر میرسد. بانسری مانند ZNC خودش به ping پاسخ میدهد، پس بلوک یک ثانیه بیشتر برای پاسخ شبکه پشت آن گوش میدهد.
Error وقتی فعال میشود که کارساز در دسترس نباشد، اتصال، نام مستعار، یک گذرواژه یا کانال را رد کند، یا پیام را رد کند. دلیل را منتقل میکند، اگر کارساز کلماتی داده باشد با کلمات خود کارساز. در مقابل، نبود IRC Server، Channel یا Message Text، یا تنظیمی که هرگز نمیتوانست کار کند، اجرا را متوقف میکند.
هر اجرای بلوک یک اتصال جداگانه است، و شبکههای IRC محدود میکنند که یک نشانی چند بار میتواند وصل شود: رگباری از پیامها ممکن است با دلیلی مانند "Reconnecting too fast" رد شود و مانند هر رد شدن دیگری Error را بگیرد. برای گردش کاریای که ممکن است در هر دقیقه بارها فعال شود، آنچه باید بگوید را در یک پیام جمع کنید، یا از طریق کارساز خودتان بفرستید.
گذرواژهها را در متغیرهای سراسری راز نگه دارید و در تنظیم از متغیر استفاده کنید؛ به هر حال در لاگهای اجرا پنهان میشوند. اتصال به نشانیهای حلقهبرگشت (localhost، 127.0.0.1)، پیوند-محلی و فراداده ابری رد میشود. در Status200 Cloud، کارسازی روی یک نشانی شبکه خصوصی، یا نامی که به چنین نشانیای تحلیل شود، هم رد میشود. نصبهای خودمیزبان میتوانند به یک کارساز IRC در شبکه خودشان برسند، مگر اینکه DATA_SOURCE_BLOCK_PRIVATE_ADDRESSES روی true تنظیم شده باشد.
Mattermost
از طریق یک وبهوک ورودی در یک کانال Mattermost پیام بگذارید، روی Mattermost Cloud یا کارساز خودتان.
| تنظیم | کاری که میکند |
|---|---|
| Mattermost Incoming Webhook URL | وبهوکی که پیام از طریق آن گذاشته میشود، همانطور که Mattermost آن را زیر Integrations، Incoming Webhooks نشان میدهد: نشانی کارساز، سپس /hooks/ و شناسه وبهوک. راهنمای Mattermost نشان میدهد چگونه یکی بسازید. |
| Message Text | متنی که فرستاده میشود. دقیقاً همانطور که مینویسید فرستاده میشود، و Mattermost مارکداون را میفهمد: **bold**، _italic_، پیوندها، جدولها و ایموجیهایی مانند :rotating_light:. در یک پیام Mattermost حداکثر ۱۶٬۳۸۳ نویسه جا میشود: پیام بلندتر به همین اندازه بریده میشود و با "… (обрезано — полный текст в Status200)" پایان مییابد. |
زیر فیلدهای بیشتر:
| تنظیم | کاری که میکند |
|---|---|
| Channel | به جایی غیر از کانال خود وبهوک پیام میگذارد: نام کانال، همانطور که در نشانیاش دیده میشود، مانند town-square، یا @ و یک نام کاربری برای پیام مستقیم. وبهوکی که به کانال خودش قفل شده باشد، هر کانال دیگری را رد میکند. |
| Username | نامی که پیام با آن گذاشته میشود. Mattermost فقط جایی از آن استفاده میکند که یک مدیر سیستم به یکپارچهسازیها اجازه داده باشد نامهای کاربری را بازنویسی کنند. |
| Icon URL | تصویری که پیام با آن گذاشته میشود، یک نشانی https. Mattermost فقط جایی از آن استفاده میکند که یک مدیر سیستم به یکپارچهسازیها اجازه داده باشد تصویرهای پروفایل را بازنویسی کنند. |
Success وقتی فعال میشود که Mattermost پیام را پذیرفت. Error وقتی فعال میشود که کارساز در دسترس نباشد یا Mattermost پیام را رد کند، و دلیل Mattermost را منتقل میکند. در مقابل، نبود Mattermost Incoming Webhook URL یا Message Text، نشانیای که متعلق به یک وبهوک ورودی نیست، یا تنظیمی که هرگز نمیتوانست کار کند، اجرا را متوقف میکند.
نشانی وبهوک را در یک متغیر سراسری راز نگه دارید: هر کسی که آن را داشته باشد میتواند در کانال پیام بگذارد. به هر حال در لاگهای اجرا پنهان میشود. پیام از Status200 بیرون میرود، و تغییرمسیر دنبال نمیشود. وبهوکی روی نشانی حلقهبرگشت (localhost، 127.0.0.1)، پیوند-محلی یا فراداده ابری رد میشود، و همینطور وبهوکی روی یک نشانی شبکه خصوصی، مگر اینکه یک مدیر نصب خودمیزبان با ALLOW_PRIVATE_NETWORK_WEBHOOKS یا PRIVATE_NETWORK_WEBHOOK_ALLOWLIST اجازهاش را بدهد. دسترسی به شبکه خصوصی را ببینید.
از طریق یک کارساز SMTP که روی بلوک تعیین میکنید ایمیل بفرستید. نام این بلوک Send Email است.
| تنظیم | کاری که میکند |
|---|---|
| From Email | فرستنده، برای نمونه Alerts <alerts@company.com>. |
| To Email | نشانی گیرنده. چند نشانی را با ویرگول یا نقطهویرگول جدا کنید. |
| Subject | سطر موضوع. |
| Email Body | پیام، که به شکل HTML فرستاده میشود. |
| SMTP HOST و SMTP Port | کارساز ایمیلی که باید به آن وصل شد. |
| SMTP Username و SMTP Password | اختیاری. هر دو را پر کنید یا هیچکدام را. |
| Use Implicit TLS | برای TLS ضمنی روشن کنید، معمولاً روی درگاه ۴۶۵. برای STARTTLS خاموش بگذارید، معمولاً روی درگاه ۵۸۷. |
Success وقتی فعال میشود که کارساز SMTP پیام را پذیرفت. Error وقتی فعال میشود که میزبان SMTP رد شود، کارساز در دسترس نباشد یا پیام را رد کند، و پیام خطا را منتقل میکند. در مقابل، نبود To Email، From Email، SMTP HOST یا SMTP Port اجرا را متوقف میکند.
بلوک مستقیم به کارساز تنظیماتش وصل میشود. از تنظیمات SMTP پروژه شما یا کارساز ایمیل خود Status200 استفاده نمیکند، و ایمیلهایی که میفرستد در لاگهای اعلان نمیآیند. برای بررسی کاری که کرد، به اجراهای گردش کاری نگاه کنید.
اتصال به نشانیهای حلقهبرگشت (localhost، 127.0.0.1)، پیوند-محلی و فراداده ابری رد میشود. در Status200 Cloud، یک میزبان SMTP روی نشانی شبکه خصوصی، یا نامی که به چنین نشانیای تحلیل شود، هم رد میشود. نصبهای خودمیزبان میتوانند به یک کارساز ایمیل در شبکه خودشان برسند، مگر اینکه DATA_SOURCE_BLOCK_PRIVATE_ADDRESSES روی true تنظیم شده باشد. میزبان ردشده خروجی Error را میگیرد و چیزی فرستاده نمیشود.
Paging
از یک گردش کاری افراد را فرا بخوانید: هر فرد، مطابق قواعد آنکال خودش، تماس، پیامک، اعلان فشاری یا ایمیل دریافت میکند تا وقتی کسی تأیید کند. برای هر روشِ گفتنِ اینکه چه کسی فراخوانده شود یک بلوک هست. در پنل افزودن مؤلفه عبارت page را جستجو کنید.
| بلوک | چه کسی را فرا میخواند |
|---|---|
| Page Users | افرادی که نام میبرید. |
| Page a Team | همه اعضای یک تیم. |
| Page Whoever Is On Call | کسی که هنگام اجرای بلوک در یک زمانبندی آنکال، آنکال است. |
| Page an On-Call Policy | یک سیاست آنکال، که از طریق قواعد تشدیدش فرا میخواند و همانطور که تنظیم شده تکرار میشود. |
سه بلوک اول همه کسانی را که نام میبرند همزمان فرا میخوانند و پس از آن کس دیگری را نه. برای تشدید، از Page an On-Call Policy استفاده کنید.
برای اینکه فقط وقتی شرطی برقرار است فراخوانی شود، If / Else را پیش از بلوک بگذارید و خروجیای را که باید فرا بخواند به آن وصل کنید. با بیش از دو مسیر، Switch / Case برای هر مقدار یک مسیر را میرود و هر مسیر میتواند کس دیگری را فرا بخواند.
فراخواندن فرد آنکال، اما فقط برای رخدادهای بحرانی
هنگام ساختن یک گردش کاری، قالبهای زیر آنکال همین را آماده دارند، و یکی دیگر که با Switch / Case بر اساس شدت فرا میخواند. اینکه چه کسی فراخوانده شود را قالب به شما واگذار میکند: گردش کاری در سازنده باز میشود و هر بلوک فراخوانی Click to set up را نشان میدهد.
| تنظیم | کاری که میکند |
|---|---|
| Users، Teams، On-Call Schedules یا On-Call Policies | چه کسی فراخوانده شود: هر بلوک همان تنظیمی را دارد که با نامش جور است. با نام انتخاب کنید، یا برای افزودن مقداری از یک بلوک قبلی، { } را در انتهای ردیف بزنید. یک مقدار میتواند یک یا چند شناسه داشته باشد و برای Users یک نشانی ایمیل هم. |
| Page About | فراخوانی درباره چیست: A new alert، An incident یا An alert. تأیید فراخوانی، آن را هم تأیید میکند. |
| Title و Message | برای یک هشدار جدید. Status200 از آنها یک هشدار میسازد و آن هشدار مثل هر هشدار دیگری میان هشدارهای شما میماند. |
| Incident ID یا Alert ID | برای رخداد یا هشداری که از پیش وجود دارد، معمولاً همانی که گردش کاری با آن شروع شده است: {{local.components.incident-on-create-1.returnValues.model._id}}. |
| Severity | برای یک هشدار جدید، زیر فیلدهای بیشتر. تعیین میکند کدامیک از قواعد آنکال هر فرد او را فرا بخواند. اگر خالی بماند، شدیدترینِ پروژه است. |
بلوکی که به گردش کاریای افزوده میشود که با یک رخداد یا هشدار شروع میشود، از پیش طوری تنظیم شده که درباره همان رکورد فرا بخواند، پس فقط میپرسد چه کسی فراخوانده شود.
Success همین که دستکم یک نفر فراخوانده شود یا یک سیاست شروع شود اجرا میشود. Error وقتی اجرا میشود که هیچکس فراخوانده نشده باشد، و مقدار Error بلوک دلیلش را میگوید، مثلاً اینکه در زمانبندی کسی آنکال نیست. Summary در یک جمله میگوید چه کسی فراخوانده شد و چه کسی کنار گذاشته شد، آماده برای فرستادن به یک کانال، و Paged Users افراد فراخواندهشده را فهرست میکند.
کسی که غایب است فراخوانده نمیشود: به جای او کسی فراخوانده میشود که بازنویسی کاربری او برای پوشش نام برده است. یک فراخوانی حداکثر ۱۰۰ فرد، تیم و زمانبندی را نام میبرد. هر فرد چگونه دریافت میکند را ببینید.
فراخوانیای که سیاست آنکالی پشتش نیست، کنار اجراهای سیاستها با نام فراخوانی مستقیم فهرست میشود: در گزارشهای آنکال رخداد یا هشدار، در فید آن و کانال Slack یا Microsoft Teams آن، و در گزارشهای هر فرد فراخواندهشده. این فراخوانی ۳۰ دقیقه باز میماند، و پس از آن تا وقتی هنوز فراخوانیای در حال ارسال است. اگر تا آن زمان کسی تأیید نکرده باشد، بدون فراخواندن کس دیگری پایان مییابد.
Custom Code
وقتی بلوکهای دیگر نمیتوانند کاری را که لازم دارید انجام دهند، چند خط JavaScript اجرا کنید. نام این بلوک Run Custom JavaScript است.
| تنظیم | کاری که میکند |
|---|---|
| JavaScript Code | کد شما. آنچه با return برمیگرداند Value بلوک میشود. میتواند از await استفاده کند. |
| Arguments | یک شیء JSON از مقدارها برای کد، که کد آنها را به شکل args میخواند. متغیرها و مقدارهای بلوکهای قبلی را اینجا بگذارید؛ خود کد نمیتواند آنها را بخواند. |
{ "title": "{{local.components.incident-on-create-1.returnValues.model.title}}" }const words = args.title.split(" ");
return {
shortTitle: words.slice(0, 5).join(" "),
wordCount: words.length,
};یک بلوک بعدی عنوان کوتاه را به شکل {{local.components.javascript-1.returnValues.returnValue.shortTitle}} میخواند.
کد در یک محیط ایزوله اجرا میشود که args، console.log (که در لاگ اجرا نوشته میشود)، axios برای درخواستهای HTTP، crypto و sleep دارد. هیچ سامانه پرونده و هیچ فرایندی ندارد، و درخواستهایش تابع همان قواعد نشانی بلوک API هستند. بهطور پیشفرض ۵ ثانیه وقت دارد؛ یک نصب خودمیزبان آن را با WORKFLOW_SCRIPT_TIMEOUT_IN_MS تغییر میدهد.
Success با Value برگرداندهشده فعال میشود، و Error وقتی کد خطا پرتاب کند یا وقتش تمام شود، با پیام در Error. برای اسکریپتهای سنگینتر به جای آن از یک رانبوک استفاده کنید.
JSON
بین متن و JSON تبدیل کنید، یا دو شیء JSON را ترکیب کنید.
| بلوک | چه میگیرد | چه برمیگرداند |
|---|---|---|
| JSON to Text | JSON، یک شیء | Text: شیء به شکل یک رشته. وقتی بلوک بعدی متن انتظار دارد کارآمد است. |
| Text to JSON | Text، که میتواند چندخطی باشد | JSON: شیء تجزیهشده، تا بتوانید فیلدهایش را بخوانید. روی JSONی که به شکل متن رسیده به کارش ببرید. |
| Merge JSON | JSON 1 و JSON 2 | JSON: یک شیء با کلیدهای هر دو. جایی که هر دو کلیدی دارند، JSON 2 برنده است. |
Text to JSON وقتی متن JSON نباشد Error را میگیرد. نبود یک ورودی، یا ورودیای برای Merge JSON که شیء نباشد، اجرا را متوقف میکند.
Conditions
روی یک مقایسه انشعاب بگیرید. در پنل افزودن مؤلفه نام این بلوک If / Else است، زیر Popular. برای انتخاب میان بیش از دو مسیر، از Switch / Case استفاده کنید.
تنظیماتش مانند یک جمله خوانده میشود: اگر مقداری که بررسی میشود مقایسه مقداری که با آن مقایسه میشود، روی Yes ادامه بده، وگرنه روی No. زیر تنظیمات، شرط با کلمات بازخوانی میشود تا ببینید همان چیزی را میگوید که منظور شماست. روی بوم هم بلوک شرطش را نشان میدهد، برای نمونه اگر environment is equal to “production”.
| تنظیم | کاری که میکند |
|---|---|
| مقدار مورد بررسی | معمولاً مقداری از یک بلوک قبلی. برای انتخابش در فیلد { } را بزنید، یا {{ را تایپ کنید. |
| مقایسه | نحوه مقایسه، با کلمات. مقایسهها در ادامه آمدهاند. |
| مقایسه با | آنچه با آن مقایسه میشود، که به همان روش تایپ یا انتخاب میشود. خالی است، خالی نیست، درست است و نادرست است از آن استفاده نمیکنند. |
| مقایسه بهصورت | زیر مقایسه جمع شده است: متن، شماره یا درست / نادرست. برای مرتب کردن تاریخهایی که به شکل 2026-10-01 نوشته شدهاند متن را انتخاب کنید، یا برای برابر کردن 200 و 200.0 شماره را. |
مقایسهها:
- برابر است با و برابر نیست با؛
- برای متن: شامل است، شامل نیست، شروع میشود با و پایان مییابد با؛
- برای عددها: بزرگتر است از، بزرگتر یا مساوی است با، کوچکتر است از و کوچکتر یا مساوی است با؛
- خالی است و خالی نیست، که بررسی میکنند آیا اصلاً مقداری هست؛
- درست است و نادرست است.
مقایسههای عددی عددها را مقایسه میکنند و مقایسههای متنی متن را، پس بهندرت به مقایسه بهصورت نیاز دارید. مقدارها اینگونه مقایسه میشوند:
- بهعنوان متن، بزرگی و کوچکی حروف مهم است:
Errorهمانerrorنیست. - بهعنوان عدد، متنی که عدد نیست
0حساب میشود. تنظیمات به چنین مقدار تایپشدهای اشاره میکنند. - بهعنوان درست یا نادرست، فقط
trueدرست حساب میشود. - خالی است با هیچ چیز، متن خالی، فهرست یا شیء خالی، یا مقداری که بلوک قبلی نداشت، مانند فیلدی که وبهوک نفرستاد، برقرار میشود.
0وfalseمقدارند، پس خالی نیستند.
وقتی شرط برقرار باشد Yes اجرا میشود و وقتی نباشد No. بلوکهایی که پیش از گرفتن این نامها توسط تنظیمات راهاندازی شدهاند دقیقاً مثل قبل اجرا میشوند. یک گزینه قدیمی دیگر ارائه نمیشود: مقایسه یک مقدار بهعنوان تهی (Null) یا تعریفنشده، که محتوای مقدار را نادیده میگرفت. بلوکی که هنوز از آن استفاده میکند وقتی بازش کنید همین را میگوید؛ برای بررسی نبود یک مقدار، خالی است را انتخاب کنید.
Switch / Case
بسته به یک مقدار، یکی از چند مسیر را بروید. در پنل افزودن مؤلفه نام این بلوک Switch / Case است، زیر Popular.
این بلوک یک مقدار را بهترتیب از بالا با هر یک از حالتهایش مقایسه میکند و از اولین حالتی که مطابقت داشته باشد ادامه میدهد، یا اگر هیچکدام مطابقت نداشته باشد از Default. فقط یک مسیر اجرا میشود: مقداری که با دو حالت مطابقت دارد، اولی را میگیرد.
| تنظیم | کاری که میکند |
|---|---|
| مقدار مورد بررسی | مقداری که هر حالت با آن مقایسه میشود، معمولاً از یک بلوک قبلی. برای انتخابش در فیلد { } را بزنید، یا {{ را تایپ کنید. |
| Cases | یک مقایسه و یک مقدار برای هر مسیر، که از بالا بررسی میشوند. برای افزودن حالتی دیگر افزودن حالت را بزنید، و برای جابهجا کردن یک حالت، آن را از دستگیرهاش بکشید. هر بلوک حداکثر ۲۵ حالت دارد. |
هر حالت یک خروجی روی بوم است که به نام مقدارش نامیده میشود: حالتی که برابر است با production را میپرسد خروجی production است، و حالتی که بزرگتر است از 500 را میپرسد is greater than 500 است. Default همیشه آخرین خروجی است. هر خروجی را به چیزی وصل کنید که باید بعد از آن اجرا شود.
یک حالت دقیقاً وقتی مطابقت دارد که یک If / Else با همان مقایسه و مقدار Yes را بگیرد: مقایسهها هماناند و مقدارها هم به همان روش مقایسه میشوند. مقایسه بهصورت زیر حالتها جمع شده است و برای هر حالت یک انتخاب دارد.
وقتی حالتی را که اتصال دارد حذف میکنید، تنظیمات نشان میدهند که به کدام بلوکها میرسید، و بازگرداندن حالت را برمیگرداند. با ذخیره کردن، اتصال همراه با حالت حذف میشود. بررسیهای سازنده به حالتی که چیزی به آن وصل نیست اشاره میکنند، و به حالتی که هرگز انتخاب نمیشود چون حالتی بالاتر همان را میپرسد.
اجرایی که خروجیای را میگیرد که چیزی به آن وصل نیست، از جمله Default، همانجا بدون خطا تمام میشود. زبانه گامها اجرا میگوید کدام حالت مطابقت داشت و چرا، برای نمونه Case 2 matched: the value is equal to “staging”. Case 1 did not.
Sleep
اجرا را پیش از بلوک بعدی مکث دهید، تا به سامانهای دیگر لحظهای برای رسیدن فرصت دهید یا بعداً پیگیری کنید.
Days، Hours، Minutes و Seconds با هم جمع میشوند. طولانیترین انتظار ۳۰ روز است: انتظار طولانیتر به ۳۰ روز کوتاه میشود و لاگ اجرا همین را میگوید.
در حین انتظار، اجرا با وضعیت در انتظار کنار گذاشته میشود و وقتی زمان تمام شد دوباره برداشته میشود، پس یک انتظار طولانی چیزی را معطل نمیکند. اجرایی که گردش کاریاش در این میان خاموش یا بایگانی شده باشد، هنگام بیدار شدن لغو میشود. اجرای آزمایشیای که وقتی گردش کاری خاموش بود شروع شده، به خاطر خاموش بودن لغو نمیشود.
Log
مقداری را در لاگ اجرا بنویسید. جای دیگری را تغییر نمیدهد، و همین آن را سادهترین راه برای دیدن محتوای یک مقدار میکند.
Value همان چیزی است که نوشته میشود. میتواند چندخطی باشد و مقدارهای بلوکهای قبلی را در خود داشته باشد، مانند {{local.components.webhook-1.returnValues.request-body}}. بلوک پس از پایان کارش Out را میگیرد.
Execute Workflow
یک گردش کاری دیگر را در همان پروژه شروع کنید. گردش کاری شما بدون انتظار برای پایان آن یکی ادامه میدهد.
| تنظیم | کاری که میکند |
|---|---|
| Workflow | گردش کاریای که شروع میشود. باید فعال باشد و، برای گرفتن آرگومانها، یک تریگر Manual داشته باشد. |
| Arguments | JSON برای فرستادن همراه. تریگر Manual گردش کاری دیگر هر کلید را بهعنوان مقداری جداگانه منتقل میکند: با {"customerId": "42"}، آن گردش کاری {{local.components.manual-1.returnValues.customerId}} را میخواند. |
Out بهمحض اینکه گردش کاری دیگر در صف قرار بگیرد فعال میشود. Error وقتی فعال میشود که این ممکن نباشد: وجود ندارد، خاموش یا بایگانیشده است، یا شروع کردنش حلقه میسازد.
از آن برای اشتراک منطق مشترک استفاده کنید: یک گردش کاری «پیام گذاشتن در کانال حادثه» را یک بار بسازید و از هر گردش کاریای که به آن نیاز دارد شروعش کنید. زنجیرهای از گردشهای کاری که یکدیگر را شروع میکنند نمیتواند به خودش برگردد و حداکثر ۱۰ سطح عمق دارد. پیکربندی و ایمنی را ببینید.
مؤلفههای داده Status200
برای هر نوع رکورد در Status200 (مانیتورها، حوادث، هشدارها، صفحههای وضعیت، سیاستهای آنکال و بسیاری دیگر)، پنل افزودن مؤلفه این مؤلفهها را دارد: زیر Status200 resources روی نوع رکورد کلیک کنید (Browse all resources آنهایی را که نشان داده نمیشوند دارد)، یا نام نوع را جستجو کنید. هر عنوان از نوع رکورد ساخته میشود، پس مجموعه Monitor این است:
| مؤلفه | کاری که میکند |
|---|---|
| Find One Monitor | یک رکورد مطابق با پرسوجو را میخواند. |
| Find Many Monitors | فهرستی از رکوردهای مطابق با پرسوجو را میخواند. |
| Create One Monitor | یک رکورد را از یک شیء JSON اضافه میکند. |
| Create Many Monitors | چند رکورد را از یک آرایه JSON اضافه میکند. |
| Update One Monitor | دادهای را که باید نوشته شود روی یک رکورد مطابق اعمال میکند. |
| Update Many Monitors | دادهای را که باید نوشته شود روی رکوردهای مطابق، تا Limit، اعمال میکند. |
| Delete One Monitor | یک رکورد مطابق را حذف میکند. |
| Delete Many Monitors | رکوردهای مطابق را، تا Limit، حذف میکند. |
همین مجموعه چهار تریگر هم به شما میدهد — On Create Monitor، On Update Monitor، On Create or Update Monitor و On Delete Monitor. تریگرها را ببینید.
یک نوع فقط مؤلفههایی را ارائه میدهد که مدلش اجازه میدهد. یک نوع فقطخواندنی دو مؤلفه Find دارد و هیچ چیز دیگر، پس اگر Delete One Monitor را در پنل پیدا نکردید، آن نوع اجازهاش را نمیدهد.
یک گردش کاری اینگونه داده Status200 را میخواند و تغییر میدهد. برای نمونه، وبهوکی از ابزار CI شما میتواند با Create One Incident حادثهای با جزئیات شکست باز کند.
این مؤلفهها بهعنوان Project Admin پروژه گردش کاری عمل میکنند: کاری که یک Project Admin اجازهاش را ندارد، یا طرح شما شاملش نمیشود، رد میشود و لاگ اجرا دلیلش را میگوید. گامهای گردش کاری چه کاری میتوانند بکنند را ببینید.
اعلام یک حادثه از روی یک قالب
Create One Incident میتواند حادثه را از روی یکی از قالبهای حادثه شما اعلام کند: آن را زیر Incident Template، نخستین تنظیم گام، انتخاب کنید. قالب هر فیلدی را که JSON Object جا انداخته پر میکند — عنوان، توضیحات، شدت، وضعیت آغازین، مانیتورها و منابع دیگر، سیاستهای آنکال، برچسبها، صفحههای وضعیت و فیلدهای سفارشی — و مالکانش مالکان حادثه میشوند. هر چیزی که در JSON Object تنظیم کنید، از جمله وضعیت، بر قالب برتری دارد، پس با یک قالب انتخابشده، JSON Object فقط به آنچه باید متفاوت باشد نیاز دارد و میتواند خالی بماند.
حادثه قالبی را که از رویش اعلام شده در createdIncidentTemplateId ثبت میکند. این ستون را Status200 تنظیم میکند: گامی که آن را در JSON Object بفرستد رد میشود و لاگ اجرایش شما را به Incident Template راهنمایی میکند. قالبی از پروژهای دیگر، یا قالبی که حذف شده، باعث میشود گام خروجی Error خود را بگیرد، و در طرحی که قالبهای حادثه را شامل نمیشود، گام با طرحی که لازم دارد رد میشود. نحوه اعمال یک قالب را ببینید.
کار با رکوردها
هر فیلد روی یک مؤلفه داده از نام ستونهای خود رکورد استفاده میکند — همان نامهایی که API دارد، نه برچسبهای فرم داشبورد. ستون شناسه _id است. هجی id هر جا که بتوانید نام ستونی تایپ کنید بهعنوان نام مستعار پذیرفته میشود، اما رکورد _id را برمیگرداند، پس هنگام بیرون آوردن همان را بخوانید:
{ "_id": "00000000-0000-0000-0000-000000000000" }Query تعیین میکند مؤلفه روی کدام رکوردها کار کند. کلیدها ستوناند و مقدارها آنچه باید مطابقت داشته باشد:
{ "monitorType": "Website", "isEnabled": true }یک پرسوجو همیشه به پروژهای که گردش کاری در آن اجرا میشود محدود است. نمیتوانید به رکوردهای پروژهای دیگر برسید، و لازم نیست خودتان پروژه را به پرسوجو اضافه کنید.
JSON Object در Create One، JSON Array در Create Many و Data (JSON Object) در مؤلفههای Update فیلدهایی را که باید نوشته شوند با همان کلیدها حمل میکنند:
{ "name": "Checkout API", "monitorType": "Website" }کلیدی که ستون نیست به جای رد شدن نادیده گرفته میشود — لاگ اجرا کلیدهای کنارگذاشتهشده را نام میبرد، پس وقتی فیلدی ثبت نمیشود آنجا را نگاه کنید. Fields to pass on، در مؤلفههای Find و تریگرها، از یک فهرست انتخاب میشود؛ ویرایش بهصورت JSON آن همان کلیدهای ستون را با مقدار true نشان میدهد: {"_id": true, "name": true}.
فیلدهای سفارشی یک ستوناند، customFields، که مقدار هر فیلد سفارشی را زیر نام آن فیلد نگه میدارد. مؤلفههای Update فقط فیلدهای سفارشیای را که نام میبرید تغییر میدهند و بقیه مقدارشان را نگه میدارند:
{ "customFields": { "Notification Count": 1 } }Notification Count را تنظیم میکند و فیلدهای سفارشی دیگر رکورد را همانطور که بودند باقی میگذارد. برای پاک کردن یک فیلد سفارشی آن را روی null بگذارید، یا برای پاک کردن همه خود customFields را روی null بگذارید. دو گردش کاری که در یک لحظه فیلدهای سفارشی متفاوتی از یک رکورد را بهروزرسانی میکنند، هر دو ثبت میشوند. این فقط درباره مؤلفههای Update صدق میکند: API در Status200 customFields را یکجا مینویسد، پس درخواستی به آن باید هر فیلد سفارشیای را که میخواهید نگه دارید شامل شود.
بهندرت لازم است این کلیدها را خودتان تایپ کنید. در تنظیمات مؤلفه، Add a field (یا Add a condition در یک پرسوجو) ستونهای مدل را با نامشان نشان میدهد، همراه با نوع مقداری که هر کدام میگیرد. با نام، با کلید ستون یا با کاری که فیلد انجام میدهد جستجو کنید و Enter را بزنید تا بهترین تطابق اضافه شود. هنگام ساختن، فیلدهایی که رکورد بدون آنها ساخته نمیشود اول میآیند، سپس فیلدهای اصلی مدل (آنهایی که اگر جا بیندازید خودش پر میکند) و سپس بقیه.
فیلدهایی که Status200 خودش پر میکند هنگام نوشتن یک رکورد ارائه نمیشوند: _id رکورد، تاریخ ساخت، تاریخ بهروزرسانی، Created by User، اسلاگها، شمارههای رکورد و وضعیتهای اعلان. اینکه چه کسی و کی رکوردی را ساخت، بایگانی کرد یا حل کرد هرگز چیزی نیست که یک گردش کاری تنظیم کند: رکوردی که یک گردش کاری میسازد ساختهشده توسط هیچکس است، مقداری که یک گردش کاری برای یکی از این فیلدها کنار فیلدهای دیگر بفرستد نادیده گرفته میشود، و Updateای که چیز دیگری نفرستد با پیامی که نام آنها را میبرد شکست میخورد. یک بهروزرسانی فقط فیلدهایی را ارائه میدهد که پس از وجود یک رکورد قابل تغییرند. یک پرسوجو همچنان شناسه، مهرهای زمانی و Created by User را ارائه میدهد، چون برای پالایش سودمندند. Deleted At هیچجا ارائه نمیشود: رکوردها کامل حذف میشوند، پس همیشه خالی است.
Skip و Limit دو فیلد عددی در Find Many، Update Many و Delete Many هستند، زیر فیلدهای بیشتر — Skip: 0 همراه با Limit: 100 صد تطابق نخست را میگیرد. Limit بهطور پیشفرض 10 است، و در Update Many و Delete Many محدود میکند که واقعاً چند رکورد نوشته شوند، نه فقط چند رکورد برگردند. پس Items Deleted: 10 یعنی ده رکورد حذف شد، نه اینکه ده رکورد مطابقت داشت. وقتی میخواهید بیش از ده رکورد را تغییر دهید، Limit را بالا ببرید.
Delete One و Delete Many با پرسوجو هرگز یک تاریخچه را خالی نمیکنند. در رویدادهای وضعیت یک مانیتور، و در تاریخچهٔ وضعیت حوادث، هشدارها، نگهداریهای برنامهریزیشده و اپیزودها، هرگز وضعیت فعلی یک رکورد را حذف نمیکنند و هر رویداد وضعیت مانیتور را که بخشی از ۹۰ روز گذشته را پوشش میدهد نگه میدارند، تا یک صفحهٔ وضعیت هرگز مانیتوری را خاکستری نشان ندهد. لاگ اجرا میگوید چند مورد نگه داشته شد. برای حذف یک رویداد مشخص، آن را با _id آن پرسوجو کنید.
Success و Error میگویند پرسوجو اجرا شد یا نه، نه اینکه چه پیدا کرد. پرسوجویی که با چیزی مطابقت ندارد 0 را برمیگرداند و باز هم از Success بیرون میرود — این خطا نیست. برای انشعاب بر اساس اینکه آیا چیزی مطابقت داشت، شمار برگرداندهشده را در یک بلوک If / Else بخوانید.