{"record":{"id":"375ab62376dfa7e3","repo":"louislam/uptime-kuma","slug":"could-not-connect-to-cellsynt-please-try-again","errorCode":null,"errorMessage":"Could not connect to Cellsynt, please try again.","messagePattern":"Could not connect to Cellsynt, please try again\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"server/notification-providers/cellsynt.js","lineNumber":28,"sourceCode":"    async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {\n        const okMsg = \"Sent Successfully.\";\n        const data = {\n            // docs at https://www.cellsynt.com/en/sms/api-integration\n            params: {\n                username: notification.cellsyntLogin,\n                password: notification.cellsyntPassword,\n                destination: notification.cellsyntDestination,\n                text: msg.replace(/[^\\x00-\\x7F]/g, \"\"),\n                originatortype: notification.cellsyntOriginatortype,\n                originator: notification.cellsyntOriginator,\n                allowconcat: notification.cellsyntAllowLongSMS ? 6 : 1,\n            },\n        };\n        try {\n            let config = this.getAxiosConfigWithProxy(data);\n            const resp = await axios.post(\"https://se-1.cellsynt.net/sms.php\", null, config);\n            if (resp.data == null) {\n                throw new Error(\"Could not connect to Cellsynt, please try again.\");\n            } else if (resp.data.includes(\"Error:\")) {\n                resp.data = resp.data.replaceAll(\"Error:\", \"\");\n                throw new Error(resp.data);\n            }\n            return okMsg;\n        } catch (error) {\n            this.throwGeneralAxiosError(error);\n        }\n    }\n}\n\nmodule.exports = Cellsynt;\n","sourceCodeStart":10,"sourceCodeEnd":41,"githubUrl":"https://github.com/louislam/uptime-kuma/blob/6b5ea0155793e666666745fb8d6fef1e829543a2/server/notification-providers/cellsynt.js#L10-L41","documentation":"cellsynt.js:27-28. Cellsynt's SMS endpoint returns a plain-text body. If resp.data is null/empty the provider treats the call as having failed to reach the backend at all and tells the user to retry — a connectivity-level failure rather than a Cellsynt-side SMS error.","triggerScenarios":"Cellsynt endpoint returned an empty body (e.g. gateway timeout returning 200 with no content), a proxy stripped the body, the response was truncated, or the request was redirected to an interstitial.","commonSituations":"Transient network blip between the Uptime Kuma host and se-1.cellsynt.net; a corporate proxy mangling the response; Cellsynt maintenance window returning empty 200s.","solutions":["Retry once — the message itself suggests retry and the condition is often transient.","Reproduce with `curl -i -X POST 'https://se-1.cellsynt.net/sms.php' ... ` to see the raw response/body.","Check egress to se-1.cellsynt.net and any configured proxy in getAxiosConfigWithProxy.","If persistent, open a Cellsynt support ticket — empty 200 is a server-side fault."],"exampleFix":null,"handlingStrategy":"retry","validationCode":"// Pre-flight reachability to se-1.cellsynt.net\nconst net = require('net');\nfunction cellsyntReachable(ms = 5000) {\n    return new Promise(res => {\n        const s = net.createConnection(443, 'se-1.cellsynt.net');\n        s.setTimeout(ms);\n        s.on('connect', () => { s.destroy(); res(true); });\n        s.on('error', () => res(false));\n        s.on('timeout', () => { s.destroy(); res(false); });\n    });\n}","typeGuard":"function hasCellsyntBody(resp) { return resp != null && resp.data != null; }","tryCatchPattern":"try { await provider.send(...); }\ncatch (e) {\n    if (/Could not connect to Cellsynt/i.test(e.message)) { heartbeat.status = PENDING; /* retry next tick */ }\n}","preventionTips":["Empty 200s are often transient — schedule a retry rather than alerting immediately.","Ensure egress proxy configuration is healthy before alerting on Cellsynt failures."],"tags":["notification","sms","cellsynt","network","response"],"backgroundTag":null,"analyzedSha":"6b5ea0155793e666666745fb8d6fef1e829543a2","analyzedAt":"2026-08-12T23:42:12.959Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}