Из каких секций кода можно вызвать linkToScript или getFromScript?
Это функции кодов-действий, но getFromScript относится к исключениям, которые могут выполняться в коде.
Что произойдет, если при вызове сторонний сервер не отвечает?
Таймаут процесса Totum на это не влияет, он бесконечно будет ждать сторонний сервер, пока тот не вернет код ошибки.
Чтобы избежать жестких зависаний — задавайте параметр timeout
.
Можно ли getFromScript выполнить кроном?
Конечно!
Можно ли увидеть ошибку, если код действия выполняется кроном и сторонний сервер не ответил?
Да, для это надо код крона обернуть в tryCatch и в секцию catch
написать действие, которое нужно совершить если код крона завершился с ошибкой — например отправить админу нотификацию:
=send_admin: set(table: 'table'; field: 'h_data' = $script)
// Запрос без параметров
script: getFromScript(uri: "https://example.host/api/uri/"; timeout: 30)
send_admin: insert(table: 'notifications'; field: 'code' = "admin_text"; field: 'active_dt_from' = $#ndt; field: 'title' = "Ошибка крона"; field: 'user_id' = 1; field: 'vars' = json`["text":$#error]`; field: 'active' = true)
В этом примере использован синтаксический вызов tryCatch — текст ошибки в этом случае может быть получен из переменной $#error
.
Этот пример - для понимания как можно обработать ошибки крона, если вам нужно другое поведение. Сейчас в Totum уже реализованы в случае ошибки крона автоматическая отправка письма на email, указанный в Conf.php, и нотификации пользователю admin.
Если в процессе выполнения кода обращение к вызову стороннего сервера идет несколько раз, то как сделать кэширование в рамках выполнения кода?
Используется стандартное фиксирование строки тильдой — ~
.
пример организации отправки смс
Достаточно часто прямой вызов стороннего сервера в процессе выполнения каких-то действий внутри Тотум является плохой практикой, тк задержка ответа стороннего сервера будет тормозить действие в системе.
В этом случае делается асинхронный механизм отправки. Например, если нам по условиям нужно отправить клиенту СМС, то:
Делаем таблицу с СМС.
Каждая строчка в этой таблице будет отдельным СМС.
Когда выполняется действие мы записывает строку в эту таблицу с текстом и телефоном получателя.
Код вызова стороннего сервера ставим в чекбокс
на изменение.
Ставим галочки кроном раз в 1-5 минут.
Таким образом если сервер API СМСок или Телеграм-бота отрубится, то действия внутри Тотум будет продолжать происходить без тормозов.