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

自用 Android 短信转发方案改进.

  •  
  •   YamatoRyou · 2022-02-10 08:33:43 +08:00 · 2876 次点击
    这是一个创建于 1024 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原帖: https://www.v2ex.com/t/832597
    因为正文排版, 以及宏的变动比较大, 所以不会在原帖 append 了.
    之前没能很好地处理断网期间的转发策略, 所以整个宏又被拆分为 2 个部分.

    此处修改原帖的宏, 使其成为第 1 部分:

    1. --
      c) 动作 2-1: 添加 toast 用于提示短信自动转发失败后执行 Shell 命令, 将待发的短信暂存;
      d) 动作 2-2: 添加 Shell 脚本:
      # 需要 root 权限
      # 挂载根目录为可读写
      mount -o rw,remount /
      
      # 在末尾追加写入一条命令到 /sms_forward_queue.sh
      # 同样需要账号的 token 及房间 ID
      echo -E "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\"" >> /sms_forward_queue.sh
      
      # 在末尾追加写入一个换行符到 /sms_forward_queue.sh
      echo "\n" >> /sms_forward_queue.sh
      
      # 赋予 /sms_forward_queue.sh 可执行权限
      chmod 0766 /sms_forward_queue.sh
      
      # 因为 /sms_forward_queue.sh 的本质是一个 Shell 脚本, 所以选择保存到根目录直到时机成熟时执行
      

    第 2 部分:

    1. 新建一个宏, 触发器选择 "固定时间间隔", 间隔推荐的取值范围 30 秒 ~ 5 分钟;
    2. 添加 2 个局部变量 (全部为字符串类型);
    3. 添加动作:
      a) 动作 1: 添加 Shell 脚本, 发送一个 GET 请求到 Synapse 服务器:
      curl -s https://example.com[:port]/_matrix/federation/v1/version
      # 不提交任何信息, 仅用于尝试连接服务器
      # 需要选择 "将输出保存为字符串变量, 选择步骤 2 新建的变量的其中一个"
      # 建议设置超时
      
      b) 动作 2: 添加 "如果条件", 在其中添加条件: "MacroDroid 特定" -> "MacroDroid 变量", 选择步骤 2 新建的变量的其中一个. 运算符选择 "包括", 值填写
      {"server":{"name":"Synapse","version":"
      
      // 用于判断服务器是否返回了 json, 因为 json 的格式固定就没用正则表达式, 反正无脑判断前几个字符就足够了.
      
      c) 动作 2-1: 添加 Shell 脚本:
      # 判断 /sms_forward_queue.sh 是否存在, 存在返回 true, 不存在返回 false
      if [ -e /sms_forward_queue.sh ]
      then
        print true
      else
       print false
      fi
      
      d) 动作 2-2: 在其中添加 "如果条件", 在其中添加条件: "MacroDroid 特定" -> "MacroDroid 变量", 选择步骤 2 新建的变量的另一个. 运算符选择 "=", 值填写
      true
      
      e) 动作 2-2-1: 添加 toast 用于提示本条短信已暂存并进入待发队列;
      f) 动作 2-2-2: 添加 Shell 脚本:
      # 需要 root 权限
      # 挂载根目录为可读写
      mount -o rw,remount /
      
      # 执行 /sms_forward_queue.sh
      /sms_forward_queue.sh
      
      # 脚本执行完成后删除, 避免重复补发
      rm /sms_forward_queue.sh
      
      g) 动作 2-2-3 (可选): 此处可以添加一个通知 (或 toast) 用于提示短信自动补发成功.

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

    效果:
    现在即使断网也不用担心短信漏发, 一旦恢复联网, 因为触发器的关系会自动执行 /sms_forward_queue.sh 中的命令.
    脚本执行完成后自动删除. 下一个断网周期会重新生成.
    如果长时间断网, 脚本中的命令会累积直到恢复联网.

    第 1 条附言  ·  2022-03-04 00:36:49 +08:00
    MacroDroid 在最近的新版本支持了 HTTP POST, 涉及 POST 的动作现在都可以用 "应用程序 -> HTTP 请求" 等价代换 (/sms_forward_queue.sh 中的 HTTP POST 请求除外, 因为按目前的思路, 它必须脱离 MacroDroid 执行). 对于 Synapse 要求在请求头部添加 "Authorization" 以放置账号的 token, 可以在 "请求头参数" 中添加.
    7 条回复    2022-02-12 10:12:27 +08:00
    someonesnone
        1
    someonesnone  
       2022-02-10 09:42:47 +08:00 via iPhone
    我用 tasker 转发企业微信
    sun522198558
        2
    sun522198558  
       2022-02-10 14:44:02 +08:00
    能主动回复信息吗?
    YamatoRyou
        3
    YamatoRyou  
    OP
       2022-02-10 17:28:56 +08:00
    @sun522198558 这是纯转发方案, 不能也不会考虑. 我搞这个的目的只是为了方便地复制验证码和链接.
    hfl1995
        4
    hfl1995  
       2022-02-11 09:58:32 +08:00
    目前有个 app 叫 小转发 ,还挺好用
    alun8522
        5
    alun8522  
       2022-02-11 15:41:30 +08:00
    tasker 吧
    Marian
        6
    Marian  
       2022-02-11 17:27:06 +08:00 via iPhone
    github 上有个项目 pppscn/SmsForwarder ,还可以对通知进行转发
    pytth
        7
    pytth  
       2022-02-12 10:12:27 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2712 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 05:33 · PVG 13:33 · LAX 21:33 · JFK 00:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.