Обработка реакций
Если пользователь поставил или убрал реакцию у сообщения, в сценарий приходит событие telegramReaction.
Данные о реакциях
Если событие сработало, данные о реакциях доступны в переменной $request.rawRequest.message_reaction.
Пример данных:
{
"chat": {…},
"message_id": 97,
"user": {…},
"date": 1742384158,
"old_reaction": [
{
"type": "custom_emoji",
"custom_emoji_id": "5334564744177133218"
}
],
"new_reaction": [
{
"type": "custom_emoji",
"custom_emoji_id": "5334564744177133218"
},
{
"type": "emoji",
"emoji": "👍"
}
]
}
Здесь:
chat— данные о чате в Telegram.message_id— идентификатор сообщения из чата Telegram. У этого сообщения изменились реакции.user— пользователь, который поставил или убрал реакцию.date— Unix-время в часовом поясе UTC, когда изменились реакции.old_reaction— массив реакций, которые были у сообщения до события.new_reaction— массив текущих реакций у сообщения.
Эмодзи
Массивы old_reaction и new_reaction содержат реакции.
Пример массива:
[
{
"type": "emoji",
"emoji": "🤔"
},
{
"type": "custom_emoji",
"custom_emoji_id": "5334564744177133218"
}
]
Здесь:
-
type— тип реакции:emoji— стандартный эмодзи.custom_emoji— кастомный эмодзи.
-
emoji— символ эмодзи. Указан только для стандартных эмодзи. -
custom_emoji_id— идентификатор кастомного эмодзи.
Использование в сценарии
В примере ниже бот отправляет сообщение об акции. Если пользователь ставит или убирает реакцию у этого сообщения, бот записывает в аналитику все текущие стандартные эмодзи на сообщении.
-
Стейт
Promo:- Бот отправляет сообщение об акции с помощью сервиса
$conversationApi. Это позволяет получить от Telegram идентификатор отправленного сообщения. - Бот сохраняет идентификатор в
$session.promoMessageId.
предупреждениеЕсли бот отправил сообщение через
$conversationApi, то оно не будет отображаться в аналитике. В этом примере бот сам записывает текст сообщения в аналитику с помощью$analytics.setComment. - Бот отправляет сообщение об акции с помощью сервиса
-
Стейт
Reaction:- Событие
telegramReactionсрабатывает, если пользователь поставил или убрал реакцию у любого сообщения бота. - Бот сравнивает
message_idиз события с идентификатором сообщения об акции. - Если идентификаторы совпадают, то бот формирует массив из всех стандартных эмодзи, которые установлены на сообщении об акции.
- Бот записывает эмодзи в аналитику с помощью
$analytics.setComment.
- Событие
theme: /
state: Promo
q!: * промо *
script:
$session.promoText = "Новая акция — скидки до 20%";
// Отправляем сообщение об акции
var response = $conversationApi.sendTextToClient($session.promoText);
// Сохраняем идентификатор сообщения об акции
$session.promoMessageId = response.messageId;
// Записываем текст сообщения в аналитику
$analytics.setComment("Отправлено сообщение об акции: " + $session.promoText);
state: Reaction
# Пользователь поставил или снял реакцию у сообщения
event!: telegramReaction
script:
// Сравниваем message_id из события с идентификатором сообщения об акции
if ($request.rawRequest.message_reaction.message_id === $session.promoMessageId){
// Получаем массив из стандартных эмодзи, которые являются текущими реакциями
var currentReactions = $request.rawRequest.message_reaction.new_reaction;
var standardReactions = currentReactions.filter(function(reaction){
return reaction.type === "emoji";
});
var promoEmojis = standardReactions.map(function(item){
return item.emoji;
});
// Записываем результат в аналитику
$analytics.setComment(promoEmojis.join(",") || "Нет реакций");
}