WhatsApp Operations Inbox
The exchange's smart secretary: work messages from customers' WhatsApp groups (the groups linked in each account's file) come in here automatically, get read, and an "action button" with a pre-filled form is built for each one: receipt → record transfer/item, IBAN → deposit request, trade message → trade form, crypto hash → record transaction. Ordinary chit-chat isn't saved.
Which Messages Get Read?
- A photo or PDF of a bank receipt (from any sender) — amount, bank, tracking code, payer/payee name, and IBAN are extracted with AI (within a minute at most). If the customer has an open "staged deposit," recording the receipt against it is suggested — the payee name match is a little lenient here. Otherwise, "Funds Transfer" is suggested: the group's side is always pre-filled — if the customer sent the message, they are the payer, and if it came from our own numbers, the group's customer is the receiver; the other party always comes in as "Unknown Party" for you to set when recording — names on the receipt are never used to pick accounts; they only help find the related payment batch. If the same receipt was already seen in another customer's group, both parties are filled from the two groups.
- An IBAN number or a foreign IBAN (only from the customer, not our own numbers) — two suggestions: "Create deposit request" and "Create staged deposit." The currency is guessed from the IBAN's country.
- A trade message (only from "Exchange WhatsApp numbers" — Settings) — in the format below.
- A crypto transaction hash (64 characters, or a tronscan/bscscan/etherscan link) — suggests "Record crypto payment."
Trade Message Format
sell 1000 USD by IRT rate 181500
buy 1000 USD by IRT = 181,500,000
sell 500 EUR by USD rate 1.08 fee +20
buy 350,000 rmb by usd ist (6.7425) = 51,910 usd ist
sell 1,000 usd sol by rmb (6.70) = 6,700 rmb
buy 5,000 usd teh by usd ist (=) = 5,000 usd ist
buy 2,000 usd hav by usd (1.005) = 2,010 usd
sell 10000 usd by 36700 aed
change eur to usd ist (1.1596)
change all rmb to usd (6.70)
sell= sell to the customer,buy= buy from the customer. The equivalent Persian words for sell / buy / by / with / rate / fee are also accepted.- Instead of a rate, you can write the total amount of the second side with an
=sign; the rate is calculated automatically. - The fee is optional:
fee +20means we take 20 from the customer,fee -20means we give it to the customer. The fee currency is also optional (fee -50 USD) and defaults to the trade's second currency. - Rate in parentheses: whatever appears inside
(...)is the trade rate, e.g.(6.7425). If the parentheses contain only=, the rate is 1:(=). You can still write the total of the second side with an=after the parentheses. - USD variants:
usd sol/usd teh/usd ist(two words, or joined with an underscore likeusd_ist) are recognized; if the currency codeUSD_SOL/USD_TEH/USD_ISTexists it is chosen. A loneusdequals your default variant — Settings → "Default USD variant in messages" (this exchange:ist, i.e. usd = usd ist). - Havale: the suffix
havmeans havale;usd hav→USD_Randeur hav→EUR_R.
Important — trade summary: if you use the "Send trade summary to group" feature, don't also send a manual message in this format for the same trade, so a duplicate suggestion isn't created. Summaries the system itself sends are recognized and ignored; if you want the inbox to never read trade messages at all, turn off the "Read trade messages from groups" option in Settings.
Amount and Rial Unit
The amount on rial receipts is converted to toman or rial according to Settings → "Receipt rial unit" and entered into the forms. Lira, yuan, and other currency receipts are transferred in their own currency.
Notes
- Clicking the receipt photo enlarges it; "Block" (group / sender-in-group / sender everywhere) is on each row's button.
- After recording from any suggestion, the inbox item is automatically marked "Done".
- Messages colleagues send are labeled "Sent by us"; their numbers are defined in Settings → "Exchange WhatsApp numbers".
- A duplicate receipt in the same group automatically goes to the "Duplicate" tab; but if the same file arrives in another customer's group, it is a forwarded receipt: the item stays active, the payer's (first group's customer) open payment commitments are suggested first — a commitment whose receiver is also this group's customer gets the "Both commitment sides match" badge and ranks highest — and a "Funds Transfer" with both parties known (payer = the first group's customer, receiver = the second group's customer) remains the fallback option; recording that transfer closes both items.
- The "Extract with AI" button is also available in the Dismissed, Auto-archived and Unknown tabs; the "type" filter is chosen with the chip buttons above the list.
Non-receipt files (Alipay QR/invoice)
When an image or PDF is not a receipt and contains no IBAN or transaction hash, two actions are suggested: "Create staged payment with this file" and "Deposit request with this file". The form is prefilled with the group's customer and the file itself is attached automatically as the "destination file", so it travels with the assignment message to the payer. The account/email, Chinese holder name and amount are also guessed from the image caption and the two messages before/after, and prefilled in the form — a suggestion only, editable before saving.
-
Trader and fee detection in trade messages: the fee is read in both forms — “fee +50” and “+ 50 usd fee” — and its currency snaps to one of the two trade sides. The message text is prefilled verbatim into the trade description, and when someone is mentioned (@ID) or the sender is recognized, the trader is auto-selected from the WhatsApp IDs on user profiles.
-
Full-balance settlement: a “change cur1 to cur2 (rate)” message — with or without “all” — from the exchange’s own numbers prefills the trade form with the customer’s entire cur1 balance (as of click time) — buy/sell direction comes from the balance sign, and a missing rate means the board buy/sell mid.
-
No rate, two amounts: you can skip the rate and give both sides — inline “sell 10000 usd by 36700 aed” or with equals “sell 10000 usd by aed = 36700”; the rate is derived by division.
-
Desk formats also accepted (besides the samples above): "by" may be
toorba;havale/hav= remittance variant;karmozd= fee ("ba 175 usd karmozd"); Turkish İ ("usd İst") is fine; the total may follow a comma or come right after the second currency ("by usd teh , 1025", "by usd ist 100,000"); if the first amount is missing but rate and total are given ("Buy usd by toman (223,500) , 200,835,000 tmn") the amount is computed;full/allinstead of an amount = convert the whole balance ("Buy full aed by toman (61,000)"); a signed spread between two variants of one currency ("euro hav by euro ist (+0,004)" = rate 1.004); two variants of one currency without a rate = 1:1; "change" with an explicit amount ("change 12,379 usd hav to usd ist (=)", "change 200 m toman to rmb (33,450)"). -
Decimal comma: a European rate like “(1,1596)” is read correctly as 1.1596; three-digit-group commas (10,000) remain thousands separators.
Currency variants in messages (usd ist, …)
A variant is the suffix after the code: "usd ist" Istanbul dollar, "usd teh" Tehran dollar, "usd hav" remittance (USD_R), "usd sol"… The exchange default variant (Settings → default currency variant, here ist) IS the main currency: "usd" and "usd ist" are both your USD, "eur ist" is your EUR — unless a separate currency like USD_TEH exists, which wins.
Queue, auto-archive and bulk actions
- Priority & SLA: high-amount receipts or customers with open commitments float to the top with 🔥; items idle beyond the configured hours get a red "idle" badge.
- Auto-archive: a pending item idle for the configured hours moves to the "Auto-archived" tab so the counter only shows fresh work.
- Bulk actions: in the Pending tab select multiple rows with checkboxes and archive/dismiss/mark-done at once.
- Being reviewed: when someone clicks a receipt's posting button, others see "👀 being reviewed by …" for 5 minutes to avoid double-posting.
- Perceptual dedupe: the same receipt even re-compressed/cropped (forwarded from another group) is detected by image similarity, not just identical files.
- Commitment suggestions with confidence: "post to commitment" buttons now show a match confidence percent (payee name + amount + IBAN).
- These behaviors are configured in "Inbox settings" (admin only); see the "Inbox performance" report too.
Trade messages with an invalid format
If a colleague sends a trade message in a broken format (no rate, unknown currency name, …), it is not discarded: it stays in the queue with a red “Invalid trade format” badge and can be selected in the “type” filter, so the manager can see who wrote what and remind them of the correct format. Common typos (uad/uss for usd, aef for aed, rubl, havale for hav, aol for sol) and a variant-only side (“by ist” when the other side is dollars) are corrected automatically; “= 806 mt” means 806 million toman and is accepted only when it matches amount × rate.
Correcting a trade message after it was sent
A trade message in the group sometimes changes after it is sent. The inbox understands three ways of correcting it:
- Edit in WhatsApp (within 15 minutes of sending): the new text automatically replaces the card's text and the card gets an "Edited in WhatsApp" badge.
- Reply with the
Edit:prefix, with no time limit and only from our own numbers: reply to the trade message and writeEdit: sell 1200 usd by irt rate 98500. The text after the prefix becomes the valid trade of that same card; no separate card is created. If you correct several times, the last correction wins. A reply without this prefix is a new message as usual. - Reply
Cancel, only from our own numbers: the quoted trade is cancelled; a pending card is "Dismissed" with a "Cancelled via reply" badge. A note after the word is optional (Cancel - was a mistake). - Deleting the message: a pending card is automatically "Dismissed" with a "Deleted by sender" badge.
Only a reply that starts with one of these two keywords is a command; any other reply ("ok", "received?" …) leaves the card unchanged.
In all three cases the previous text stays in the card details, struck through, under the new text so you can see what changed. The "Book trade" button is always pre-filled with the latest text.
If the trade was already booked, the app never touches the document: the card returns to the top of the pending queue with a red "Corrected after booking" (or "Deleted after booking") badge, shows both texts and has a "View booked document" button. Look at the document and decide: edit the document and mark "Done", or "Dismiss" if the correction was unwarranted. The "Book again" button is only for after you have reversed the previous document.