Questions produits et conseils

LGuillet
Member

Ajouter automatiquement des lignes de produits à une transaction si des conditions sont présentes

SOLVE

Sur une transaction on reçoit 2 propriétes qui sont "shipping_fee" et "fee" qui correspondent à Frais de port et Frais de graphiste que l'on à ajouté sur notre site woocommerce. 

Et mon but ici est pour chaque transaction, où ces valeurs sont connues, créer une nouvelle ligne produit automatique pour les frais de port et frais de graphiste avec un prix égale à la valeur des ces 2 propriétés (si elles sont présente dans les propriétés du deal). Mais je bloque sur la creation et l'ajout de la ligne produit a la transaction de l'evenement. Merci pour l'aideLGuillet_0-1679060885536.pngLGuillet_1-1679060895056.png

 

1 Accepted solution
louischausse
Solution
Key Advisor | Platinum Partner
Key Advisor | Platinum Partner

Ajouter automatiquement des lignes de produits à une transaction si des conditions sont présentes

SOLVE

@LGuillet 

This will work:

 

const hubspot = require('@hubspot/api-client');

exports.main = (event) => {
  const hubspotClient = new hubspot.Client({
    accessToken: process.env.champ_perso_token
  });
 
  const dealId = event.object.objectId;
 
  console.log(`Deal ID: ${dealId}`);
  console.log(`Making API call to retrieve deal with ID ${dealId}...`);
 
  hubspotClient.crm.deals.basicApi.getById(dealId, ['shipping_fee'])
    .then(dealResults => {
      console.log('Deal results:', dealResults);
   
      let shipping_fee = dealResults.properties.shipping_fee;
   
      console.log(`Shipping fee found: ${shipping_fee}`);
   
      if (shipping_fee === '30') {
       
        console.log('Creating line item for shipping fee...');
       
        const properties = {
        quantity: "1",
        price: "10.00",
      };
      const SimplePublicObjectInputForCreate = { properties, associations: [{"to":{"id":`${dealId}`},"types":[{"associationCategory":"HUBSPOT_DEFINED","associationTypeId":2}]}] };

      try {
        const apiResponse = hubspotClient.crm.lineItems.basicApi.create(SimplePublicObjectInputForCreate);
        console.log(JSON.stringify(apiResponse));
      } catch (e) {
        e.message === 'HTTP request failed'
          ? console.error(JSON.stringify(e.response, null, 2))
          : console.error(e)
      }
     
      }
    })
    .catch(error => {
      console.error(`Error retrieving deal: ${error.message}`);
    });
};

 

 

Ne pas oublier de marquer ma réponse comme une solution si tu es satisfait. Dans le cas contraire, n'hésite pas à me poser des questions !

Louis Chaussé from Auxilio HubSpot Solutions Partner Signature
Louis Chaussé from Auxilio HubSpot Solutions Partner Meeting link

View solution in original post

25 Replies 25
BérangèreL
Community Manager
Community Manager

Ajouter automatiquement des lignes de produits à une transaction si des conditions sont présentes

SOLVE

Bonjour @LGuillet,

Merci d'avoir posté dans la communauté HubSpot 🙂

Pour information, j'ai déplacé votre post dans la communauté francophone.

Merci @louischausse pour les propositions et l'aide apportée !

Est-ce que tout fonctionne maintenant @LGuillet ?

Bonne journée !
Bérangère.


Saviez-vous que la Communauté est disponible en Français ?
Rejoignez les discussions francophones en changeant votre langue dans les paramètres !

Did you know that the Community is available in other languages?
Join regional conversations by changing your language settings!


louischausse
Solution
Key Advisor | Platinum Partner
Key Advisor | Platinum Partner

Ajouter automatiquement des lignes de produits à une transaction si des conditions sont présentes

SOLVE

@LGuillet 

This will work:

 

const hubspot = require('@hubspot/api-client');

exports.main = (event) => {
  const hubspotClient = new hubspot.Client({
    accessToken: process.env.champ_perso_token
  });
 
  const dealId = event.object.objectId;
 
  console.log(`Deal ID: ${dealId}`);
  console.log(`Making API call to retrieve deal with ID ${dealId}...`);
 
  hubspotClient.crm.deals.basicApi.getById(dealId, ['shipping_fee'])
    .then(dealResults => {
      console.log('Deal results:', dealResults);
   
      let shipping_fee = dealResults.properties.shipping_fee;
   
      console.log(`Shipping fee found: ${shipping_fee}`);
   
      if (shipping_fee === '30') {
       
        console.log('Creating line item for shipping fee...');
       
        const properties = {
        quantity: "1",
        price: "10.00",
      };
      const SimplePublicObjectInputForCreate = { properties, associations: [{"to":{"id":`${dealId}`},"types":[{"associationCategory":"HUBSPOT_DEFINED","associationTypeId":2}]}] };

      try {
        const apiResponse = hubspotClient.crm.lineItems.basicApi.create(SimplePublicObjectInputForCreate);
        console.log(JSON.stringify(apiResponse));
      } catch (e) {
        e.message === 'HTTP request failed'
          ? console.error(JSON.stringify(e.response, null, 2))
          : console.error(e)
      }
     
      }
    })
    .catch(error => {
      console.error(`Error retrieving deal: ${error.message}`);
    });
};

 

 

Ne pas oublier de marquer ma réponse comme une solution si tu es satisfait. Dans le cas contraire, n'hésite pas à me poser des questions !

Louis Chaussé from Auxilio HubSpot Solutions Partner Signature
Louis Chaussé from Auxilio HubSpot Solutions Partner Meeting link
GGutierrez7
Member

Ajouter automatiquement des lignes de produits à une transaction si des conditions sont présentes

SOLVE

Hello,

Merci pour la solution. Si je comprends bien cela permet d'associer à la transaction un Custom Line item? Comment adapter ce code pour faire l'association avec un produit du 'product library' existant?

0 Upvotes
louischausse
Key Advisor | Platinum Partner
Key Advisor | Platinum Partner

Ajouter automatiquement des lignes de produits à une transaction si des conditions sont présentes

SOLVE

en mettant le bon hs_product_id dans le code. Il y a des exemples plus bas dans cette page.

Louis Chaussé from Auxilio HubSpot Solutions Partner Signature
Louis Chaussé from Auxilio HubSpot Solutions Partner Meeting link
MiaSrebrnjak
Community Manager
Community Manager

Ajouter automatiquement des lignes de produits à une transaction si des conditions sont présentes

SOLVE

Bonjour @GGutierrez7


Merci pour votre commentaire !

Je voulais inviter @louischausse à participer à nouveau à ce fil de discussion :

avez-vous des suggestions pour aider @GGutierrez7  s’il vous plaît ?

Merci  et bonne journée ! 
Mia, Community team 


Wusstest du, dass es auch eine DACH-Community gibt?
Nimm an regionalen Unterhaltungen teil, indem du deine Spracheinstellungen änderst


Did you know that the Community is available in other languages?
Join regional conversations by
changing your language settings

louischausse
Key Advisor | Platinum Partner
Key Advisor | Platinum Partner

Ajouter automatiquement des lignes de produits à une transaction si des conditions sont présentes

SOLVE

Salut @LGuillet 

Je crois que l'erreur provient de la façon dont tu essaies de passer les info de l'association au deal. Il faut plus qu'un deal. Ça prend aussi un association type et association category.

À partir de la ligne 25 de ton code, je te suggère de modifier ta requête pour quelque chose qui ressemble davantage à ce qu'on peut trouver dans la doc pour le endpoint POST/crm/v3/objects/line_items https://developers.hubspot.com/docs/api/crm/line-items

quelque chose comme:

const properties = {
  "name": "Frais de port test",
  "hs_product_id": "1176867770",
  "quantity": "1",
  "price": "10.00",
  "description": "Shipping Fee"
};
const SimplePublicObjectInputForCreate = { properties, associations: [{"to":{"id":`${dealId}`},"types":[{"associationCategory":"HUBSPOT_DEFINED","associationTypeId":2}]}] };

try {
  const apiResponse = await hubspotClient.crm.lineItems.basicApi.create(SimplePublicObjectInputForCreate);
  console.log(JSON.stringify(apiResponse, null, 2));
} catch (e) {
  e.message === 'HTTP request failed'
    ? console.error(JSON.stringify(e.response, null, 2))
    : console.error(e)
}


Il se peut que le associationTypeId entreline_items et deals soit différent de2 dans ton portail HubSpot. Donc, si ça ne marche pas tu peux faire une requête unique afi d'obtenir la valeur à utiliser à cet endpoint GET/crm/v4/associations/{fromObjectType}/{toObjectType}/labels https://developers.hubspot.com/docs/api/crm/associations (via ton terminal/cmd line, Postman ou la doc de HubSpot. Pas besoin de faire ça dans ta custom code action dans le worfkflow)

Ne pas oublier de marquer ma réponse comme une solution si tu es satisfait. Dans le cas contraire, n'hésite pas à me poser des questions !

Louis Chaussé from Auxilio HubSpot Solutions Partner Signature
Louis Chaussé from Auxilio HubSpot Solutions Partner Meeting link
LGuillet
Member

Ajouter automatiquement des lignes de produits à une transaction si des conditions sont présentes

SOLVE

Apparement le await n'est pas accepté, j'ai une erreur de ce style : 

SyntaxError: await is only valid in async functions and the top level bodies of modules

 

louischausse
Key Advisor | Platinum Partner
Key Advisor | Platinum Partner

Ajouter automatiquement des lignes de produits à une transaction si des conditions sont présentes

SOLVE

@LGuillet 

Tu peux enlever le await ou bien changer ta ligne 3 pour

exports.main = async (event, callback) => {


Ça dépend si tu auras besoin de faire d'autres requêtes asynchrones plus tard dans ton code, mais si tu ne veux rien ajouter d'autres ensuite les deux devrait fonctionner

Louis Chaussé from Auxilio HubSpot Solutions Partner Signature
Louis Chaussé from Auxilio HubSpot Solutions Partner Meeting link
LGuillet
Member

Ajouter automatiquement des lignes de produits à une transaction si des conditions sont présentes

SOLVE

Meme avec un async l'erreur est toujours la meme

Capture d’écran 2023-03-17 à 16.03.33.png

Capture d’écran 2023-03-17 à 16.03.50.png

louischausse
Key Advisor | Platinum Partner
Key Advisor | Platinum Partner

Ajouter automatiquement des lignes de produits à une transaction si des conditions sont présentes

SOLVE

Peux-tu copier coller l'ensemble de ton code? pas une capture d'écran, mais un bien un copier coller svp

Louis Chaussé from Auxilio HubSpot Solutions Partner Signature
Louis Chaussé from Auxilio HubSpot Solutions Partner Meeting link
LGuillet
Member

Ajouter automatiquement des lignes de produits à une transaction si des conditions sont présentes

SOLVE

C'est bon ! j'ai modifié un peu mon code et ça fonctionne ! par contre quand je regarde la transaction la ligne produit n'est pas créée est-ce normal ? 

Capture d’écran 2023-03-20 à 10.30.12.png

louischausse
Key Advisor | Platinum Partner
Key Advisor | Platinum Partner

Ajouter automatiquement des lignes de produits à une transaction si des conditions sont présentes

SOLVE

Tant mieux si ça marche.

Peux tu indiquer que mon post précédent est la solution à ton problème pour le bien de la communauté: https://community.hubspot.com/t5/APIs-Integrations/Add-automatically-line-items-to-a-deal-with-condi...

Pour le produit manquant: 

Dans mon exemple, je n'ai mis que les properties minimales pour crééer un line_item, ne sachant pas quelles properties tu as dans ton portal HubSpot:

 

        const properties = {
        quantity: "1",
        price: "10.00",
      };

 


Tu peux ajouter des properties supplémentaires:

 

        const properties = {
        quantity: "1",
        price: "10.00",
        hs_product_id: "1176867770" // Mettre ici le ID du produit de la product library de ton portail HubSpot
        name: "Frais de port"
      };

 



 

Louis Chaussé from Auxilio HubSpot Solutions Partner Signature
Louis Chaussé from Auxilio HubSpot Solutions Partner Meeting link
LGuillet
Member

Ajouter automatiquement des lignes de produits à une transaction si des conditions sont présentes

SOLVE

J'ai mis ta réponse précédente en solution ! La ligne se creer bel et bien, en revanche je ne la voit pas apparaitre sur ma transaction en tant que ligne produit... tu peux me dire comment poster mon code dans des blocs comme tu as fais précédement ?

louischausse
Key Advisor | Platinum Partner
Key Advisor | Platinum Partner

Ajouter automatiquement des lignes de produits à une transaction si des conditions sont présentes

SOLVE

Que veux-tu dire pas "je ne la vois pas apparaitre sur ma transaction en tant que ligne produit"

Peux-tu me faire une capture d'écran?

Louis Chaussé from Auxilio HubSpot Solutions Partner Signature
Louis Chaussé from Auxilio HubSpot Solutions Partner Meeting link
LGuillet
Member

Ajouter automatiquement des lignes de produits à une transaction si des conditions sont présentes

SOLVE

Capture d’écran 2023-03-20 à 14.41.02.png

Capture d’écran 2023-03-20 à 14.41.45.png

 

La ligne créée n'apparait pas ici, et je ne sais pas ce qu'il manque pour qu'elle s'ajoute avec le produit deja existant 

louischausse
Key Advisor | Platinum Partner
Key Advisor | Platinum Partner

Ajouter automatiquement des lignes de produits à une transaction si des conditions sont présentes

SOLVE

@LGuillet cela veut dire que ton code ne fonctionne pas.

As-tu mis exactement ce code ? (Attention de mettre le bon hs_product_id - Si tu n'as pas de hs_product_id tu peux effacer la ligne)

const hubspot = require('@hubspot/api-client');

exports.main = (event) => {
  const hubspotClient = new hubspot.Client({
    accessToken: process.env.champ_perso_token
  });
 
  const dealId = event.object.objectId;
 
  console.log(`Deal ID: ${dealId}`);
  console.log(`Making API call to retrieve deal with ID ${dealId}...`);
 
  hubspotClient.crm.deals.basicApi.getById(dealId, ['shipping_fee'])
    .then(dealResults => {
      console.log('Deal results:', dealResults);
   
      let shipping_fee = dealResults.properties.shipping_fee;
   
      console.log(`Shipping fee found: ${shipping_fee}`);
   
      if (shipping_fee === '30') {
       
        console.log('Creating line item for shipping fee...');
       
        const properties = {
        quantity: "1",
        price: "10.00",
        hs_product_id: "1176867770" // Mettre ici le ID du produit de la product library de ton portail HubSpot
        name: "Frais de port"
      };
      const SimplePublicObjectInputForCreate = { properties, associations: [{"to":{"id":`${dealId}`},"types":[{"associationCategory":"HUBSPOT_DEFINED","associationTypeId":2}]}] };

      try {
        const apiResponse = hubspotClient.crm.lineItems.basicApi.create(SimplePublicObjectInputForCreate);
        console.log(JSON.stringify(apiResponse));
      } catch (e) {
        e.message === 'HTTP request failed'
          ? console.error(JSON.stringify(e.response, null, 2))
          : console.error(e)
      }
     
      }
    })
    .catch(error => {
      console.error(`Error retrieving deal: ${error.message}`);
    });
};

 

 

Louis Chaussé from Auxilio HubSpot Solutions Partner Signature
Louis Chaussé from Auxilio HubSpot Solutions Partner Meeting link
LGuillet
Member

Ajouter automatiquement des lignes de produits à une transaction si des conditions sont présentes

SOLVE

Non je n'ai pas mis exactement ça chez moi car ça ne fonctionnait pas, mais peux tu me dire comment deposer mon code comme ça je peux te montrer ? @louischausse 

En soit les codes sont semblable, la sortie m'indique que la ligne est créée mais elle ne s'affiche pas sur les lignes produits de la transaction 

 

Capture d’écran 2023-03-20 à 15.21.46.png

LGuillet
Member

Ajouter automatiquement des lignes de produits à une transaction si des conditions sont présentes

SOLVE

Je n'arrive pas à le coller comme vous l'avez fait au dessus, y-a-til une façon de le faire ?

 

louischausse
Key Advisor | Platinum Partner
Key Advisor | Platinum Partner

Ajouter automatiquement des lignes de produits à une transaction si des conditions sont présentes

SOLVE

Clique sur les ... et ensuite sur </> sélectionne javascript et copie ton code dans la boite de dialogue

louischausse_0-1679333323946.png

 

Louis Chaussé from Auxilio HubSpot Solutions Partner Signature
Louis Chaussé from Auxilio HubSpot Solutions Partner Meeting link
LGuillet
Member

Ajouter automatiquement des lignes de produits à une transaction si des conditions sont présentes

SOLVE

Capture d’écran 2023-03-21 à 09.44.13.png

je ne peux pas l'envoyer, j'ai cette erreur et rien ne s'affiche