MorFans Dev
折腾 - 开发 - 分享

备用机养成方案 - Tasker 安卓短信转发到 telegram

备用机养成方案 - Tasker 安卓短信转发到 telegram

最近入了一个 iPhone 7 来当备用机,结果被苹果 iOS 优秀的体验给吸引走了,手上的安卓机沦为了备用机(大雾)🤣。

但是这台 iPhone 当初购买时候只是为了应付跑微信和支付宝两个app的。
【对,就只要求跑这两个,因为安卓我经常搞机,现在养老真香】
所以根本就没考虑双卡等事情。

目前使用下来,最烦人的地方非短信接收莫属了。因为只要是室内环境,安卓手机基本就呆在书包、抽屉、插座附近,收个验证码还要找半天手机。

为了让我平时能少点麻烦 (能偷偷懒) ,所以最近花点时间解决掉了这个问题,在这里简单记录分享一下。

方案

这里列出了我目前在使用和备用的方案

跨设备短信接收发送方案:

安卓手机有两个 APP 可以轻松实现在电脑设备上实现短信 接收和发送,只需要安装相应 APP 配对即可,还有挺多附加的实用功能。

注意:手机要在设备旁边

  • 微软《你的手机助手》【安卓 -> Windows】
  • KDE Connect 【安卓 -> Linux GUI】

跨设备短信接收方案:

如果网络有问题可以试试 IFTTT 来联动,安卓可替代的方案非常多,所以安卓真的非常适合当备用机【不是

这里没有考虑接收是因为接收只能通过轮询等方式。不想这样自己弄
  • Tasker(或其他自定义任务软体)使用 API 转发短信到即使通讯应用【安卓 -> 安卓/iOS】
    • Tasker -> Telegram
    • Takser -> QQ【机器人】
    • Tasker -> Wechat【企业微信/Server 酱】
  • Apple Message 【苹果通过 iCloud 转发到 iCloud】

Tasker 转发短信到 Telegram

Tasker 是安卓上一个非常强大的自动化软体,用它来实现转发短信至 telegram 有两种思路:

  • 运行 Javascript 脚本
  • 使用 Tasker 提供的纯动作

个人推荐写个脚本,DIY程度和操作都能更自由一些。但如果你只有手机不方便打代码可以使用 Tasker 提供的纯动作来实现,只需要手点几下稍微打点字。

准备工作

Telegram 提供了 bot(机器人)来实现更高可玩性。所以不管你想用哪种思路都需要先创建一个 bot。

创建 Telegram bot

创建 bot的方式非常简单,不需要备案审核等,直接在软件中找 @BotFather (机器人他爸) 创建一个 bot:

/newbot 创建新的 bot:

image 2
创建自己的bot

调用 bot 的 API

调用任何 bot API的格式都是 https://api.telegram.org/bot<token>/METHOD_NAME,同时支持 POST/GET 方式。

我们转发短信需要用到的方法 METHOD_NAMEsendMessage,用到参数只有:

  • chat_id :对话ID
  • text:Bot Telegram 用户发送的内容
  • parse_mode:表示 text 中内容该如何解析(格式化)

其他具体如何使用可以参考官方文档:

获取用户 uid

获取用户 uid 简单的方法就是使用别人做好的现成的 bot: @get_id_bot

或者发条消息给刚刚创建的 bot,然后使用 getUpdates 方法获取最近 Bot 收到的信息。

image 3
获取UID

普通方式实现短信转发

创建 Task

添加一个 HTTP Request 动作:

  • Method 选 POST
  • URL 一栏填写:https://api.telegram.org/bot<你的TOKEN>/sendMessage
  • Headers 一栏填写:Content-Type:application/json (可以点击放大镜快速选择)
  • Body内容填写如下(记得chat_id替换为你的uid):
{
    "chat_id": <YOUR_CHAT_ID>,
    "parse_mode": "HTML",
    "text": "✉<b>%SMSRF(%SMSRN)</b> \n\n%SMSRB\n\n 时间:%SMSRD"
}

其中用到了几个 Tasker 自带的变量:

  • %SMSRF:sender address 地址
  • %SMSRN:sender name 通讯录中的名称或号码
  • %SMSRB:主体(短信内容)
  • %MMSRS:主题(一般彩信才有)
  • %SMSRD:接收日期
  • %SMSRT:接收时间

参考:Tasker: Variables

创建 Profile 来调用 Tasker

切换到 Tasker 的 PROFILES 选项卡,添加一个 Event 类型的 Profile :Phone > Received Text,按需求配置是否需要过滤类型,发送者和内容。

创建之后选择链接到刚刚创建的 Task就完成了。

image 4
Profile 需要一个 Task

编写 JavaScript 实现短信转发

非常推荐使用这个方式来实现,能写代码自由度和速度都会比上面快一点。

而且使用也非常简单, 因为不需要太难的,我就没学过 JavaScript,纯通过 MDN 找用法。

Tasker 中 JavaScript 获取 Tasker 变量的方法是 global('变量名')

操作只需要把上一部分 Task 中添加的 HTTP Request 动作改成添加 JavaScriptlet 动作

然后在 Code 一栏中填上脚本:

// 配置部分
let apiKey = "你的token";
let apiUrl = "api.telegram.org";
let chatID = "你的uid";

// 处理数字,方便在 telegram 中复制
let senderBody = global('SMSRB')
const digRe = /(\d+-\d+-\d+)|(\d+-\d+)|(\d+)/gm
senderBody = senderBody.replace(digRe, function (match) {
    return `<code>${match}</code>`;
});

// 处理发件人姓名,可以弄到 Message 里一行,但是那样不好看。代码写不好是要下地狱的
let senderName = global('SMSRN');
const re = /\d*/g;
if (senderName.match(re)[0].length > 0) {
    senderName = "";
}

const Message = `✉ <b>${global('SMSRF')} ${(senderName != "") ? "(#" + (senderName) + ")" : ""}</b>\n时间:${global('SMSRD')} ${global('SMSRT').replace('.', ':')}\n\n${senderBody}`;

let myHeaders = new Headers();
myHeaders.append("Content-Type", "application/x-www-form-urlencoded");

let urlencoded = new URLSearchParams();
urlencoded.append("chat_id", chatID);
urlencoded.append("text", Message);
urlencoded.append("parse_mode", "HTML");

let requestOptions = {
    method: 'POST',
    headers: myHeaders,
    body: urlencoded,
    redirect: 'follow'
};

fetch(`https://${apiUrl}/bot${apiKey}/sendMessage`, requestOptions)
    .then(response => response.text())
    .then(result => console.log(result))
    .catch(error => console.log('error', error));
image 5
取消勾选 Auto Exit

调试

如果想测试又没有短信,可以覆盖掉 Tasker 的 global,直接在最顶行填上:

但是你想想你为啥会没短信呢【

打运营商电话查流量话费不就有短信了嘛

function global(param) {
    if (param == "SMSRN") return "MorFans.cn";
    if (param == "SMSRF") return "魔帆博客";
    if (param == "SMSRD") return "9-16-21";
    if (param == "SMSRT") return "14.45";
    if (param == "SMSRB") return "【魔帆博客】您的登录验证码是 6666,请于-30分钟内填写。如非本人操作,请试试加入咱们的讨论群,加入咱们。群号:179020064 301661143";
}

其他

未接来电等一系列功能都可以通过这种方法去实现。

这里记录了对接 Telegram 的方法,如果遇到网络问题(毕竟Telegram这种国外的软件都很穷网络非常不稳定),可以试试自建 Telegram bot(找个中转) ,或者用微信等其他软体方法也是类似的。

赞赏
魔帆博客,版权所有 | 如未注明,均为原创
本站均采用 BY-NC-ND 协议 (署名-非商业性使用-禁止演绎) 进行授权。
转载请注明来自本站文章:备用机养成方案 - Tasker 安卓短信转发到 telegram(https://www.morfans.cn/archives/3031)

野小新

文章作者

野小新很野~

发表回复

textsms
account_circle
email

备用机养成方案 - Tasker 安卓短信转发到 telegram
最近入了一个 iPhone 7 来当备用机,结果被苹果 iOS 优秀的体验给吸引走了,手上的安卓机沦为了备用机(大雾)🤣。 但是这台 iPhone 当初购买时候只是为了应付跑微信和支付宝两个app的…
扫描二维码继续阅读
2021-09-16