- 移动开发
【免费下载链接】android_income_sms_gateway_webhook
Simple Android incoming SMS to URL forwarder
📱 android_income_sms_gateway_webhook(Incoming SMS to URL forwarder)是一款免费的开源 Android 应用,能把手机收到的短信以 JSON 格式通过 HTTP POST 自动转发到你指定的 URL。而它内置的Text filter(文本过滤器)可以用一行正则表达式,决定哪些短信值得转发、哪些直接丢弃——本文带你从零配置,到"反向排除"的实战玩法。
为什么需要"短信文本过滤器"?
默认情况下,转发规则只按发件人(Sender)匹配:一旦命中,这个号码的所有短信都会被转发。但现实中你往往只关心其中一部分——比如只要银行验证码,不想要验证码营销轰炸。
Text filter 就是为此设计的:它是每条转发规则里的一个可选字段,填入一条 Java 正则表达式后,只有短信正文匹配该正则时消息才会被转发。
- 字段名称:
Text filter (regex, optional),文案定义见 strings.xml - 表单控件位于规则编辑弹窗的 "ROUTING PARAMETERS" 区域:dialog_config_edit_form.xml
- 留空 = 转发全部消息(保持历史行为,不影响老用户)
快速上手:只转发包含关键词的短信
配置步骤只有三步:
- 打开 App,点右下角"+"新建转发规则
- Sender填
*(星号表示匹配任意发件人,纯按内容过滤) - 在Text filter (regex, optional)中填入正则,再填 Webhook URL,保存
匹配采用子串匹配(Java 的find()):关键词出现在正文任意位置即可命中,无需锚定开头。
| 填入的正则 | 转发效果 |
|---|---|
OTP | 正文包含 "OTP" 的短信 |
OTP\|verification code | 包含 "OTP" 或 "verification code" 任一短语 |
(?i)verification | 忽略大小写匹配 "verification" |
您的验证码 | 匹配中文短信(如银行验证码) |
💡 提示:匹配是区分大小写的,需要忽略大小写时在正则开头加(?i)前缀。
反向排除实战:转发"不包含某词"的所有短信
更实用的场景是反过来:我想转发所有短信,但排除广告。一条负向先行断言(negative lookahead)即可搞定:
(?s)^(?!.*OTP)逐段拆解这"一行"的构成:
^—— 定位到消息开头(?s)—— 让.能匹配换行符,多行短信中任何一行出现关键词都能被抓住(?!.*OTP)—— 负向先行断言:断言其后不存在"OTP" 字样
也就是说:凡是不含"OTP" 的短信都会被转发,含 "OTP" 的被过滤。
想同时排除多个关键词并忽略大小写?组合一下:
(?si)^(?!.*(spam|promo))它会转发所有不含"spam" 或 "promo"(不分大小写)的消息。这个"反向排除"行为在项目的仪器化测试中有专门覆盖:SmsReceiverTest.java(testSmsBlockedWhenExcludeFilterMatches与testSmsPassedWhenExcludeFilterDoesNotMatch)。
容错设计:为什么你的正则写错了也不会丢短信?
这是该项目一个非常贴心的细节(源码见 SmsBroadcastReceiver.java 的matchesFilter方法):
| 情况 | 行为 |
|---|---|
| 过滤器留空 | ✅ 转发全部(历史默认行为) |
| 正则合法且匹配 | ✅ 转发该条短信 |
| 正则合法但不匹配 | ⛔ 不转发 |
| 正则语法非法 | ✅仍然转发,并记录错误日志(fail open) |
换句话说,手滑打错正则永远不会静默吞掉你的验证码——消息照常转发,错误会写进日志。你可以在规则弹窗里点TEST按钮发一条测试请求验证链路,再点主界面的Syslog按钮查看 Logcat 中记录的正则编译错误(该字段持久化在 ForwardingConfig.java 的smsFilter字段)。
⚠️ 对比记忆:发件人正则(Sender is a regular expression)写错时是"失败关闭"(一条都不转发),而文本过滤器写错是"失败放行"。前者防泄漏,后者防丢码。
进阶组合:过滤 + 提取 + 直达 Telegram
文本过滤器解决"要不要发",配套的%Regex=...%占位符解决"发什么"——两者配合可以只转发且只提取关键数据:
- 模板里写
"code": "%Regex=(\\d+)%",即可从Your code is 123456中抽出123456 - 将 Webhook URL 指向 Telegram Bot API(
https://api.telegram.org/bot<YourBOTToken>/sendMessage?chat_id=<channel_id>),配合过滤规则,就得到一个"只把重要短信推送到手机"的极简网关,全程无需云服务和注册
完整字段说明(%from%、%text%、%sentStamp%等占位符)可参考 README.md 的 "Request info" 与 "Filter by message text" 章节。
常见问题(FAQ)
Q:配了过滤器后短信没转发,怎么排查?先用 TEST 按钮确认 Webhook 可达;再用 Syslog 查看是否有 "Invalid filter regex" 日志。另外注意:该 App 只转发SMS,走 RCS 通道的消息不会触发,可在 Google Messages 中关闭 RCS 测试(详见 README.md 的 "RCS messages are not forwarded")。
Q:过滤器和发件人条件是"与"还是"或"?"与"——两者都满足才转发。想纯按内容过滤,把 Sender 设为*即可。
小结
| 需求 | 一行正则 |
|---|---|
| 只含 "OTP" 的短信 | OTP |
| 多关键词任一命中 | OTP\|verification code |
| 排除含 "OTP" 的短信 | (?s)^(?!.*OTP) |
| 排除多个词且忽略大小写 | (?si)^(?!.*(spam\|promo)) |
掌握这一个Text filter字段,你已能覆盖绝大多数"短信该不该转发"的判断场景。核心逻辑源码路径:app/src/main/java/tech/bogomolov/incomingsmsgateway/SmsBroadcastReceiver.java,测试用例:app/src/androidTest/java/tech/bogomolov/incomingsmsgateway/SmsReceiverTest.java。
- 移动开发
【免费下载链接】android_income_sms_gateway_webhook
Simple Android incoming SMS to URL forwarder
相关推荐
changedetection.io过滤器系统:包含排除与正则匹配
changedetection.io过滤器系统:包含排除与正则匹配 在网站变更检测领域,changedetection.io 提供了业界领先的过滤器系统,能够精
后端告警AI 应用CANN/Ascend C SoftmaxGrad示例
SoftmaxGrad Example Overview This example uses the SoftmaxGrad or SoftmaxGradFro
人工智能深度学习高性能计算CANNCoursera-dl章节过滤功能:用正则表达式只下载特定周的课程内容
Coursera dl章节过滤功能:用正则表达式只下载特定周的课程内容 引言 在学习Coursera课程时,我们经常需要下载特定周的课程内容,而不是整个课程。C
网页爬虫CLI教育
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考