使用Bot Framework(.Net)开发Telegram Bot时多数事件无法触发的咨询
Bot Framework(.NET) Telegram Bot 事件触发问题解析
核心结论
这不是Bot Framework的限制,而是Telegram平台本身的API能力决定的——部分你提到的事件,Telegram根本不会向Bot推送对应的Webhook事件,因此Bot Framework无法捕获并触发对应的处理方法。
具体事件分析
针对你列出的事件,逐一说明Telegram平台的支持情况:
- 新会话相关(OnMembersAddedAsync/OnConversationUpdateActivityAsync):
Telegram仅在用户主动发送第一条消息(包括/start命令)时,才会推送会话更新事件。如果用户只是搜索打开Bot会话但未发消息,Telegram不会推送任何事件,因此框架无法触发这类方法。 - 用户拉黑相关(OnMembersRemovedAsync/OnInstallationUpdateRemoveAsync):
Telegram完全不提供用户拉黑Bot的Webhook推送,Bot Framework没有任何信号源可以捕获这个操作,所以对应的方法永远不会触发。 - 命令事件(OnCommandActivityAsync):
Telegram的命令(如/start)会被作为普通的MessageActivity推送,而非CommandActivity,因此你需要在OnMessageActivityAsync中判断消息文本是否以/开头来处理命令,OnCommandActivityAsync不会被触发。 - 消息更新(OnMessageUpdateActivityAsync):
Telegram支持推送编辑后的消息,但需要确保你的Telegram Bot已开启编辑消息的Webhook推送权限,且Bot Framework的Telegram适配器正确映射了该事件。如果未触发,优先检查Telegram Bot的Webhook配置。 - 其他事件(OnEventActivityAsync/OnEndOfConversationActivityAsync等):
这类事件大多是Bot Framework针对自家Web Chat或其他支持该规范的平台设计的,Telegram平台没有对应的事件类型,因此无法触发。
可行替代方案
- 新会话识别:在
OnMessageActivityAsync中捕获用户的第一条消息(比如判断是否是首次对话),以此作为新会话的触发点。 - 用户拉黑检测:Telegram没有直接推送,只能通过定期尝试给用户发送消息,根据返回的错误码(如403 Forbidden)来间接判断用户是否拉黑了Bot,但这种方法存在频率限制和时效性问题。
内容的提问来源于stack exchange,提问作者AndrewTheWild
相关产品推荐
相关产品推荐

