SmsForwarder:安卓通知自动化转发,打造个人信息中枢
2026/5/6 12:32:34 网站建设 项目流程

1. 项目概述:一个被低估的自动化信息枢纽

如果你和我一样,每天需要处理来自不同平台、不同设备的各类通知和短信,那你一定对信息过载和碎片化深有体会。工作用的企业微信、钉钉,个人生活的微信、短信,还有各种App的验证码、账单提醒……它们散落在各个角落,查看和管理成了一件麻烦事。更别提有些关键信息,比如服务器告警短信、家庭安防通知,一旦错过可能就意味着损失。SmsForwarder这个开源项目,就是为解决这个痛点而生的。它本质上是一个运行在安卓设备上的信息转发器,能够将手机接收到的短信、应用通知,甚至是通话记录,按照你设定的规则,自动转发到其他平台,如 Telegram、钉钉、企业微信、飞书、Bark 等,实现信息的集中管理和实时触达。

我第一次接触这个项目时,以为它只是个简单的“短信转发器”。但深入使用后才发现,它的设计理念和实现方式,远不止“转发”那么简单。它更像是一个高度可定制、基于规则引擎的个人或轻量级业务信息自动化中枢。开发者pppscn用 Kotlin 编写,项目在 GitHub 上开源,其核心价值在于将安卓设备的通知栏变成了一个可编程的输入源。你不再需要为每一个重要的通知单独设置提醒,而是可以通过一套统一的规则,让重要的信息自动找到你,而无关紧要的信息则被安静地过滤掉。

这个项目特别适合几类人:运维人员(需要实时接收服务器告警短信)、多设备使用者(希望在一处查看所有设备的通知)、关注特定信息的人(如抢购通知、快递状态变更),以及任何希望提升数字生活效率的极客或普通用户。它的部署极其简单,只需要一部闲置的安卓手机(或模拟器),无需 root 权限,通过直观的图形界面配置即可。接下来,我将从设计思路、核心配置、实战场景到深度优化,为你完整拆解这个强大的工具。

2. 核心设计思路与架构解析

2.1 为什么是安卓设备作为信息源?

在讨论具体功能前,必须先理解项目的一个基本前提:为什么选择安卓设备作为信息采集端?这背后有深刻的现实考量。首先,短信和大部分应用通知的接收,在操作系统层面具有最高的权限和最原始的访问能力。iOS 系统由于其严格的沙盒和安全策略,第三方应用几乎无法实时、可靠地获取系统级短信和其他应用的通知内容。而安卓系统,尽管版本迭代也在收紧权限,但通过辅助功能(Accessibility Service)和通知监听服务(Notification Listener Service),应用仍然可以在用户授权下,合法、稳定地读取通知栏内容。

其次,成本与普及度。一部闲置的安卓旧手机(甚至百元机)是成本最低、最可靠的“硬件传感器”。它拥有独立的 SIM 卡槽、完整的网络功能(Wi-Fi/移动数据)和持久的电源供应(插电即可)。相比于自建一套接收短信的硬件模块(如 GSM Modem),或者依赖某些不稳定的云短信 API,使用实体手机方案在可靠性、隐私性和零成本方面具有压倒性优势。SmsForwarder 正是巧妙地利用了这一点,将每部安卓手机变成了一个强大的信息网关。

2.2 核心工作流与规则引擎

SmsForwarder 的核心是一个事件驱动的规则引擎。它的工作流可以简化为四个步骤:捕获 -> 过滤 -> 处理 -> 发送

  1. 捕获:应用通过安卓的NotificationListenerService捕获所有到达通知栏的消息,包括短信和应用通知。对于短信,它还会通过ContentObserver监听短信数据库的变化,实现双保险。捕获到的原始信息包含了发送方(号码或应用包名)、内容、时间等元数据。

  2. 过滤:这是项目的灵魂所在。所有捕获到的事件并不会全部转发,而是进入规则过滤器。你可以在 App 内定义多条规则,每条规则由“触发条件”和“执行动作”构成。

    • 触发条件:支持对信息的多个字段进行匹配。例如:
      • 手机号包含1008695588
      • 发送方(对于通知,是应用包名,如com.taobao.taobao)等于指定值。
      • 内容包含关键词 “验证码”、“告警”、“派件”。
      • 支持正则表达式,实现更复杂的模式匹配,如匹配所有格式为【XX公司】开头的短信。
    • 执行动作:当一条信息满足某条规则的所有条件时,则触发该规则对应的动作。动作主要是将信息按特定格式发送到指定的“转发渠道”。
  3. 处理:在发送前,信息会经过模板处理。SmsForwarder 允许你自定义消息模板,你可以决定最终发送出去的消息长什么样。例如,你可以将模板设置为:【{{来源}}】{{时间}}:{{内容}}那么一条来自 10086 的短信 “您的余额已不足10元” 就会被格式化为:【短信-10086】2023-10-27 14:30:15:您的余额已不足10元这种处理极大地提升了消息的可读性和后续自动化处理的便利性(例如,方便在 Telegram 中设置关键词高亮)。

  4. 发送:将格式化后的消息,通过配置好的发送器(Sender),投递到目标平台。项目支持多达十几种发送通道,每种通道都有其特定的配置和使用场景。

这个“规则引擎”的设计,使得 SmsForwarder 从简单的转发工具,进化成了一个声明式的信息自动化系统。你只需要告诉它“当遇到什么样的信息时,把它发到哪里、变成什么样子”,剩下的全部自动完成。

2.3 多渠道发送器选型与对比

SmsForwarder 支持丰富的发送渠道,理解它们的特点和适用场景是高效配置的关键。下面是一个核心渠道的对比分析:

发送渠道类型核心优势适用场景配置关键点
Telegram Bot即时通讯推送能力强,支持 Markdown 格式化,API 稳定,适合个人或小团队。个人信息汇总、服务器告警、自动化脚本通知。需要创建 Bot 并获取bot_tokenchat_id
钉钉群机器人企业通讯与企业工作流深度集成,支持签名安全校验,消息格式丰富。运维告警、业务监控、团队任务通知。需在钉钉群添加“自定义机器人”并获取WebhookSecret
企业微信机器人企业通讯与微信生态互通,在国内访问稳定,同样支持多种消息类型。国内团队协作、内部系统通知。需在企业微信群添加“群机器人”并获取Webhook Key
飞书群机器人企业通讯界面现代,API 功能强大,文档友好,适合互联网团队。项目进度同步、系统状态监控。需在飞书群添加“自定义机器人”并获取Webhook URL
Bark推送服务专为 iOS 设备设计,送达率极高,配置极其简单,无复杂概念。苹果用户接收个人重要通知(验证码、快递)。只需在 iPhone 上安装 Bark App,获取其提供的唯一推送 URL。
Webhook通用协议最灵活,可以将消息转发到任何能处理 HTTP 请求的服务,如自建服务器、自动化平台(如 n8n, IFTTT)。二次开发、与复杂业务系统集成、触发其他自动化流程。需提供一个可公网访问的 URL,并可自定义请求头(Header)和请求体(Body)。
电子邮件邮件通用性强,适合归档或通知不常看即时通讯软件的人。重要信息的邮件备份、周报类汇总信息发送。需配置 SMTP 服务器信息(如 QQ 邮箱、163 邮箱或企业邮箱)。

注意:在选择渠道时,首要考虑可达性可靠性。对于关键告警,建议至少配置两个不同原理的通道(如“Telegram Bot + 钉钉机器人”)作为互备。个人使用,Telegram 和 Bark 是体验最佳的选择;团队办公场景,则优先选用钉钉、企业微信或飞书。

3. 从零开始的详细配置实战

假设我们手头有一部闲置的安卓手机(系统版本建议 Android 8.0 及以上),希望实现:1. 将所有银行短信转发到 Telegram 供存档;2. 将淘宝的物流通知转发到 Bark 提醒自己;3. 将服务器监控宝的告警短信转发到钉钉工作群。

3.1 基础环境准备与安装

  1. 设备准备:将闲置手机恢复出厂设置,插入一张能正常接收短信的 SIM 卡(可以是月租最低的保号套餐卡)。连接上稳定的 Wi-Fi 网络,并设置为“永不休眠”。在电源设置中,关闭所有省电优化选项,防止应用后台被杀死。
  2. 安装应用:在手机浏览器中访问 SmsForwarder 的 GitHub Releases 页面,下载最新的 APK 安装包并安装。或者通过 Google Play 搜索 “SmsForwarder” 安装(如果可用)。
  3. 授予必要权限:打开 SmsForwarder App,它会逐步引导你开启所需权限,这是最关键的一步:
    • 通知读取权限:在系统设置 -> 应用 -> SmsForwarder -> 通知访问(或“允许通知监听”)中,开启权限。这是读取所有应用通知的钥匙。
    • 短信读取权限:同样在应用权限管理中,开启“短信”读取权限。
    • 电池优化忽略:在系统电池优化设置中,找到 SmsForwarder,选择“不优化”,确保其能长期后台运行。
    • 自启动权限:在手机管家中,允许 SmsForwarder 自启动。

实操心得:不同品牌手机(小米、华为、OPPO、vivo 等)的权限名称和设置路径差异很大。如果遇到转发失败,第一个排查点就是检查以上权限是否真正开启。特别是国内定制系统,可能还有“应用锁”、“后台弹出界面”等额外限制,需要一并允许。

3.2 配置第一个转发渠道:Telegram Bot

我们的目标是将银行短信归档到 Telegram。

  1. 创建 Telegram Bot
    • 在 Telegram 中搜索@BotFather并对话。
    • 发送/newbot指令,按提示设置机器人名字(如MySmsBankBot)和用户名(必须以bot结尾,如my_sms_bank_bot)。
    • 创建成功后,BotFather会返回一个HTTP API令牌,形如1234567890:ABCDEFGhijklmnopQRSTUVWXYZ妥善保存这个token,它就是机器人的钥匙
  2. 获取你的 Chat ID
    • 在 Telegram 中,找到你刚刚创建的 Bot,向它发送任意一条消息,比如/start
    • 打开浏览器,访问这个 URL(将<bot_token>替换为你的 token):https://api.telegram.org/bot<bot_token>/getUpdates
    • 在返回的 JSON 数据中,找到"chat":{"id":xxxxxx}字段,其中的xxxxxx(可能为负数)就是你的私人chat_id。如果是群组,需要先将 Bot 拉入群组,然后在群组里发条消息,再用同样方法获取群组的chat_id
  3. 在 SmsForwarder 中添加发送器
    • 打开 SmsForwarder App,进入“发送通道”页面,点击右上角 “+”。
    • 选择 “Telegram”, 填写:
      • 名称:TG-银行归档
      • bot_token: 粘贴刚才获取的 token。
      • chat_id: 粘贴你的私人 chat_id。
      • 代理(可选):如果你的网络环境无法直接访问 Telegram API,可以在这里配置 HTTP 或 SOCKS5 代理。
    • 点击“测试”按钮。如果配置正确,你的 Telegram 会立即收到一条来自 Bot 的测试消息。这步测试至关重要,能避免后续规则失效时,问题定位复杂化。

3.3 配置规则:抓取所有银行短信

现在有了发送渠道,我们需要创建规则来告诉 App:什么样的信息该通过这个渠道发送。

  1. 进入“转发规则”页面,点击 “+”
  2. 规则设置
    • 规则名:转发银行短信
    • 匹配字段:选择“发送方号码”。
    • 操作符:选择“正则匹配”。
    • 匹配值:填写(95588|95599|95566|95533|95555)。这是一个简单的正则表达式,匹配工、农、中、建、招五大行的客服号码。你可以根据需要添加更多,如(95588|95599|95566|95533|95555|10086)
    • 重要:勾选下方的“短信”作为消息来源。
  3. 动作设置
    • 点击“动作”区域的 “+”。
    • 选择发送通道为刚才创建的TG-银行归档
    • 消息模板可以自定义。例如:
      银行通知 时间:{{time}} 来源:{{from}} 内容: {{content}}
    • 点击保存。

至此,一条完整的规则就配置好了。当手机收到来自 95588 等号码的短信时,App 会将其内容按照模板格式化,然后通过你配置的 Telegram Bot 发送到你的私人聊天窗口。

3.4 进阶配置:区分通知类型与多动作触发

接下来,配置淘宝物流通知到 Bark,以及服务器告警到钉钉。这涉及到对“应用通知”的识别和多动作配置。

  1. 配置 Bark 发送器

    • 在 iPhone 上安装 Bark App,打开后即可看到你的专属推送 URL,类似https://api.day.app/your_device_key/
    • 在 SmsForwarder 中添加发送器,类型选“Bark”,名称填“Bark-物流提醒”,URL 填你获取到的完整地址。
    • 点击测试,iPhone 应收到一条测试推送。
  2. 创建淘宝物流规则

    • 难点在于如何确定淘宝通知的“发送方”。在 SmsForwarder 的“日志”页面,先手动触发一次淘宝的物流通知(比如在淘宝里查看物流)。然后查看最新日志,找到对应条目,其中的“发送方”字段就是淘宝的包名,通常是com.taobao.taobao
    • 新建规则,规则名“淘宝物流”。
    • 匹配字段选“发送方”,操作符“等于”,匹配值填com.taobao.taobao
    • 同时,为了更精确,可以添加第二个匹配条件(点击“添加匹配”):匹配字段选“内容”,操作符“包含”,匹配值填“签收”或“派件”。这样只有物流状态变化的通知才会被触发。
    • 在动作中,选择 Bark 发送器,模板可以简单设为📦 淘宝物流:{{content}}
  3. 配置钉钉机器人并处理告警短信

    • 在钉钉工作群,点击“群设置” -> “智能群助手” -> “添加机器人” -> “自定义机器人”。
    • 设置机器人名字,如“服务器告警”,安全设置选择“加签”,记录下生成的WebhookURL 和Secret
    • 在 SmsForwarder 中添加发送器,类型“钉钉机器人”,填入 Webhook 和 Secret,测试连通。
    • 新建规则“服务器告警”。由于监控宝等服务的告警短信通常来自固定的特服号(如1069xxxx),我们可以用“发送方号码”匹配。更通用的做法是匹配“内容”中的关键词,如“告警”、“异常”、“Error”、“CPU”、“内存”。
    • 在动作中,选择钉钉机器人。钉钉支持 Markdown,因此可以设计更清晰的模板:
      **🚨 服务器告警** > 时间:{{time}} > 来源:{{from}} 详情: {{content}}
    • 多动作配置:对于核心告警,你可以在同一条规则下添加第二个动作,选择另一个发送器(如企业微信),实现双重保险。

通过以上步骤,一个功能清晰、各司其职的自动化信息转发系统就搭建完成了。闲置手机变成了一个 7x24 小时在线的信息过滤与路由中枢。

4. 高阶技巧与深度优化方案

基础功能用起来后,我们可以追求更高效、更稳定的方案。以下是几个提升使用体验的关键技巧。

4.1 利用“变量”与“模板”实现动态消息

SmsForwarder 的模板引擎支持变量,除了内置的{{from}}{{content}}{{time}},你还可以在规则中自定义变量,并在模板中使用。

  • 场景:转发验证码短信时,我们可能只关心那 6 位数字,希望把它提取出来并高亮显示。
  • 实现
    1. 创建一条匹配验证码短信的规则(匹配内容包含“验证码”)。
    2. 在规则的高级设置中,使用正则表达式提取组。例如,匹配值可以设为:验证码是(\d{6}),。这个正则表达式中的(\d{6})就是一个捕获组。
    3. 在动作的模板中,你可以用{{1}}来引用第一个捕获组的内容。模板可以写成:验证码:**{{1}}**, 来自 {{from}},请勿泄露。这样,最终推送的消息就会清晰地突出那 6 位数字,极大提升了阅读效率。

4.2 通过“Webhook”触发更复杂的自动化流程

Webhook 发送器是 SmsForwarder 连接外部世界的万能接口。你可以将消息转发到任何支持 HTTP 请求的服务。

  • 场景一:消息入库与数据分析。你可以搭建一个简单的 Flask 或 Node.js 服务,接收 SmsForwarder 发来的 Webhook 请求,将短信内容(如消费记录)解析后存入数据库(如 MySQL 或 SQLite),后续可以生成月度消费报表。
    • SmsForwarder 的 Webhook 配置:URL 填你的服务地址,如http://your-server:5000/sms,请求体可以设置为 JSON 格式:{"sender": "{{from}}", "message": "{{content}}", "time": "{{time}}"}
  • 场景二:联动智能家居。如果你使用 Home Assistant 等平台,可以设置一个自动化:当收到特定短信(如“我快到家了”)时,Webhook 触发 Home Assistant 的接口,执行打开空调、亮起客厅灯等操作。
  • 场景三:消息聚合与去重。有些通知可能会在短时间内重复发送(如连续的服务器 ping 超时告警)。你可以在自建服务端实现一个简单的逻辑:对相同内容的消息,在 5 分钟内只记录一次,或者将多条合并为一条摘要再发送到最终渠道,避免信息轰炸。

4.3 保障系统稳定性的关键设置

让一个 App 在安卓后台长期稳定运行是个挑战,尤其是国内各厂商定制系统。

  1. 网络策略:在 SmsForwarder 的设置中,开启“Wi-Fi 和移动数据”同时使用。并建议在手机系统设置中,为 SmsForwarder 应用**禁用“流量节省程序”和“智能省流量”**功能,防止其在后台被断网。
  2. 心跳与日志:开启 SmsForwarder 内置的“定期心跳”功能。它可以配置一个周期(如每 6 小时)向某个发送器(如 Telegram)发送一条“我还活着”的消息。这是监控应用是否存活最直接的方式。同时,定期查看应用内的“日志”页面,能帮助你快速定位转发失败的原因(如网络错误、渠道配置失效)。
  3. 设备级保活(谨慎使用):如果经过以上设置,应用仍频繁被系统清理,可以考虑一些温和的保活方案,例如使用系统“小部件”(如果支持)将 SmsForwarder 固定在桌面,或使用其他工具(如“黑阈”的“充电时忽略”模式)进行协同管理。不推荐使用过于激进的保活手段,以免过度耗电或导致系统卡顿。

5. 常见问题排查与实战心得

即使配置再仔细,在实际运行中也可能遇到问题。下面是我在长期使用中总结的“排错清单”。

问题现象可能原因排查步骤与解决方案
收不到任何转发消息1. 权限未正确授予。
2. 应用被系统杀后台。
3. 规则匹配条件设置错误。
1. 重新检查“通知读取”、“短信读取”权限是否开启。
2. 检查电池优化设置,确保 SmsForwarder 为“不优化”。重启手机后观察。
3. 查看“日志”页面,看是否有捕获到通知/短信的记录。如果没有,是权限或后台问题;如果有记录但未触发转发,检查规则匹配条件。
特定App通知无法转发1. 该App的通知样式特殊。
2. 通知内容在展开前为空。
1. 在 SmsForwarder 的“通知监听”设置中,尝试开启“捕获通知详情”。
2. 在手机系统设置中,找到该App的通知设置,确保“锁屏通知”、“悬浮通知”等是开启状态,让通知完整显示。
Telegram/Bot 测试成功,但收不到转发1.chat_id填写错误或已失效。
2. 机器人被禁言或踢出群组。
1. 重新访问getUpdatesAPI 确认当前的chat_id
2. 在 Telegram 中检查与 Bot 的对话或所在群组,确保 Bot 有发送消息的权限。
钉钉/企业微信机器人收不到消息1. Webhook URL 或 Secret 填写错误。
2. 安全设置(如 IP 白名单、关键词)限制。
1. 重新从群机器人设置页面复制完整的 Webhook URL,注意不要遗漏或添加空格。
2. 检查机器人安全设置:如果是“自定义关键词”,确保发送的消息模板中包含至少一个关键词;如果是“加签”,确保 Secret 填写正确。
消息转发延迟大1. 手机网络状况差。
2. 系统处于深度休眠。
1. 确保手机连接信号良好的 Wi-Fi。
2. 关闭手机的“睡眠模式”或“超级省电模式”,并确认 SmsForwarder 已在后台运行白名单中。
转发内容乱码或不全1. 模板配置有误。
2. 源通知内容本身包含特殊字符或换行。
1. 检查消息模板,变量如{{content}}是否拼写正确。
2. 查看“日志”中捕获的原始内容,如果这里就不全,是捕获问题;如果这里完整但转发后不全,可能是发送渠道对消息长度或格式有限制,需调整模板。

我的几点核心心得

  1. 始于日志,终于日志:遇到任何问题,第一个动作就是打开 SmsForwarder 的“日志”页面。它能告诉你应用是否收到了通知、规则是否匹配成功、发送器是否执行以及具体的错误信息。这是定位问题的黄金入口。
  2. 测试驱动配置:每配置好一个发送器,务必点“测试”;每创建一条重要规则,可以手动触发一次符合条件的通知(比如给自己发条测试短信),观察整个链路是否通畅。不要等所有配置都做完再测试。
  3. 规则宜精不宜多:避免创建大量宽泛的规则,这会影响匹配效率并可能产生意料之外的消息轰炸。尽量让规则具体化,多用“与”条件进行组合过滤。
  4. 隐私安全红线:这部手机将接收你所有的短信和通知。务必将其视为一个受信任的私有设备。不要安装来源不明的应用,定期更新系统和 SmsForwarder 版本。切勿将用于转发的 Token、Webhook、Secret 等信息泄露出去。

SmsForwarder 的强大,在于它用简单的逻辑解决了信息碎片化的复杂问题。它不需要你懂编程,但通过巧妙的规则配置,却能实现堪比脚本的自动化效果。花上半天时间搭建并调校好这个系统,它将在未来很长一段时间里,默默为你守护信息流,让重要的声音第一时间被听到,让无用的噪音自动消弭于无形。这或许就是数字时代,一种优雅的减法智慧。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询