用iFlow实现飞书群消息控制电脑

用iFlow实现飞书群消息控制电脑(iFlow自己总结的,一字未改,将就着看吧)

背景

远程控制电脑是一个常见需求,通常需要安装专门的远程桌面软件。但如果你只是想简单地在手机上发条消息就能控制电脑执行一些操作,有没有更轻量的方案?

答案是:有!借助 iFlow CLI + 飞书机器人,就能实现这个功能。

整体架构

┌─────────────┐    消息     ┌─────────────┐    保存    ┌─────────────┐
│  飞书群聊   │ ─────────▶ │ 飞书机器人  │ ─────────▶ │ 消息文件    │
│  (手机端)   │            │ (WebSocket) │            │ msg.json    │
└─────────────┘            └─────────────┘            └─────────────┘
                                  ▲                         │
                                  │                         ▼
                            ┌─────────────┐            ┌─────────────┐
                            │  回复文件   │ ◀───────── │ 消息触发器  │
                            │ reply.json  │            │ (键盘模拟)  │
                            └─────────────┘            └─────────────┘
                                  │                         │
                                  │                         ▼
                                  │                   ┌─────────────┐
                                  └─────────────────▶ │   iFlow     │
                                                      │   (AI)      │
                                                      └─────────────┘

核心组件

1. 飞书机器人 (feishu_bot.py)

使用飞书官方 SDK lark-oapi 的 WebSocket 长连接模式,实时接收群消息:

import lark_oapi as lark

# 创建客户端
client = lark.Client.builder() \
    .app_id(APP_ID) \
    .app_secret(APP_SECRET) \
    .build()

# 注册消息事件处理器
event_handler = lark.EventDispatcherHandler.builder("", "") \
    .register_p2_im_message_receive_v1(handle_message) \
    .build()

# 启动WebSocket长连接
ws_client = lark.ws.Client(APP_ID, APP_SECRET, event_handler=event_handler)
ws_client.start()

2. 消息触发器 (feishu_trigger.py)

使用 pyautogui 模拟键盘输入,将消息传递给 iFlow CLI:

import pyautogui
import pyperclip
import pygetwindow as gw

def trigger_iflow(message):
    # 找到PowerShell窗口
    win = find_powershell_window()
    win.activate()
    
    # 复制消息并模拟粘贴+回车
    pyperclip.copy(f"[FEISHU] {message}")
    pyautogui.hotkey('ctrl', 'v')
    pyautogui.press('enter')

3. iFlow CLI 处理与回复

iFlow CLI 是一个运行在命令行的 AI 助手,能够:

  • 识别 [FEISHU] 前缀的消息
  • 执行各种操作(打开网站、查询天气、文件操作等)
  • 将回复写入 feishu_reply.json

4. 回复检测与发送

飞书机器人后台线程定期检查回复文件,发现新回复后自动发送到群里:

def reply_checker():
    while True:
        if has_new_reply():
            send_message(reply_text)
        time.sleep(3)

实现步骤

Step 1: 创建飞书应用

  1. 访问 飞书开放平台
  2. 创建企业自建应用
  3. 获取 App IDApp Secret
  4. 开通权限:im:message.group_msg(接收群消息)
  5. 添加事件订阅:im.message.receive_v1
  6. 选择"使用长连接接收事件"模式

Step 2: 安装依赖

pip install lark-oapi pyautogui pyperclip pygetwindow

Step 3: 运行系统

# 终端1:启动飞书机器人
python feishu_bot.py

# 终端2:启动消息触发器
python feishu_trigger.py

# 终端3:运行 iFlow CLI
iflow

功能演示

在飞书群里发送消息,电脑会自动执行:

  • “打开浏览器访问B站” → 自动打开 bilibili.com
  • “查一下明天深圳天气” → 返回天气预报
  • “关闭浏览器” → 关闭所有浏览器窗口

技术亮点

1. WebSocket 长连接 vs 轮询 API

最初尝试使用飞书的 HTTP API 轮询获取消息,但发现:

  • API 有缓存,返回数据不稳定
  • 轮询效率低,有延迟

改用 WebSocket 长连接后:

  • 消息实时推送,无延迟
  • 无需处理分页和缓存问题

2. 键盘模拟实现进程间通信

由于 iFlow CLI 是一个独立的命令行程序,无法直接调用。通过键盘模拟:

  • 找到目标窗口 → 激活 → 粘贴消息 → 回车
  • 实现了跨进程的消息传递

3. 防止重复发送

使用唯一 ID + 线程锁机制,确保每条回复只发送一次:

LAST_REPLY_ID = None
reply_lock = threading.Lock()

def check_and_send_reply():
    global LAST_REPLY_ID
    with reply_lock:
        reply_id = reply_data.get('id', '')
        if reply_id != LAST_REPLY_ID:
            LAST_REPLY_ID = reply_id
            send_message(reply_text)

完整代码

完整代码已保存在 d:\iflow\ 目录:

  • feishu_bot.py - 飞书机器人主程序
  • feishu_trigger.py - 消息触发器

总结

这个方案展示了 iFlow CLI 的灵活性 —— 只要有合适的中介(文件、键盘模拟等),就能与任何外部系统对接,实现智能化的自动化控制。

无需付费 API,无需复杂的远程桌面软件,一条飞书消息就能控制电脑,是不是很酷?:tada:


本文使用 iFlow CLI 辅助生成

2 个赞