@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的内置
fetchAPI。不需要第三方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)。
- 实体注册: 您的组织必须拥有一个有效的主体实体(PE) ID。
- 发件人ID: 发送者必须是DLT门户上批准的精确的6个字符的字母数字头。
- 模板批准: 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 报头、承载令牌和敏感查询参数,以防止遥测和监控系统中的泄漏。
许可证
麻省理工学院