You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#为Telegram Bot实现类「点赞」的消息反馈功能?

Telegram Bot 实现无错误文本正向反馈的进阶方案(C#)

问题背景

我正在用C#开发Telegram Bot,希望在用户提交的文本无错误时,提供类似「点赞」的正向反馈。已知Telegram Bot API不支持用户式的点赞功能,当前实现是发送带竖拇指表情的回复消息,但想了解框架内更隐蔽或交互式的实现方式,比如Inline Keyboard或自定义表情?

当前代码片段:

if (!response.Contains("NO CHANGES"))
{
    // 处理用户文本的逻辑
}
else
{
    // 用户文本无错误时的逻辑
    await botClient.SendTextMessageAsync(chatId: chatId,
        text: $"{userName}, your text is error-free! 👍",
        replyToMessageId: messageId,
        parseMode: ParseMode.Html,
        cancellationToken: cancellationToken);
}

推荐实现方案

1. 给用户原消息添加Reaction(最隐蔽)

直接给用户发送的那条消息添加表情反应,不需要额外发消息,既完成反馈又不会刷屏。Telegram Bot API支持SendReactionAsync方法:

else
{
    // 给用户的消息添加点赞反应
    await botClient.SendReactionAsync(
        chatId: chatId,
        messageId: messageId,
        reaction: new ReactionTypeEmoji("👍"),
        cancellationToken: cancellationToken);
}

2. 使用Inline Keyboard实现交互式反馈

可以做极简交互按钮,点击后还能更新按钮状态强化反馈:

else
{
    var inlineKeyboard = new InlineKeyboardMarkup(new[]
    {
        new[]
        {
            InlineKeyboardButton.WithCallbackData("👍 确认无误", "confirm_error_free")
        }
    });

    await botClient.SendTextMessageAsync(
        chatId: chatId,
        text: $"{userName}, 文本无错误!",
        replyToMessageId: messageId,
        parseMode: ParseMode.Html,
        replyMarkup: inlineKeyboard,
        cancellationToken: cancellationToken);
}

// 后续在CallbackQueryHandler中处理按钮点击,更新状态
async Task HandleCallbackQuery(ITelegramBotClient botClient, CallbackQuery callbackQuery, CancellationToken cancellationToken)
{
    if (callbackQuery.Data == "confirm_error_free")
    {
        await botClient.EditMessageReplyMarkupAsync(
            chatId: callbackQuery.Message.Chat.Id,
            messageId: callbackQuery.Message.MessageId,
            replyMarkup: new InlineKeyboardMarkup(new[]
            {
                new[]
                {
                    InlineKeyboardButton.WithCallbackData("✅ 已确认", "confirmed")
                }
            }),
            cancellationToken: cancellationToken);
    }
}

3. 发送仅含表情的简洁消息

如果不想用Reaction,也可以只发送单个表情,比带文字的回复更清爽:

else
{
    await botClient.SendTextMessageAsync(
        chatId: chatId,
        text: "👍",
        replyToMessageId: messageId,
        cancellationToken: cancellationToken);
}

4. 编辑Bot历史消息(适合前置交互场景)

如果之前Bot给用户发过提示消息(比如「请提交需要检查的文本」),可以直接编辑那条消息添加反馈,避免新增消息:

// 假设之前保存了Bot发送的提示消息ID:promptMessageId
else
{
    await botClient.EditMessageTextAsync(
        chatId: chatId,
        messageId: promptMessageId,
        text: "✅ 文本无错误!",
        parseMode: ParseMode.Html,
        cancellationToken: cancellationToken);
}

内容的提问来源于stack exchange,提问作者x19

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 11:06:23