UNPKG

smithtek-nodered-sms

Version:

A Node-RED node for sending SMS via ZTE USB modem.

99 lines (82 loc) 3.52 kB
const fetch = require("node-fetch"); module.exports = function (RED) { function ZteSmsResetNode(config) { RED.nodes.createNode(this, config); let node = this; node.on("input", async function (msg) { let modemIp = config.modemIp || "192.168.0.1"; // Default if not set let password = config.password || "Admin"; // Default if not set if (!modemIp || !password) { node.error("Modem IP and password are required."); return; } try { await loginToModem(password, modemIp); let deleteCount = await deleteAllSms(modemIp); msg.payload = `Deleted ${deleteCount} messages.`; node.send(msg); } catch (error) { node.error("Failed to delete SMS: " + error); } }); } async function loginToModem(password, modemIp) { let encodedPassword = Buffer.from(password).toString("base64"); let loginPayload = `isTest=false&goformId=LOGIN&password=${encodedPassword}`; let response = await fetch(`http://${modemIp}/goform/goform_set_cmd_process`, { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "X-Requested-With": "XMLHttpRequest", "Referer": `http://${modemIp}/index.html` }, body: loginPayload }); let data = await response.json(); if (data.result !== "0" && data.result !== "3") { throw new Error("Login failed."); } } async function deleteAllSms(modemIp) { let listUrl = `http://${modemIp}/goform/goform_get_cmd_process?isTest=false&cmd=sms_data_total&page=0&data_per_page=500&mem_store=1&tags=10&order_by=order+by+id+desc`; let response = await fetch(listUrl, { method: "GET", headers: { "Referer": `http://${modemIp}/index.html`, "Accept": "application/json, text/javascript, */*; q=0.01" } }); let data = await response.json(); if (!data.messages || data.messages.length === 0) { return 0; // No messages to delete } let deleteCount = 0; for (let sms of data.messages) { let deleteUrl = `http://${modemIp}/goform/goform_set_cmd_process`; let deletePayload = `isTest=false&goformId=DELETE_SMS&msg_id=${sms.id}&notCallback=true`; await fetch(deleteUrl, { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "X-Requested-With": "XMLHttpRequest", "Referer": `http://${modemIp}/index.html` }, body: deletePayload }); deleteCount++; } return deleteCount; // Return number of deleted messages } RED.nodes.registerType("zte-sms-reset", ZteSmsResetNode, { defaults: { modemIp: { value: "192.168.0.1", required: true }, password: { value: "Admin", required: true } }, inputs: 1, outputs: 1, icon: "font-awesome/fa-trash", label: function () { return "ZTE SMS Reset"; } }); };