Автоматизация договоров в Google Docs: генерация PDF и отправка в Telegram

Юрий Герук 2025-11-27 165
Автоматизация договоров в Google Docs: генерация PDF и отправка в Telegram

Введение

Договоры, акты, счета, коммерческие предложения — всё это документы, с которыми сталкивается любой специалист: от руководителя отдела до технической поддержки. Их создание отнимает много времени. Каждая правка вручную, каждая подстановка реквизитов, каждое сохранение в PDF превращаются в рутинный процесс, который легко автоматизируется.

Google Docs вместе с Google Apps Script дают возможность превратить подготовку документов в полностью автоматизированный конвейер:

  • готовый шаблон с переменными;
  • боковая форма для ввода всех реквизитов;
  • автоматическая подстановка данных;
  • генерация PDF в один клик;
  • отправка готового файла в Telegram;
  • сохранение вводимых данных для повторного использования;
  • пресеты-шаблоны для разных организаций.

Эта статья — полный разбор, как внедрить такую систему у себя, с рабочими примерами и готовыми кодами.

Основная идея автоматизации

В Google Docs используется механизм «плейсхолдеров» — специальных меток, которые заменяются значениями, введёнными пользователем в боковой форме.

Пример плейсхолдера:

{{Организация}}
{{Директор_ФИО}}
{{Дата}}
{{Сумма}}
{{Сайт_Домен}}

Они размещаются в любом месте документа. Скрипт автоматически заменит их введёнными значениями и сформирует финальный PDF.

Пример шаблона договора

Простой вариант выглядит так:

СУБЛИЦЕНЗИОННОЕ СОГЛАШЕНИЕ № {{Соглашение_Номер}}
от {{Дата_Цифрами}} г.

{{Сублицензиат_Организация_Имен}}, в лице {{Сублицензиат_Руководитель_Должность_Имен}} 
{{Сублицензиат_Руководитель_ФИО_Имен}}, действующего на основании {{Основание}},
с одной стороны, и …

Сайт: {{Сайт_Домен}}
Сумма оплаты: {{Сумма_Руб}} руб.
Тариф: {{Тариф}}
Период: {{Месяцев_Текст}}

Скрипт подставит вместо них реальные данные, а документ станет готовым договором.

Добавляем боковую форму (Sidebar)

Сайдбар — это HTML-форма, в которой вы вводите реквизиты. Google Docs показывает её как персональную панель справа.

Пример формы:

<h3>Заполнение договора</h3>

<div class="group">
 <label>Номер соглашения</label>
 <input id="Соглашение_Номер" placeholder="например 99">
</div>

<div class="group">
 <label>Дата (дд.мм.гггг)</label>
 <input id="Дата_Цифрами" placeholder="05.11.2025">
</div>

<div class="group">
 <label>Организация</label>
 <input id="Сублицензиат_Организация_Имен" placeholder="ООО «Пример»">
</div>

<div class="group">
 <label>Директор ФИО</label>
 <input id="Сублицензиат_Руководитель_ФИО_Имен" placeholder="Иванов Иван Иванович">
</div>

<div class="group">
 <label>Должность руководителя</label>
 <input id="Сублицензиат_Руководитель_Должность_Имен" placeholder="директор">
</div>

<div class="group">
 <label>Сайт / домен</label>
 <input id="Сайт_Домен" placeholder="example.ru">
</div>

<div class="group">
 <label>Сумма</label>
 <input id="Сумма_Руб" inputmode="decimal" placeholder="15000.00">
</div>

<div class="group">
 <label>Тариф</label>
 <select id="Тариф">
 <option>Базовый</option>
 <option>Стандарт</option>
 <option>Премиум</option>
 </select>
</div>

<div class="group">
 <label>Период (число месяцев)</label>
 <input id="Месяцев_Число" placeholder="6">
</div>

<div class="group">
 <label>Период (текст)</label>
 <input id="Месяцев_Текст" placeholder="6 месяцев">
</div>

<button onclick="saveCopyAndPdf()">Создать PDF</button>

Это и есть заполнение всех плейсхолдеров.

Скрипт, который всё автоматизирует

Google Apps Script выполняет три задачи:

  1. заменяет плейсхолдеры в документе;
  2. создаёт копию документа;
  3. генерирует PDF и отправляет его в Telegram.

Пример:

const telegramToken = "000000:TEST";
const chatIds = ['-1000000000'];

function onOpen() {
 DocumentApp.getUi()
 .createMenu("Договор")
 .addItem("Открыть форму", "showSidebar")
 .addToUi();
}

function showSidebar() {
 const html = HtmlService.createTemplateFromFile("Sidebar")
 .evaluate()
 .setTitle("Заполнение договора");
 DocumentApp.getUi().showSidebar(html);
}

function saveCopyAndPdf(data) {
 const doc = DocumentApp.getActiveDocument();
 const file = DriveApp.getFileById(doc.getId());

 const copy = file.makeCopy("Договор_" + data.Соглашение_Номер);
 const copyDoc = DocumentApp.openById(copy.getId());

 replacePlaceholders(copyDoc, data);
 copyDoc.saveAndClose();

 const pdf = DriveApp.getFileById(copy.getId())
 .getAs("application/pdf")
 .setName("Договор.pdf");

 sendToTelegram(pdf);
 copy.setTrashed(true);
}

function replacePlaceholders(doc, data) {
 const body = doc.getBody();
 Object.keys(data).forEach(key => {
 body.replaceText(`\\{\\{${key}\\}\\}`, data[key]);
 });
}

function sendToTelegram(blob) {
 const url = `https://api.telegram.org/bot${telegramToken}/sendDocument`;
 chatIds.forEach(chatId => {
 UrlFetchApp.fetch(url, {
 method: "post",
 payload: {
 chat_id: chatId,
 document: blob,
 caption: "Готовый договор"
 }
 });
 });
}

Как всё подключить и запустить

После того как HTML и скрипт вставлены в Google Apps Script:

  1. Нажать “Сохранить проект”
  2. Вернуться в Google Docs и обновить страницу
  3. В верхнем меню появится новый пункт «Договор»
  4. Нажать один раз пункт «Открыть форму»
  5. Google попросит разрешения на работу скрипта
  6. Подтвердить доступ от своего Google-аккаунта
  7. С этого момента боковая форма будет работать всегда
  8. Вводите данные → нажимаете кнопку → получаете готовый PDF в Telegram

Это занимает меньше минуты при использовании.

Ещё несколько примеров, что можно сделать

Пример 1. Договор аренды

Арендодатель: {{Организация}}
Представитель: {{Директор_ФИО}}
Объект аренды: {{Адрес_Объекта}}
Срок: {{Период}}
Стоимость: {{Сумма}} руб.

Пример 2. Акт выполненных работ

Исполнитель: {{Исполнитель}}
Заказчик: {{Заказчик}}
Дата оказания услуг: {{Дата}}
Сумма по акту: {{Сумма}}

Пример 3. Коммерческое предложение

Компания: {{Организация}}
Описание услуги: {{Описание}}
Стоимость: {{Сумма}} руб.
Дата подготовки: {{Дата}}

Пример 4. Автоматическая нумерация договоров

Использование формата:

{{Соглашение_Номер}}

Можно автоматически формировать:

  • 2025-02-001
  • 2025-02-002
  • 2025-02-003

При каждом нажатии "Создать PDF".

Пример 5. Отправка сразу в несколько Telegram-каналов

Достаточно перечислить chatIds:

const chatIds = [
 '-1001111111111', // отдел продаж
 '-1002222222222', // канал бухгалтерии
 '-1003333333333' // личный архив
];

Итог

Google Apps Script превращает Google Docs в мощную автоматизированную систему для подготовки документов.

Что в итоге получается:

  • шаблон →
  • форма для заполнения →
  • автоматическая подстановка данных →
  • PDF →
  • отправка в Telegram →
  • никакого ручного копирования текста

Это экономит время, снижает количество ошибок и делает процесс унифицированным.

Система подходит для:

  • договоров
  • актов
  • счетов
  • приложений
  • коммерческих предложений
  • любых шаблонных документов

Это одна из тех автоматизаций, которые внедряешь один раз — а экономия времени идёт каждый день.

Оцените полезность материала!

Лицензия: CC BY-SA 4.0

Автор: Юрий Герук

Похожие материалы:

Комментарии