Как задавать businessConnection, чтобы подключить бота к своим личным сообщениям?
Не так давно в Telegram стал доступен раздел "Телеграм для бизнеса". Одной из дополнительных возможностей, которые открывает это обновление, является возможность добавить чат-бота к своим личным сообщениям. То есть человек пишет человеку, и прям в этом чате ему может отвечать бот. Проблема заключается в том, что для того, чтобы всё это работало, необходимо использовать BusinessConnection. Я потратил довольно много времени на поиск информации, но нигде не нашел конкретных примеров использования BusinessConnection. Везде описывали свойства этого объекта, но это я могу посмотреть и в официальной документации. Прикреплю сюда пример своего бота, чтобы Вам было нагляднее. Конкретно суть вопроса: Как именно задавать businessConnection (а может, потребуется что-то ещё), для того, чтобы подключить бота к своим личным сообщениям?
Ссылка на документацию: https://core.telegram.org/bots/api#businessconnection
Файл main.py
from aiogram import Bot, Dispatcher
from handlers import router
from config import TOKEN
# Запускаем бота и обработчик сообщений
async def main():
bot = Bot(token=TOKEN)
dp = Dispatcher()
dp.include_router(router)
await dp.start_polling(bot)
if __name__ == '__main__':
try:
asyncio.run(main())
print('Бот запущен')
except KeyboardInterrupt:
print('Бот выключен')
Файл handlers.py
from aiogram import F, Router
from aiogram.filters import CommandStart
from aiogram.types import Message, ReplyKeyboardRemove
import keyboards as kb
router = Router()
# Функция возвращает словарь с информацией о пользователе
def get_info_about_user(message, contact=False):
info_about_user = {
'name': message.from_user.first_name,
'lastName': message.from_user.last_name,
'username': message.from_user.username,
'id': message.from_user.id,
'chatId': message.chat.id,
'text': message.text,
'date': message.date,
}
# Если пользователь согласился отправить номер телефона, то добавляем его в словарь
if contact:
info_about_user['phone'] = message.contact.phone_number
return info_about_user
# Обработка /start, на этом этапе ещё не собираем информацию о пользователе
@router.message(CommandStart())
async def start(message: Message):
await message.answer('Здравствуйте! Вы хотите отправить номер телефона?', reply_markup=kb.phone_number_kb)
# Обработчик нажатия на кнопку "Отправить номер телефона"
@router.message(F.content_type == "contact")
async def contact_received(message: Message):
info_about_user_with_phone = get_info_about_user(message, contact=True)
print(info_about_user_with_phone)
await message.answer(f"Спасибо, {info_about_user_with_phone['name']}, {info_about_user_with_phone['lastName']}! Мы получили ваш контакт", reply_markup=ReplyKeyboardRemove())
# обработчик всех сообщений, кроме тех, что уже обработаны выше
@router.message()
async def get_chat_id(message: Message):
info_about_user = get_info_about_user(message)
print(info_about_user)
# Оно равно None
print(message.business_connection_id)
if info_about_user['text'] == 'Не отправлять номер телефона':
await message.answer(f"Спасибо, {info_about_user['name']}, {info_about_user['lastName']}", reply_markup=ReplyKeyboardRemove())
Файл keyboards.py
from aiogram.types import (ReplyKeyboardMarkup, KeyboardButton)
# Клавиатура, которая появляется после старта и откликнуться с отправкой номера телефона или без
phone_number_kb = ReplyKeyboardMarkup(keyboard=[[KeyboardButton(text='Отправить номер телефона',
request_contact=True)], [KeyboardButton(text='Не отправлять номер телефона')
]], resize_keyboard=True)