Telegram Бизнес
Telegram Бизнес позволяет управлять личным чатом с другим пользователем (человеком, не ботом) с помощью вашего бота. Это включает в себя отправку и получение сообщений от вашего имени. Как правило, это полезно, если вы ведете бизнес в Telegram, а другой пользователь является вашим клиентом.
Если вы до сих пор не знакомы с Telegram Бизнес, посмотрите официальную документацию от Telegram, перед тем как продолжить.
Естественно, grammY полностью это поддерживает.
Обработка бизнес-сообщений
Бот может управлять личным чатом между двумя пользователями через Telegram Бизнес — аккаунт, который подписан на бизнес подписку Telegram. Управление личными чатами осуществляется через объект business connection, который выглядит вот так.
Получение бизнес сообщений
После установки бизнес подключения бот будет получать сообщения от обоих участников чата.
bot.on("business_message", async (ctx) => {
// Получаем объект сообщения.
const message = ctx.businessMessage;
// Сокращенные методы работают интуитивно.
const msg = ctx.msg;
});
2
3
4
5
6
Сейчас непонятно, кто из двух участников чата отправил сообщение. Это может быть сообщение вашего клиента, а может быть сообщение, отправленное лично вами (не вашим ботом)!
Итак, необходимо различить этих двух пользователей. Для этого нам нужно проверить вышеупомянутый объект бизнес подключения. Он сообщает нам информацию о том, кто является пользователем бизнес аккаунта, то есть ваш идентификатор пользователя (или одного из ваших сотрудников).
bot.on("business_message", async (ctx) => {
// Получаем информацию о бизнес подключении.
const conn = await ctx.getBusinessConnection();
const employee = conn.user;
// Проверяем, кто отправил это сообщение.
if (ctx.from.id === employee.id) {
// Это сообщение отправили вы.
} else {
// Это сообщение отправил ваш клиент.
}
});
2
3
4
5
6
7
8
9
10
11
Вы также можете пропустить вызов get
для каждого обновления, выполнив это.
Отправка сообщений
Ваш бот может отправлять сообщения в этот чат не будучи участником чата. Это работает, ожидаемо, с помощью ctx
и всех его вариантов. grammY проверяет, доступен ли сокращенный метод контекстаctx
, чтобы отправить сообщение в управляемый бизнес-чат.
bot.on("business_message").filter(
async (ctx) => {
const conn = await ctx.getBusinessConnection();
return ctx.from.id !== conn.user.id;
},
async (ctx) => {
// Автоматически отвечаем на все вопросы клиентов.
if (ctx.msg.text.endsWith("?")) {
await ctx.reply("Скоро.");
}
},
);
2
3
4
5
6
7
8
9
10
11
12
Это будет выглядеть так, будто вы отправили сообщение лично. Ваш клиент не сможет определить, было ли сообщение отправлено вручную или через бота. (Однако, вы увидите об этом небольшой индикатор.) (Но ваш бот, вероятно, отвечает намного быстрее, чем вы. Приносим свои извинения.)
Продвинутые возможности
Есть еще несколько вещей, которые следует учитывать при интеграции вашего бота с Telegram Бизнес. Здесь мы кратко рассмотрим несколько аспектов.
Редактирование или удаление бизнес сообщений
Когда вы или ваш клиент редактируете или удаляете сообщения в чате, ваш бот будет уведомлен об этом. Точнее, вы будете получать обновления edited
или deleted
. Ваш бот может обрабатывать их обычным способом, используя bot
и его бесчисленными фильтрующими запросами.
Однако, ваш бот НЕ может редактировать или удалять сообщения в чате. Аналогично, ваш бот НЕ может пересылать сообщения из чата или копировать их куда-либо. Все эти возможности остаются за человеком.
Работа с бизнес подключениями
Когда бот будет подключен к бизнес аккаунту, он получит обновление business
. Это обновление также будет получено, когда бот будет отключен или подключение будет отредактировано как-то иначе.
Например, бот может или не может отправлять сообщения в чаты, которыми он управляет. Вы можете узнать об этом с помощью части запроса :
.
bot.on("business_connection:can_reply", async (ctx) => {
// Подключение позволяет отправлять сообщения.
});
2
3
Имеется смысл хранить объекты бизнес подключений в вашей базе данных. Таким образом вы сможете избежать вызова ctx
при каждом обновлении просто для того, чтобы выяснить
Кроме того, обновление business
содержит user
. Этот идентификатор чата может быть использован для инициирования разговора с пользователем, который подключил бота.
bot.on("business_connection:is_enabled", async (ctx) => {
const id = ctx.businessConnection.user_chat_id;
await ctx.api.sendMessage(id, "Спасибо, что подключили меня!");
});
2
3
4
Это будет работать, даже если пользователь ещё не запустил вашего бота.
Управление личными чатами
Если вы подключите бота для управления своим аккаунтом, приложения Telegram будут предлагать вам кнопку для управления этим ботом в каждом управляемом чате. Эта кнопка отправляет боту команду /start
.
Эта команда запуска имеет специальные данные deep linking, определяемые Telegram. Они имеют формат biz
, где XXXXX
будет идентификатором чата, которым вы управляете.
bot.command("start", async (ctx) => {
const payload = ctx.match;
if (payload.startsWith("bizChat")) {
const id = payload.slice(7); // обрезаем `bizChat`
await ctx.reply(`Давайте управлять чатом #${id}!`);
}
});
2
3
4
5
6
7
Это придает вашему боту важный контекст и позволяет ему управлять личными бизнес чатами прямо из разговора с каждым клиентом.