全部产品
Search
文档中心

短信服务:TypeScript/Nodejs SDK调用示例

更新时间:Mar 04, 2026

Alibaba Cloud Dysmsapi SDK for NodeJS 是阿里云短信服务(Dysmsapi)的官方 TypeScript/Node.js SDK,用于在 Node.js 应用程序中集成阿里云短信服务功能。该 SDK 提供了发送短信等完整功能,支持验证码短信、营销短信、国际短信等多种业务场景。

安装

系统要求

  • Node.js 版本:14.0 及以上。

  • 操作系统:Windows、macOS、Linux。

  • 其他依赖:无特殊依赖,SDK 内部已包含所有必需的依赖项。

使用 npm 安装

npm install @alicloud/dysmsapi20180501 -S

验证安装

npm list @alicloud/dysmsapi20180501

# 输出SDK具体版本号代表安装成功

认证配置

步骤一:创建RAM用户并完成授权

重要

阿里云主账号拥有较高权限,建议您通过RAM用户进行API调用和日常运维。有关RAM用户的更多信息,请参见RAM用户概览

  • 创建RAM用户:访问创建RAM用户,完成相关名称设置,并选择访问配置使用永久 AccessKey 访问,单击确定后即可完成RAM用户的创建。请及时保存AccessKey信息。

  • 为RAM用户授权:访问RAM用户列表,找到您所创建的RAM用户,单击操作列的新增授权。在权限策略文本搜索框中输入AliyunDysmsFullAccess后选中此策略,单击确认新增授权,即可完成授权操作。

说明
  • AliyunDysmsFullAccess管理短信服务的权限。

  • AliyunDysmsReadOnlyAccess:只读访问短信服务的权限。

  • 如果您需要新建自定义权限,请参见授权信息

步骤二:获取访问凭证

请配置环境变量,通过环境变量读取访问密钥(AccessKey)。环境变量配置方法,请参见在Linux、macOS和Windows系统配置环境变量

说明
  • 为避免在代码中硬编码AccessKey而造成泄露,请通过配置环境变量的方式,来获取AccessKey。

  • 本文代码示例以环境变量名ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET为例,进行后续操作。

安全最佳实践

  • 使用环境变量或密钥管理服务存储凭证。

  • 定期轮换访问密钥。

  • 遵循最小权限原则,为RAM用户分配最小必要权限。

  • 不要在日志中打印凭证信息。

  • 在生产环境中使用RAM角色而非主账号凭证。

快速开始

代码示例

使用SDK调用发送短信API的代码示例如下,请根据注释完成参数填写。

TypeScript:

/**
 * 阿里云国际短信发送 - TypeScript 版本
 * API: BatchSendMessageToGlobe
 * 
 * 环境要求: Node.js >= 8.x
 * 安装: npm install @alicloud/dysmsapi20180501 @alicloud/credentials
 */

import Dysmsapi20180501, * as $Dysmsapi20180501 from '@alicloud/dysmsapi20180501';
import * as $OpenApi from '@alicloud/openapi-client';
import * as $Util from '@alicloud/tea-util';
import Credential from '@alicloud/credentials';

export class InternationalSmsClient {
  /**
   * 创建短信服务客户端
   * 使用凭据链自动获取访问凭证(支持环境变量、配置文件等多种方式)
   * 凭据配置详见: https://www.alibabacloud.com/help/document_detail/378664.html
   */
  static createClient(): Dysmsapi20180501 {
    const config = new $OpenApi.Config({
      credential: new Credential(),
      endpoint: 'dysmsapi.aliyuncs.com'
    });
    
    return new Dysmsapi20180501(config);
  }

  /**
   * 批量发送国际短信
   * @param to - 接收号码(国际格式,如:+1234567890)
   * @param from - 发送方号码
   * @param message - 短信内容
   */
  static async batchSendMessage(to: string, from: string, message: string): Promise<void> {
    const client = this.createClient();
    
    const request = new $Dysmsapi20180501.BatchSendMessageToGlobeRequest({
      to,
      from,
      message
    });

    try {
      const response = await client.batchSendMessageToGlobeWithOptions(
        request,
        new $Util.RuntimeOptions({})
      );
      
      console.log('短信发送成功');
      console.log(JSON.stringify(response, null, 2));
    } catch (error: any) {
      console.error('短信发送失败:', error.message);
      if (error.data?.Recommend) {
        console.error('诊断建议:', error.data.Recommend);
      }
      throw error;
    }
  }
}

// 命令行调用示例
if (require.main === module) {
  const [to, from, message] = process.argv.slice(2);
  
  if (!to || !from || !message) {
    console.error('用法: ts-node international-sms-typescript.ts <to> <from> <message>');
    console.error('示例: ts-node international-sms-typescript.ts "+1234567890" "sender" "Hello World"');
    process.exit(1);
  }
  
  InternationalSmsClient.batchSendMessage(to, from, message)
    .catch(error => {
      console.error('执行失败:', error);
      process.exit(1);
    });
}

JavaScript:

/**
 * 阿里云国际短信发送 - Node.js 版本
 * API: BatchSendMessageToGlobe
 * 
 * 环境要求: Node.js >= 8.x
 * 安装: npm install @alicloud/dysmsapi20180501 @alicloud/credentials
 */

'use strict';

const Dysmsapi20180501 = require('@alicloud/dysmsapi20180501');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Credential = require('@alicloud/credentials');

class InternationalSmsClient {
  /**
   * 创建短信服务客户端
   * 使用凭据链自动获取访问凭证(支持环境变量、配置文件等多种方式)
   * 凭据配置详见: https://www.alibabacloud.com/help/document_detail/378664.html
   */
  static createClient() {
    const config = new OpenApi.Config({
      credential: new Credential.default(),
      endpoint: 'dysmsapi.aliyuncs.com'
    });
    
    return new Dysmsapi20180501.default(config);
  }

  /**
   * 批量发送国际短信
   * @param {string} to - 接收号码(国际格式,如:+1234567890)
   * @param {string} from - 发送方号码
   * @param {string} message - 短信内容
   */
  static async batchSendMessage(to, from, message) {
    const client = this.createClient();
    
    const request = new Dysmsapi20180501.BatchSendMessageToGlobeRequest({
      to,
      from,
      message
    });

    try {
      const response = await client.batchSendMessageToGlobeWithOptions(
        request,
        new Util.RuntimeOptions({})
      );
      
      console.log('短信发送成功');
      console.log(JSON.stringify(response, null, 2));
      return response;
    } catch (error) {
      console.error('短信发送失败:', error.message);
      if (error.data?.Recommend) {
        console.error('诊断建议:', error.data.Recommend);
      }
      throw error;
    }
  }
}

// 命令行调用示例
if (require.main === module) {
  const [to, from, message] = process.argv.slice(2);
  
  if (!to || !from || !message) {
    console.error('用法: node international-sms-nodejs.js <to> <from> <message>');
    console.error('示例: node international-sms-nodejs.js "+1234567890" "sender" "Hello World"');
    process.exit(1);
  }
  
  InternationalSmsClient.batchSendMessage(to, from, message)
    .catch(error => {
      console.error('执行失败:', error);
      process.exit(1);
    });
}

module.exports = { InternationalSmsClient };

下载示例代码

也可以下载示例代码,直接运行。

  1. 访问SendMessageToGlobe

  2. 在左侧的参数配置页签,填写需要的参数信息,填写示例如下:

  • To 参数输入示例值:88691567****

  • Message 参数输入示例值:这是一条测试短信

最佳实践总结

性能优化

  • 连接复用:SDK 默认使用 HTTP 连接池,无需额外配置。

  • 异步处理:短信发送是异步操作,避免阻塞主线程。

  • 错误重试:对网络超时等临时性错误实现指数退避重试策略。

安全建议

  • 凭证管理:始终使用环境变量或密钥管理服务存储凭证。

  • 最小权限:为不同应用创建独立的 RAM 子账号,并授予最小必要权限。

  • 输入验证:对用户输入的手机号、模板参数等进行严格验证和清理。

  • 日志脱敏:在日志中隐藏敏感信息(手机号中间四位、验证码等)。

资源管理

  • 客户端复用:在整个应用生命周期中复用同一个 Client 实例,避免频繁创建销毁。

  • 错误处理:对 SDK 抛出的异常进行分类处理,区分业务错误和系统错误。

  • 监控告警:记录关键指标(发送成功率、响应时间、QPS),设置监控告警。

相关文档

  • GitHub 仓库:Alibaba Cloud Dysmsapi SDK for NodeJS

  • 查看OpenAPI文档:

    在调用OpenAPI前,建议您先阅读对应的接口文档SendMessageToGlobe,了解、学习调用该接口所需要的参数及权限等,更多信息请参见API概览

  • 调用OpenAPI:

    SDK是最易于集成,且支持度最好的OpenAPI调用方式。本文以TypeScript语言SDK调用OpenAPI,其他语言SDK的用法类似,更多信息请参见短信服务SDK