botinto.comEmail + R2 setup
CPANEL · SHARED HOSTING

Website hosting
and background jobs.

Incoming support mail uses Cloudflare forwarding and R2. The scheduler on this page processes other Botinto background work, including account emails and website AI conversations.

Hosting requirements.

cPanel Cron Jobs for background work.

  1. Get the exact command from Botinto admin

    Open platform admin → Shared hosting · Cron Jobs. It shows commands containing the installed path. Ask your host to confirm the PHP executable; website PHP and CLI PHP may differ.

  2. Run the read-only check once

    In cPanel Terminal, use the command displayed in Botinto admin. Example only:

    /opt/cpanel/ea-php83/root/usr/bin/php /home/CPANEL_USER/public_html/app/hosting-check.php

    If no Terminal is available, run it once as a temporary cron with Cron Email enabled and remove that check job afterward.

  3. Add one recurring job

    For every minute, set each schedule field to *. Example command:

    /opt/cpanel/ea-php83/root/usr/bin/php /home/CPANEL_USER/public_html/app/worker.php --cron --interval=60

    If only five-minute jobs are allowed, use Minute */5 and the other fields *, and change the command to --interval=300. Use one scheduler. Do not run a permanent --loop process on shared hosting.

  4. Check the heartbeat

    Refresh platform admin after the interval. The queue worker check should report Ready. Each run begins at most 20 jobs within a 45-second admission budget; an already-running provider request can last longer. Overlapping runs share a database lock.

No cPanel Cron Jobs? Use an external scheduler.

  1. In Botinto admin → External scheduler, select an interval and create a scheduler key. Keep it private.
  2. Create an HTTPS job in your chosen service. URL: the admin's endpoint, normally https://botinto.com/api/cron.php. Method: POST. Body: empty. Add custom header X-Botinto-Cron-Key with the generated key. Match the interval.
  3. Run a test. JSON ok: true confirms execution; processed counts attempted jobs, not successful provider delivery. busy: true means another worker is already running.
  4. Check the heartbeat and queued job state. Each HTTP run starts at most one job. Provider calls can outlast a service's timeout; choose CLI cron when available.

401 means an incorrect or disabled key, 405 means the wrong method, and 429 means calls are too frequent. A challenge/406 needs a narrow exception for the machine endpoint. Do not put the key in the URL or disable the entire firewall.

This scheduler is separate from the incoming Email Worker, which has no cron trigger. Incoming forwarding and direct SMTP replies do not wait for this hosting scheduler. Account verification/reset messages and website AI jobs still do.

Website and mail configuration.

Keep /api/*, /admin/*, auth.php and dashboard.php out of shared caches, then purge stale assets after an update. Mail provider SMTP/IMAP DNS hostnames need DNS-only records. Follow the dedicated Cloudflare walkthrough for botinto.com Email Routing, private R2 bucket, Email Worker and Catch-all rule.