BestDealOn

Handbook

Options and settings

Every option that exists in the code, its default and its state on Nov 3, 2026. See also feature-flags.md. Values shown as <…> are placeholders: never put real secrets in docs, tickets or chat.

1. bestdealon.app environment

VariableDefaultCurrentNotes
APP_URLhttp://localhost:8080https://bestdealon.appUsed in links and canonicals
APP_ENVproductiondefault
ADMIN_EMAILSemptysetComma list; these accounts get the admin role
INDEXINGoffonSearch-engine indexing of public pages
NOINDEX_PHONESemptynot setListings kept out of search
LEGAL_PAGESoffon/privacy, /terms, SMS consent box
CALL_VERIFYoffonoff / dryrun / on
INBOUND_CLAIMoffoffClaims offer on inbound calls
CALLER_LOOKUPoffonCaller-profile endpoint
PHONE_VERIFY_SMSoffoffSMS verification codes
PHONE_BOT_URLhttps://callbots-bdo.onrender.comdefaultMust be https (or localhost)
CALLBOT_SHARED_SECRETemptysetHMAC secret; callbot API returns 503 without it
RESEND_API_KEY, MAIL_FROMempty, Best Deal On <no-reply@bestdealon.app>setMail transport
MAIL_ALLOWLISTempty = anyonesetQA guard
TWILIO_*emptysetVerify service, API key, numbers
STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_PRICE_IDemptynot setBilling (test mode only)
API_WRITES_PER_HOUR60defaultSync API write limit per token
CORS_ORIGINSemptysetExtra origins for the extension

One-off boot hooks (set for one deploy, then delete): SEED_DEMO, SET_BUSINESS_CITY, FIX_LISTING_CONTACT, REMOVE_QXT_BUTTON, UPDATE_BIZINATOR_LINKS, CALLER_DIAG (read-only), ATTACH_OWNER_1188, GRANT_ADMIN_EMAIL, PURGE_E2E_USERS.

# Render → bestdealon.app → Environment (example values)
CALL_VERIFY=dryrun        # test without dialling
CALLER_LOOKUP=on
CALLBOT_SHARED_SECRET=<shared-secret-from-the-vault>

Admin settings (/admin/settings, stored in the database)

SettingEffect
Email via Resend (mail_resend)Turns on all site email; turning it on sends the admin a test email first
Magic link (magic_link)Enables "email me a sign-in link"

2. callbots-bdo tenant file (deploy/bestdealon/tenants/bestdealon.json)

KeyDefaultBest Deal OnMeaning
id, name, numbersrequiredbestdealon, "Best Deal On", +17276320002Slug, display name, E.164 numbers
voiceeveeveGrok Voice voice
disclosure"Hi, you have reached {name}. This call may be recorded…"customFirst line for new callers
hours—settz, open, close, days
link_allowlistrequiredsetOnly these domains may be sent
blocked_topics[]—Topics to refuse
approval_modetrue—Owner approval for sensitive tools
order_lookup_enabledfalsefalseOrder status tool
max_call_seconds900defaultHard call limit
sms_enabled—falseTexting
email_enabled—setEmail links/summaries
take_message—{enabled:true, record_audio:false, deliver:"email"}Leave-a-message
known_callersnonenoneE.164 → {name, role?, greeting?}
returning_caller_greetingon unless falsetrueWelcome-back greeting
returning_caller_include_unconfirmedfalsetrueMatch unconfirmed contacts
bdo_caller_lookupfalsetrueSite lookup (only allowed for bestdealon)
callback_offerfalsetrueCall-back-or-email offer
welcome_backbuilt-in textsetMust contain {name}, one line, ≤200 chars
brandRF Safe wordingBest Deal OnBrand swap for shared prompts
secrets—env:BDO_* refsReferences only, never values
payments_enabled—neverRejected by validation
{
  "id": "bestdealon",
  "numbers": ["+17276320002"],
  "voice": "eve",
  "sms_enabled": false,
  "take_message": { "enabled": true, "record_audio": false, "deliver": "email" },
  "returning_caller_greeting": true,
  "returning_caller_include_unconfirmed": true,
  "bdo_caller_lookup": true,
  "callback_offer": true,
  "welcome_back": "Welcome back{name}! This is the Best Deal On AI assistant. How can I help?",
  "secrets": { "xai_webhook_secret": "env:BDO_XAI_WEBHOOK_SECRET", "twilio_webhook_key": "env:BDO_TWILIO_WEBHOOK_KEY" }
}

callbots-bdo env: BDO_VERIFY_CALLS (off/dryrun/live; live), BDO_SITE_URL, BDO_CALLBOT_SHARED_SECRET, BDO_TWILIO_*, BDO_XAI_WEBHOOK_SECRET, TENANTS_DIR.

3. Account settings (owners)

WhereWhat you can do
/signupBusiness or personal account; SMS consent (optional, unchecked)
/accountStatus, listings, verify phone (Verify by call), "I own this business", resend confirmation
/account/tokensCreate/revoke API keys (one business or all; scopes)
/deviceApprove the Best Deal On Bot extension for one business
/account/phone-botPhone-bot dashboard (read-only)
/forgot, /login/linkReset password, email sign-in link

4. Signed callbot API request

POST /api/callbot/caller-profile HTTP/1.1
Host: bestdealon.app
Content-Type: application/json
X-BDO-Signature: t=<unix-seconds>,v1=<hex HMAC-SHA256(secret, "<t>.<raw body>")>

{"caller":"+1<10 digits>"}
const crypto = require('crypto');
const body = JSON.stringify({ caller: '+15555550123' });
const t = Math.floor(Date.now() / 1000);
const v1 = crypto.createHmac('sha256', process.env.BDO_CALLBOT_SHARED_SECRET).update(`${t}.${body}`).digest('hex');
// headers: { 'content-type': 'application/json', 'x-bdo-signature': `t=${t},v1=${v1}` }

Unsigned, wrongly signed, or older than 300 s → 401.