Labs — Application Shopify
B2B Triage : inscription et approbation des grossistes pour Shopify B2B
Les demandes en gros deviennent de vraies entreprises Shopify.
B2B Triage est une application Shopify de Human After All qui transforme les demandes de compte en gros en comptes B2B Shopify natifs. Un acheteur fait une demande sur votre vitrine, une personne la révise, et l’approbation écrit de vrais objets Shopify — entreprise, emplacement, contact, affectation de catalogue, conditions de paiement, exonération de taxes. Pas une étiquette. Pas une note. Les fiches sur lesquelles roule le moteur B2B de Shopify.
Bientôt sur le Shopify App Store · Fonctionne sur tous les forfaits payants de Shopify
Dernière mise à jour :
01 — Le graphe d’objets
Que crée B2B Triage quand vous approuvez un acheteur ?
Approuver une demande écrit six objets Shopify natifs : une entreprise, un emplacement, un contact, une affectation de catalogue, des conditions de paiement et une exonération de taxes. La plupart des applications d’inscription s’arrêtent à une fiche client — les réponses collées dans le champ Notes, quelques étiquettes, un mot de passe. B2B Triage aboutit au graphe d’objets que le moteur B2B de Shopify lit vraiment. L’entreprise est créée avec un identifiant externe stable, dérivé au moment de la demande : un double-clic sur Approuver ne crée pas de doublon en silence. L’emplacement est affecté à un de vos catalogues ; l’application n’en crée jamais — les vôtres restent les vôtres. Les conditions de paiement sont résolues depuis le modèle de Shopify vers un entier typé. L’exonération de taxes est la valeur juste pour la juridiction, parmi les 75 de Shopify — le Canada seul en compte six types. Chaque étape s’inscrit dans l’historique de la demande. Quand Shopify refuse une étape, vous lisez ses mots — pas un code d’erreur inventé.
Une approbation. Six objets natifs.
Entreprise
Créée avec un identifiant externe stable, dérivé au moment de la demande. Shopify n’impose aucune unicité sur les noms d’entreprise ; sans cet identifiant, un double-clic sur Approuver en crée deux, en silence.
Emplacement
Y compris le deuxième que Shopify crée automatiquement en arrière-plan — sans conditions, sans exonération, sans catalogue. C’est celui que les acheteurs choisissent, et il vend au prix de détail. L’application le détecte et le réconcilie.
Contact
L’acheteur, rattaché à l’emplacement via la mutation d’affectation qui fonctionne quand le client existe déjà — c’est-à-dire, en pratique, toujours.
Affectation de catalogue
L’emplacement de l’acheteur est affecté à un catalogue que vous avez déjà monté : plusieurs acheteurs partagent les mêmes catalogues à paliers. L’application ne crée jamais de catalogue — les vôtres restent les vôtres.
Conditions de paiement
Le net résolu depuis le modèle de Shopify vers un entier typé — jamais extrait d’un texte affiché, ce qui casse dès la première boutique en français.
Exonération de taxes
La valeur juste pour la juridiction, parmi les 75 exonérations de Shopify. Le Canada à lui seul en compte six types. Un booléen général n’est pas la même chose.
02 — Vos données
Pourquoi des objets Shopify natifs plutôt que des étiquettes et des notes ?
Parce qu’une note n’est pas une donnée et qu’une étiquette n’est pas un nombre. L’approche courante range les réponses d’inscription dans un bloc de texte délimité, à l’intérieur du champ Notes du client — hors de portée de tout rapport, segment ou requête. B2B Triage écrit plutôt des métachamps typés et nommés. net_terms_days = 30 est un entier : il permet « plus grand que 30 ». L’étiquette net30 est du texte : elle entre en collision avec net300 et ne permet rien. Les métachamps sont une dimension GROUP BY dans ShopifyQL — vous pouvez vraiment faire des rapports sur votre programme de gros. Les étiquettes n’ont aucune dimension analytique. Tout ce que l’application écrit atterrit sous b2b_triage ; les étiquettes partagent un espace plat avec toutes les applications de votre boutique. Nous écrivons aussi des étiquettes, comme pont de compatibilité pour les outils qui ne lisent qu’elles — la synchronisation native de Klaviyo, par exemple. Les métachamps sont la vérité ; les étiquettes, une politesse.
| Propriété | Pourquoi ça compte |
|---|---|
| Analysable | Les métachamps sont une dimension GROUP BY dans ShopifyQL. Les étiquettes n’ont aucune dimension analytique — on ne peut pas faire de rapport sur une étiquette. (Shopify n’offre pas de filtrage sur les métachamps client dans la liste de l’admin : la réponse vient de l’analytique et de l’export, pas de la liste des clients.) |
| Typé | net_terms_days = 30 permet « plus grand que 30 ». L’étiquette net30 entre en collision de texte avec net300 et ne permet rien. |
| Nommé | Tout atterrit sous b2b_triage. Les étiquettes forment un espace de noms global et plat, partagé avec toutes les applications de votre boutique : deux applications qui écrivent « wholesale » se marchent dessus en silence. |
| Exportable | CSV avec les GID Shopify comme clés de jointure : la ligne correspond à votre CRM au lieu de l’approcher. Les valeurs sont normalisées à la saisie. |
03 — Propriété
Qu’arrive-t-il à vos entreprises si vous désinstallez ?
Elles restent. Shopify n’enregistre aucun lien de propriété applicative sur une entreprise, un emplacement, un contact, une affectation de catalogue, des conditions de paiement ou une exonération de taxes — il n’y a donc rien qu’une désinstallation puisse retirer. Les métachamps sont la seule exception : ils portent un espace de noms réservé $app:, qu’une désinstallation coupe réellement. Les entreprises n’ont pas ce champ. Les comptes que B2B Triage approuve sont des fiches Shopify ordinaires. Votre équipe peut les modifier. Vos autres applications peuvent les lire. Ils se comportent comme si votre équipe les avait créés à la main dans l’admin. Disons-le avec précision : ce qui est prouvé, c’est le mécanisme, et le mécanisme tient peu importe qui a créé les objets. Comparez avec les applications de gros qui gardent vos données et vos prix dans leur propre base — partez, et votre programme part avec elles. La philosophie tient en une phrase : nous possédons l’interface, Shopify possède le moteur.
04 — Numéros de taxe
Que se passe-t-il quand le registre de TVA de l’UE tombe en panne ?
Le 16 juillet 2026, nous avons interrogé VIES, le registre de TVA de l’UE, sur IE6388047V — le vrai numéro de TVA de Google Ireland. Pendant 21 minutes, la réponse : invalide. Le service irlandais était en panne. Puis, sans changement chez Google, il est redevenu valide.
Voilà le piège. VIES signale parfois ses propres pannes par « invalide » : techniquement, HTTP 200, isValid: false, la raison cachée dans un autre champ.
| Heure (UTC) | isValid | userError | La lecture naïve |
|---|---|---|---|
| 05 h 14 | false | MS_UNAVAILABLE | « Invalide » — signalé comme fraude |
| 05 h 35 | true | VALID | GOOGLE IRELAND LIMITED |
B2B Triage ne lit jamais isValid. Il lit le code d’erreur, comme une liste blanche : une seule valeur signifie « non enregistré ». Tout le reste — même les codes que la Commission ajoutera l’an prochain — signifie « impossible de vérifier maintenant », un autre mot à l’écran.
L’application ne rejette jamais un demandeur parce qu’un registre a cligné des yeux. Aucune branche du code ne transforme la mauvaise journée d’un registre en refus — pas une politique promise, une branche qui n’existe pas. « Jamais vérifié », « vérifié sans résultat » et « la vérification a échoué » sont trois faits différents ; un booléen les écraserait en un mensonge.
05 — Performance
Est-ce que B2B Triage ralentit votre vitrine ?
Non, et les chiffres sont mesurés plutôt que promis. Le formulaire d’inscription est livré comme bloc de thème, pas comme app embed. Il se charge uniquement sur les pages où vous le placez ; un embed s’exécute sur toutes les pages de votre boutique, y compris celles sans formulaire. Le bloc ne fait aucune requête tierce — pas de traqueur, pas de police depuis un CDN, pas de pixel d’analyse. Il pèse moins de 13 Ko compressés, une limite imposée par une étape de build qui échoue s’il grossit. Le formulaire fonctionne avec JavaScript complètement désactivé ; toute vérification auprès d’un registre de taxes passe par notre serveur, jamais par le navigateur de votre acheteur. La saisie suit la même discipline. Les codes postaux se normalisent par pays — h9b2g9 devient H9B 2G9. Les téléphones s’enregistrent en E.164. Et 244 pays ont des listes de provinces et d’États bâties sur les données de zones de Shopify — qui ne sont pas l’ISO 3166-2.
06 — Labs
Comment B2B Triage s’arrime-t-il à B2B Protocol et à nos autres projets B2B ?
B2B Triage est le premier produit de nos Labs que nous amenons sur le Shopify App Store — libre-service, installable, et volontairement limité à un seul mandat : l’inscription et l’approbation des grossistes sur le B2B natif de Shopify. Le reste de nos projets Labs est réservé aux clients. B2B Protocol est l’accélérateur B2B Shopify Plus que nous déployons pour les fabricants et distributeurs — middleware ERP, routage par segment d’acheteurs, contrôle des dépenses corporatives. Son module POS a amené la tarification contractuelle B2B sur Shopify POS pour la première fois. La philosophie est la même partout : ne jamais bâtir un système parallèle à côté de Shopify. Créer et affecter les objets de la plateforme, pour que les marchands gardent tout s’ils partent un jour. Si votre programme de gros demande plus qu’un flux d’approbation — tarification connectée à l’ERP, routage multi-segments ou une implémentation Shopify Plus complète — c’est notre pratique d’agence, et le formulaire de contact en est la porte.
Les demandes en gros, triées.
B2B Triage arrive bientôt sur le Shopify App Store. L’histoire complète du produit vit sur cette page, et chaque affirmation y est vérifiée dans le code, pas récitée. Si une question survit à la FAQ, parlez-nous directement de votre flux d’inscription en gros.
