
Сегодня из пустых пивных банок и старых покрышек мы соберём телеграм-бота для такси. С его помощью можно будет вызывать такси нажатием всего лишь двух кнопок. Вернее так: при первом использовании потребуется нажать три кнопки, а затем всегда — только две. Код написан на Node.js (т.е. ECMAScript, aka JavaScript), без использование каких-либо бот-фреймворков или бот-библиотек — только натуральный продукт — Telegram Bot API. Количество кода указано в названии статьи, выполняется он в Яндекс.Облаке, а точнее в Cloud Functions, а состояния и данные хранятся в Firebase, вернее в Cloud Firestore. Ну а заявки на такси наш скромный бот отправляет в CRM Битрикс24. Как видите — задействованы все! На самого бота можно посмотреть на комиксах ниже, а кликнув по картинке-ссылке под комиксами — открыть и проверить в деле.
Что из себя представляет этот бот

Комикс #1: Открываем и запускаем бота.

Комикс #2: Да, придётся дать номер телефона. Более того, бот запишет его в БД, чтобы не спрашивать каждый раз.

Комикс #3: Передаём боту свои координаты. Но их бот сохранять не будет, вполне обоснованно полагая, что вы можете слегка перемещаться.

Комикс #4: Получаем подтверждение заказа. А наш умный бот пресекает попытку флуда.

Комикс #5: А тем временем заказ поступает в CRM Битрикс24.

Комикс #6: Диспетчер службы такси видит все необходимые данные, и может звонить своему потенциальному клиенту.
Желаете попробовать? Пожалуйста — кликните по картинке ниже. И не волнуйтесь — ваш номер телефона торговаться на «Горбушке» (и где-либо ещё) не будет.

Ссылка на бот: https://t.me/InstantTaxiBot
Как сделать
О том как создавать Telegram-ботов да ещё и в Яндекс.Облаке — читайте в туториале Строим Telegram-бот в Яндекс.Облаке.

Код бота в Яндекс.Облаке.
О том как подключить код из Yandex Cloud Functions к базе данных Firebase Cloud Firestore — читайте в туториале Алиса помнит всё.

Данные бота в Cloud Firestore.
О том как передавать данные в CRM Битрикс24 — читайте в туториале Алиса в стране Битрикс.
Сам код должен быть вполне понятен, к тому же он весьма щедро прокомментирован. Просто читайте его, как архивариусы читают манускрипты.

Ссылка на GitHab: https://github.com/stmike/tg-bot-taxi.git
git clone https://github.com/stmike/tg-bot-taxi.git
cd tg-bot-taxi
npm install
Есть, конечно, о чём подумать для улучшения юзабилити (прости, господи), а также, в случае изготовления бота для юридического лица в РФ, нельзя забывать и о славно-известном законе (ни то Яровой, ни то Озимой) — ФЗ 152. Дополнительно можно подумать и об использовании этого кода не только для вызова такси, но и для доставки пончиков или перевода бабушек через проезжую часть. Везде, где нам необходимо знать местоположение пользователя и его контакты — это можно легко адаптировать.
Заключение
На сегодня всё. Другие материалы следуют. Кому подобное читать интересно — подписывайтесь на уведомления о новых публикациях. Подписаться можно на этом сайте (кнопка Подписаться внизу), или на Telegram-канал IT Туториал Захар, или Twitter @mikezaharov.
Донаты

pewpew
Зашёл посмотреть, как вызвать себе такси через бота для телеграм.
А тут…
Пару слов поменять и он уже умеет заказывать суши. Оператору Битрикса.
Для себя уже давно делаю ботов. Но как-то всё тривиально там. Даже писать не о чем.
Разве что для использую Heroku + PHP + GitHub.
Всё прекрасно работает, удобно деплоится, хостится и самое главное (в отличие от яндекс облака) — абсолютно бесплатно (базовых возможностей даже с небольшой БД вполне хватает). А, да, ещё вне зоны доступа наших прекрасных властей.
kovert99
На бесплатный тарифе на хероку сервер уходит в аут после 30 минут бездействия. Т.е. при последующем обращении нужно ждать пока он заново поднимется. Как ты это смог обойти?
pewpew
Хм… А можно подробнее? О чём именно речь? Если вы про режим демона, то всё может быть. У меня он просто висит веб хуком, и отвечает мгновенно. Для бота телеги оно самое то.
Color
Хероку на бесплатном тире замораживает дино после 30 минут бездействия, потом при получении запроса обратно запускает. Возможно, вы не замечали, посмотрите логи
pewpew
Ок, буду знать. С точки зрения телегобота — вполне допустимая задержка.
t38c3j
Телеграм если не смог достучаться до бота, то обновление ложиться в пул, и оно будет храниться в течении 24ч на серверах телеги
pewpew
Так. А что если раз в 5 минут пинать бота по крону?) Бесплатный планировщик есть на том же бесплатном тарифе. Костыль конечно, но, почему бы ни да?)))
t38c3j
Насколько я помню, то не стоит так делать, там есть лимит на онлайн вашего приложения, из 24ч доступно только 16ч или 18ч
PS. соврал)
Вот более точный ответ в комментарии
stackoverflow.com/a/33324033