分享一个自用的 Android 短信转发方案.

2022-02-09 10:09:37 +08:00
 YamatoRyou

须知:
本方案需要手机有 root 权限, 并依赖 Synapse; curl 及 Tasker (MacroDroid 亦可). 向服务器发送请求由 curl 完成, 如果 Tasker 支持 POST 方法 (我还没来得及测试, Tasker 就再也不能试用了, 不过已知 MacroDroid 不支持 POST 但支持 GET) 可以不用 curl. 你可以按自己的需要魔改本方案.

大概流程 (因为 Tasker 无法使用已卸载, 我现在改用 MacroDroid):

  1. 手机安装 MacroDroid;

  2. 新建一个宏, 触发器选择 "短信来自", 发送者选择 "任何号码";

  3. 添加一个局部变量;

  4. 添加动作:
    a) 动作 1: 添加 Shell 脚本, 发送一个 POST 请求 (由于我使用的是 Synapse, 此处我给出的是 Synapse 允许的请求方式):

    curl -H "Content-Type: application/json" -H "Authorization: Bearer <access_token>" -s -X POST -k -d '{"msgtype": "m.text", "body": "短信转发. 发送者: [sms_number]\u000a\u000a[sms_message]"}' "https://example.com:[port]/_matrix/client/r0/rooms/%21room_id:example.com/send/m.room.message"
    # 请求需要提供一个账号的访问 token 及目标房间 ID, 建议针对短信转发用途新建一个专用账号.
    # [sms_message] 及 [sms_number] 是 MacroDroid 的内置变量, 分别表示短信正文及发送者号码.
    # 选中 "将输出保存为字符串变量", 并选择步骤 3 新建的变量.
    # 选中 "完成后此案后续动作".
    # 这里有个大坑, 如果转发的内容需要换行, 必须使用 "\u000a" 而不是 "\n".
    

    b) 动作 2: 添加 "如果条件", 在其中添加条件: "MacroDroid 特定" -> "MacroDroid 变量", 选择步骤 3 新建的变量. 运算符选择 "不包括", 值填写

    {"event_id":
    
    // 用于判断服务器是否返回了 json, 因为 json 的格式固定就没用正则表达式, 反正无脑判断前几个字符就足够了.
    

    c) 动作 2-1: 添加 toast 用于提示短信自动转发失败后自动打开 Element;
    d) 动作 2-2: 添加 Shell 脚本:

    am start -a "android.intent.action.SEND" --es "android.intent.extra.TEXT" "短信补转发. 发送者: [sms_number]\n\n[sms_message]" -t "text/plain" im.vector.app.debug
    # 命令可能需要 root 权限.
    

    e) 动作 3: 继续从 "如果条件" 添加 "else 从句";
    f) 动作 3-1: 单击一下 "其他", 此处可以添加一个通知 (或 toast) 用于提示短信自动转发成功;
    g) 保存修改.

以上动作的排列顺序:
https://imgur.com/a/y2uqATM

效果:
当收到短信的第一时间会自动转发短信到我自建的 Synapse 服务器 (前提是手机能联网或服务器在线), 其它所有安装了 Element 的终端 (包括备用机; 电脑; 平板电脑等) 都能收到. 灰色为自动发送 (专用账号), 绿色为手动发送 (自己的账号): https://imgur.com/a/OM9hS9H https://imgur.com/a/OaM8FXY

缺点:
如果因为各种原因无法与服务器通信, 则自动打开 Element 并选择联系人手动转发收到的短信. 然而这种情况下如果遭遇短信轰炸, 流程上会出现问题. 例如瞬间收到太多短信会导致人工根本忙不过来. 我希望能在没有人工干预的前提下完成发送到 Element, 等联网恢复再由 Element 发送到服务器. 这个目前尚未实现.

5679 次点击
所在节点    分享创造
14 条回复
nolo
2022-02-09 10:11:57 +08:00
推荐绿芽,收到短信自动转发到微信。还可以在微信回复短信。用了好几年挺稳的
cherbim
2022-02-09 10:14:21 +08:00
tasker 支持 post ,比你这个简单多了,缺点就是应用收费
Maskeney
2022-02-09 10:17:27 +08:00
都用到第三方黑箱软件了,要是我就直接选择 https://github.com/pppscn/SmsForwarder
huoshen
2022-02-09 10:29:11 +08:00
支持这个 https://github.com/pppscn/SmsForwarder, 自用一年多, 因为人在国外手机卡丢了, 所以就补办了一个寄到家里, 然后用旧手机做的短信转发, 配合 bark 到 ios, 而且支持验证码自动复制, 目前来看没丢过任何信息, 非常好用.
yaoyao1128
2022-02-09 10:33:14 +08:00
如果不担心付费的话 绿芽更方便
短信转发挺容易的,但是国内好多软件奇葩的需要发短信验证……所以我用过的软件几乎没有能做到的
之后绿芽也能转发到自己写的 api 不过按照次数扣费
当然 root 之后可以远程或者 airdroid 也可以……
V9NN
2022-02-09 12:01:26 +08:00
自己的方案:
类原生系统 + tasker ,自动转发到 Telegram ,目前稳定使用超过 2 年。
GodD6366
2022-02-09 13:12:26 +08:00
我用的是小转发+webhook ,然后服务器在根据具体内容做二次分发
wujianxiong
2022-02-09 14:31:37 +08:00
买个多卡宝直接解决所有问题
efcndi
2022-02-09 14:53:07 +08:00
@wujianxiong #8 这个还真解决不了所有问题。以我个人的情况为例:我办理了副卡给我老爸老妈用,但有时候必须要验证码才能办理业务,老人家年龄大了,根本搞不懂这些,所以也排除了打电话问验证码的方法。目前找到的相对可行的方法,就是把他们手机上的短信都转发到我的邮箱中,我可以在邮箱中查看。
nathanw
2022-02-09 19:25:09 +08:00
ifttt 了解一下
mokeduo
2022-02-09 21:17:52 +08:00
macrodroid 相比 tasker 要更易使用些, 是不错的选择: 更少的应用调用, 更简洁的操作方式。
既然用到了 shell 脚本, 可以考虑一下 Termux 下的自动脚本: 调用 api 来在单一应用内完成操作, 更多正则过滤可以设立等级日志。
ifttt 这种怕是国内不合用。
pomelo2y
2022-02-10 09:19:52 +08:00
automate 免费的能做到短信收发,
写好规则,如果有网络就转发到邮箱,没网络就转发到短信,
远程发短信可以自定义规则来分割目的号码和短信内容
上述功能稳定使用 1 年多,现在直接放弃手机了,自己搭建 voip 网关,远程短信收发,远程接打电话都 OK
paradox8599
2022-02-12 14:18:45 +08:00
我用的 push bullet ,免费版功能就够用了
mrjnamei
2022-07-10 16:00:57 +08:00
云短信验证码在线接收:

无敌云短信地址: https://www.clearcode.cn
有信云短信: https://smswudi.com
极速云短信: https://www.k8s1.com
云际云短信: https://yunjisms.xyz

可以在线接收验证码,接码平台,通过虚拟手机号获取验证码

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/832597

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX