V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
YamatoRyou
V2EX  ›  分享创造

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

  •  1
     
  •   YamatoRyou · 363 天前 · 3465 次点击
    这是一个创建于 363 天前的主题,其中的信息可能已经有所发展或是发生改变。

    须知:
    本方案需要手机有 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 发送到服务器. 这个目前尚未实现.

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

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

    可以在线接收验证码,接码平台,通过虚拟手机号获取验证码
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   5011 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 05:59 · PVG 13:59 · LAX 21:59 · JFK 00:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.