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

  1. Retry once — the message itself suggests retry and the condition is often transient.
  2. Reproduce with `curl -i -X POST 'https://se-1.cellsynt.net/sms.php' ... ` to see the raw response/body.
  3. Check egress to se-1.cellsynt.net and any configured proxy in getAxiosConfigWithProxy.
  4. 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

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


AI-assisted analysis of louislam/uptime-kuma@6b5ea01557 (2026-08-12). Data as JSON: /api/errors/375ab62376dfa7e3. Report an issue: GitHub.