原帖: https://www.v2ex.com/t/832597
因为正文排版, 以及宏的变动比较大, 所以不会在原帖 append 了.
之前没能很好地处理断网期间的转发策略, 所以整个宏又被拆分为 2 个部分.
# 需要 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 脚本, 所以选择保存到根目录直到时机成熟时执行
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 用于提示本条短信已暂存并进入待发队列;# 需要 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
中的命令.
脚本执行完成后自动删除. 下一个断网周期会重新生成.
如果长时间断网, 脚本中的命令会累积直到恢复联网.
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.