

Персонализированные коммерческие предложения в масштабе: Google Sheets + API (2026)
Чтобы создавать персонализированные коммерческие предложения в большом объеме, храните данные потенциальных клиентов в Google Sheets (или экспорт из CRM), превращайте каждую строку в структурированный запрос и отправляйте его на endpoint 2Slides Fast PPT POST /api/v1/slides/generate с одним фиксированным themeId, чтобы все презентации имели одинаковый дизайн. Каждое предложение на 10 страниц стоит 100 кредитов, примерно $0.25, приходит в виде нативного редактируемого PPTX примерно за 30 секунд и может автоматически отправляться менеджеру по продажам. Этот рецепт предназначен для руководителей RevOps и sales ops, а также основателей, занимающихся исходящими продажами.
Основные выводы
- Один вызов
POST /api/v1/slides/generateпревращает строку таблицы в оформленное, редактируемое PPTX предложение за 10 кредитов за страницу. - Фиксированный
themeIdизGET /api/v1/themes/search?query=pitch deckобеспечивает визуальную идентичность 200 предложений, чтобы менеджеры меняли только содержимое. - Параметр
responseLanguageпринимает название языка из строки ("Spanish", "Portuguese"), так что аккаунты LATAM и EMEA получают презентации на родном языке из одной таблицы. - Endpoint generate допускает 6 запросов в минуту на ключ; Python-очередь с паузами между партиями обрабатывает 200 предложений примерно за 70 минут.
- 500 бесплатных кредитов при регистрации покрывают 5 тестовых предложений; 500 производственных предложений в месяц стоят около $102.50 в кредитах.
Для кого это
Вы руководите RevOps или sales ops, либо вы основатель, который сам занимается исходящими продажами. Менеджеры тратят 45 минут на ручное создание презентации, которая на 80% идентична предыдущей, поэтому половина квалифицированных клиентов вообще не получает персонализированное предложение. Данные о клиентах уже хранятся в Google Sheets или экспортированы из CRM с информацией о компании, отрасли, болевых точках, ценовом уровне и имени контакта.
Не используйте этот рецепт, если для каждого предложения нужны уникальные визуальные элементы или озвученное видео. Для этого есть pipeline с дизайном изображений, описанный далее. Если ваша команда работает в HubSpot и вы хотите запускать предложения по стадиям сделки, смотрите нативный CRM-паттерн в HubSpot AI presentation and sales deck automation.
Обзор рабочего процесса
| Шаг | Инструмент | Что происходит | Endpoint 2Slides / кредиты |
|---|---|---|---|
| 1 | Google Sheets или экспорт из CRM | Одна строка на клиента: компания, отрасль, болевые точки, ценовой уровень, контакт, язык | нет |
| 2 | 2Slides Templates Hub или API | Выберите шаблон pitch deck и запишите его themeId | GET /api/v1/themes/search, бесплатно |
| 3 | Zapier Code step или Python | Соберите структурированный запрос userInput из строки | нет |
| 4 | Webhooks by Zapier или requests | Отправьте задачу на генерацию с mode: "async" | POST /api/v1/slides/generate, 10 кредитов/страница |
| 5 | Задержка 60 с, затем GET | Опросите статус до success | GET /api/v1/jobs/{jobId}, бесплатно |
| 6 | Gmail или SMTP | Отправьте редактируемый PPTX по email менеджеру | нет |
| 7 | Обновление Google Sheets | Запишите jobId и downloadUrl обратно в строку для аудита | нет |
Шаг 1: Структурируйте таблицу с клиентами
Качество предложения зависит от колонок, которые вы используете. Достаточно простой таблицы с одной строкой на клиента и такими колонками:
| company | industry | contact_name | contact_title | pain_points | pricing_tier | price | language | rep_email | status |
|---|---|---|---|---|---|---|---|---|---|
| Northwind Logistics | Freight and logistics | Mariana Ruiz | VP Operations | Manual dispatch scheduling; 18% empty-mile rate; no live ETAs | Growth | USD 1,800/month | Spanish | j.ortiz@yourco.com | ready |
| Contoso Clinics | Outpatient healthcare | David Chen | COO | Paper intake forms; 22-minute average wait; no-show rate 14% | Team | USD 950/month | English | a.park@yourco.com | ready |
Две рекомендации для надежности запроса. Во-первых, pain_points пишите короткими фразами, разделёнными точкой с запятой, а не абзацами, чтобы модель получила три чёткие проблемы. Во-вторых, в колонке language указывайте название языка так, как ожидает API ("Spanish", а не "es"). Колонка status позволяет автоматизации пропускать уже обработанные строки.
Если экспортируете из CRM, сопоставьте те же поля. Google Sheets API может читать таблицу напрямую, если не хотите использовать CSV в Python-версии ниже.
Шаг 2: Выберите один themeId, чтобы все предложения были в одном стиле
Согласованность — ключ к системе предложений. Если каждая презентация в разном шаблоне, бренд выглядит как десять разных компаний. Один раз найдите шаблон pitch deck, выберите его и зафиксируйте themeId в автоматизации.
Сначала визуально выберите шаблон на 2slides.com/templates, отфильтровав по Pitch Deck, и запомните название.

Затем получите ID шаблона через API. Endpoint поиска бесплатен и ограничен 6 запросами в минуту, что не критично, так как вызывается один раз.
curl -s "https://2slides.com/api/v1/themes/search?query=pitch%20deck&limit=5" \
-H "Authorization: Bearer $SLIDES_API_KEY"В ответе список подходящих шаблонов с themeId и метаданными. Скопируйте ID в переменную окружения (PROPOSAL_THEME_ID), чтобы и Zapier, и Python-скрипт использовали одно значение. Меняйте шаблон раз в год, а не для каждой сделки.
API управляет тем же движком, что и веб-инструмент Fast PPT: вставляете контент, выбираете шаблон, получаете PPTX. Endpoint просто делает это без интерфейса для каждой строки таблицы.

Шаг 3: Соберите запрос и вызовите API автоматизации коммерческих предложений
Запрос для предложения должен быть структурированным, а не разговорным. Расскажите модели, кто клиент, какие проблемы, что рекомендуете и какие разделы создать в каком порядке. Ценообразование выделите на отдельный слайд, чтобы менеджеры могли редактировать его без риска повредить остальную презентацию.
Пример точного вызова для первой строки таблицы выше. Обратите внимание, что responseLanguage берётся из строки, а mode — "async", чтобы вызов возвращал сразу ID задачи.
curl -s -X POST https://2slides.com/api/v1/slides/generate \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userInput": "Sales proposal for Northwind Logistics (freight and logistics). Prepared for Mariana Ruiz, VP Operations. Pain points: manual dispatch scheduling; 18% empty-mile rate; no live ETAs for customers. Recommended plan: Growth tier at USD 1,800/month for 25 dispatcher seats. Structure: 1) Our understanding of Northwind Logistics 2) Goals for the next 12 months 3) Proposed solution mapped to each pain point 4) 90-day rollout plan 5) Pricing (own slide) 6) Next steps. Consultative tone, no buzzwords.",
"themeId": "'"$PROPOSAL_THEME_ID"'",
"responseLanguage": "Spanish",
"mode": "async"
}'Каждый ответ 2Slides обёрнут в одинаковую структуру, что важно при маппинге полей в Zapier:
{ "success": true, "data": { "jobId": "a1b2c3d4", "status": "pending" } }Опросите задачу каждые 5–10 секунд. Презентации Fast PPT обычно готовы примерно за 30 секунд.
curl -s https://2slides.com/api/v1/jobs/a1b2c3d4 \
-H "Authorization: Bearer $SLIDES_API_KEY"
# { "success": true, "data": { "jobId": "a1b2c3d4", "status": "success", "downloadUrl": "https://..." } }
Если не указывать mode, endpoint работает синхронно и сразу возвращает downloadUrl. Это проще для одиночных вызовов, но async безопаснее при коротком HTTP timeout, например, в Zapier, и подходит для пакетной обработки.
Шаг 4: Генерация PowerPoint в Zapier при добавлении новой строки
Для команд без инженера на связи Zapier доставляет предложение в почтовый ящик менеджера менее чем за две минуты после пометки строки как готовой. Приложение Webhooks by Zapier выполняет два API вызова; остальное — стандартные шаги.
- Триггер: Google Sheets, новая или обновлённая строка. Добавьте фильтр, чтобы обрабатывать только строки со статусом
ready. - Code by Zapier (JavaScript) или Formatter: соберите
userInputиз колонок строки (пример ниже). - Webhooks by Zapier, POST на
https://2slides.com/api/v1/slides/generate. ЗаголовокAuthorization: Bearer <ваш ключ>, JSON сuserInput,themeId,responseLanguage,mode: "async". Сопоставьтеdata.jobIdиз ответа. - Delay by Zapier, задержка 60 секунд.
- Webhooks by Zapier, GET
https://2slides.com/api/v1/jobs/{{jobId}}с тем же заголовком. Сопоставьтеdata.statusиdata.downloadUrl. - Фильтр: продолжайте только если
data.statusравноsuccess. Для редких случаев, когда задача ещё в обработке, добавьте второй Delay + GET. - Gmail: Отправить письмо на
rep_emailс именем клиента в теме иdownloadUrlв теле или в поле вложения. - Google Sheets: Обновить строку, запишите
jobId,downloadUrlи установитеstatusвdone.
Код-шаг держит логику запроса в одном месте, чтобы менеджер мог менять структуру предложения без правок webhook:
// Code by Zapier (JavaScript). inputData поля сопоставлены из строки таблицы.
const {
company, industry, contact_name, contact_title,
pain_points, pricing_tier, price, language,
} = inputData;
const userInput = [
`Sales proposal for ${company} (${industry}).`,
`Prepared for ${contact_name}, ${contact_title}.`,
`Pain points: ${pain_points}.`,
`Recommended plan: ${pricing_tier} tier at ${price}.`,
`Structure: 1) Our understanding of ${company} 2) Goals for the next 12 months`,
`3) Proposed solution mapped to each pain point 4) 90-day rollout plan`,
`5) Pricing (own slide) 6) Next steps. Consultative tone, no buzzwords.`,
].join(" ");
output = { userInput, responseLanguage: language || "English" };Держите API-ключ в заголовке Webhooks, не в таблице. Если несколько менеджеров одновременно пометят строки как готовые, Zapier может отправить более 6 generate вызовов в минуту; лишние получат ошибку ограничения, а встроенный механизм повторов Zapier их обработает. Для более стабильного объема используйте Python-скрипт ниже. Такой же паттерн Zapier применяется для регулярных презентаций в автоматизации еженедельных отчетов с Zapier и 2Slides.
Шаг 5: Пакетная генерация 200 персонализированных предложений с Python
Если нужна кампания из 200 предложений к понедельнику, лучше запустить скрипт, а не 200 Zaps. Скрипт читает CSV-экспорт таблицы (Файл, Скачать, CSV), отправляет задачи партиями по 6, чтобы не превышать лимит 6 запросов в минуту на generate, опрашивает каждую задачу с интервалом 6 секунд, чтобы не превышать 10 запросов в минуту на jobs, скачивает каждый PPTX и записывает результаты во второй CSV для слияния в Gmail или импорта в CRM.
import csv, os, time, requests
API = "https://2slides.com/api/v1"
HEADERS = {
"Authorization": f"Bearer {os.environ['SLIDES_API_KEY']}",
"Content-Type": "application/json",
}
THEME_ID = os.environ["PROPOSAL_THEME_ID"] # из GET /themes/search?query=pitch deck
BATCH = 6 # generate: 6 запросов/мин на ключ
POLL_GAP = 6 # jobs: 10 запросов/мин -> опрос каждые 6 с
OUT_DIR = "proposals"
def build_prompt(row):
return (
f"Sales proposal for {row['company']} ({row['industry']}). "
f"Prepared for {row['contact_name']}, {row['contact_title']}. "
f"Pain points: {row['pain_points']}. "
f"Recommended plan: {row['pricing_tier']} tier at {row['price']}. "
f"Structure: 1) Our understanding of {row['company']} 2) Goals for the next 12 months "
f"3) Proposed solution mapped to each pain point 4) 90-day rollout plan "
f"5) Pricing (own slide) 6) Next steps. Consultative tone, no buzzwords."
)
def submit(row):
r = requests.post(f"{API}/slides/generate", headers=HEADERS, timeout=60, json={
"userInput": build_prompt(row),
"themeId": THEME_ID,
"responseLanguage": row.get("language") or "English",
"mode": "async",
})
r.raise_for_status()
body = r.json() # { success, data: { jobId, status } }
if not body.get("success"):
raise RuntimeError(body)
return body["data"]["jobId"]
def poll(job_id):
r = requests.get(f"{API}/jobs/{job_id}", headers=HEADERS, timeout=30)
r.raise_for_status()
return r.json()["data"] # { jobId, status, progress, downloadUrl }
def download(url, path):
with requests.get(url, stream=True, timeout=120) as r:
r.raise_for_status()
with open(path, "wb") as f:
for chunk in r.iter_content(65536):
f.write(chunk)
def main():
os.makedirs(OUT_DIR, exist_ok=True)
with open("prospects.csv", newline="", encoding="utf-8") as f:
rows = [r for r in csv.DictReader(f) if r.get("status") == "ready"]
results = []
for i in range(0, len(rows), BATCH):
batch = rows[i:i + BATCH]
window_start = time.time()
pending = {submit(row): row for row in batch}
print(f"submitted {len(pending)} jobs, {i + len(batch)}/{len(rows)} total")
while pending:
for job_id in list(pending):
time.sleep(POLL_GAP)
data = poll(job_id)
if data["status"] == "success":
row = pending.pop(job_id)
safe = row["company"].replace(" ", "_")
path = os.path.join(OUT_DIR, f"{safe}_proposal.pptx")
download(data["downloadUrl"], path)
results.append({**row, "jobId": job_id,
"downloadUrl": data["downloadUrl"],
"file": path, "status": "done"})
elif data["status"] == "failed":
row = pending.pop(job_id)
results.append({**row, "jobId": job_id, "downloadUrl": "",
"file": "", "status": "failed"})
# Не более 6 generate вызовов в любом 60-секундном окне.
elapsed = time.time() - window_start
if elapsed < 60:
time.sleep(60 - elapsed)
with open("proposals_out.csv", "w", newline="", encoding="utf-8") as f:
w = csv.DictWriter(f, fieldnames=list(results[0].keys()))
w.writeheader()
w.writerows(results)
if __name__ == "__main__":
main()Время: каждая партия из 6 занимает примерно 60–120 секунд с учётом опроса, так что 200 предложений (34 партии) готовы примерно за 70 минут на одном ключе. Скрипт идемпотентен по status, если он упадёт на 140-й строке, запустите снова — будут отправлены только оставшиеся 60 строк со статусом ready. Для больших запусков и других схем очередей смотрите как пакетно генерировать презентации с AI API.
Шаг 6: Дайте менеджерам редактируемый PPTX, а не PDF
Результат generate — нативный PowerPoint-файл: настоящие текстовые поля, таблицы, мастер-слайды шаблона. Это причина использовать Fast PPT для предложений, а не изображение.
Менеджеры редактируют предложения после генерации. Утверждённая скидка, изменение количества мест на звонке, юридический пункт на слайде условий, логотип клиента на обложке — с редактируемым PPTX менеджер открывает файл, меняет слайд с ценой и отправляет. С PDF или набором изображений каждое изменение требует регенерации и повторного просмотра всей презентации.
Шаг Gmail (или почтовый инструмент CRM) должен отправлять PPTX, а не ссылку на просмотр, а тема письма должна содержать имя клиента, чтобы менеджеры могли быстро найти файл. Если нужен красивый leave-behind, менеджеры могут экспортировать PDF из PowerPoint после правок.
Как выглядит сильная презентация предложения
Перед написанием структуры запроса в Шаге 3 полезно посмотреть реальные презентации. Галерея 2Slides содержит эталонные презентации для изучения структуры или передачи в referenceImageUrl для endpoint create-like-this, если вы выберете путь с дизайном изображений. Это эталонные презентации, а не результат API вызовов выше.


Три паттерна из сильных предложений перенесите в запрос: начните с описания ситуации клиента его словами (колонка pain_points), сопоставьте каждое решение с одной проблемой, выделите ценообразование на отдельный слайд. Для подробностей о содержании каждого раздела смотрите как создать sales enablement deck с AI.
Стоимость
Fast PPT тарифицируется по 10 кредитов за страницу, типичное предложение — 10 страниц. Поиск темы и опрос задач бесплатны.
| Объем | Страницы | Кредиты | Пакеты кредитов | USD | За предложение |
|---|---|---|---|---|---|
| 20 предложений/мес | 200 | 2,000 | 1 × $5 (2,000) | $5.00 | $0.25 |
| 500 предложений/мес | 5,000 | 50,000 | 1 × $80 (40,000) + 1 × $22.50 (10,000) | $102.50 | $0.21 |
500 бесплатных кредитов при регистрации покрывают 5 полных предложений для теста. Кредиты оплачиваются по факту, без требований по количеству пользователей, так что один общий ключ может обслуживать команду из 12 человек.
Fast PPT или слайды с дизайном изображений для этого кейса?
| Потребность | Использовать | Почему |
|---|---|---|
| Редактируемые предложения, которые менеджеры будут менять | generate (Fast PPT), 10 кредитов/страница | Нативный PPTX, ~30 с, единый шаблон |
| Визуально уникальные презентации для нескольких корпоративных клиентов | create-pdf-slides, 10 + 100 кредитов/страница при 2K | Дизайн изображений по стилевому запросу |
| Совпадение с существующим бренд-шаблоном | create-like-this с referenceImageUrl, та же стоимость | Дизайн системы по референсному изображению |
| Озвученное видео предложения для асинхронных продаж | create-pdf-slides или create-like-this, затем generate-narration за 210 кредитов/страница | Fast PPT не поддерживает озвучку |
Для объемного потока из таблицы в этой статье Fast PPT — правильный выбор по умолчанию. Пайплайн с изображениями оставьте для 5% сделок, где дизайн — ключевой фактор.
Частые ошибки
- Превышение 6 запросов в минуту. Если 20 строк одновременно помечены как готовые, это 20 POST за секунды. Очередь: Python-скрипт обрабатывает партии по 6 и ждёт 60 секунд; в Zapier полагайтесь на повтор или добавьте задержку.
- API-ключ в таблице или клиентском скрипте. Храните ключ в заголовке webhook Zapier или в серверной переменной окружения. Иначе любой с доступом к таблице потратит ваши кредиты.
- Коды языков вместо названий.
responseLanguageтребует "Spanish" или "Portuguese", а не "es" или "pt-BR". Проверьте колонку через выпадающий список в Sheets. - Ожидание озвучки или MP4 от Fast PPT. Endpoint
generate-narrationпринимает только задачи изcreate-pdf-slidesилиcreate-like-this. Предложения изgenerate— только PPTX. - Вброс 4000-словного транскрипта звонка в
userInput. Сначала резюмируйте. Три болевые точки, разделённые точками с запятой, работают лучше, и слайд с ценой остаётся чистым. - Неправильное сопоставление поля ответа. ID задачи находится в
data.jobId, а не на верхнем уровне. Та же структура{ success, data: { ... } }для ответа опроса.
Часто задаваемые вопросы
Можно ли генерировать презентации из данных CRM без Google Sheets?
Да. API требует только строку userInput и themeId, так что источник может быть любым: workflow HubSpot, экспорт Salesforce или запрос Postgres. Google Sheets удобен тем, что менеджеры могут редактировать строки и помечать их готовыми без помощи инженера. Для нативного CRM-триггера по стадиям сделки смотрите паттерн HubSpot, упомянутый выше.
Сколько времени занимает генерация одного предложения?
Около 30 секунд для Fast PPT после старта задачи. В Zapier достаточно одной задержки в 60 секунд перед опросом в большинстве случаев. В Python-пакете шесть предложений отправляются за минуту и обычно все завершаются в следующую минуту, так что 200 предложений готовы примерно за 70 минут на одном ключе.
Все предложения будут выглядеть одинаково?
Дизайн будет одинаковым, это задумано. Поскольку все задачи используют один themeId, цвета, шрифты и макеты идентичны в партии, меняется только содержимое под каждого клиента. Если нужны два вида, например для корпоративных и SMB, добавьте колонку theme в таблицу и сопоставьте её с двумя разными themeId.
Поддерживают ли другие API презентаций такую автоматизацию?
Да. API Gamma на developers.gamma.app предлагает похожую автоматизацию, но ключи там требуют Pro-плана. Ключи 2Slides работают на любом аккаунте, включая бесплатный с 500 кредитами, а Fast PPT выдаёт нативный PPTX, а не хостинговую страницу, что делает редактирование слайдов с ценой удобным для менеджеров.
Могут ли менеджеры редактировать слайд с ценой после генерации?
Да, это главная причина использовать Fast PPT. Файл — стандартный PPTX с редактируемыми текстовыми полями и таблицами, менеджер может менять количество мест, применять одобренную скидку или добавлять юридический пункт в PowerPoint или Google Slides. Перегенерация не нужна, остальная презентация остаётся без изменений.
Следующие шаги
Персонализированные коммерческие предложения в масштабе сводятся к трём частям: чистая таблица, один фиксированный шаблон и очередь, соблюдающая 6 запросов в минуту.
- Получите API-ключ на 2slides.com/api. Регистрация включает 500 бесплатных кредитов, достаточно для 5 тестовых предложений.
- Ознакомьтесь с другими рецептами для команд в посте хаба AI presentation API use cases by team.
- Углубитесь в продажи с HubSpot AI sales deck automation и batch-generating presentations with an AI API.
About 2Slides
Create stunning AI-powered presentations in seconds. Transform your ideas into professional slides with 2slides AI Agent.
Try For Free