Перейти к содержанию

Справочник смарт-действий

⚠️ Символом * помечены обязательные параметры

Каталог смарт-действий, доступных для вызова из 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 → вкладка «Смарт-действия».

Связанные документы

Смежные разделы:

Разделы справочника

Полный справочник действий (каждое — с кодовым именем, 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

Ключевые правила:

  1. События Перед ... отменяемы, если в пакете есть действие Отменить. Признак отмены определяет само окно ошибки — по объекту ошибки, поэтому кнопки обращения в поддержку в нём нет на всех путях, где ошибка приходит объектом; там, где окно получило готовый текст, признак до него не доходит.
  2. Группы Exchange, Глобальные, Пользователи работают как глобальные (используются в «Общих SMART»).
  3. Флаг «может быть глобальным» (CanBeGlobal): такое категорийное событие может срабатывать без привязки к категории (SubcatID=NULL). Первое такое событие — AfterPostComment (29).
  4. Для событий ресурсного планирования параметр Дата приходит массивом — в SQL читается через OPENJSON.
  5. Нумерация в C# enum нелинейная: AfterSignatureSigned=70 объявлен после BeforeSubscriberAdded=58. В реестре — точные числовые значения.