# Движок

> Что делает движок, как опубликовать в нём шаблон и чем различаются две редакции.

Source: https://docxcelerate.com/ru/docs/generation/endpoint/

Работа фреймворка заканчивается на пакете. Он отрисовывает ваш документ и
упаковывает его; пакет — это шаблон, в котором ещё нет данных получателя.
**Движок** — то, куда этот пакет отправляется, и то, что превращает его в
документы.

## Три шага

1. **Сборка.** Фреймворк отрисовывает документ и упаковывает его. Это
   единственный шаг, который выполняется на вашей машине.
2. **Публикация.** Пакет отправляется движку, тот сохраняет его и выдаёт адрес.
3. **Написание.** Ваше приложение вызывает API с набором данных. Движок пишет
   документ и возвращает его.

Важное следствие: публикация и написание разделены. Пакет вы публикуете, когда
меняются формулировки документа, — событие в форме деплоя. API вы вызываете
каждый раз, когда кому-то нужен документ, — возможно, постоянно, и при этом не
нужны ни шаг сборки, ни workspace.

## Почему движка нет в пакете

Движок — это сервис, а не библиотека, и он не входит в npm-пакет. Написание,
предпросмотр и упаковка — локальная работа, за которой ничего не стоит, так что
установка фреймворка не тянет за собой ничего, что требовало бы ключей API или
сети, а версии у них независимые.

## Направить workspace на движок

```sh
dxcl init my-documents --api-endpoint https://documents.example.com/api/letters
```

Или настроить без него и решить позже:

```sh
dxcl init my-documents --no-api-endpoint
```

`upload.endpoint` в `docxcelerate.config.json` можно править в любой момент, а
[пресеты конфигурации](/ru/docs/projects/workspace/) позволяют держать локальный,
тестовый и боевой движки рядом.

## Что вы публикуете

Артефакт `document.json`. Статические узлы приходят с уже разрешённым текстом, но
значения времени запроса остаются токенами — именно это позволяет одному
сохранённому пакету обслуживать всех получателей:

```json
{ "kind": "paragraph", "mode": "static", "id": "greeting",
  "text": "Dear {{data.applicantName}}," }
```

Динамические узлы приходят не с текстом, а с промптами:

```json
{ "kind": "paragraph", "mode": "dynamic", "id": "tutor-note",
  "prompts": [
    { "kind": "general", "text": "Write two warm, specific sentences…" },
    { "kind": "negative", "text": "Do not restate the offer…" },
    { "kind": "system", "text": "You are an admissions tutor…" }
  ] }
```

## Две редакции

**Своё размещение (бесплатно).** Урезанный движок, который вы запускаете сами. Он
покрывает ядро конвейера — сохранить пакет, писать из него документы — с
сокращённым набором возможностей.

**Управляемое облако.** Полный движок, размещённый у нас. Пока он не открыт;
когда откроется, у него будет бесплатный тариф, для которого нужна только
регистрация — без карты и без инфраструктуры, которую пришлось бы поднимать.

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

## Работа без движка

До того как движок понадобится, можно пройти немалый путь. Написание,
предпросмотр и упаковка в `.docx` работают локально, так что документ можно
написать, проверить и получить на своей машине, ничего не публикуя.

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