Interface de commande AI
Une fois que le client a confirmé sa commande dans la conversation, nous appelons votre API pour créer une commande en attente de paiement, puis transmettons le lien de paiement au client.
Une fois que le client a choisi ses produits dans la conversation, l'AI prépare un brouillon de commande à lui faire confirmer ; après confirmation, nous demandons à votre système de créer une commande en attente de paiement, puis nous transmettons au client le lien de paiement que vous renvoyez. Nous ne conservons pas la commande et ne traitons pas les fonds.
Dans le tableau de bord, sous « Paramètres du bot », renseignez l'endpoint de commande (s'il n'est pas renseigné, l'AI ne peut pas passer de commande) ; vous pouvez aussi renseigner l'adresse de la page de connexion : lorsqu'un client non connecté souhaite passer commande, un bouton « Se connecter » apparaît dans la fenêtre de chat.
Prérequis :
- Seuls les clients connectés peuvent passer commande ;
user_idprovient duuser_tokenque vous émettez (voir Identifier les clients connectés). - Les produits doivent être synchronisés via l'API ouverte (voir Base de connaissances et produits) ; les produits avec variantes doivent inclure
variants[].sku, et nous vous transmettons leskutel quel lors de la commande.
Comment le client confirme :
- Fenêtre de chat web : après que l'AI a préparé le brouillon, une carte de commande s'affiche ; la commande n'est créée que lorsque le client clique sur « Confirmer la commande », puis un bouton « Aller payer » apparaît sur la carte une fois la commande créée.
- Canaux qui ne peuvent envoyer que du texte, comme le mini-programme WeChat : l'AI envoie un récapitulatif de la commande au client ; la commande n'est créée qu'après la réponse « Confirmer » du client, puis nous envoyons un point d'entrée de paiement (voir
mp_pathci-dessous).
Requête
La même adresse sert, selon mode, à distinguer le devis de la création de commande. Les méthodes de signature et de vérification de signature sont identiques à celles de l'interface de recherche de commande ; délai d'attente : 10 secondes.
POST {你的下单接口}
Content-Type: application/json
X-AICS-Timestamp: 1761120000
X-AICS-Signature: v1=<hex>
{
"mode": "quote",
"request_id": "chk_3f2a9c...",
"user_id": "u_123",
"conversation_id": "b3c1...",
"channel": "widget",
"language": "en",
"country": "US",
"items": [{"product_id": "w1", "sku": "w1-black", "qty": 1}]
}
| Champ | Description |
|---|---|
mode | quote : calcule uniquement le prix (remises, frais de port, taxes), ne crée pas de commande et ne réserve pas de stock ; create : crée une commande en attente de paiement |
request_id | Pour une même confirmation de commande, le devis et la création utilisent la même valeur. Lorsque create reçoit un request_id en double, il doit renvoyer la même commande ; nos nouvelles tentatives et les clics répétés du client s'appuient dessus pour éviter les commandes en double |
user_id | Client connecté ; une commande ne peut être créée que pour ce client |
channel | widget / wechat_mp / api |
language, country | Langue du client et pays de son IP ; peuvent être null et servent à choisir la devise de règlement et à calculer les taxes |
items[].product_id / sku | external_id du produit et sku de la variante ; pour un produit sans variante, sku vaut null |
Réponse
Devis réussi :
{
"status": "quoted",
"currency": "USD",
"goods_amount": "399.00",
"discount": "20.00",
"discounts": [{"label": "新客券", "amount": "20.00"}],
"shipping_fee": "0",
"tax": "0",
"total": "379.00"
}
Création de commande réussie :
{
"status": "created",
"order_no": "T2026102300001",
"pay_url": "https://shop.example.com/pay?orderno=T2026102300001",
"mp_path": "pages/order/pay?orderno=T2026102300001",
"expires_at": "2026-10-23T12:30:00Z",
"currency": "USD",
"goods_amount": "399.00",
"discount": "20.00",
"shipping_fee": "0",
"tax": "0",
"total": "379.00"
}
Commande impossible :
{"status": "rejected", "code": "OUT_OF_STOCK", "message": "这款黑色暂时缺货"}
- Les montants sont tous des chaînes de caractères.
totaletcurrencysont obligatoires, les autres champs peuvent être omis ;discountsaffiche au maximum 5 entrées. pay_urlest le lien de paiement web et doit être en https ; si une liste blanche de domaines est configurée dans la page « Intégration », il doit également se trouver sur un domaine de la liste blanche ou l'un de ses sous-domaines, sinon il ne sera pas affiché.mp_pathest le chemin de la page de paiement dans le mini-programme ; sur le canal WeChat, il est envoyé au client sous forme de carte de mini-programme (la couverture utilise l'image du premier produit) ; s'il n'y a pas demp_path,pay_urlest envoyé. L'un des deux doit être fourni.expires_atest la date limite de paiement, affichée sur la carte.- Valeurs possibles pour
code:OUT_OF_STOCK,SKU_UNAVAILABLE,REGION_UNAVAILABLE,NOT_LOGGED_IN,LIMIT,OTHER.messageest affiché directement au client ; utilisez des termes qu'il peut comprendre. - Si vous ne souhaitez pas effectuer de devis, vous pouvez renvoyer
{"status": "unsupported"}pourquote; la carte estimera le montant d'après les prix du catalogue produits et indiquera « Le montant final fait foi sur la page de paiement ». - Si
createrenvoie un code autre que 200 ou un format incorrect, la confirmation de commande est conservée et le client peut cliquer à nouveau ; veillez à ce qu'unrequest_iden double ne crée pas une deuxième commande.
Limites : une confirmation de commande est valable 30 minutes ; en préparer une nouvelle dans la même conversation annule la précédente ; une commande peut contenir au maximum 10 types de produits et 20 unités par type ; une même conversation peut créer au maximum 5 commandes en 24 heures.
Cette page vous a-t-elle été utile ?
Dernière mise à jour:
