Otomkt

Add OpenRouter Model

Vision (Image Analysis)

Text (Ad Copy Generation)

Image (Creative Generation)

Property Extraction

Advertiser Chats

No conversations yet.

Select an advertiser

Julia from Otomkt · +65 8367 6730 · Manual replies send on Julia's behalf
Connected

Julia to Advertiser Conversations

View advertiser chat logs here and manually type messages on behalf of Julia from Otomkt.

Twilio SMS Verification

Used for phone number verification during user registration. Sign up at twilio.com, create a Verify Service, then paste the credentials below.

PostHog (product analytics)

Same Project API key powers app.otomkt.com (via /api/analytics/public-config) and should match the marketing reels build. In PostHog Cloud: open your project → Project settingsProject API key (starts with phc_). This key is intentionally public in the browser; do not use a Personal API key here.

Precedence: if POSTHOG_PUBLIC_KEY or NEXT_PUBLIC_POSTHOG_KEY is set in the server environment, that value wins and this form is ignored for the app. Leave env unset to use Admin Setup only.

Reels on otomkt.com/reels: Next.js bakes the key at image build time. After saving here, copy the same key into GitHub → repository → Settings → Secrets and variables → Actions as secret NEXT_PUBLIC_POSTHOG_KEY (and optionally NEXT_PUBLIC_POSTHOG_HOST), then redeploy or run workflow with “rebuild all images” so the reels container rebuilds.

Meta Pixel & Conversions API

Powers PageView on app.otomkt.com and server-side DownloadVideo when a reel MP4 is saved. In Meta Events Manager → your pixel → SettingsConversions APIGenerate access token.

Precedence: if META_PIXEL_ID or META_CONVERSIONS_API_TOKEN is set in the server environment, that value wins and this form is ignored for that field. Leave env unset to use Admin Setup only.

Clear this field and save to disable test mode. Env META_TEST_EVENT_CODE overrides Admin Setup when set on the server.

WhatsApp Configuration

Meta Ads API Settings

Use a System User Access Token from Business Settings → System Users. The system user must be assigned to the ad account with Manage campaigns role, then generate a token with ads_management scope. Test Connection verifies access.

App ID & App Secret (from developers.facebook.com → your app → App settings → Basic): App Secret is used to verify X-Hub-Signature-256 on the Lead Gen Instant Form webhook. Leave App Secret blank when saving to keep the stored value.

Singapore + housing: Meta requires regional_regulation_identities on the ad set. Paste your verified IDs below (often the same value for both). Meta help

Meta Lead Gen webhook (Instant Form)

In Meta Developers → your app → WebhooksPage: add callback URL below and subscribe to the leadgen field. Use the same Verify token as in WhatsApp Configuration unless you set an override below. Environment variables still override Admin Setup when set: META_LEADGEN_VERIFY_TOKEN (verify), META_APP_SECRET / FACEBOOK_APP_SECRET (signature).

Instant Form (API): To create forms from Otomkt (Lead Gen ads → Create form in Meta), Meta requires a public privacy policy https URL. The thank-you “View website” button must be a normal https page (Meta rejects WhatsApp URLs); Otomkt defaults to your listing landing /l/….

Only for GET /webhooks/meta-leadgen. Must match what you enter in Meta when adding the webhook.

Airwallex (payments)

Used for resale web QR checkout, Julia WhatsApp payment links, and reel credit top-ups. Package amounts follow the same tiers as Create Ads and the marketing site (configurable under resalePackages in settings if you add admin UI later). Get API keys from Airwallex Settings → Developer. Register webhook URL with event payment_intent.succeeded (and optionally payment_link.paid). Sandbox: leave “Use sandbox” on; production: turn off and use live keys.

Card acceptance / “no external redirect”: Reel credit card payments use embedded checkout on app.otomkt.com. Create Ads and Lead Gen campaign fees still use Airwallex Payment Links (browser redirect to Airwallex). If your acquirer or Airwallex onboarding requires all card checkouts to stay on your domain, confirm with them whether hosted Payment Link pages qualify; if not, plan to extend the embedded payment-intent flow to campaign checkouts.

Payment Links (card + PayNow): Shoppers usually see every payment method enabled for your Airwallex merchant account and currency (e.g. SGD cards and PayNow). If PayNow or cards are missing on the hosted checkout page, open the Airwallex dashboard → Settings → Payment methods (or your account’s equivalent) and enable the methods for SGD. The Payment Links REST API does not always expose a per-link method allowlist; prefer dashboard configuration.

Apple Pay (embedded checkout on app.otomkt.com): Enabling Apple Pay in Airwallex is not enough — Apple must verify your domain. The hostname you type in Airwallex must exactly match where checkout runs: use app.otomkt.com (recommended). If you already added otomkt.com, either remove it and add app.otomkt.com, or keep apex — Caddy proxies https://otomkt.com/.well-known/apple-developer-merchantid-domain-association to the app so verification can succeed for both. Download apple-developer-merchantid-domain-association from Airwallex, save as public/.well-known/apple-developer-merchantid-domain-association (no extension), redeploy; or set APPLE_PAY_DOMAIN_ASSOCIATION_PATH to an absolute file path. The app serves it as application/octet-stream. Before clicking Verify, open the exact URL for your registered domain in a private window — you must see JSON starting with {"pspId": (not HTML). If verification still fails, check Cloudflare (disable Bot Fight / a WAF rule blocking Apple’s fetch for /.well-known/*).

Google Pay: Enable in Airwallex under payment methods and accept terms. For Drop-in on your own domain, add app.otomkt.com in Airwallex if the dashboard asks for allowed / website domains. If Google Pay still fails, check Airwallex’s Google Pay troubleshooting (production access in Google Pay Business Console is mainly for direct / native API integrations).

Airwallex Billing — one-off invoice line items. Leave blank to auto-create.

Required for PDF invoices if your Airwallex organisation has more than one legal entity. Single-entity accounts can leave this blank.

Email & Invoicing (SMTP)

Sends branded PDF receipts to advertisers after PayNow payment, CC'd to [email protected]. Use your Google Workspace account — create an App Password and paste it below.

587 = STARTTLS (recommended) · 465 = SSL
The account that owns the App Password
Google Account → Security → App passwords
Leave blank to use "Otomkt Billing <your email>"

Google Sheets Integration

Auto-log every campaign to a Google Sheet. Requires a Google Cloud service account with Sheets API enabled.

Discord Notifications

Track all link and button clicks from otomkt.com (including /reels) and app.otomkt.com. Create a Discord server with 3 channels (#homepage, #app-page, #live-visit), then paste each channel's webhook URL below.

Discord QC (Julia mirror)

One-way mirror to four Discord text channels (Option A: admin, agents, leads, prospects). Optional fifth channel receives Julia WhatsApp out-of-scope / product feedback summaries. See docs/discord-julia-qc-setup.md. Env vars override these fields when set (DISCORD_BOT_TOKEN, DISCORD_QC_GUILD_ID, DISCORD_QC_CHANNEL_*, DISCORD_QC_CHANNEL_FEEDBACK_WHATSAPP). Legacy DISCORD_QC_DEFAULT_LEADS_CHANNEL_ID fills agents + leads if those are empty.

Parent text channels (create e.g. #qc-admin, #qc-agents, #qc-leads, #qc-prospects under one category; paste each channel ID):

Users & roles

Read-only list (SQLite users.role). admin sees admin-only sidebar items. Role changes are disabled here to avoid accidents; manage via DB or a future admin tool if needed.

Email Name Phone Role
Loading…

Saved drafts

Save URL, ad copy, base image, and current overlaid creative. If Meta upload fails, load the draft and retry without regenerating.

Listing

Julia uses your Otomkt and Meta data. If Meta API is not configured, counts and delivery come from Otomkt only.

Ask how many campaigns you have, delivery status, impressions, WhatsApp clicks, or anything about your resale ads.

Same flow as a real Click-to-WhatsApp lead: the first bubble is the Meta ad’s pre-filled customer message, then Julia’s standard opening reply. Listing facts use your campaign and Project Database when the URL matches.

Select a campaign and click Start simulation. You are the customer; Julia qualifies you like a real lead.

New Launch Condos

Project NameProperty TypeProject URLCompletion YearDeveloperTotal UnitsImages
No new launches added yet.

Add New Launch

Enter property website

Supports PropertyGuru and 99.co listings. An agent name must be present on the listing.

Published pages

Landing URL Source listing Updated
Loading…

Saved Projects

Project Name URL Agent Date Listed Date Extracted User Images Ad Images Time Preview
No projects yet. Extract a property listing to see it here.
0
Total Calls
0
Total Tokens
$0.000000
Est. Cost

Request Log

TimestampUserProviderModelTaskTokensCostSpeed
No logs yet. Generate an ad to see API usage.

Updates

VersionTimestampUpdates
Loading...
Visitors (7d)
Previews
Payments
Downloads
Funnel conv.

Funnel

Step drop-off

StepUsersConv.Drop

Recent events

EventTimeUser

Users & WhatsApp leads

Select Phone User Agency CEA Campaigns ↑ / live Msgs Clicks mkt · app Seen SGT Reel credits Log in as
Loading...

Handover leads

lead_id Customer Phone Viewing Additional Created Assigned agent First click Response time Notify
Loading…

Meta Instant Form leads

Name Phone Campaign Name Time (Meta / stored) Page visit Ask full details Actions
Loading…

Webhook delivery log

Recent POSTs to the leadgen webhook (signature-verified payloads).

ID Received Object Entries Changes Note
Open this page to load.

Submissions

Submitted User Message Attachments
Loading...

Purpose

What Julia is for: advertisers vs customers (CTWA leads), in plain language.

Guidelines (Do's)

How Julia should answer — e.g. ground answers in Project Database / scraped facts; use exact distances and names from stored data.

Guardrails

Hard limits: no web search, no hallucinated property facts, no guessing as certainty.

Customer handoff (CTWA qualification)

Rules appended to Julia’s system prompt for the in-app customer simulator (Click-to-WhatsApp style). Controls when the conversation is “finished” and handoff to the listing agent is allowed — add or edit points as your process evolves.

New reel

Built for TikTok, Instagram Reels & YouTube Shorts.

Starting extraction… 0.0 s

Estimated 1–2 min

Your preview will appear here

Generate a reel, then watch it on this page before downloading.

Your reels

1
Enter Property Website
2
Campaign settings
3
Meta ads preview
4
Payment successful

Enter Property Website

Supports PropertyGuru and 99.co. We pick the best hero image (e.g. living room) and render one 1080×1080 (1:1) feed creative with text overlay.

1
Enter listing URL
2
Campaign settings
3
Launched & pay
4
Payment successful

Enter listing URL

Supports PropertyGuru and 99.co. We render one 1080×1080 (1:1) image creative with text overlay for Meta Lead ads.

Up to 5 images, 10MB each.

Advertiser Profile

Incomplete
Auto-filled from your sign-in profile.
Assigned once and permanent.

Not set
Updates the number used for Julia chat.
We use your CEA Registration Number and agency to help ensure you are advertising your own listings. We also compare your CEA against the lister on the listing URL when available.

Enter Property Website

Supports PropertyGuru and 99.co listings

Your campaigns

Project Type Agent URL Preview Campaign Ad budget Amount spent Duration Delivery Impr. Clicks Results On / Off

History

Date Package Amount Status Flow Invoice
Loading…