Criar uma oferta privada com vários participantes para um cliente
O ISV (originador) e o parceiro colaborador (vendedor) devem usar o mesmo conjunto de chamadas de API para criar uma oferta privada para um cliente. Aqui está o fluxo esperado.
- O ISV cria a oferta e envia para visibilidade do parceiro de vendas
- O ISV notifica o parceiro de vendas (por e-mail ou outros métodos) de que a oferta agora está disponível para edições do parceiro de vendas
- O parceiro de vendas analisa e conclui a configuração da oferta privada e envia para visibilidade do cliente final
Aqui está o método para solicitar a criação da oferta.
Solicitar
POST https://graph.microsoft.com/rp/product-ingestion/configure?$version=2022-07-01
Cabeçalho da solicitação
Cabeçalho | Tipo | Descrição |
---|---|---|
Autorização | String | Obrigatória. O token de acesso do Microsoft Entra no formato Bearer <token> . |
Opcional: clientID
Parâmetros da solicitação
$version - obrigatório. Esta é a versão do esquema que está sendo usada na solicitação.
Corpo da solicitação
As opções a seguir espelham as opções no Partner Center ao criar uma oferta privada com vários participantes para um cliente. Essas opções são definidas pelos seguintes valores offerPricingType :
offerPricingType valor | Opção de criação de oferta privada do Partner Center equivalente |
---|---|
editExistingOfferPricingOnly | Personalizar preços para ofertas e planos públicos existentes – use essa opção para criar uma oferta privada para todos os tipos de oferta transacionáveis: SaaS, Máquinas Virtuais do Azure e Aplicativos do Azure. Você pode personalizar o preço do seu parceiro por meio de preços absolutos ou descontos percentuais. |
saasNewCustomizedPlans | Personalizar preços, quantidades de medidores e limites de usuário para oferta de SaaS – use essa opção para criar uma oferta privada para um plano de SaaS personalizando o preço absoluto do parceiro, as quantidades de dimensão de medição e os limites de usuário. |
vmSoftwareReservations | Personalizar preços e quantidades específicas para ofertas de reserva de software de VM – use essa opção para criar uma oferta privada de vários participantes para vender reservas de software de VM (1 ou 3 anos) e personalizar o preço absoluto do parceiro, o tamanho da vCPU, as quantidades, a duração e o cronograma de pagamento. |
Para as três opções de tipo de preço anteriores, os requisitos de recursos específicos do plano podem variar. Para obter detalhes, consulte a tabela a seguir:
Nome do recurso | editExistingOfferPricingOnly | saasNewCustomizedPlans | vmSoftwareReservations |
---|---|---|---|
precificação. Plano | Defina isso como a ID do plano público a ser configurado no corpo da solicitação | Não aplicável | Não aplicável |
preço.basePlan | Não aplicável | Defina isso como a ID do plano público a ser configurado no corpo da solicitação | Defina isso como a ID do plano público a ser configurado no corpo da solicitação |
pricing.newPlanDetails.name | Não aplicável | Defina isso como o nome do novo plano que será mostrado ao cliente no corpo da solicitação | Não aplicável ao corpo da solicitação, será gerado pelo sistema e estará disponível na resposta do trabalho quando concluído. |
preços.novosDetalhes.plano | Não aplicável | Defina isso como a descrição que será mostrada ao cliente para o novo plano no corpo da solicitação | Não aplicável ao corpo da solicitação, será gerado pelo sistema e estará disponível na resposta do trabalho quando concluído. |
valor customerContractRenewal | Descrição |
---|---|
true | A oferta privada é uma renovação de um contrato de cliente existente. Uma taxa de agência com desconto de 50% se aplica à sua oferta privada para renovações de clientes |
false | A oferta privada não é uma renovação de um contrato de cliente existente. Aplica-se a sua taxa de agência padrão. |
O corpo da solicitação varia de acordo com a função do chamador. Use privateOfferType para distinguir o chamador ISV do chamador do parceiro de vendas.
Função do chamador | valor privateOfferType |
---|---|
ISV (Originador) | multipartyPromotionOriginator |
Parceiro de vendas (vendedor) | multipartidárioPromoçãoChannelPartner |
Solicitar amostras de corpo
Corpo da solicitação de exemplo pelo ISV para criar a oferta usando preços com desconto para personalizar os preços apenas para o plano público existente
O ISV (originador) é obrigado a fornecer todos os detalhes fundamentais da oferta. Isso deve incluir um nome.
{
"$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"
}
]
}
Corpo da solicitação de amostra usando preços absolutos para personalizar preços apenas para o plano público existente
Se você estiver usando preços absolutos em vez de descontos baseados em porcentagem, poderá criar um novo recurso acima do recurso de oferta privada de vários participantes que define o preço absoluto e, em seguida, incluir esse recurso recém-criado como outro objeto na lista de recursos do esquema de configuração.
Use esse método para obter o recurso de preços para seu plano público existente, editar os preços e usar o recurso editado para sua oferta.
GET https://graph.microsoft.com/rp/product-ingestion/price-and-availability-private-offer-plan/{productId}?plan={planId}&$version=2023-07-15
Exemplo de recurso de precificação absoluta
{
"$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
}
}
}
}
}
Inclua esse recurso como um objeto no módulo de precificação
[
{
"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"
}
}
]
Corpo da solicitação de exemplo usando preços absolutos para personalizar preços, quantidades de medição e limites de usuário para oferta de SaaS
Use o método a seguir para criar um recurso de preço e disponibilidade absolutos para a oferta privada.
GET https://graph.microsoft.com/rp/product-ingestion/price-and-availability-private-offer-plan/{productId}?plan={planId}&$version=2023-07-15
Exemplo de recurso de preço absoluto para uma oferta de SaaS de taxa fixa que personaliza o preço e as quantidades do medidor
{
"$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
}
]
}
}
}
}
}
Exemplo de recurso de preço absoluto para uma oferta de SaaS por usuário que personaliza o preço e os limites do usuário
{
"$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
}
]
}
}
}
Inclua esse recurso como um objeto no módulo de precificação
{
"$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"
}
]
}
Corpo da solicitação de exemplo usando preços absolutos para personalizar preços e quantidades específicas para ofertas de reserva de software de VM
Use o método a seguir para criar um recurso de preço absoluto e disponibilidade para a oferta.
GET https://graph.microsoft.com/rp/product-ingestion/price-and-availability-private-offer-plan/{productId}?plan={planId}&$version=2023-07-15
Exemplo de recurso de preço absoluto para uma oferta de VM que personaliza preço e quantidades
{
"$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
}
}
}
}
Inclua esse recurso como um objeto no módulo de precificação
{
"$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"
}
]
}
Exemplo de solicitação do parceiro para concluir a criação da oferta
O parceiro de vendas deve usar a ID de oferta privada de vários participantes fornecida pelo ISV para configurar a % de ajuste do cliente (marcação), os contratos personalizados do parceiro de vendas, preparados por e os contatos do parceiro de vendas.
O exemplo a seguir é baseado no corpo da resposta retornado ao recuperar os detalhes da oferta usando a ID da oferta.
{
"$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\"",
}
]
}
Principais chamadas no exemplo anterior
- O parceiro de vendas deve fornecer o atributo preparedBy .
- Os termos e condições personalizados do ISV podem ser visualizados, mas não podem ser editados pelo parceiro de vendas, eles são capturados no originador do recursoTermsAndConditionsDocs.
- O parceiro de vendas pode carregar seus próprios termos e condições personalizados no recurso termsAndConditionsDocs .
- O parceiro de vendas pode adicionar seus próprios contatos para ser notificado sobre a oferta no recurso notificationContacts .
- Os atributos Beneficiário e Parceiros podem ser visualizados, mas não podem ser editados pelo parceiro de vendas.
- O recurso de precificação é exibido como originatorPricing, markupPercentage é obrigatório e deve ser fornecido pelo parceiro de vendas ao enviar, todos os outros atributos no recurso de precificação são somente leitura.
Resposta
A resposta contém o jobId que você pode usar posteriormente para sondar o status:
{
"$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": []
}
Códigos do Erro
Código de status HTTP | Descrição |
---|---|
401 | Erro de autenticação: verifique se você está usando um token de acesso válido do Microsoft Entra. |
400 | Validação de esquema. Certifique-se de que o corpo da solicitação esteja seguindo o esquema correto e inclua todos os campos obrigatórios. |