EMBEDDED SOLUTION · SETUP
Take your reminders to the cloud.
The local app is ready to try. Cloud hosting and your messaging accounts must be connected before reminders can run while your PC is off. Nothing is sent by default.
1. Create your private cloud service
- Create a Render account and a private GitHub repository containing the files from the application folder. Exclude
data,vendor, secrets and customer PDFs. Keep Dockerfile and render.yaml at the repository root. - In Render, create a Blueprint from that repository. Review the charges for the paid Starter service and 1 GB persistent disk before accepting. Free services do not provide the always-on persistent setup used here.
- Set
ADMIN_PASSWORDto a private password of 12 or more characters. SetAPP_BASE_URLto the exact public HTTPS address assigned to the service, without a trailing slash. APP_SECRET is generated by the Blueprint: keep a secure copy for recovery. - Confirm the persistent disk is mounted at
/var/dataandDATA_DIR=/var/data/invoice-desk. Run exactly one service instance and one server process. - Open the HTTPS address, sign in, and import a test invoice. Restart the service and confirm the invoice remains. Keep
LIVE_SEND_ENABLED=falseduring setup.
If the address is only shown after creating the service, update APP_BASE_URL and redeploy before signing in. See the packaged README for local-data migration and backup recovery.
2. Connect email
- In Google Cloud Console, create a project and enable Gmail API. Configure the OAuth consent screen for your own account. Create an OAuth client of type Web application.
- Add the exact authorised redirect URI
https://YOUR-SERVICE.onrender.com/api/gmail/callback. - Add
GOOGLE_CLIENT_IDandGOOGLE_CLIENT_SECRETto Render's secret environment settings and restart the service. - Open Invoice Desk → Settings → Connect Gmail. Sign in as embeddedsolution1@gmail.com and grant access to send mail. No Gmail password is stored by this app.
Google apps in external Testing mode can receive refresh tokens that expire after 7 days for Gmail scopes. Complete the appropriate Google production/publishing requirements for dependable ongoing use. Google may require verification. Do not assume a temporary test connection is permanent.
3. Connect WhatsApp
An ordinary WhatsApp account cannot be connected directly to the official messaging API. Onboard a business number to the WhatsApp Business Platform, directly through Meta or through a provider that supports your account setup. Simply installing the WhatsApp Business app is not enough. Check the number migration/coexistence options before changing your existing number.
- Create a Meta business app and WhatsApp Business Account, register your business sender number and add a payment method where required.
- Create an approved Utility template named
invoice_payment_reminder(or configure its actual name). The body must have four text parameters, in order: customer name, invoice number, outstanding amount, due date. - Suggested body:
Dear {{1}}, this is a payment reminder from Embedded Solution for invoice {{2}}. The outstanding amount is INR {{3}}, due on {{4}}. Please arrange payment or reply with payment details if already paid.
Meta decides template approval and category. Submit samples for each parameter. The app sends body parameters only; do not configure a required media header or button parameters. - Configure
WHATSAPP_ACCESS_TOKEN,WHATSAPP_PHONE_NUMBER_ID,WHATSAPP_TEMPLATE_NAME,WHATSAPP_TEMPLATE_LANGUAGE(matching the approved template), andMETA_GRAPH_VERSION(currently supported version). Use a suitable production token and maintain its permissions/expiry. - Obtain each customer's agreement before enabling WhatsApp reminders for their invoice. Indian numbers can be entered as 10 digits; international numbers need country code.
4. Run one controlled test
Use your own recipient email and WhatsApp number on a small test invoice due today. Enable only the channels you have connected. Set LIVE_SEND_ENABLED=true in Render, then enable Automatic follow-ups in Invoice Desk. Choose Check reminders now and check both the provider history and your recipient devices. Mark the test invoice paid after testing.
Reminders run once per stage: 2 days before, on the due date, 3 days overdue and 7 days overdue. There are no further automatic reminders after the final stage. The worker checks daily from 10 AM India time, or after the service next starts that day. It skips old stages instead of sending a burst of messages.
The app records provider acceptance. Delivery receipts and customer replies are not synchronised in this version. Failed or uncertain sends require review before a manual retry.
5. Open it like a desktop app
Put the public HTTPS address into cloud-url.txt next to launcher.py. Double-click Start Invoice Desk.vbs. The shortcut opens the cloud app; reminders then continue independently of your computer.
Keep your records safe
Download the full backup from Settings regularly. PDFs, customer details and payments are private business records. Retain APP_SECRET separately. Payments are marked manually; the app does not check your bank or Tally. Review amount, customer and dates after every PDF import. Scanned PDFs use English OCR for up to three scanned pages. Check all suggestions; missing customer contacts need manual entry or a saved customer.
Reference: Render persistent disks · Gmail sending API · Google OAuth