Сравнение с Google Apps Script
Скрипты Coverse устроены похоже на Google Apps Script: тот же JavaScript, функции, триггеры, меню и знакомые команды (getRange, getValues, setValues, appendRow). Опыт работы с Apps Script пригодится сразу, а готовый скрипт обычно переносится за несколько минут.
При этом многое, что в Apps Script приходится собирать вручную, в Coverse уже встроено.
Что в Coverse удобнее
ИИ в редакторе и в коде
- Скрипт по описанию. Опишите задачу словами, и ИИ в редакторе напишет код с учётом названий листов и столбцов вашей таблицы, предложит запуск по расписанию и нужные секреты. Изменения показываются построчно, их можно принять, отклонить или уточнить.
- Исправление ошибок. Если запуск упал, кнопка «Исправить ошибку последнего запуска» передаёт ИИ текст ошибки и номер строки, и ИИ предлагает исправление.
CoverseAI.askв коде. Скрипт может разобрать текст заявки, определить категорию обращения или составить сводку по данным одной командой, без своего ключа и договора с внешним сервисом.
См. Скрипт с помощью ИИ и ИИ в скриптах.
Telegram, секреты и внешние сервисы
- Telegram встроен.
Telegram.send(chat, text)отправляет сообщение человеку, в группу или канал. Длинный текст делится на части сам. - Секреты встроены. Ключи и токены хранятся на отдельной вкладке, не попадают в код и заменяются на
***в журнале запусков. См. Секреты. - HTTP-запросы без ручной сборки. Параметры адреса передаются объектом
query, объект вbodyотправляется как JSON, ответ разбирается черезresponse.json(). См. Внешние сервисы.
Вебхуки без публикации веб-приложения
В Apps Script для приёма запросов из другого сервиса нужно опубликовать веб-приложение с функцией doPost и выпускать новую версию после изменений кода. В Coverse достаточно создать триггер «По вебхуку»:
- адрес появляется сразу, изменения кода действуют без повторной публикации;
- функция получает тело запроса, параметры и заголовки;
- встроены проверка HMAC-подписи, токен в заголовке и список разрешённых IP-адресов;
- частота запросов ограничена, а после серии неудачных проверок триггер выключается сам.
См. Вебхуки.
Событие изменения со всеми ячейками и правками из API
- Триггер «При изменении» получает список всех изменённых ячеек с адресом, значением и формулой.
- Триггер срабатывает и на правки через API Coverse Таблиц, а поле
event.sourceпоказывает, откуда пришла правка. - Правки за несколько секунд собираются в одно событие, поэтому вставка большого блока не запускает скрипт на каждую ячейку.
См. Триггеры.
Безопасная совместная работа над кодом
- Скрипт работает с правами владельца скрипта. Если код поменял коллега, права скрипта сужаются до общих, а секреты и другие таблицы не передаются, пока владелец не подтвердит код. Через чужой скрипт нельзя получить доступ, которого у участника нет.
- Скрипт участника подчиняется защите листов и диапазонов так же, как сам участник.
См. Права и безопасность.
Проверка и отладка
- «Запустить с событием»: функцию для триггера можно проверить на тестовом событии или на последнем настоящем событии из журнала, не дожидаясь правки или ответа формы.
- Журнал запусков хранит последние 30 запусков с выводом
console.log, статусом, длительностью и номером версии кода. - Версии кода: последние 200 версий, сравнение с текущим кодом и возврат кнопкой «Вернуть эту версию».
- Расход времени виден в панели: «Сегодня: N мин из 5 ч».
Запуск из таблицы
Пункты меню «Макросы», кнопки-картинки и сочетания клавиш настраиваются на вкладке «Макросы» без кода. См. Макросы и кнопки.
Что учесть при переносе
- Запуск длится до 30 секунд. Для работы с таблицей этого обычно достаточно, если читать и записывать данные блоками. Долгую обработку разбейте на части: запоминайте в «Памяти», где остановились, и продолжайте при следующем запуске по расписанию.
- Триггеры и меню настраиваются в редакторе, а не командами
ScriptApp.newTriggerиcreateMenu. - Другие таблицы подключаются на вкладке «Таблицы» скрипта, до 10 штук. В них доступны чтение и запись значений и список листов. См. Другие таблицы.
- Диалогов, боковых панелей, своих функций для ячеек,
CacheServiceиLockServiceпока нет. Один и тот же скрипт не запускается дважды одновременно, поэтому в типичных задачах блокировка не нужна.
Все ограничения собраны в статье Лимиты.
Соответствие команд
| Google Apps Script | Coverse |
|---|---|
SpreadsheetApp.getActiveSpreadsheet() | Coverse.table |
ss.getSheetByName("Лист") | Coverse.table.getSheetByName("Лист") |
ss.insertSheet("Лист") | Coverse.table.insertSheet("Лист") |
SpreadsheetApp.openById(id) | Coverse.tables.open(id), таблица должна быть на вкладке «Таблицы» |
sheet.getRange, getValues, setValues, appendRow | те же названия |
SpreadsheetApp.flush() | Coverse.table.flush() |
UrlFetchApp.fetch(url, params) | Http.fetch(url, options) |
MailApp.sendEmail(to, subject, body) | Mail.send(to, subject, body) |
PropertiesService.getScriptProperties() | Properties.script |
PropertiesService.getDocumentProperties() | Properties.table |
Utilities.formatDate(date, tz, pattern) | Utilities.formatDate(date, pattern, tz) |
Logger.log(...) | console.log(...) |
ScriptApp.newTrigger(...) | вкладка «Триггеры» в редакторе |
SpreadsheetApp.getUi().createMenu(...) | вкладка «Макросы» в редакторе |
doPost(e) в веб-приложении | триггер «По вебхуку», функция получает event.json |
onEdit(e), e.range, e.value | onEdit(event), event.changes (все изменённые ячейки); event.range — адрес первой изменённой ячейки текстом, например "E5"; event.value — её значение |
e.namedValues в onFormSubmit | event.namedValues |
Как перенести скрипт
Разбор на живом примере — в статье Перенос скрипта из Google Apps Script: пример.
Быстрее всего поручить перенос ИИ: откройте редактор, напишите «Перепиши этот скрипт Google Apps Script для Coverse» и вставьте код. ИИ заменит команды и подставит названия листов вашей таблицы.
Вручную:
- Создайте скрипт в таблице Coverse и вставьте код.
- Замените объекты верхнего уровня по таблице выше. Список всех команд Coverse — во вкладке «Справка» редактора.
- Перенесите ключи и пароли из свойств скрипта в Секреты.
- Настройте триггеры и пункты меню на вкладках «Триггеры» и «Макросы».
- Проверьте функцию кнопкой «Запустить с событием» и посмотрите журнал.
Частые вопросы
Есть ли в Coverse аналог Google Apps Script?
Да, скрипты Coverse: JavaScript, триггеры, меню и знакомые команды getRange, getValues, setValues, appendRow. Готовый скрипт Apps Script обычно переносится за несколько минут.
Можно ли перенести скрипт из Google Apps Script автоматически?
Да: откройте редактор, нажмите «ИИ», напишите «Перепиши этот скрипт Google Apps Script для Coverse» и вставьте код. Проверьте изменения перед тем, как принять.
Чего в скриптах Coverse нет по сравнению с Apps Script?
Пока нет диалогов и боковых панелей, своих функций для ячеек, CacheService и LockService. Один запуск длится до 30 секунд, долгую обработку разбивают на части.