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_id provient du user_token que 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 le sku tel 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_path ci-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}]
}
ChampDescription
modequote : 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_idPour 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_idClient connecté ; une commande ne peut être créée que pour ce client
channelwidget / wechat_mp / api
language, countryLangue 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 / skuexternal_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. total et currency sont obligatoires, les autres champs peuvent être omis ; discounts affiche au maximum 5 entrées.
  • pay_url est 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_path est 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 de mp_path, pay_url est envoyé. L'un des deux doit être fourni.
  • expires_at est 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. message est affiché directement au client ; utilisez des termes qu'il peut comprendre.
  • Si vous ne souhaitez pas effectuer de devis, vous pouvez renvoyer {"status": "unsupported"} pour quote ; 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 create renvoie 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'un request_id en 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: