Справочник смарт-действий¶
⚠️ Символом * помечены обязательные параметры
Каталог смарт-действий, доступных для вызова из SmartScript: создание и изменение задач, комментарии, подписчики, email, HTTP-запросы, действия с файлами, отчётами, ЭДО Диадок и СБИС, маршруты, оргструктура, ДП, подписи, чаты и системные операции. Здесь — как вызывать действия из SmartScript (частые действия, примеры), карта разделов справочника, типы данных и каталог событий; описания действий (кодовое имя, числовой ID, таблица параметров) — в разделах по группам, см. § Разделы справочника. Используется при проектировании пакетов действий и интеграционных сценариев.
Вызов смарт-действий из SmartScript¶
Все смарт-действия вызываются из Lua/JS-скриптов через SMART:execute_action (Lua) или SMART.execute_action_in_task_context (JS). Кодовое имя действия (enum StandardAction) — первый аргумент вызова.
Частые действия — кодовые имена и ID¶
Кодовые имена и числовые ID самых востребованных смарт-действий:
| Русское название | Кодовое имя (StandardAction) | Enum ID |
|---|---|---|
| Отправить комментарий | PostComment |
1 |
| Создать задачу | CreateTask |
0 |
| Добавить подписчика | AddSubscriber |
2 |
| Добавить исполнителя | AddPerformer |
3 |
| Изменить значение ДП | ChangeExtParamValue |
5 |
| Добавить строки ДП Таблица | AddTableRows |
216 |
| Изменить строки ДП Таблица | UpdateTableRows |
217 |
| Удалить строки ДП Таблица | DeleteTableRows |
218 |
| Изменить статус задачи | ChangeTaskStateForcibly |
38 |
| Выполнить переход | MakeStep |
4 |
| Отправить email | SendEmail |
17 |
| Отправить HTTP-запрос | SendHttpRequest |
85 |
| Создать файл отчёта | CreateReportFile |
75 |
| Выполнить смарт-скрипт | ExecuteSmartScript |
106 |
Отправить HTTP-запрос с JSON и ретраями (HttpRequestJson)¶
Выполняет HTTP-запрос с автоматической сериализацией JSON, обработкой статус-кодов, повторными попытками и нарастающими паузами. Заменяет ручной сбор URL, headers и парсинг ответа в Lua/JS.
| Параметр | Тип | Описание |
|---|---|---|
| Method* | String |
HTTP-метод: GET, POST, PUT, PATCH, DELETE |
| Url* | String |
Базовый URL запроса |
| Query | Object |
Объект query-параметров (автоматически добавляется к URL) |
| Headers | Object |
Заголовки запроса (например, { "Authorization": "Bearer ..." }) |
| BodyJson | Object |
Тело запроса (автоматически сериализуется в JSON для POST/PUT/PATCH) |
| TimeoutMs | Integer |
Таймаут запроса в мс (по умолчанию 15000) |
| ExpectedStatusCodes | Collection<Integer> |
Ожидаемые успешные статус-коды (по умолчанию [200]) |
| FailOnUnexpected | Boolean |
Если true — неожиданный статус считается ошибкой (по умолчанию true) |
| RetryPolicy | Object |
Политика повторных попыток: { Retries: 3, BackoffMs: 500, BackoffMultiplier: 2, RetryOnStatuses: [429, 500, 502, 503, 504] } |
| ResponseMode | String |
Формат ответа: Json (авто-парсинг) или Text |
Возвращает:
{
"Ok": true,
"StatusCode": 200,
"ResponseHeaders": { "content-type": "application/json" },
"Json": { "result": "..." },
"Text": null,
"Attempts": 1,
"FinalUrl": "https://api.example.com/resource?a=1&b=text",
"Error": null
}
Если FailOnUnexpected=false и получен неожиданный статус:
{
"Ok": false,
"StatusCode": 403,
"Json": null,
"Text": "Forbidden",
"Attempts": 1,
"Error": {
"Code": "unexpected_status",
"Message": "Expected [200], got 403"
}
}
Пример (Lua):
local r = SMART:execute_action('HttpRequestJson', CONTEXT.Id, 'task', {
Method = "POST",
Url = "https://api.example.com/users",
Headers = { ["Authorization"] = "Bearer token123" },
BodyJson = { name = "Иван", email = "ivan@example.com" },
ExpectedStatusCodes = { 201 },
RetryPolicy = { Retries = 3, BackoffMs = 500, BackoffMultiplier = 2, RetryOnStatuses = { 429, 500 } }
})
if r.Ok then
SS:log("Пользователь создан: id=" .. r.Json.id)
else
SS:log("Ошибка: " .. r.Error.Message)
end
Примеры вызова из SmartScript¶
Отправить комментарий (PostComment)¶
Обязательные параметры действия — CommentAuthor, CommentText, Task, ForcedEmail, CommentSMS, NoSubscription, TextAsHTML. Пометка вопросом называется MarkAsQuestion (не NeedsAnswer — такого параметра у действия нет).
Lua:
SMART:execute_action('PostComment', CONTEXT.Id, 'task', {
CommentAuthor = 3, -- ОБЯЗАТЕЛЬНО: автор (UserID); 3 — Робот 1Ф
CommentText = 'Текст комментария',
Task = CONTEXT.Id, -- ОБЯЗАТЕЛЬНО, иначе NullRef
Recipients = {181}, -- адресаты (массив UserID), опционально
ForcedEmail = false, -- ОБЯЗАТЕЛЬНО: дублировать на почту
CommentSMS = false, -- ОБЯЗАТЕЛЬНО: дублировать по SMS
NoSubscription = true, -- ОБЯЗАТЕЛЬНО: не подписывать адресатов на задачу
TextAsHTML = false, -- ОБЯЗАТЕЛЬНО: трактовать текст как HTML
MarkAsQuestion = false -- пометить вопросом, опционально
})
JavaScript:
SMART.execute_action_in_task_context("PostComment", taskId, {
CommentAuthor: 3, // ОБЯЗАТЕЛЬНО: автор (UserID); 3 — Робот 1Ф
CommentText: "Текст комментария",
Task: taskId, // ОБЯЗАТЕЛЬНО, иначе NullRef
Recipients: [181], // адресаты (массив UserID), опционально
ForcedEmail: false, // ОБЯЗАТЕЛЬНО: дублировать на почту
CommentSMS: false, // ОБЯЗАТЕЛЬНО: дублировать по SMS
NoSubscription: true, // ОБЯЗАТЕЛЬНО: не подписывать адресатов на задачу
TextAsHTML: false, // ОБЯЗАТЕЛЬНО: трактовать текст как HTML
MarkAsQuestion: false // пометить вопросом, опционально
});
Важно: параметр
Taskобязателен даже при использованииexecute_action_in_task_context. Без него —NullReferenceException.
CommentAuthorобязателен и в событийных сценариях (пакет на событии, анонимная публикация): без негоSessionUserId = -1→NullReferenceException→ HTTP 500.Полный перечень параметров с типами — в справочнике действия.
Создать задачу (CreateTask)¶
Lua (текст задачи — TaskText, не Text; связи — CreateLink/CreateSubtask, не MakeLinked/MakeSubTask — таких параметров у действия нет):
SMART:execute_action('CreateTask', CONTEXT.Id, 'task', {
Subcat = 5641, -- ОБЯЗАТЕЛЬНО: ID категории (пример SubcatID, тип параметра: 1F.Subcat)
Owner = 28, -- ОБЯЗАТЕЛЬНО: заказчик (UserID)
TaskText = 'Текст задачи',
CreateLink = true, -- ОБЯЗАТЕЛЬНО: сделать связанной с текущей
CreateSubtask = false, -- ОБЯЗАТЕЛЬНО: сделать подзадачей
NewTaskCopySubscribers = false, -- ОБЯЗАТЕЛЬНО: копировать подписчиков из родительской
CreateCopyFiles = false, -- ОБЯЗАТЕЛЬНО: копировать вложения
CopyParentText = false, -- ОБЯЗАТЕЛЬНО: включать текст исходной
CreateCopiesForEachPerformer = false, -- ОБЯЗАТЕЛЬНО: каждому исполнителю отдельную копию
Priority = 1 -- ОБЯЗАТЕЛЬНО: 0 — низкий, 1 — обычный, 3 — высокий
})
Изменить значение ДП (ChangeExtParamValue)¶
Lua (доп. параметр — ExtParam, не ExtParamId — такого параметра у действия нет):
SMART:execute_action('ChangeExtParamValue', CONTEXT.Id, 'task', {
Task = CONTEXT.Id, -- ОБЯЗАТЕЛЬНО: задача
User = SESSION_USER.Id, -- ОБЯЗАТЕЛЬНО: от чьего имени меняется ДП
ExtParam = 12408, -- ОБЯЗАТЕЛЬНО: ID доп. параметра
Value = 'новое значение',
WriteCommentOnChange = false -- ОБЯЗАТЕЛЬНО: писать комментарий о смене
})
Изменить статус (ChangeTaskStateForcibly)¶
Lua:
SMART:execute_action('ChangeTaskStateForcibly', CONTEXT.Id, 'task', {
Task = CONTEXT.Id,
Initiator = SESSION_USER.Id,
State = 3 -- ID целевого статуса
})
Асинхронный вызов¶
Последний аргумент true — выполнение в фоне (не блокирует скрипт):
SMART:execute_action('PostComment', CONTEXT.Id, 'task', {
CommentAuthor = 3,
CommentText = 'Фоновый комментарий',
Task = CONTEXT.Id,
ForcedEmail = false,
CommentSMS = false,
NoSubscription = true,
TextAsHTML = false
}, true)
Когда стартует фоновое действие. Если на момент вызова execute_action(..., true) окружение скрипта ещё выполняет открытую транзакцию, запуск фонового действия откладывается до её успешной фиксации. При откате транзакции фоновое действие не выполняется. Если скрипт выполняется вне транзакции, действие стартует сразу. Поэтому между строкой с execute_action(..., true) и фактическим началом действия может пройти время — до завершения сохранения, в котором участвовал скрипт.
Это важно, когда фоновое действие меняет ту же задачу, которую сохраняет запустившая транзакция: смена статуса, добавление комментария и другие действия по той же задаче применяются после сохранения, а не параллельно ему. Форма вызова не менялась: четвёртый аргумент true — по-прежнему признак фонового выполнения, синхронный вызов (false или без аргумента) работает как раньше.
Полный список кодовых имён¶
Полный список действий (enum StandardAction, ID 0–218) доступен в редакторе SmartScript → вкладка «Смарт-действия».
Связанные документы¶
Смежные разделы:
- Смарт-действия — администрирование — вызов
SMART:execute_action, контекст, примеры - Паттерны и примеры
Разделы справочника¶
Полный справочник действий (каждое — с кодовым именем, ID и таблицей параметров) разбит по группам:
| Раздел | Группы действий |
|---|---|
| Задачи, связи, маршруты | Категории, задачи, связи · Маршруты, переходы |
| Оповещения, чаты, комментарии | Оповещения · Чаты, комментарии, чек-листы |
| Участники, оргструктура, группы | Заказчики, исполнители, подписчики · Оргструктура, группы, пользователи |
| ЭДО и подписи | Работа с операторами ЭДО (Диадок, СБИС, Контур.КЭДО) · Подписи |
| Файлы, отчёты, данные, сроки, ДП | Файлы и отчёты · Данные · Сроки и трудозатраты · ДП — модификация значений · Файлы (расширение) |
| Системные действия | HTTP, SQL, SmartScript, события, повторения |
Типы данных¶
Типы параметров, используемые в таблицах параметров разделов справочника:
| Тип | Описание |
|---|---|
1F.Task |
Задача в системе |
1F.User |
Пользователь |
1F.UserGroup |
Группа пользователей |
1F.Subcat |
Категория |
1F.State |
Статус задачи |
1F.Step |
Переход по маршруту |
1F.File |
Файл |
1F.CustomerZone |
Личный кабинет |
Collection<T> |
Коллекция объектов типа T |
String |
Строка |
Integer |
Целое число |
Boolean |
Логическое значение |
DateTime |
Дата и время |
Money |
Денежная сумма |
Каталог событий (EventID)¶
Полный реестр событий (197) с EventID, именем, группой и контекстными параметрами @eventParam* доступен в редакторе SmartScript. Используется для проектирования пакетов действий: на какое событие подписать пакет и какие данные доступны в контексте.
Покрытие:
- Всего событий: 197 (значения 0–196).
- С описанием параметров контекста: 127.
- Без задокументированного контекста: 69.
Распределение по группам:
| Группа | Событий |
|---|---|
| Не классифицировано | 69 |
| Задачи и комментарии | 30 |
| Подписи | 22 |
| Ресурсное планирование | 15 |
| Сроки и даты | 12 |
| Связи и подзадачи | 12 |
| ДП и свойства задачи | 9 |
| Пользователи | 8 |
| Глобальные | 7 |
| Файлы | 6 |
| Другое | 3 |
| Exchange | 3 |
Ключевые правила:
- События
Перед ...отменяемы, если в пакете есть действиеОтменить. Признак отмены определяет само окно ошибки — по объекту ошибки, поэтому кнопки обращения в поддержку в нём нет на всех путях, где ошибка приходит объектом; там, где окно получило готовый текст, признак до него не доходит. - Группы
Exchange,Глобальные,Пользователиработают как глобальные (используются в «Общих SMART»). - Флаг «может быть глобальным» (
CanBeGlobal): такое категорийное событие может срабатывать без привязки к категории (SubcatID=NULL). Первое такое событие —AfterPostComment(29). - Для событий ресурсного планирования параметр
Датаприходит массивом — в SQL читается черезOPENJSON. - Нумерация в C# enum нелинейная:
AfterSignatureSigned=70объявлен послеBeforeSubscriberAdded=58. В реестре — точные числовые значения.