Node.js在BFF层、中台服务与前端全栈项目中使用广泛。用Node.js接入互亿无线预警通知接口,可以在服务异常、定时任务、Webhook接收等场景异步下发短信或语音。本文给出基于axios的异步示例,配合async/await写法,适…
Node.js在BFF层、中台服务与前端全栈项目中使用广泛。用Node.js接入互亿无线预警通知接口,可以在服务异常、定时任务、Webhook接收等场景异步下发短信或语音。本文给出基于axios的异步示例,配合async/await写法,适合现代Node项目。
Node.js接入的接口与参数
短信接口 https://api.ihuyi.com/sms/Submit.json ,语音接口 https://api.ihuyi.com/voice/vm 。参数为account、password、mobile、content,表单方式POST提交。
- account:APIID,password:APIKEY;
- mobile:接收手机号;
- content:通知内容;
- 响应JSON中code=2表示提交成功。
Node.js axios发送示例
先安装axios:npm install axios,然后封装异步发送函数:
const axios = require("axios");
async function sendSms(mobile, content) {
try {
const res = await axios.post(
"https://api.ihuyi.com/sms/Submit.json",
new URLSearchParams({
account: "你的APIID",
password: "你的APIKEY",
mobile: mobile,
content: content,
}).toString(),
{ headers: { "Content-Type": "application/x-www-form-urlencoded" }, timeout: 8000 }
);
return res.data; // code=2为提交成功
} catch (e) {
console.error("预警发送失败", e.message);
}
}
sendSms("13800138000", "定时任务backup_db执行失败,请运维检查数据库备份");
用URLSearchParams构造表单体,可正确处理中文编码。
Node.js接入注意事项
- 异步调用要加try/catch,发送失败不能影响主业务流程;
- 设置timeout,避免接口挂起导致事件循环堆积;
- 密钥通过环境变量process.env注入;
- 语音接口地址换成/voice/vm即可,参数不变。
带超时与错误处理的axios示例
Node.js后端常用axios发HTTP请求。下面这个示例加上了超时、异常捕获与返回码判断,可直接放进Express或Koa路由:
const axios = require("axios");
async function sendSms(mobile, content) {
try {
const resp = await axios.post(
"https://api.ihuyi.com/sms/Submit.json",
new URLSearchParams({
account: process.env.IHUYI_APIID,
password: process.env.IHUYI_APIKEY,
mobile: mobile,
content: content,
}),
{ timeout: 10000 }
);
if (resp.data.code === 2) {
console.log("提交成功", resp.data.smsid);
return resp.data;
}
console.warn("提交失败", resp.data.code, resp.data.msg);
return resp.data;
} catch (e) {
console.error("请求异常", e.message);
return null;
}
}
sendSms("13800138000", "Node服务进程异常退出,请运维查看");
依赖与运行说明
示例依赖axios,在项目目录执行npm install axios即可运行。account与password从process.env读取,避免写进代码仓库。Node 18以上也可使用内置fetch,逻辑一致。
常见报错排查
- ECONNRESET或ETIMEDOUT:检查服务器出网与代理配置,云服务器注意安全组放行出站443;
- 返回code非2:打印resp.data,按msg定位;
- 中文乱码:用URLSearchParams构造body,axios会自动按UTF-8编码;
- 回调处理:在Express里app.post("/notify/callback", ...)接收推送即可。
Node服务几行代码就能具备告警推送能力。前往注册免费试用获取密钥。