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 复制过来。











