引言
初入大学的时候,会有许多社团或者团委学生会招新。抱着好奇心以及在大学期间努力变成“现充”的愿想 (已经破灭),就报名了几个组织。不久便收到了他们的面试通知短信。看到来信中有我的名字,想到:他们肯定是用复制黏贴删除编辑的蠢方法吧,自己以后一定不能这样。自此便暗暗想到要用 Workflow 来做一个「半自动化」「变量支持」短信群发器(为何称之为「半」?因为就像机枪中的半自动模式,自动填写短信文本,按一下 send 就发送一条,理论上支持无限变量个数)吃鸡吃多了呵呵呵...
这个构想一直存在于我的脑海中,直到我看到我身边的舍友真的如我想象一般,重复着:复制-粘贴-删除-编写-校对-发送,这么一个无聊而且效率极低的过程,我才决定将这个构想转化成成品。
我不会告诉你我是花了4周的大学计算机课才把v2做出来的...
短信群发v2演示视频
如果无法观看请Safari打开
构想
最初(v1)的构想是比较简单的,就是将wf做成两个核心板块,分别为模板板块和数据板块。这样分的原因有三:
- 可以将「复制-粘贴-删除」步骤省去
- 可以将「编写-校对」步骤统一时间进行
- 可以将数据编辑过程从移动端中解放出来,你只需将编辑好的板块复制粘贴到wf的文本框中
v1版本的实现只用了一节大机课,这使我心生膨胀。但在后来重新审视的过程中,发现了这个wf的一些缺点,这让我萌生出制作v2的念头。
缺点:
- 短信文本中只有一个变量「姓名」
- wf中拆分数据的动作运用有点变扭,不够优雅
因为十分简单,本文就不对v1作解析了,只放出wf链接:短信群发v1
后来v2是针对v1中的缺点进行改进。
先给出v2的wf图片和链接以便在阅读的过程中参考:
图片、v2链接
2017-12-2更新:关于提高「数据模板」输入效率的补充
v2解析
这里我会将整个wf分解成一个个实现片段进行解析。
wf中出现个别英文变量的说明:
模板文本=text
数据板块=all
替换的文本=rplword
模板中被替换的变量符号=value
编辑完成的短信文本=t
1. 数据的分割
对「数据的分割」进行解析时,首先我们需要看一下数据是怎么样排列的,这里数据储存的格式为:
电话号码(11位),变量1,变量2,变量3...
电话号码*(11位),变量1*,变量2*,变量3*...
...
因此需要进行两个不同的分割,分别是:通过「行」分割、通过「半角逗号」分割。我们首先通过「行」分割,来获取单条信息的数据,然后通过「半角逗号」分割,来获取单条信息数据中的元素(电话号码以及各个变量变量)
注:当「all」经过「Split Text」动作后就会被分成一块一块,而「Repeat with Each」就会分别对每一块按顺序执行其内包含的动作。
2. 元素的区别和分类
为了将wf的判断过程简化,我将电话号码放在第一位,并且限定它为11位的数字。所以对传递下来的每个元素进行「If」判断,如果是11位的数字则设为「电话」变量;否则就是普通变量,通过「Add to Variable」将其添加到「x」中。在最后对单条信息处理完时,我们需要将「x」设置为「Nothing」,让它清空来接受新的数据。(图中没有表现)
注:「Add to Variable」并不是将传递给它的数据简单地「糅合」在一起,而是「分隔开」且「有序」地储存在「变量」中,可以将其理解为编程中的「List」数据类型。这个特性为后来的变量处理简化了很多。
其实这里是可以做得更优雅,即将第一位元素直接设置为电话变量,这样就可以不用对电话号码的格式进行限定(有些电话号码格式不是11位或电话号码中带有连字符或国家代码)。只不过我懒,因此就不作改动了。
3. 文本变量的有序替换
获取「x」对其下接「Repeat」,实现文本变量的有序替换。因为变量都是按照顺序来的,即:
「%n」→「变量n」
所以「n」的「有序递增」就成为这个部分的关键(图中体现为「s」)
我们知道在「Set Variable」中的变量名称是不能插入另外一个变量的,这就需要新建一个Text框,在框内写入能够递增的「s」来曲线救国,每一次执行「Repeat」,「s」就会 +1s ,藉此实现「%n」的递增。与上一部分的「x」同理,在进行新的「Repeat」之前都需要对「s」进行还原,即重新设置为 1 。
这里运用「If」和两个「Replace Text」是为了避免文本替换对短信模板的污染。「Replace Text」的用法不赘述,看仔细看wf流程就会理解。
因为这个部分的图太长,所以请点击链接观看:文本变量的有序替换
最后
本wf是凭借着我对它浅薄的理解做出来的,过程说实话还是有点辛苦的,但如果能起到抛砖引玉的效果,我也是会十分地开心。Workflow是个万能工具箱,而你就就是一个木匠,请不要吝啬自己的脑洞以及智慧,拿上称手的工具,创造出属于自己的杰作吧。