Перейти до вмісту
Усі матеріали

Як підключити чатбота до CRM і календаря

Інтеграційний плейбук: function-calling, запис у CRM, бронювання в календарі й тригери передачі діалогу людині.

Чатбот, який гарно спілкується, але нікуди не пише дані, — це демо, а не інструмент. Цінність з'являється в момент, коли бот сам створює контакт у CRM, бронює слот у календарі й пінгує менеджера, коли лід гарячий. Цей гайд — інтеграційний плейбук: як технічно з'єднати бота з CRM і календарем, як влаштувати function-calling, і де ставити тригери передачі людині.

Розбираємо на рівні архітектури, без прив'язки до одного вендора — підхід однаковий для Telegram-бота, віджета на сайті чи WhatsApp.

Архітектура: що з чим говорить

Працююча зв'язка має чотири шари:

  1. Канал — Telegram / сайт-віджет / Instagram / WhatsApp. Звідси приходить повідомлення.
  2. Мозок бота — LLM (наприклад, через function-calling) + логіка сценарію. Вирішує, що відповісти і яку дію викликати.
  3. Шар інтеграцій — код або no-code (n8n/Make), що викликає API CRM і календаря.
  4. Системи призначення — CRM (HubSpot, Pipedrive, KeyCRM, Бітрікс24), календар (Google Calendar, Calendly), сповіщення (Telegram-чат менеджера, email).

Ключ — шар 3. Саме він перетворює «бот поспілкувався» на «бот зробив».

Function-calling: як бот викликає дії

Сучасний підхід — дати LLM набір «інструментів» (функцій), які він може викликати, коли вважає за потрібне. Замість жорсткого сценарію if-else бот сам розуміє намір і обирає дію.

Типовий набір функцій для продажового/сервісного бота:

  • create_lead(name, contact, source, score, notes) — створити контакт у CRM
  • check_availability(date_range) — подивитись вільні слоти в календарі
  • book_appointment(slot, contact, service) — забронювати запис
  • update_lead_stage(lead_id, stage) — перевести по воронці
  • notify_manager(lead_id, reason) — пінгнути менеджера
  • handoff_to_human(reason) — передати діалог оператору

LLM отримує опис кожної функції (назва, параметри, коли викликати), а виконує їх ваш код. Це і є function-calling: модель повертає «хочу викликати book_appointment з такими параметрами», ваш backend реально дзвонить у Google Calendar API і повертає результат назад у діалог.

Важлива деталь: модель не виконує дій сама — вона лише пропонує. Реальний дзвінок в API завжди робить ваш код. Це і безпечніше (ви контролюєте, що дозволено), і надійніше (валідація параметрів до виклику).

Приклад потоку: від «привіт» до запису в CRM

Щоб усе вище стало конкретним, ось як виглядає один діалог зсередини:

  1. Клієнт пише в Telegram: «Скільки коштує чатбот?»
  2. LLM розпізнає намір «дізнатись ціну» і веде коротку кваліфікацію (потреба, масштаб, бюджет).
  3. Після відповідей модель вирішує викликати create_lead(...) зі зібраними даними й порахованим скорингом.
  4. Backend спершу робить search_contact(phone) — дедуплікація. Контакту немає → POST у CRM API → отримано lead_id.
  5. Скоринг ліда = 9 → модель викликає notify_manager(lead_id, "hot"). У Telegram-чат команди падає картка з саммарі.
  6. Клієнт пише: «Можна на завтра дзвінок?» → check_availabilitybook_appointment → подія в Google Calendar + .ics клієнту.
  7. Усе це — в межах однієї розмови, без жодного ручного кроку з боку менеджера.

Саме ця послідовність відрізняє «чат-іграшку» від інструмента, що приносить гроші.

Крок за кроком: підключення CRM

  1. Створіть API-доступ у CRM. Майже всі CRM дають API-ключ або OAuth-додаток. Для KeyCRM/Pipedrive/HubSpot це кілька кліків у налаштуваннях.
  2. Опишіть мапінг полів. Поля бота → поля CRM: name→Contact.Name, бюджет→Deal.Amount, скоринг→Custom field. Зафіксуйте це до коду.
  3. Реалізуйте create_lead. Бот наприкінці кваліфікації викликає функцію → backend робить POST у CRM API → повертає lead_id.
  4. Дедуплікація. Перед створенням — пошук за телефоном/email, щоб не плодити дублі. Якщо контакт є — оновлюємо, не дублюємо.
  5. Скоринг у CRM. Записуйте бал ліда в окреме поле — менеджер сортує чергу за ним.

Крок за кроком: підключення календаря

  1. Сервісний акаунт або OAuth до Google Calendar / Calendly.
  2. check_availability — бот тягне вільні слоти з урахуванням робочих годин і буферів між зустрічами.
  3. book_appointment — створює подію, додає клієнта як гостя, шле .ics і підтвердження.
  4. Часові пояси. Завжди фіксуйте TZ явно — інакше клієнт з іншого міста отримає зустріч «не в той час».
  5. Нагадування. Подія з бронюванням → автонагадування за 24 год і 2 год (різко знижує no-show — про це окрема стаття).

Помилки й надійність: що піде не так

Інтеграція — це не «налаштував і забув». Реальні системи падають, і бот має це переживати гідно:

  • API CRM недоступне. Не втрачайте лід! Якщо POST не пройшов — складіть запис у чергу (retry з експоненційною затримкою) і все одно пінгніть менеджера сирими даними в Telegram.
  • Ліміти запитів (rate limits). У всіх API є квоти. Закладайте throttling і черги, інакше на піку частина лідів просто не запишеться.
  • Невалідні дані. Клієнт ввів «телефон» текстом «передзвоніть колись». Валідуйте параметри до виклику функції й перепитуйте, а не пишіть сміття в CRM.
  • Часткова помста. Лід створився, а бронювання впало. Робіть кроки ідемпотентними й логуйте кожен — щоб можна було допровести вручну.
  • Тихі помилки. Найгірше — коли бот «думає», що записав, а насправді ні. Кожен виклик функції має повертати явний успіх/помилку в діалог.

Безпека й приватність

Бот працює з персональними даними, тож:

  • Ключі API — у секретах, не в коді й не в промпті. Окремий ключ із мінімальними правами під кожну інтеграцію.
  • Принцип найменших привілеїв. Боту не потрібен доступ «на видалення угод» — лише створення/оновлення.
  • Згода й прозорість. Повідомте клієнта, що дані йдуть у CRM; для EU-аудиторії — це вимога GDPR.
  • Логи без зайвого. Не зберігайте у відкритих логах телефони/email більше, ніж потрібно.

Тригери передачі людині

Не все має робити бот. Закладіть явні тригери ескалації:

Тригер Дія
Фраза «хочу людину / менеджера» Миттєвий handoff_to_human
Скоринг ліда ≥ 8 notify_manager + позначка «гарячий»
Бот не зрозумів 2 рази поспіль Передача оператору
Запит на знижку / нестандартні умови Передача менеджеру з продажів
Скарга / негатив (sentiment) Ескалація + прапорець у CRM
Технічний/юридичний запит поза скоупом Передача профільному спеціалісту

Тригери — це не «коли бот зламався», а свідома логіка маршрутизації.

No-code чи код?

Критерій n8n / Make (no-code) Власний код
Швидкість запуску дні тижні
Гнучкість логіки середня повна
Вартість на масштабі росте з обсягом стабільна
Складні сценарії/скоринг обмежено без обмежень
Підтримка простіша потрібен розробник

Для старту й середніх обсягів no-code (n8n) часто оптимальний. Коли логіка ускладнюється або обсяги ростуть — переходять на код. Часто роблять гібрид: ядро на коді, периферія на n8n.

Як тестувати інтеграцію перед запуском

Не вмикайте бота на бойовій CRM наосліп. Чек-лист перед продакшеном:

  • Sandbox-середовище. Спочатку всі записи летять у тестову CRM/календар, не в бойовий.
  • Happy path. Пройдіть повний сценарій: кваліфікація → create_lead → book_appointment → нагадування. Перевірте, що поля змапились правильно.
  • Edge cases. Дублі контактів, невалідний телефон, скасування брони, два бронювання поспіль, недоступне API.
  • Часові пояси. Забронюйте з різних TZ — переконайтесь, що час правильний у клієнта й у вас.
  • Навантаження. Прогоніть десяток паралельних діалогів — чи не впирається в rate limits.
  • Перевірка сповіщень. Гарячий лід реально пінгує менеджера? Картка містить саммарі?

Тільки після зеленого чек-листа — перемикання на бойову CRM.

Скільки коштує й скільки часу займає

Орієнтири для українського ринку, щоб ви розуміли масштаб:

  • Базова інтеграція (бот → одна CRM, створення лідів + сповіщення) — від $1000, кілька днів роботи.
  • З бронюванням (CRM + календар + нагадування) — додає кілька днів і відповідну вартість.
  • Повна зв'язка (мультиканальність, скоринг, маршрутизація, дашборд) — від $1500+, до пари тижнів.

Точна вилка залежить від складності вашої воронки й кількості систем. Часто розумно почати з базової інтеграції, переконатись на даних, що вона приносить ліди, і поетапно нарощувати функціонал.

Поширені питання при підключенні

  • «А якщо в нас екзотична CRM?» Майже всі CRM мають API або webhook. Навіть якщо ні — є проміжний шар (n8n/Make), що з'єднає майже будь-що.
  • «Чи зламається бот, коли ми міняємо поля в CRM?» Тому й роблять мапінг полів окремим шаром — змінити мапу простіше, ніж переписувати логіку.
  • «Хто володіє даними?» Ви. Бот лише пише у вашу CRM під вашим ключем; усі ліди залишаються у ваших системах.

Як MaxICo Labs це вирішує

Ми підключаємо чатботів до вашої CRM і календаря «під ключ»: проєктуємо набір функцій, реалізуємо інтеграції, налаштовуємо скоринг, дедуплікацію й тригери передачі людині — так, щоб бот не балакав, а реально рухав угоди по воронці.

  • Інтеграція з KeyCRM, Pipedrive, HubSpot, Бітрікс24 та ін.
  • Бронювання в Google Calendar / Calendly з нагадуваннями
  • Function-calling: запис у CRM, апдейт стадій, сповіщення менеджеру
  • Дедуплікація, скоринг лідів, маршрутизація гарячих
  • Гібрид n8n + код під ваш масштаб і бюджет

Хочете, щоб бот сам клав ліди у вашу CRM?

Напишіть Валерію в чат на сайті — підкажемо, які інтеграції потрібні саме вашій воронці, або забронюйте безкоштовний дзвінок, і ми спроєктуємо архітектуру під вашу CRM.

Часті питання

Що таке function-calling простими словами?

Це коли LLM дають набір «інструментів» (функцій) — наприклад create_lead чи book_appointment — і він сам вирішує, коли їх викликати. Модель повертає намір, а ваш код реально звертається до API CRM чи календаря.

Чи можна підключити бота без програмування?

Так, для старту й середніх обсягів підходять no-code платформи на кшталт n8n або Make. Коли логіка ускладнюється або обсяги ростуть, переходять на власний код або гібрид: ядро на коді, периферія на n8n.

Як уникнути дублів контактів у CRM?

Перед створенням ліда бот шукає контакт за телефоном або email. Якщо знаходить — оновлює існуючий запис, а не створює новий. Дедуплікацію закладають у функцію create_lead.

Як бот розуміє, коли передати діалог людині?

Через явні тригери: фраза «хочу менеджера», скоринг ліда ≥8, дві поспіль незрозумілі відповіді, запит знижки чи негатив. Кожен тригер викликає handoff_to_human або notify_manager.

Про автора

MaxICo Labsваш партнер по штучному інтелекту

Лабораторія прикладного AI, яку очолює Максим Шаповал. Публікуємо практичні матеріали про AI-агентів, автоматизацію, CRM і цифрові системи.