# @sadikkhan02/adapter-msg91 中文文档

规范地址：https://npmcn.com/package/%40sadikkhan02/adapter-msg91/

版本：1\.0\.0
npm 元数据更新时间：2026-11-02T08:20:17.974Z
中文译文更新时间：2026-11-02T10:22:01.442Z
软件包许可：MIT

本文由上游 README 机器翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40sadikkhan02/adapter-msg91
原文对照：https://npmcn.com/package/%40sadikkhan02/adapter-msg91/?lang=original

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：70.4 kB，9 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=20\.0\.0
- 运行依赖：0 个
- peer 依赖：@sadikkhan02/notifykit ^1\.0\.0
- 首次发布：2026-11-02T08:19:22.084Z
- 最新版本发布：2026-11-02T08:20:17.805Z
- 已发布版本数：2（近 12 个月 2 个）

## 中文简介

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

## 安装

```sh
npm install @sadikkhan02/adapter-msg91
```

也可以使用：`pnpm add @sadikkhan02/adapter-msg91`、`yarn add @sadikkhan02/adapter-msg91`、`bun add @sadikkhan02/adapter-msg91`

## README

# `@sadikkhan02/adapter-msg91`

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

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

* * *

## 安装

```bash
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`） |

* * *

## 使用

```typescript
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状态 | 导致 | `retryable` | BullMQ行动 |
| :-- | :-- | :-- | :-- |
| `429 Too Many Requests` | MSG91流量API速率节流 | `true` | 以指数回退重试 |
| `500`， `502`， `503`， `504` | 网关或MSG91上游中断 | `true` | 以指数回退重试 |
| `ETIMEDOUT`， `ECONNRESET` | Socket / TLS握手中断 | `true` | 以指数回退重试 |
| `401 Unauthorized` | 无效的 `authKey` | `false` | 直接路由到DLQ（不重试） |
| `400 Bad Request` | DLT模板不匹配，无效的Flow ID，未批准的发件人 | `false` | 直接路由到DLQ（不重试） |
| `422 Unprocessable` | 无效的手机号码格式 | `false` | 直接路由到DLQ（不重试） |

### 凭据卫生处理

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

* * *

## 许可证

麻省理工学院

## 常见问题

### @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 和提交记录判断。

