18+
реклама
18+
Бургер менюБургер меню

Сергей Степанов – Zero-code. Продажа ботов и автоматизаций под ключ (страница 5)

18

Для сверки создайте отдельный диагностический HTTP-запрос к crm.item.list. Тело: {"entityTypeId":2,"filter":{"=originatorId":"ts_form","=originId":"FORM-001"},"select":["id","title","originatorId","originId"]}. В filter подставьте номер восстанавливаемой заявки. В учебном запросе ожидается малый результат; для общего списка учитывайте пагинацию.

Один найденный объект позволяет перенести его id в журнал и завершить обработку. Несколько объектов требуют ручного разбора. Если ничего нет, проверьте правильность фильтра на заведомо существующей FORM-002, затем повторите чтение после паузы. Решение о повторном создании принимает человек после проверки CRM и журнала. originId помогает поиску, но сам по себе не объявляется уникальным ограничением CRM.

Проверки проекта: новая заявка, повтор прежнего номера, другой номер с тем же текстом, неподтверждённые данные, кавычки в описании и отказ CRM. Сохраните результат каждого опыта. После этого у вас есть воспроизводимая передача формы в CRM с ограниченным режимом восстановления, а не только схема на экране.

Глава 8. Проект

Telegram

-бота в

n

8

n

с журналом и передачей менеджеру

Что делает первая версия

Второй проект принимает одно текстовое обращение, сохраняет его в таблице, отправляет сотруднику и подтверждает получение клиенту. Бот отвечает на /start отдельным пояснением. Фотографии и прочие неподдерживаемые сообщения получают просьбу написать текстом. Нейросеть подключается после проверки этого маршрута.

Здесь одно обычное текстовое сообщение считается отдельным обращением. Это сознательно простой режим: бот не собирает многошаговую анкету, не обещает выезд и не создаёт запись клиента в CRM. Если пользователь отправил три отдельных сообщения, получится три обращения. Для объединения сообщений потребуется состояние диалога, которое рассматривается дальше.

Шаг 1. Создайте бота и получите чат сотрудника

В BotFather создайте отдельного учебного бота командой /newbot. В n8n добавьте Telegram credentials и сохраните токен там. Создайте Telegram Trigger, выберите событие Message и эти credentials. Отправьте боту /start, запустив ожидание тестового события.

Откройте JSON-выход триггера. Запишите message.chat.id вашего тестового сотрудника: это получатель служебных уведомлений. Сотрудник должен сам открыть бота и отправить сообщение до первой попытки отправки ему. Для клиента chat_id всегда извлекается из его события, а служебный получатель задаётся отдельной конфигурацией.

Во время учебного опыта не используйте один токен одновременно в SendPulse, Make и n8n. У бота одна регистрация webhook, и новое подключение может заменить прежнее. Для собственного хостинга n8n должен иметь корректный публичный HTTPS-адрес, доступный Telegram.

Шаг 2. Разделите типы входа

После триггера добавьте Switch с режимом Rules. Первое правило: message.text равно /start. Второе правило: message.text существует и не равно /start. Для остальных данных используйте fallback output. Назовите выходы «Начало», «Обращение» и «Другой формат». Настройте отправку только в первый совпавший выход, если редактор предлагает вывод во все совпавшие.

В «Начало» добавьте Telegram — Message — Send Message. Chat ID задайте выражением {{ $json.message.chat.id }}. Текст: «Опишите проблему одним сообщением. Бот передаст обращение менеджеру. Дату и стоимость ремонта подтверждает сотрудник». Отключите разметку сообщения либо используйте обычный текст.

В fallback поставьте такой же узел ответа с текстом «Для этой версии нужна текстовая заявка. Напишите описание одним сообщением». В этой ветке таблица обращений не пополняется. Убедитесь, что сообщение с фотографией не попало в правило текста; подпись фотографии обрабатывается отдельно только после сознательного расширения входа.

Шаг 3. Нормализуйте обращение

На текстовой ветке добавьте Edit Fields с именем «Нормализация». В ручном сопоставлении создайте четыре строки: request_id, chat_id, problem_text и state. Для request_id используйте выражение {{ 'tg_' + String($json.update_id) }}, для chat_id — {{ String($json.message.chat.id) }}, для problem_text — {{ $json.message.text }}, для state задайте received.

Такой request_id подходит только этому режиму «одно обновление — одно обращение» и одному боту. При подключении нескольких ботов добавьте собственный постоянный префикс каждого бота. В многошаговом диалоге номер заявки создаётся отдельно: update_id там определяет доставку конкретного события, а не всю анкету.

После нормализации поставьте IF: длина problem_text после trim больше нуля и не превышает учебный предел 1000 символов. Для второго условия можно использовать {{ $json.problem_text.length }}. В false-ветке попросите сократить описание, не записывая заявку. Предел выбран для упражнения; рабочий предел согласуйте с бизнесом.

Шаг 4. Создайте постоянный журнал

В разделе Data tables создайте ts_telegram_requests. Добавьте строковые столбцы request_id, chat_id, problem_text, state и manager_message_id. Системные id и даты таблицы не заменяют request_id. Пустой manager_message_id означает, что подтверждённого результата уведомления пока нет.

После IF добавьте Data Table: Resource Row, Operation Get, таблица ts_telegram_requests. Conditions: request_id Equals {{ $json.request_id }}; Limit поставьте 1. В настройках узла включите Always Output Data, чтобы отсутствие строки не остановило новую заявку. После него поставьте IF с проверкой существования id возвращённой строки.

В true-ветке прочитайте state. Для notified верните клиенту прежний request_id и остановите маршрут. Для остальных состояний отправьте обращение на ручную сверку: повтор создания записи и автоматическая повторная отправка менеджеру в этой версии запрещены. Так потеря подтверждения не становится причиной серии одинаковых уведомлений.

Конец ознакомительного фрагмента.

Текст предоставлен ООО «Литрес».

Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.

Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.