文章

取件码自动转发

如何将短信中的快递取件码自动转发到滴答清单待办事项等 TODO 应用 (取件提醒)

取件码自动转发

iOS(iPhone/iPad)

步骤如下:

新建“快捷指令”

你可在我分享的快捷指令基础上修改:

shortcuts-overview

也可以按照下面的步骤手动添加:

添加操作

  1. 打开“快捷指令”APP,并点击右上角“+”
  2. 点击“添加操作”
  3. 在弹窗中找到“匹配文本”(文本类别下,黄色的)
  4. 重命名此快捷指令为“添加任务到XX清单”

添加参数

  1. 点击底部的感叹号
  2. 打开“在共享表单中显示”
  3. 点击“完成”。

修改参数类型

  1. 此时会多出一个卡片,点击“图像和其他18个”
  2. 点击左上角“清除”(快速关闭所有选项)
  3. 在下面的选项里找到“文本”并打开
  4. 点击完成

设置边界条件

“如果没有输入”:

“停止并回应”: “无内容”

设置内容匹配规则

匹配“文本”中的[0-9a-zA-Z] 改成 匹配“输入快捷指令的信息”中的“快递|包裹|驿站|取件码”

其中“输入快捷指令的信息”为魔法变量,后面的字符串是正则表达式 pattern,“”(英文)表示“或”。我试过”\d-\d-\d{4}“没生效,不知道为啥。

判断匹配结果

如果“匹配”有任何值将“输入快捷指令的信息”添加到“清单”

新建“自动化”

自动化:立即运行

我收到包含“”的信息时

执行添加任务到XX清单(刚才新建的快捷指令)

automation

安卓手机

安装 短信转发器

安装过程不再赘述。

添加发送通道

  1. 打开 APP。
  2. 切换到底部导航栏的“发送通道”。
  3. 点击右上角“+”
  4. 选择你想要转发的类型,以滴答清单为例,选择 Webhook(URL Scheme 应该也可以,我没在安卓机上安装滴答清单,所以没尝试)
  5. 填入信息如下:

sender

图中涉及到的资源:

  1. 滴答清单 创建任务 API及参数模板:

    1
    2
    3
    4
    5
    6
    7
    
    <span><span>{</span></span>
    <span><span>  "title"</span><span>: </span><span>"[org_content]"</span><span>,</span></span>
    <span><span>  "content"</span><span>: </span><span>"[content]"</span><span>,</span></span>
    <span><span>  "projectId"</span><span>: </span><span>"xxx"</span><span>,</span></span>
    <span><span>  "startDate"</span><span>: </span><span>"[receive_time:yyyy-MM-dd'T'HH:mm:ssZ]"</span></span>
    <span><span>}</span></span>
    <span></span>
    
  2. 滴答清单 获取 Access Token 步骤简易代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<span><span>const</span><span> Koa</span><span> =</span><span> require</span><span>(</span><span>"koa"</span><span>);</span></span>
<span></span>
<span><span>const</span><span> Router</span><span> =</span><span> require</span><span>(</span><span>"@koa/router"</span><span>);</span></span>
<span></span>
<span><span>const</span><span> { </span><span>PORT</span><span> =</span><span> 4001</span><span> } </span><span>=</span><span> process.env;</span></span>
<span><span>const</span><span> client_id</span><span> =</span><span> "xxx"</span><span>;</span></span>
<span><span>const</span><span> client_secret</span><span> =</span><span> "xxx"</span><span>;</span></span>
<span><span>const</span><span> scope</span><span> =</span><span> "tasks:write"</span><span>;</span></span>
<span><span>const</span><span> redirect_uri</span><span> =</span><span> `http://localhost:${</span><span>PORT</span><span>}/redirect`</span><span>;</span></span>
<span></span>
<span><span>const</span><span> app</span><span> =</span><span> new</span><span> Koa</span><span>();</span></span>
<span><span>const</span><span> router</span><span> =</span><span> new</span><span> Router</span><span>();</span></span>
<span></span>
<span><span>router.</span><span>get</span><span>(</span><span>"/"</span><span>, </span><span>async</span><span> (</span><span>ctx</span><span>, </span><span>next</span><span>) </span><span>=&gt;</span><span> {</span></span>
<span><span>  await</span><span> next</span><span>();</span></span>
<span></span>
<span><span>  ctx.body </span><span>=</span><span> `&lt;a href="https://dida365.com/oauth/authorize?scope=tasks:write&amp;client_id=${</span><span>client_id</span><span>}&amp;state=state&amp;redirect_uri=${</span><span>encodeURIComponent</span><span>(</span></span>
<span><span>    redirect_uri</span></span>
<span><span>  )</span><span>}&amp;response_type=code"&gt;点击登录&lt;/a&gt;`</span><span>;</span></span>
<span><span>  ctx.response.status </span><span>=</span><span> 200</span><span>;</span></span>
<span><span>});</span></span>
<span></span>
<span><span>router.</span><span>get</span><span>(</span><span>"/redirect"</span><span>, </span><span>async</span><span> (</span><span>ctx</span><span>, </span><span>next</span><span>) </span><span>=&gt;</span><span> {</span></span>
<span><span>  await</span><span> next</span><span>();</span></span>
<span><span>  let</span><span> code </span><span>=</span><span> ctx.query.code;</span></span>
<span><span>  let</span><span> buff </span><span>=</span><span> Buffer.</span><span>from</span><span>(</span><span>`${</span><span>client_id</span><span>}:${</span><span>client_secret</span><span>}`</span><span>);</span></span>
<span><span>  let</span><span> base64data </span><span>=</span><span> buff.</span><span>toString</span><span>(</span><span>"base64"</span><span>);</span></span>
<span><span>  const</span><span> response</span><span> =</span><span> await</span><span> fetch</span><span>(</span><span>"https://dida365.com/oauth/token"</span><span>, {</span></span>
<span><span>    method: </span><span>"POST"</span><span>,</span></span>
<span><span>    headers: {</span></span>
<span><span>      Authorization: </span><span>`Basic ${</span><span>base64data</span><span>}`</span><span>,</span></span>
<span><span>      "Content-Type"</span><span>: </span><span>`application/x-www-form-urlencoded`</span><span>,</span></span>
<span><span>    },</span></span>
<span><span>    body: Object.</span><span>entries</span><span>({</span></span>
<span><span>      code,</span></span>
<span><span>      grant_type: </span><span>"authorization_code"</span><span>,</span></span>
<span><span>      scope,</span></span>
<span><span>      redirect_uri,</span></span>
<span><span>    })</span></span>
<span><span>      .</span><span>map</span><span>(([</span><span>key</span><span>, </span><span>value</span><span>]) </span><span>=&gt;</span><span> {</span></span>
<span><span>        return</span><span> encodeURIComponent</span><span>(key) </span><span>+</span><span> "="</span><span> +</span><span> encodeURIComponent</span><span>(value);</span></span>
<span><span>      })</span></span>
<span><span>      .</span><span>join</span><span>(</span><span>"&amp;"</span><span>),</span></span>
<span><span>  });</span></span>
<span><span>  const</span><span> data</span><span> =</span><span> await</span><span> response.</span><span>text</span><span>();</span></span>
<span><span>  ctx.body </span><span>=</span><span> data;</span></span>
<span><span>  ctx.response.status </span><span>=</span><span> response.status;</span></span>
<span><span>});</span></span>
<span></span>
<span><span>app.</span><span>use</span><span>(router.</span><span>routes</span><span>()).</span><span>use</span><span>(router.</span><span>allowedMethods</span><span>()).</span><span>listen</span><span>(</span><span>PORT</span><span>);</span></span>
<span><span>console.</span><span>log</span><span>(</span><span>`listened http://localhost:${</span><span>PORT</span><span>}`</span><span>);</span></span>
<span></span>

添加转发规则

  1. 打开 APP。
  2. 切换到底部导航栏的“转发规则”
  3. 切换到顶部导航栏的“短信”。
  4. 点击右上角“+”
  5. 填入信息如下:

rule

其他配置项请查看官方文档。

本文由作者按照 CC BY 4.0 进行授权