4000-271-266
免费试用

如何通过连接器发送短信

1. 使用场景

短信发送是比较常见的操作,在表单或者流程的业务中,我们经常需要使用到发送短信的能力。现在,利用宜搭的连接器功能,我们可以做到轻松自动发送短信。

2. 账号注册&购买短信服务

2.1 注册阿里云官网账号

首先需要注册一个阿里云的账号,访问阿里云官网:阿里云官网,注册好之后登录官网。如果已有阿里云账号,本步骤可忽略。

2.2 购买短信服务

我们需要在阿里云官网上面购买短信服务,有两种渠道购买,一种是购买阿里云官方的短信服务,一种是购买阿里云三方服务商的短信服务

两种渠道的优劣势如下:

项目类型

阿里云官方短信

三方服务商短信

短信签名和模板申请

提交申请流程,2小时审批。其中『签名』申请比较困难,需要提供三证合一和委托授权书。

将格式发送给客服,申请格式比较自由,生效时间很快。

短信发送量统计

有提供详细的每天发送量报表

只显示条数使用情况:200/300

短信发送记录明细

有提供,详细的发送记录(包括发送状态、发送时间、发送内容、失败的原因)

不提供,除非量非常大,可提供接口查询

短信响应时间

几乎没有延时,很快,3秒内收到

如果量小,响应会延时半小时,可申请放开限制

短信鉴权方式

阿里云短信采用的是 AK+SK 的加密方式,宜搭不支持这种动态鉴权方式,目前只能使用 FaaS 包裹一下,提供新的连接器

提供了 AppKey、AppSecret、AppCode 等参数和 https 接口,可以直接鉴权

2.2.1 购买阿里云官方短信服务

访问下面链接,按照自身的需求购买相对应的短信服务。点击此处进行购买

购买成功后,在 短信服务工作台 就可以看到已经购买的套餐包余量。

按照阿里云的官方文档,设置短信“模板”和短信“签名”。需要审核,一般2小时内完成。

模板和签名审核通过之后,可以在签名和模板管理中看到。

2.2.2 购买阿里云三方服务商的短信服务

访问下面链接,按照自身的需求购买相对应的短信服务。点击此处购买短信服务

购买成功之后,在 云市场工作台 可以看到购买成功的服务。

添加客服为好友联系

访问产品购买页面:点击进行跳转

找到对应的服务商联系信息,添加联系人为好友,可以选择钉钉联系。

设置短信的内容

访问订单列表地址:点击此处查看订单列表

将刚购买的短信服务订单编号告知客服。

制定自己要发的短信模板,短信模板包括“签名+模板”,完整的示例如下:

【钉峰会】尊敬的嘉宾,您好!您已成功报名会议,期待与您相聚${location}! 以下是您现场签到二维码链接 :${url},会议签到时间:${time},会议地址:${address}。诚邀您莅临!

标注:

  1. 【钉峰会】这个是签名;

  2. ${location}、${url}、${time}、${address} 这些是变量,到时候可动态替换成其它文案;

  3. 短信内容不宜过长,需要控制长度。

效果:

【钉峰会】尊敬的嘉宾,您好!您已成功报名会议,期待与您相聚苏州!以下是您现场签到二维码链接: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 复制过来。

切换到“连接器管理”页面,找到刚刚新建的“三方服务商短信”,然后点击“测试”按钮进行测试。

填入“短信内容”和“手机号”,点击“测试操作”,下面 RESPONSE 会提示发送是否成功。

如果按照预期的返回,那么短信发送就会成功。

5. 使用短信连接器

5.1 阿里云官方短信 FaaS 连接器使用

首先,访问“集成&自动化”。

点击“从空白新建”,然后输入名称,选择触发表单,点击“确认”。

配置表单事件触发为“创建成功”。

新增一个“连接器”节点。

选择“自定义”连接器中,自己新建的“短信发送”的连接器。

将连接器需要的参数配置进去,点击“保存”,然后“发布”。

消息参数:

【钉峰会】尊敬的嘉宾,您好!您已成功报名会议,期待与您相聚${location}! 以下是您现场签到二维码链接 :${url},会议签到时间:${time},会议地址:${address}。诚邀您莅临!
{"location":"苏州","name":"https://c.tb.cn/v.6rQ87G","time":"2022-12-23 10:00","address":"苏州市大观园酒店5层301贵宾厅"}

在表单提交一条数据,输入自己姓名和手机号。

提交成功之后,如果连接器配置和功能都没问题的话,就会收到一条短信。

5.2 三方服务商短信连接器使用

首先,访问“集成&自动化”。

点击“从空白新建”,然后输入名称,选择触发表单,点击“确认”。

配置表单事件触发为“创建成功”。

新增一个“连接器”节点。

选择“自定义”连接器中,自己新建的“发送短信”的连接器。

将连接器需要的参数配置进去,点击“保存”,然后“发布”。

消息参数参考如下:

在表单提交一条数据,输入自己姓名和手机号。

提交成功之后,如果连接器配置和功能都没问题的话,就会收到一条短信。

5.3 如何排查短信发送失败的原因

如果短信没有发送成功,可能属于配置错误导致,此时可以通过日志来进行排查。

路径:进入对应应用 >> 集成&自动化 >> 更多 >> 运行日志

运行日志可以看到连接器执行是否成功,若执行失败,可查看具体失败原因,并及时修正连接器的配置。

执行成功的情况。

6. 常见问题

6.1 已购买的短信服务非阿里云平台,如何实现发送短信?

如果购买的是其它平台或者自有平台的短信服务,只要提供了公网短信服务 API(接口),并且符合宜搭连接器的几种鉴权方式之一,则可以参考文档中的【阿里云三方服务商短信服务】的方式配置,原理一致。

7. 附录

7.1 内网穿透之 HTTP 穿透

短信服务需要公网服务,开发者在临时体验开发时往往没有公网域名或者公网 IP,本工具提供了一个公网代理服务,目的是方便开发测试。

工具地址:点击此处

宜搭为了更好的优化宜搭使用手册内容和质量,占用您3-5分钟时间,辛苦填写一下文档反馈问卷。文档反馈问卷是匿名提交,同时问卷信息仅用于宜搭文档体验反馈收集,感谢您对宜搭的支持!点此填写调研问卷

江苏无雀数据科技有限公司 www.wuquedata.com 版权所有
服务热线4000-271-266
ICP备案编号:苏ICP备2022045370号

一对一专业企业顾问

工作时间:9:00-18:00 在线服务

实时解答疑难问题

工作时间:9:00-18:00 在线服务

4000-271-266

工作时间:9:00-18:00 在线服务

售后咨询 电话联系 售前咨询