C#中Telegram Bot向用户发送私人通知及支持指令交互的方案问询
C# 实现Telegram Bot主动推送私人消息及指令交互方案
完全可以实现你的需求,主动给指定用户发私人消息不需要Bot持有群组/频道管理员权限,核心前提是你需要拿到用户的唯一Telegram Chat ID,且用户和你的Bot有过至少一次主动交互(即用户同意接收消息的前提)。
核心实现步骤
- 第一步:安装C# Telegram Bot官方封装SDK,NuGet安装命令:
Install-Package Telegram.Bot - 第二步:完成用户授权绑定:引导用户主动给你的Bot发送
/start指令,在Bot的消息回调中获取该用户的Chat.Id字段,将这个ID和你业务系统的用户账号做关联存储,即完成授权流程 - 第三步:业务触发主动推送消息,直接调用SDK的发送接口即可
主动推送私人消息代码示例
using Telegram.Bot; using Telegram.Bot.Types.Enums; // 初始化Bot客户端,替换为你从@BotFather获取的Bot Token var botClient = new TelegramBotClient("你的Bot Token"); // 通用推送通知方法 async Task SendSystemNotification(long userChatId, string notifyContent) { await botClient.SendTextMessageAsync( chatId: userChatId, text: notifyContent, parseMode: ParseMode.MarkdownV2 ); } // 用户登录时触发调用示例,123456789为该用户绑定的Chat ID await SendSystemNotification(123456789, "您的账号刚刚完成登录操作,如非本人操作请及时联系管理员");
后续指令交互及权限校验实现
你可以通过长轮询或者Webhook模式监听用户发送给Bot的指令,执行前先做权限校验即可,示例如下:
var receiverOptions = new Telegram.Bot.ReceiverOptions { AllowedUpdates = new [] { UpdateType.Message } }; // 启动消息监听 botClient.StartReceiving( updateHandler: async (client, update, ct) => { if (update.Message?.Text is not string msgContent || update.Message.Chat.Id == 0) return; var senderChatId = update.Message.Chat.Id; // 优先校验权限:查询该Chat ID是否属于你业务系统的管理员 if (!CheckAdminPermission(senderChatId)) { await client.SendTextMessageAsync(senderChatId, "权限不足,无法执行该操作", cancellationToken: ct); return; } // 匹配指令执行对应逻辑 if (msgContent.StartsWith("/adduser")) { // 解析指令参数,执行添加用户的业务逻辑 bool execResult = AddNewUser(msgContent.Split(' ').Skip(1).ToArray()); await client.SendTextMessageAsync(senderChatId, execResult ? "新用户添加成功" : "添加失败,请检查参数是否正确", cancellationToken: ct); } // 其他指令可以继续扩展匹配 }, pollingErrorHandler: (_, _, _) => Task.CompletedTask, receiverOptions: receiverOptions );
注意事项
- 如果用户删除了和Bot的对话,你主动发消息会返回403错误,捕获该错误后清空该用户的Chat ID绑定关系即可
- 不要推送无关垃圾内容,否则被用户举报会导致Bot被平台封禁
- 纯私人消息交互场景不需要给Bot配置任何额外权限
内容的提问来源于stack exchange,提问作者VincentBester
相关产品推荐
相关产品推荐

