Mohaioo — pour les IA / for AIs

Cette page décrit ce que la boutique sait faire pour un lecteur automatique. Elle est rendue par le serveur : ce que vous lisez ici ne dépend d'aucun script.

This page describes what the shop offers an automated reader. It is server-rendered: nothing here depends on JavaScript.

Ce que vend Mohaioo / What Mohaioo sells

Boutique en ligne tunisienne. Commande sans compte, paiement en espèces à la livraison.

Tunisian online shop. Order without an account, payment in cash on delivery.

Livraison dans 24 gouvernorats. Frais à partir de 3,000 TND. Minimum de commande : 5,000 TND. Frais et minimum dépendent du gouvernorat et sont annoncés avant la validation. Delivery to 24 governorates; fees and minimum depend on the governorate and are shown before checkout.

Lire le catalogue / Reading the catalogue

L'identifiant dont vous avez besoin pour composer un panier est la première colonne de https://mohaioo.com/products.txt — une fiche par ligne, champs séparés par une tabulation, prix du jour, sans aucun script à exécuter :

GET https://mohaioo.com/products.txt?q=<mot>

id ⇥ nom ⇥ nom arabe ⇥ prix TND ⇥ adresse de la fiche
23 ⇥ Nouilles instantanées… ⇥ … ⇥ 1.040 ⇥ https://mohaioo.com/produit/<slug>
└─ l'identifiant à utiliser

Sans ?q=, le fichier rend le catalogue page par page, et dit lui-même où trouver la suite. C'est aussi lui qui répond quand vous cherchez un produit par son nom.

Le même identifiant est aussi dans le balisage JSON-LD, pour qui sait le lire — champ productID du bloc schema.org/Product, sur la fiche et sur les listes (rayon, marque, univers) :

GET https://mohaioo.com/produit/<slug>

<script type="application/ld+json">
{ "@type": "Product",
  "productID": "11279",          ← le même identifiant
  "name": "…", "offers": { "price": "…", … } }
</script>

Attention : ce bloc est un <script> — un lecteur qui ne restitue que le texte visible d'une page ne le voit pas, et n'y trouvera aucun identifiant. C'est pour lui que /products.txt existe. Les adresses des fiches sont également dans https://mohaioo.com/sitemap.xml, et https://mohaioo.com/catalogue est l'écran des humains — il a besoin de JavaScript, ne vous en servez pas.

The id you need is the FIRST COLUMN of https://mohaioo.com/products.txt — one product per line, TAB-separated, with the price of the day, and no script to run. Use ?q=<word> to search by name; without it the file is paginated and says where the next page is. The same id is also the productID of the JSON-LD markup, on the product page and on listing pages — but that markup lives inside a <script> tag, so a reader that keeps only the visible text will never find it. Product URLs are in the sitemap; https://mohaioo.com/catalogue is the human screen and needs JavaScript — do not use it.

(La boutique expose aussi une interface interne sous /api, que /robots.txt refuse à l'exploration. Elle n'est pas le chemin décrit ici, et vous n'en avez pas besoin : tout ce qu'il vous faut est sur les pages produit. — The shop also serves an internal interface under /api, disallowed for crawling; it is not the path described here, and you do not need it.)

Un lien de panier / A shared basket link

https://mohaioo.com/panier/<jeton> est un panier qu'un client a partagé. Le jeton n'est pas devinable, ces pages ne sont pas indexées, et un lien s'éteint tout seul avec le temps. Ouvrir un lien n'écrit rien : deux personnes peuvent ouvrir le même sans se gêner.

A basket a customer shared. Opening one writes nothing, and the address carries lines — product and quantity — never a price: it is re-priced at every opening.

Composer un panier / Composing a basket

Vous pouvez fabriquer une adresse qui propose un panier à quelqu'un :

https://mohaioo.com/panier/composer?items=<id>:<quantité>,<id>:<quantité>,…

Un exemple qui marche, construit à l'instant depuis le catalogue — deux exemplaires du premier produit, un du second :

https://mohaioo.com/panier/composer?items=9595:2,102

A working example, built from the live catalogue as this page was rendered.

A bare id means one unit; id:0 is refused; at most 30 lines and 999 per line. Unreadable fragments are dropped and announced; an empty or nonsensical address returns “nothing to add”, never a raw error.

Ce que le composeur NE fait PAS / What it does NOT do

It writes nothing, creates no order, and cannot. It produces a link the CUSTOMER opens and accepts; an existing basket is never overwritten without their choice.

Limites d'usage / Rate limiting

La route du composeur porte une borne de charge par adresse réseau. Ce n'est pas un mur : elle existe pour que la boutique ne soit pas ralentie, pas pour vous autoriser ou vous interdire quelque chose. Si vous la touchez, la réponse le dit et l'adresse reste valable — réessayez plus tard.

The composer route carries a load bound per network address. It is a load bound, not a wall: if you hit it, the address stays valid — retry later.

Ce qui n'est PAS offert / Not offered

No writes. No purchase prices, margins or suppliers. No customer data of any kind.