Créer une offre privée multipartie pour un client
L’ÉDITEUR de logiciels indépendants (originateur) et le partenaire de collaboration (vendeur) doivent utiliser le même ensemble d’appels d’API pour créer une offre privée pour un client. Voici le flux attendu.
- ISV crée l’offre et envoie pour vendre la visibilité des partenaires
- ISV informe le partenaire de vente (par e-mail ou d’autres méthodes) que l’offre est désormais disponible pour la vente de modifications de partenaire
- La vente de révisions de partenaires et termine la configuration de l’offre privée et des envois pour la visibilité des clients finaux
Voici la méthode à appeler pour la création de l’offre.
Requête
POST https://graph.microsoft.com/rp/product-ingestion/configure?$version=2022-07-01
En-tête de requête
En-tête | Type | Description |
---|---|---|
Autorisation | Chaîne | Obligatoire. Jeton d’accès Microsoft Entra dans le formulaire Bearer <token> . |
Facultatif : clientID
Paramètres de la demande
$version - obligatoire. Il s’agit de la version du schéma utilisé dans la requête.
Corps de la demande
Les options suivantes reflètent les options dans l’Espace partenaires lors de la création d’une offre privée multipartie pour un client. Ces options sont définies par les valeurs offerPricingType suivantes :
valeur offerPricingType | Équivalent de l’option de création d’offre privée de l’Espace partenaires |
---|---|
editExistingOfferPricingOnly | Personnaliser la tarification des offres publiques et des plans existants : utilisez cette option pour créer une offre privée pour tous les types d’offres transactionnelles : SaaS, Azure Machines Virtuelles et Applications Azure. Vous pouvez personnaliser la tarification de votre partenaire via des tarifs absolus ou des remises en pourcentage. |
saasNew CustomPlans | Personnaliser les tarifs, les quantités de compteurs et les limites utilisateur pour l’offre SaaS : utilisez cette option pour créer une offre privée pour un plan SaaS en personnalisant le prix absolu de votre partenaire, les quantités de dimension de mesure et les limites utilisateur. |
vmSoftwareReservations | Personnaliser les tarifs et les quantités spécifiques des offres de réservation de logiciels de machine virtuelle : utilisez cette option pour créer une offre privée multiparte pour vendre des réservations de logiciels de machine virtuelle (1 an ou 3 ans) et personnaliser le prix absolu du partenaire, la taille du processeur virtuel, les quantités, la durée et la planification de paiement. |
Pour les trois options de type tarifaire précédentes, les besoins en ressources spécifiques à un plan peuvent varier. Pour plus d’informations, consultez le tableau suivant :
Nom de la ressource | editExistingOfferPricingOnly | saasNew CustomPlans | vmSoftwareReservations |
---|---|---|---|
prisée. Plan | Définissez cette valeur sur l’ID de plan du plan public à configurer dans le corps de la demande. | Non applicable | Non applicable |
pricing.basePlan | Non applicable | Définissez cette valeur sur l’ID de plan du plan public à configurer dans le corps de la demande. | Définissez cette valeur sur l’ID de plan du plan public à configurer dans le corps de la demande. |
pricing.newPlanDetails.name | Non applicable | Définissez cette valeur sur le nom du nouveau plan qui sera affiché au client dans le corps de la demande. | Non applicable au corps de la demande, sera généré par le système et disponible dans la réponse du travail une fois terminé. |
pricing.newPlanDetails.description | Non applicable | Définissez cette valeur sur la description qui sera affichée au client pour le nouveau plan dans le corps de la demande. | Non applicable au corps de la demande, sera généré par le système et disponible dans la réponse du travail une fois terminé. |
valeur customerContractRenewal | Description |
---|---|
true | Une offre privée est un renouvellement d’un contrat client existant. Un tarif d’agence réduit de 50 % s’applique à votre offre privée pour les renouvellements des clients |
false | L’offre privée n’est pas un renouvellement d’un contrat client existant. Vos frais d’agence standard s’appliquent. |
Le corps de la requête varie en fonction du rôle de l’appelant. Utilisez privateOfferType pour distinguer l’appelant ISV de la vente de l’appelant partenaire.
Rôle d’appelant | valeur privateOfferType |
---|---|
ISV (Originator) | multipartyPromotionOriginator |
Partenaire vendeur (vendeur) | multipartyPromotionChannelPartner |
Exemples de corps de requête
Exemple de corps de demande par ISV pour créer l’offre à l’aide de la tarification de remise pour personnaliser la tarification du plan public existant uniquement
L’ÉDITEUR de logiciels indépendants (originateur) est requis pour fournir tous les détails fondamentaux de l’offre. Cela doit inclure un nom.
{
"$schema": "https://schema.mp.microsoft.com/schema/configure/2022-07-01",
"resources": [
{
"$schema": "https://schema.mp.microsoft.com/schema/private-offer/2024-09-30",
"resourceName": "privateOffer",
"name": "privateOffercustomer1705",
"state": "live",
"privateOfferType": "multipartyPromotionOriginator",
"offerPricingType": "editExistingOfferPricingOnly",
"customerContractRenewal": false,
"variableStartDate": true,
"end": "2022-01-31",
"acceptBy": "2022-02-28",
"termsAndConditionsDocs": [
{
"sasUrl": "https://promotionpmeprod.blob.core.windows.net/promotionsblobdata/44c2b38a-fa64-4861-806c-6c486ec19b6d-769f3960-45af-42db-ab3b-6391841683d6",
"fileName": "Test1.pdf",
"customerFacingDocumentName": "Test1 T&C"
} ],
"notificationContacts": [ "amy@contoso.com" ],
"beneficiaries": [
{ "id": "xxxxxx-2163-5eea-ae4e-d6e88627c26b:6ea018a9-da9d-4eae-8610-22b51ebe260b_2019-05-31", "description": "Top First Customer"}
],
"partners": [
{
"id": "12345678",
"partnerName": "Market Place Test",
"location": "United States"
}
],
"pricing": [
{ "product": "product/34771906-9711-4196-9f60-4af380fd5042", "plan":"plan/123456","discountType": "percentage", "discountPercentage": 5 }
],
"notes": "ISV 123"
}
]
}
Exemple de corps de requête utilisant la tarification absolue pour personnaliser la tarification pour un plan public existant uniquement
Si vous utilisez des tarifs absolus au lieu d’une remise basée sur des pourcentages, vous pouvez créer une ressource au-dessus de la ressource d’offre privée multipartie qui définit la tarification absolue, puis inclure cette ressource nouvellement créée en tant qu’autre objet dans la liste des ressources du schéma de configuration.
Utilisez cette méthode pour obtenir la ressource de tarification de votre plan public existant, modifier les prix, puis utiliser la ressource modifiée pour votre offre.
GET https://graph.microsoft.com/rp/product-ingestion/price-and-availability-private-offer-plan/{productId}?plan={planId}&$version=2023-07-15
Exemple de ressource de tarification absolue
{
"$schema": "https://schema.mp.microsoft.com/schema/price-and-availability-private-offer-plan/2023-07-15",
"resourceName": "newSimpleAbsolutePricing",
"product": "product/7ba807c8-386a-4efe-80f1-b97bf8a554f8",
"plan": "plan/987654",
"offerPricingType": "editExistingOfferPricingOnly",
"pricing": {
"recurrentPrice": {
"priceInputOption": "usd",
"prices": [
{
"pricePerPaymentInUsd": 1,
"billingTerm": {
"type": "month",
"value": 1
}
},
{
"pricePerPaymentInUsd": 2,
"paymentOption": {
"type": "month",
"value": 1
},
"billingTerm": {
"type": "year",
"value": 1
}
}
]
},
"customMeters": {
"priceInputOption": "usd",
"meters": {
"meter1": {
"pricePerPaymentInUsd": 1
}
}
}
}
}
Inclure cette ressource en tant qu’objet dans le module tarifaire
[
{
"product": "product/34771906-9711-4196-9f60-4af380fd5042",
"plan": "plan/123456",
"discountType": "percentage",
"discountPercentage": 5
},
{
"product": "product/7ba807c8-386a-4efe-80f1-b97bf8a554f8",
"plan": "plan/987654",
"discountType": "absolute",
"priceDetails": {
"resourceName": "newSimpleAbsolutePricing"
}
}
]
Exemple de corps de requête utilisant la tarification absolue pour personnaliser la tarification, la mesure des quantités et les limites utilisateur pour l’offre SaaS
Utilisez la méthode suivante pour créer une ressource de prix et de disponibilité absolue pour l’offre privée.
GET https://graph.microsoft.com/rp/product-ingestion/price-and-availability-private-offer-plan/{productId}?plan={planId}&$version=2023-07-15
Exemple de ressource de tarification absolue pour une offre SaaS à taux fixe qui personnalise les quantités de prix et de compteur
{
"$schema": "https://schema.mp.microsoft.com/schema/price-and-availability-private-offer-plan/2023-07-15",
"product": "product/7ba807c8-386a-4efe-80f1-b97bf8a554f8",
"resourceName": "newSaaSPlanAbsolutePricing",
"plan": "plan/123456",
"offerPricingType": "saasNewCustomizedPlans",
"pricing": {
"recurrentPrice": {
"recurrentPriceMode": "flatRate",
"priceInputOption": "usd",
"prices": [
{
"billingTerm": {
"type": "month",
"value": 1
},
"paymentOption": {
"type": "month",
"value": 1
},
"pricePerPaymentInUsd": 0.1
},
{
"billingTerm": {
"type": "year",
"value": 1
},
"paymentOption": {
"type": "month",
"value": 1
},
"pricePerPaymentInUsd": 0.12
}
]
},
"customMeters": {
"priceInputOption": "usd",
"meters": {
"meter1": {
"includedQuantities": [
{
"billingTerm": {
"type": "month",
"value": 1
},
"quantity": 10.0,
"isInfinite": false
},
{
"billingTerm": {
"type": "year",
"value": 1
},
"quantity": 15.0,
"isInfinite": false
}
]
},
"meter2": {
"includedQuantities": [
{
"billingTerm": {
"type": "month",
"value": 1
},
"isInfinite": true
},
{
"billingTerm": {
"type": "year",
"value": 1
},
"isInfinite": true
}
]
}
}
}
}
}
Exemple de ressource de tarification absolue pour une offre SaaS par utilisateur qui personnalise les limites de prix et d’utilisateur
{
"$schema": "https://schema.mp.microsoft.com/schema/price-and-availability-private-offer-plan/2023-07-15",
"resourceName": "newSaaSPlanAbsolutePricing",
"product": "product/7ba807c8-386a-4efe-80f1-b97bf8a554f8",
"plan": "plan/123456",
"offerPricingType": "saasNewCustomizedPlans",
"pricing": {
"recurrentPrice": {
"recurrentPriceMode": "perUser",
"priceInputOption": "usd",
"userLimits": {
"min": 20,
"max": 100
},
"prices": [
{
"billingTerm": {
"type": "month",
"value": 1
},
"paymentOption": {
"type": "month",
"value": 1
},
"pricePerPaymentInUsd": 0.01
},
{
"billingTerm": {
"type": "year",
"value": 1
},
"paymentOption": {
"type": "year",
"value": 1
},
"pricePerPaymentInUsd": 0.02
}
]
}
}
}
Inclure cette ressource en tant qu’objet dans le module tarifaire
{
"$schema": "https://schema.mp.microsoft.com/schema/configure/2022-07-01",
"resources": [
{
"$schema": "https://schema.mp.microsoft.com/schema/private-offer/2024-09-30",
"name": "privateOffercustomer1705",
"state": "live",
"privateOfferType": "multipartyPromotionOriginator",
"offerPricingType": "newSimpleAbsolutePricing",
"customerContractRenewal": false,
"variableStartDate": true,
"end": "2022-01-31",
"acceptBy": "2022-02-28",
"partners": [
{
"id": "12345678",
"partnerName": "Market Place Test",
"location": "United States"
}
],
"termsAndConditionsDocs": [
{
"sasUrl": "https://promotionpmeprod.blob.core.windows.net/promotionsblobdata/44c2b38a-fa64-4861-806c-6c486ec19b6d-769f3960-45af-42db-ab3b-6391841683d6",
"fileName": "Test1.pdf",
"customerFacingDocumentName": "Test1 T&C"
} ],
"notificationContacts": [ "amy@contoso.com" ],
"beneficiaries": [
{ "id": "xxxxxx-2163-5eea-ae4e-d6e88627c26b:6ea018a9-da9d-4eae-8610-22b51ebe260b_2019-05-31", "description": "Top First Customer"}
],
"pricing": [
{
"product": "product/7ba807c8-386a-4efe-80f1-b97bf8a554f8",
"discountType": "absolute",
"priceDetails": {
"resourceName": "newSaaSPlanAbsolutePricing"
}
"basePlan": "plan/123456",
"newPlanDetails": {
"name": "newPlanName",
"description": "newPlanDescription"
}
],
"notes": "ISV 123"
}
]
}
Exemple de corps de requête utilisant des tarifs absolus pour personnaliser la tarification et des quantités spécifiques pour les offres de réservation de logiciels de machine virtuelle
Utilisez la méthode suivante pour créer une ressource de prix et de disponibilité absolue pour l’offre.
GET https://graph.microsoft.com/rp/product-ingestion/price-and-availability-private-offer-plan/{productId}?plan={planId}&$version=2023-07-15
Exemple de ressource de tarification absolue pour une offre de machine virtuelle qui personnalise les prix et les quantités
{
"$schema": "https://schema.mp.microsoft.com/schema/price-and-availability-private-offer-plan/2023-07-15",
"resourceName": "newVMSRAbsolutePricing",
"product": "product/7ba807c8-386a-4efe-80f1-b97bf8a554f8",
"offerPricingType": "vmSoftwareReservations",
"plan": "plan/987654",
"softwareReservation": {
"reservationDuration": {
"type": "year",
"value": 1
},
"paymentSchedule": {
"type": "year",
"value": 1
},
"vmPrices": {
"36Core": {
"quantity": 4.0,
"unitPricePerPaymentPeriodInUsd": 0.04
}
}
}
}
Inclure cette ressource en tant qu’objet dans le module tarifaire
{
"$schema": "https://schema.mp.microsoft.com/schema/configure/2022-07-01",
"resources": [
{
"$schema": "https://schema.mp.microsoft.com/schema/private-offer/2024-09-30",
"name": "privateOffercustomer1705",
"state": "live",
"privateOfferType": "multipartyPromotionOriginator",
"offerPricingType": "vmSoftwareReservations",
"customerContractRenewal": false,
"variableStartDate": true,
"end": "2022-01-31",
"acceptBy": "2022-02-28",
"partners": [
{
"id": "12345678",
"partnerName": "Market Place Test",
"location": "United States"
}
],
"termsAndConditionsDocs": [
{
"sasUrl": "https://promotionpmeprod.blob.core.windows.net/promotionsblobdata/44c2b38a-fa64-4861-806c-6c486ec19b6d-769f3960-45af-42db-ab3b-6391841683d6",
"fileName": "Test1.pdf",
"customerFacingDocumentName": "Test1 T&C"
} ],
"notificationContacts": [ "amy@contoso.com" ],
"beneficiaries": [
{ "id": "xxxxxx-2163-5eea-ae4e-d6e88627c26b:6ea018a9-da9d-4eae-8610-22b51ebe260b_2019-05-31", "description": "Top First Customer"}
],
"pricing": [
{
"product": "product/7ba807c8-386a-4efe-80f1-b97bf8a554f8",
"discountType": "absolute",
"priceDetails": {
"resourceName": "newVMSRAbsolutePricing"
}
"basePlan": "plan/987654"
],
"notes": "ISV 123"
}
]
}
Exemple de demande par le partenaire pour terminer la création de l’offre
Le partenaire vendeur doit utiliser l’ID d’offre privée multiparte fourni par l’ÉDITEUR de logiciels indépendants pour configurer le pourcentage d’ajustement du client (balisage), la vente de contrats personnalisés partenaires, préparés par et les contacts partenaires de vente.
L’exemple suivant est basé sur le corps de la réponse retourné lors de la récupération des détails de l’offre à l’aide de l’ID d’offre.
{
"$schema": "https://schema.mp.microsoft.com/schema/configure/2022-07-01",
"resources": [
{
"$schema": "https://schema.mp.microsoft.com/schema/private-offer/2024-09-30",
"resourceName": "privateOffer",
"name": "privateOffercustomer1705",
"state": "live",
"privateOfferType": "multipartyPromotionChannelPartner",
"offerPricingType": "editExistingOfferPricingOnly",
"variableStartDate": true,
"end": "2022-01-31",
"acceptBy": "2022-02-28",
"preparedBy": "tester@microsoft.com",
"originatorTermsAndConditionsDocs": [
{
"sasUrl": "https://promotionpmeprod.blob.core.windows.net/promotionsblobdata/44c2b38a-fa64-4861-806c-6c486ec19b6d-769f3960-45af-42db-ab3b-6391841683d6",
"fileName": "Test1.pdf",
"customerFacingDocumentName": "Test1 T&C"
} ],
"termsAndConditionsDocs": [
{
"sasUrl": "https://promotionpmeprod.blob.core.windows.net/promotionsblobdata/44c2b38a-fa64-4861-806c-6c486ec19b6d-769f3960-45af-42db-ab3b-6391841683d6",
"fileName": "Test1.pdf",
"customerFacingDocumentName": "Test1 T&C"
} ],
"notificationContacts": [ "amy@contoso.com" ],
"beneficiaries": [
{ "id": "xxxxxx-2163-5eea-ae4e-d6e88627c26b:6ea018a9-da9d-4eae-8610-22b51ebe260b_2019-05-31", "description": "Top First Customer"}
],
"partners": [
{
"id": "12345678",
"partnerName": "Market Place Test",
"location": "United States"
}
],
"originatorPricing": [
{
"product": "product/34771906-9711-4196-9f60-4af380fd5042",
"plan":"plan/123456",
"discountType": "percentage",
"discountPercentage": 5
"markupPercentage": 1.0
}
],
"lastModified": "2023-01-19",
"eTag": "\"7f020249-0000-0800-0000-63c9b4ca0000\"",
}
]
}
Appels clés dans l’exemple précédent
- Le partenaire vendeur doit fournir l’attribut prepareBy .
- Les conditions générales personnalisées de l’ISV sont visibles, mais ne peuvent pas être modifiées par le partenaire vendeur, elles sont capturées dans l’originator ResourceTermsAndConditionsDocs.
- Le partenaire vendeur peut charger son propre terme et condition personnalisé dans la ressource termsAndConditionsDocs .
- Le partenaire vendeur peut ajouter ses propres contacts pour être informé de l’offre dans la ressource notificationContacts .
- Les attributs bénéficiaire et partenaires sont visibles, mais ne peuvent pas être modifiés par le partenaire vendeur.
- La ressource de tarification s’affiche en tant qu’originatorPricing, markupPercentage est requise et doit être fournie par le partenaire de vente lors de l’envoi, tous les autres attributs de la ressource de tarification sont en lecture seule.
Response
La réponse contient l’id de travail que vous pouvez utiliser ultérieurement pour interroger l’état :
{
"$schema": "https://schema.mp.microsoft.com/schema/configure-status/2022-07-01",
"jobId": "c32dd7e8-8619-462d-a96b-0ac1974bace5",
"jobStatus": "notStarted",
"jobResult": "pending",
"jobStart": "2021-12-21T21:29:54.9702903Z",
"jobEnd": "0001-01-01",
"errors": []
}
Codes d’erreur
Code d’état HTTP | Description |
---|---|
401 | Erreur d’authentification : vérifiez que vous utilisez un jeton d’accès Microsoft Entra valide. |
400 | Validation de schéma. Vérifiez que le corps de votre demande suit le schéma correct et inclut tous les champs obligatoires. |