You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何捕获Webogram中聊天新增消息事件以搭建消息分析器?

捕获Telegram新消息事件(Webogram环境)

作为经常折腾Telegram客户端二次开发的人,我来给你梳理下Webogram里捕获新消息的核心思路——毕竟Webogram本身就是基于MTProto协议封装的Web客户端,它内部已经有一套完整的消息接收机制,我们只需要找到切入点挂载自己的逻辑就行:


1. 定位Webogram的消息处理核心

Webogram的源码结构里,消息相关的核心逻辑集中在js/app/messages目录下,尤其是messages.controller.jsupdates.service.js这类文件。Telegram服务器会通过MTProto的Updates推送机制把新消息发给客户端,Webogram会把这些更新分发到对应的处理函数里。

2. 挂载全局消息监听

Webogram用了AngularJS 1.x的架构,内部有全局的更新管理器UpdatesManager,我们可以直接给它添加监听器来捕获所有新消息:

// 在Webogram初始化完成后,注入UpdatesManager并添加监听
angular.module('webogram').run(['UpdatesManager', function(UpdatesManager) {
    // 监听所有类型的服务器更新
    UpdatesManager.addListener('update', function(update) {
        // 筛选出两类核心的新消息更新
        if (update._ === 'updateNewMessage' || update._ === 'updateNewChannelMessage') {
            const newMessage = update.message;
            // 这里拿到的就是完整的消息对象,直接丢给你的分析器就行
            console.log('捕获到新消息:', newMessage);
            
            // 调用你的分析逻辑,比如提取文本、统计关键词、分析发送者等
            runMessageAnalyzer(newMessage);
        }
    });
}]);

3. 提取消息的关键分析字段

拿到newMessage对象后,你可以提取这些核心字段用于分析:

  • newMessage.from_id: 消息发送者的ID(区分普通用户/频道/群组)
  • newMessage.text: 文本消息内容(媒体消息需要看newMessage.media子对象)
  • newMessage.date: 消息发送的Unix时间戳
  • newMessage.chat_id: 消息所属的聊天会话ID

4. 处理非文本类型的消息

如果你的分析器需要覆盖媒体消息,可以通过newMessage._字段判断类型:

  • message._ === 'message': 普通文本消息
  • message._ === 'messageMediaPhoto': 图片消息
  • message._ === 'messageMediaVideo': 视频消息
  • message._ === 'messageMediaDocument': 文档消息

要是需要获取媒体内容的具体信息,可以借助Webogram内置的FilesManager来获取文件路径或预览链接。

5. 开发注意事项

  • 尽量用扩展模块的方式添加逻辑,不要直接修改Webogram的核心源码,避免后续升级冲突
  • 分析逻辑最好做成异步的,别阻塞Webogram的UI渲染
  • 如果是处理大量消息,记得做内存优化,比如定期清理历史分析数据

内容的提问来源于stack exchange,提问作者Петр Василевский

火山引擎 最新活动