MAX: запись клиента
Самый простой бизнес-сценарий: пользователь запускает бота, нажимает кнопку «Отправить контакт», а оператор получает заявку.
Подходит для записи на услугу, обратного звонка, HR-анкеты или сбора лидов.
Импорты и настройки
import asyncio import logging
from maxapi import Bot, Dispatcher from maxapi.filters import Contact from maxapi.types import BotStarted, CommandStart, MessageCreated from maxapi.types import RequestContactButton from maxapi.types.attachments import Contact as ContactAttachment from maxapi.utils.inline_keyboard import InlineKeyboardBuilder
OPERATOR_ID = 123456789 # user_id оператора
bot = Bot(“ТОКЕН”) dp = Dispatcher()
logging.basicConfig(level=logging.INFO)
Здесь создаём бота и диспетчер.
Бот отправляет сообщения, диспетчер принимает события, а OPERATOR_ID — это человек, которому будут приходить заявки.
Кнопка запроса контакта
def contact_keyboard() -> InlineKeyboardBuilder: keyboard = InlineKeyboardBuilder() keyboard.row(RequestContactButton(text=“Отправить контакт”)) return keyboard
Это нативная кнопка MAX: пользователь не вводит телефон вручную, а просто делится контактом.
Показываем кнопку при запуске бота
@dp.bot_started() async def on_bot_started(event: BotStarted) -> None: await bot.send_message(user_id=event.user.user_id, text=“Здравствуйте! Отправьте контакт, и оператор свяжется с вами.”, attachments=[contact_keyboard().as_markup()])
@dp.message_created(CommandStart()) async def on_start(event: MessageCreated) -> None: await event.message.answer(text=“Отправьте контакт, и оператор свяжется с вами.”, attachments=[contact_keyboard().as_markup()])
bot_started сработает, когда пользователь впервые запускает бота. /start нужен, если пользователь захочет открыть заявку повторно.
Получаем контакт и отправляем заявку оператору
@dp.message_created(Contact()) async def on_contact(event: MessageCreated, contact: ContactAttachment) -> None: phone = contact.payload.vcf.phone name = contact.payload.vcf.full_name or event.message.sender.name await bot.send_message(user_id=OPERATOR_ID, text=(f"Новая заявка\n\nКлиент: {name}\nТелефон: {phone}")) await event.message.answer(“Спасибо! Заявка отправлена оператору.”)
Бот получает контакт пользователя, собирает короткое сообщение и отправляет его оператору прямо в MAX.
Запуск
async def main() -> None: await dp.start_polling(bot)
if __name__ == “__main__”: asyncio.run(main())
Итог: несколько десятков строк кода превращают кнопку в рабочий бизнес-процесс. Клиент оставляет контакт, оператор получает заявку.
(извиняюсь за возможные проблемы с табуляцией. к сожалению сетка не дает адекватно ее построить, ну, она и не для этого разработана =) )
Библиотека для разработки ботов в MAX: https://github.com/love-apples/maxapi
· 27.06
Денис, благодарю, за полезную информацию
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён