1. 使用场景
短信发送是比较常见的操作,在表单或者流程的业务中,我们经常需要使用到发送短信的能力。现在,利用宜搭的连接器功能,我们可以做到轻松自动发送短信。
2. 账号注册&购买短信服务
2.1 注册阿里云官网账号
首先需要注册一个阿里云的账号,访问阿里云官网:阿里云官网,注册好之后登录官网。如果已有阿里云账号,本步骤可忽略。
2.2 购买短信服务
我们需要在阿里云官网上面购买短信服务,有两种渠道购买,一种是购买阿里云官方的短信服务,一种是购买阿里云三方服务商的短信服务。
两种渠道的优劣势如下:
2.2.1 购买阿里云官方短信服务
访问下面链接,按照自身的需求购买相对应的短信服务。点击此处进行购买
购买成功后,在 短信服务工作台 就可以看到已经购买的套餐包余量。
按照阿里云的官方文档,设置短信“模板”和短信“签名”。需要审核,一般2小时内完成。
模板和签名审核通过之后,可以在签名和模板管理中看到。
2.2.2 购买阿里云三方服务商的短信服务
访问下面链接,按照自身的需求购买相对应的短信服务。点击此处购买短信服务
购买成功之后,在 云市场工作台 可以看到购买成功的服务。
添加客服为好友联系
访问产品购买页面:点击进行跳转
找到对应的服务商联系信息,添加联系人为好友,可以选择钉钉联系。
设置短信的内容
访问订单列表地址:点击此处查看订单列表
将刚购买的短信服务订单编号告知客服。
制定自己要发的短信模板,短信模板包括“签名+模板”,完整的示例如下:
【钉峰会】尊敬的嘉宾,您好!您已成功报名会议,期待与您相聚${location}! 以下是您现场签到二维码链接 :${url},会议签到时间:${time},会议地址:${address}。诚邀您莅临!
标注:
【钉峰会】这个是签名;
${location}、${url}、${time}、${address} 这些是变量,到时候可动态替换成其它文案;
短信内容不宜过长,需要控制长度。
效果:
【钉峰会】尊敬的嘉宾,您好!您已成功报名会议,期待与您相聚苏州!以下是您现场签到二维码链接:https://c.tb.cn/v.6rQ87G,会议签到时间:2022-12-23 10:00,会议地址:苏州市大观园酒店5层301贵宾厅。诚邀您莅临!
将“短信服务订单编号”和“短信模板”告知给客服,让他们帮忙添加,添加成功后,他们会通知。
3. 创建宜搭应用和报名页面
3.1 创建宜搭应用
访问 宜搭官网,然后用钉钉扫码登录相对应的组织,创建一个宜搭应用,用于大会用户报名和短信通知使用。
3.2 创建报名页面
进入刚刚创建的宜搭应用,点击+号创建一个“普通表单”,取名为“XXX报名”。
3.3 搭建报名页面
在表单设计器中,拖入需要使用的字段、图片、文字等。其中联系方式字段(手机号)必填,否则短信无法发送。
3.4 设置报名页短链
切换到“页面发布”的tab,然后打开“公开访问”的开关,填入短链接名字。
这样,访问:短信通知案例应用,即可看到报名页的实际效果。
4. 配置短信连接器
因为阿里云官方短信和三方服务商短信提供的加密方式不一样,导致连接器的配置方式也不一样。
其中阿里云官方使用的是 AK+SK 的动态认证方式,目前宜搭连接器不支持这种认证方式,所以需要使用到 FaaS 连接器来解决。
而三方服务商使用的是 AppCode 的加密认证方式,可以直接使用宜搭的普通连接器。接下来,讲解两种连接器的配置方式。
4.1 阿里云官方短信 FaaS 连接器配置
操作路径如下
连接器创建入口:宜搭官网 -> 平台管理 -> 连接器工厂 -> 连接器管理 -> 创建连接器 -> FaaS 自定义连接器
点击“确定”后,输入“连接器显示名称”和“连接器介绍”,再点击“下一步”。
填写“名称”,然后将下列代码复制到 Body 中,并点击“解析 Body”。
{ "phoneNumbers": "15915915901", "signNum": "sign", "templateCode": "code", "templateParam": "param", "accessKeyId": "ak", "accessKeySecret": "as" }
其中“accessKeyId”和“accessKeySecret”是必填选项,填入自己在阿里云注册的账号的 AK 和 SK 即可。解析 Body 后点击“保存”。
将下列代码复制到 Response Body 中,并点击“解析 Body”。解析 Body 后点击“保存”。
{ "success": true, "message": "", "code": "" }
如何获取 AK 和 SK 呢?访问页面地址:点击查看
保存成功之后,点击“前往云 IDE 开发”按钮,跳转到阿里云 FaaS 云端开发设计器。
修改设计器中的 pom.xml 和 src/FaasEntry.java 两个文件。
pom.xml 中新增依赖
<dependency> <groupId>com.aliyun</groupId> <artifactId>dysmsapi20170525</artifactId> <version>2.0.9</version> </dependency>
src/FaasEntry.java 代码完全替换成下面这一份
package com.alibaba.work.faas; import java.util.Map; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.work.faas.common.AbstractEntry; import com.alibaba.work.faas.common.FaasInputs; import com.alibaba.work.faas.util.DingOpenApiUtil; import com.alibaba.work.faas.util.YidaConnectorUtil; import com.aliyun.fc.runtime.Context; import com.aliyun.tea.*; import com.aliyun.dysmsapi20170525.*; import com.aliyun.dysmsapi20170525.models.*; import com.aliyun.teaopenapi.*; import com.aliyun.teaopenapi.models.*; /** * @Description 宜搭Faas连接器函数入口,FC handler:com.alibaba.work.faas.FaasEntry::handleRequest * @Version 2.0 * @Author bufan **/ public class FaasEntry extends AbstractEntry { @Override public JSONObject execute(FaasInputs faasInputs, Context context) { context.getLogger().info("faasInputs: " + JSON.toJSONString(faasInputs)); /** *用于调用钉钉开放平台OpenAPI的accessToken, 宜搭提供的, 仅申请了钉钉开放平台的部分OpenAPI的调用权限 *如果此accessToken不满足您的需求, 可在钉钉开放平台创建您自己的钉钉应用并获取appKey和APPSecret并使用com.alibaba.work.faas.util.DingOpenApiUtil获取您自己的accessToken * @see com.alibaba.work.faas.util.DingOpenApiUtil#getCustomAccessTokenThenCache(String, String) */ String accessToken = (String)faasInputs.getYidaContext().get("accessToken"); //设置钉开放平台访问token, 后续无需再设置 DingOpenApiUtil.setAccessToken(accessToken); /** *调用宜搭的前端消费接口时使用 */ String consumeCode = (String)faasInputs.getYidaContext().get("consumeCode"); //设置连接器消费码, 后续无需再设置 YidaConnectorUtil.setConsumeCode(consumeCode); Map<String,Object> input = faasInputs.getInputs(); String ak = (String)input.get("accessKeyId"); String as = (String)input.get("accessKeySecret"); String phoneNumbers = (String)input.get("phoneNumbers"); String signNum = (String)input.get("signNum"); String templateCode = (String)input.get("templateCode"); String templateParam = (String)input.get("templateParam"); JSONObject result = new JSONObject(); result.put("success",true); result.put("message",""); result.put("code",""); try { com.aliyun.dysmsapi20170525.Client client = createClient(ak, as); SendSmsRequest sendSmsRequest = new SendSmsRequest(); // 复制代码运行请自行打印 API 的返回值 sendSmsRequest.setPhoneNumbers(phoneNumbers); sendSmsRequest.setSignName(signNum); sendSmsRequest.setTemplateCode(templateCode); sendSmsRequest.setTemplateParam(templateParam); SendSmsResponse res = client.sendSms(sendSmsRequest); String resCode = res.getBody().getCode(); if ("ok".equalsIgnoreCase(resCode)) { return result; } else { System.out.println("invoke failed:" + JSON.toJSONString(res)); result.put("success",false); result.put("message",res.getBody().getMessage()); result.put("code",resCode); return result; } } catch(Exception ex) { System.out.println("meet errot"); ex.printStackTrace(); result.put("success",false); result.put("message",ex.getMessage()); return result; } } private static com.aliyun.dysmsapi20170525.Client createClient(String accessKeyId, String accessKeySecret) throws Exception { Config config = new Config() // 您的AccessKey ID .setAccessKeyId(accessKeyId) // 您的AccessKey Secret .setAccessKeySecret(accessKeySecret); // 访问的域名 config.endpoint = "dysmsapi.aliyuncs.com"; return new com.aliyun.dysmsapi20170525.Client(config); } }
切换到“源代码管理”界面,点击“暂存并提交代码”,将代码推送到远程 Git 仓库中保存。
切换到“设置WB”,然后选择“线上环境”,点击“部署”,将 FaaS 服务部署到线上去。
点击“继续部署”按钮。
上述操作完成后,一个 FaaS 连接器就 OK 了。
4.2 三方服务商短信连接器配置
如果购买的是三方服务商的短信服务,那么他们会提供相对应的 API 调用和简单身份认证调用方式。
访问地址:阿里云应用市场
操作路径如下
连接器创建入口:宜搭官网 -> 平台管理 -> 连接器工厂 -> 连接器管理 -> 创建连接器 -> HTTP 自定义连接器
填写供应商给的 API 相关配置,“保存”并点击“下一步”。
身份验证类型选择“阿里云API网关”,然后点击“下一步”
根据三方提供的 API,进行参数填写。
“保存”信息之后,然后切换到“鉴权管理”页面“添加鉴权模板”。
其中连接器选择刚刚新建的“三方服务商短信”,“App Code”将服务商给的 Code 复制过来。