louislam/uptime-kuma · error · Error
Could not connect to Cellsynt, please try again.
Error message
Could not connect to Cellsynt, please try again.
What it means
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.
Source
Thrown at server/notification-providers/cellsynt.js:28
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
const okMsg = "Sent Successfully.";
const data = {
// docs at https://www.cellsynt.com/en/sms/api-integration
params: {
username: notification.cellsyntLogin,
password: notification.cellsyntPassword,
destination: notification.cellsyntDestination,
text: msg.replace(/[^\x00-\x7F]/g, ""),
originatortype: notification.cellsyntOriginatortype,
originator: notification.cellsyntOriginator,
allowconcat: notification.cellsyntAllowLongSMS ? 6 : 1,
},
};
try {
let config = this.getAxiosConfigWithProxy(data);
const resp = await axios.post("https://se-1.cellsynt.net/sms.php", null, config);
if (resp.data == null) {
throw new Error("Could not connect to Cellsynt, please try again.");
} else if (resp.data.includes("Error:")) {
resp.data = resp.data.replaceAll("Error:", "");
throw new Error(resp.data);
}
return okMsg;
} catch (error) {
this.throwGeneralAxiosError(error);
}
}
}
module.exports = Cellsynt;
View on GitHub (pinned to 6b5ea01557)
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.
Defensive patterns
Strategy: retry
Validate before calling
// Pre-flight reachability to se-1.cellsynt.net
const net = require('net');
function cellsyntReachable(ms = 5000) {
return new Promise(res => {
const s = net.createConnection(443, 'se-1.cellsynt.net');
s.setTimeout(ms);
s.on('connect', () => { s.destroy(); res(true); });
s.on('error', () => res(false));
s.on('timeout', () => { s.destroy(); res(false); });
});
} Type guard
function hasCellsyntBody(resp) { return resp != null && resp.data != null; } Try / catch
try { await provider.send(...); }
catch (e) {
if (/Could not connect to Cellsynt/i.test(e.message)) { heartbeat.status = PENDING; /* retry next tick */ }
} Prevention
- Empty 200s are often transient — schedule a retry rather than alerting immediately.
- Ensure egress proxy configuration is healthy before alerting on Cellsynt failures.
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- ${resp.data}
- ${result.data.Message}
- Bark notification failed with invalid response!
- ${data?.error_string || JSON.stringify(data)}
- FlashDuty notification failed with invalid response!
AI-assisted analysis of louislam/uptime-kuma@6b5ea01557 (2026-08-12).
Data as JSON: /api/errors/375ab62376dfa7e3.
Report an issue: GitHub.