@sadikkhan02/adapter-msg91

中文文档
1.0.0发布于 2026/11/02MITTypeScriptESM + CJS零依赖

用于NotifyKit的MSG91 SMS提供程序适配器

中文使用文档
文档目录8 节
  1. 安装
  2. 配置
  3. 环境变量
  4. 使用
  5. DLT与法规遵从(印度TCCCPR)
  6. 错误分类和DLQ路由
  7. 凭据卫生处理
  8. 许可证

@sadikkhan02/adapter-msg91

印度优化,TRAI/DLT兼容短信适配器NotifyKit使用MSG91流量API。

这个包为NotifyKit提供了一个轻量级的企业级短信传输 MSG91流量API. 使用本地Node.js构建 fetch,它要求 零外部供应商sdk 或者严重的运行时依赖关系。它支持印度电信商业通信客户偏好法规(TCCCPR/DLT)模板变量和发件人id。


安装

npm install @sadikkhan02/notifykit @sadikkhan02/adapter-msg91

零供应商SDK: 使用Node的内置 fetch API。不需要第三方MSG91 SDK。


配置

环境变量

变量要求描述
MSG91_AUTH_KEY是MSG91 API认证密钥
MSG91_FLOW_ID是MSG91流程ID(对应于已批准的DLT模板ID)
MSG91_SENDER_ID是批准的6字符数字DLT报头/发送方ID(例如: NOTIFY)

使用

import { createNotifier } from '@sadikkhan02/notifykit';
import { Msg91SmsProvider } from '@sadikkhan02/adapter-msg91';

const smsProvider = new Msg91SmsProvider({
  authKey: process.env.MSG91_AUTH_KEY!,
  flowId: process.env.MSG91_FLOW_ID!,
  sender: process.env.MSG91_SENDER_ID!, // e.g. 'NOTIFY'
});

const notifier = createNotifier({
  providers: {
    sms: {
      type: 'msg91',
      adapter: smsProvider,
    },
  },
});

// Register SMS template matching your DLT Flow placeholders
notifier.registerTemplate(
  'otp-flow',
  'Your verification code is {{otp}}. Valid for 10 minutes. - NotifyKit',
);

// Enqueue SMS (returns immediately with jobId)
const { jobId } = await notifier.notify({
  to: { phone: '+919876543210' }, // International format with country code
  channels: ['sms'],
  template: 'otp-flow',
  data: {
    otp: '918234',
    // Dynamic variables pass directly to MSG91 Flow recipient payload
  },
});

// Start processing SMS queue
notifier.startWorker({ channels: ['sms'], concurrency: 5 });

DLT与法规遵从(印度TCCCPR)

[!警告) 在印度,印度电信监管局(TRAI)规定,所有商业和交易短信流量必须在经批准的分布式账本技术(DLT)平台上注册(例如Vilpower、PingConnect、Airtel、Jio DLT)。

  1. 实体注册: 您的组织必须拥有一个有效的主体实体(PE) ID。
  2. 发件人ID: 发送者必须是DLT门户上批准的精确的6个字符的字母数字头。
  3. 模板批准: SMS内容必须与批准的DLT模板ID完全匹配。变量({#var#})对应于NotifyKit的 data 有效载荷。

未注册的模板或发件人不匹配将被印度电信运营商永久拒绝。


错误分类和DLQ路由

响应/ HTTP状态导致retryableBullMQ行动
429 Too Many RequestsMSG91流量API速率节流true以指数回退重试
500, 502, 503, 504网关或MSG91上游中断true以指数回退重试
ETIMEDOUT, ECONNRESETSocket / TLS握手中断true以指数回退重试
401 Unauthorized无效的 authKeyfalse直接路由到DLQ(不重试)
400 Bad RequestDLT模板不匹配,无效的Flow ID,未批准的发件人false直接路由到DLQ(不重试)
422 Unprocessable无效的手机号码格式false直接路由到DLQ(不重试)

凭据卫生处理

所有错误日志和提供程序结果都会自动删除 authKey 报头、承载令牌和敏感查询参数,以防止遥测和监控系统中的泄漏。


许可证

麻省理工学院

版本与发布记录

@sadikkhan02/adapter-msg91 共发布 2 个版本,首次发布于 2026/11/02;过去 12 个月发布了 2 个版本。

版本发布日期距今
1.0.0latest2026/11/021 天前
0.0.0-stage2026/11/021 天前

关于 @sadikkhan02/adapter-msg91 的常见问题

@sadikkhan02/adapter-msg91 是什么?

用于NotifyKit的MSG91 SMS提供程序适配器

如何安装 @sadikkhan02/adapter-msg91?

在项目目录运行 npm install @sadikkhan02/adapter-msg91,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@sadikkhan02/notifykit(^1.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@sadikkhan02/adapter-msg91 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@sadikkhan02/adapter-msg91 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@sadikkhan02/adapter-msg91 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@sadikkhan02/adapter-msg91 可以商用吗?

@sadikkhan02/adapter-msg91 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@sadikkhan02/adapter-msg91 还在维护吗?

最新版本 1.0.0 发布于 2026/11/02(1 天前);至今共发布 2 个版本,其中过去 12 个月发布了 2 个;首次发布于 2026/11/02。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。