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

2022-02-10 08:33:43 +08:00
 YamatoRyou

原帖: 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 中的命令.
脚本执行完成后自动删除. 下一个断网周期会重新生成.
如果长时间断网, 脚本中的命令会累积直到恢复联网.

2585 次点击
所在节点    分享创造
7 条回复
someonesnone
2022-02-10 09:42:47 +08:00
我用 tasker 转发企业微信
sun522198558
2022-02-10 14:44:02 +08:00
能主动回复信息吗?
YamatoRyou
2022-02-10 17:28:56 +08:00
@sun522198558 这是纯转发方案, 不能也不会考虑. 我搞这个的目的只是为了方便地复制验证码和链接.
hfl1995
2022-02-11 09:58:32 +08:00
目前有个 app 叫 小转发 ,还挺好用
alun8522
2022-02-11 15:41:30 +08:00
tasker 吧
Marian
2022-02-11 17:27:06 +08:00
github 上有个项目 pppscn/SmsForwarder ,还可以对通知进行转发
pytth
2022-02-12 10:12:27 +08:00

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

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

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

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

© 2021 V2EX