Souscription de services

La souscription passe par la création d’un devis sur cette offre. Cette API vous permet de créer vos devis. L’API est à votre disposition est assez riche, aussi, il existe plusieurs méthodes pour souscrire à une offre en utilisant différents cheminements.

Prérequis

Souscription

La souscription passe par la création d’un devis sur cette offre. Selon comment vous exploitez la réponse de l’éligibilité plusieurs méthodes sont à votre disposition pour créer vos devis :

  • rapide (recommandée) : ce que nous appelons le ‘fastOrder’ , vous permet de lancer une commande à partir d’une combinaison fournie dans la réponse d’éligibilité
  • sur mesure méthode plus complexe a mettre en oeuvre, mais qui permet de faire un devis sans passer par l’éligibilité le test étant réalisé pendant le passage de la commande. Elle vous permet de passer les éléments (débit, engagement, GTR) directement.

1 - Commande rapide

Commande rapide à partir d’une combinaison du test d’éligibilité

Créer un devis via FastOrder

La séquence est la suivante :

  1. effectuer un test d’éligibilité à l’adresse à raccorder et choisir la combinaison désirée. La chaîne de caractères de l’attribut combination_id va nous permettre de créer un devis avec les items désirés.
  2. soumettre le devis : on va faire des vérifications, et donner un prix aux éléments qui nécessite une quotation
  3. signer le devis

Choisir une combinaison

foreach ($resp->getResponse() as $resp) {
	if ($resp->getCode()=='ContractName') { //Nom du contrat recherché
    	foreach ($resp->getCombinations() as $combination) {
        	if ($combination['attributes']['bw_down'] == 100 && $combination['attributes']['grt_in_working_hours'] == false && $combination['attributes']['commitment_months']==12 ) { 
				//exemple d'une combiaison recherchée débit 100M engagment 12 mois avec une GTR HNO
				$combination_id = $combination['combination_id'];				
			}
		}
	}
}
$elig_ctx_id = ; $eligResponse->getId(); // int | identifiant du contexte d'éligibilité
$combination_id = $combination_id; // string | valeur de la combinaison choisie parmi les choix proposées dans la réponse de l'api éligibilité 
$fast_order = new \Infracorp\Extranet\Client\Model\FastOrder(); 
$fast_order->setName("Exemple Nom du client final"); // string | nom de la section du devis  
$fast_order->setClientReference("Ref_Interne"); // falcutatif | nom de votre référence interne. Vous permettra de retrouver votre commande avec votre référence.
$fast_order->setCombinationId($combination_id);
try {
    $commercialOffer= $prizzTelecom->fastOrder($elig_ctx_id, $fast_order);
} catch (Exception $e) {
   	echo 'Exception when calling DefaultApi->fastOrder: ', $e->getMessage(), PHP_EOL;
}

Si l’appel à FastOrder est un succès, elle vous retourne l’identifiant du devis créé. Celui contient les items correspondant à la combinaison choisie. Vous pouvez retourner consulter le devis il doit être à jour.

$result = $prizzTelecom->getCommercialOffer($commercialOfferId);

Demander la validation du devis

Une fois que vous avez terminé les modifications du devis vous pouvez nous le soumettre.

$prizzTelecom->submitCommercialOffer($commercialOffer->getId());

Une fois validé par nos services, la procédure de signature sera lancée. Vous recevrez un code par mail pour confirmer la commande.

Si vous voulez intégrer le mécanisme de signature vous pouvez valider le devis avec le code comme ceci :

$prizzTelecom->signCommercialOffer(
    $commercialOffer->getId(),
    (new SignCommercialOffer())->setCode("123456")
);

2 - Commande sur mesure

Cette méthode permet de créer des commandes en jouant sur tous les éléments du devis

Créer un devis sur mesure

La séquence est la suivante :

  1. commencer un devis pour un ClientLegalEntity
  2. ajouter une section : une section correspond a un service / accès
    • créer la section (associée à un ClientContract)
    • définir l’offre dans la section : par exemple, si c’est un accès : donner l’adresse a raccorder, la section sera remplie d’éléments qui formeront une première proposition
    • personnaliser l’offre dans la section : c’est à cette étape que vous pouvez modifier le début et l’engagement, a l’étape précédente c’est une offre “par défaut” qui vous a été proposé
  3. ajouter une autre section en reprenant à l’étape 2 (si nécessaire)
  4. soumettre le devis : on va faire des vérifications, et donner un prix aux éléments qui nécessite une quotation
  5. signer le devis

En voici un, à titre d’exemple. Dans cette page nous allons employer des termes en “français” et qui sont a associer à des objets “machine” dont le nom est anglicisé au sein de l’API, pour éviter des confusions nous vous invitons à consulter ce lexique en cas de doute

Commencer un devis

Trouver votre entité commerciale

$myClientLegalEntity = null;
foreach ($prizzTelecom->getClientLegalEntities()->getItems() as $clientLegalEntity) {
    if ($clientLegalEntity->getName() == "My Company name") {
        $myClientLegalEntity = $clientLegalEntity;
    }
}

Note

Vous pouvez stocker l’id de cette entité, ce sera probablement un élément de configuration de votre côté. Il n’est pas nécessaire de le rechercher à chaque fois.

Faire un test d’éligibilité et sélectionner l’offre

On suppose qu’on veut souscrire un “L2 PREMIUM”. Première étape, on fait un test d’éligibilité.

$eligResult = $prizzTelecom->createEligibility(
    "111 Rue Réaumur, 75002 Paris",
    $myClientLegalEntity->getId()
);

On parcours les proposition de l’éligibilité pour ne retenir que le L2 PREMIUM. On récupère en passant l’id de l’offre et de la liste de prix.

$price_list_id = null;
$offer_id = null;
foreach ($eligResult->getResponses() as $response_id) {
    $ret = $prizzTelecom->getEligibility($response_id);
    foreach ($ret->getResponse() as $response) {
        if ($response->getCode() == 'L2 PREMIUM') {
            $price_list_id = $response->getPriceListId();
            $offer_id = $response->getOfferId();
        }
    }
}

Choisir un contrat

Le ClientContract (contrat), c’est la glue entre un ClientLegalEntity (vous) et une PriceList. Il faut en choisir un pour commencer une section. A noter qu’il peut il y avoir plusieurs ClientContract pour la même PriceList pour avoir une liste de contacts personnalisés, différents profil de configuration de la porte de collecte.

$myContract = null;
foreach ($myClientLegalEntity->getContracts() as $contract) {
    if ($contract->getPriceList()->getId() == $price_list_id) {
        $myContract = $contract;
    }
}

Créer le devis

Il faut fournir en plus de votre ID celui de l’entité légale, on peut le trouver sur la liste de prix.

$legalEntityId = $prizzTelecom->getPriceList($price_list_id)->getLegalEntity()->getId();

$commercialOffer = $prizzTelecom->createCommercialOffer(
    [
        "legalEntityId" => $legalEntityId,
        "clientLegalEntityId" => $clientLegalEntity->getId()
    ]
);

Note

Vous pouvez stocker l’id de la legalEntity, ce sera probablement un élément de configuration de votre côté. Il n’est pas nécessaire de le rechercher à chaque fois.

Ajouter une section au devis

Les devis sont découpé en sections, ainsi vous pouvez commander plusieurs prestations dans le même devis. Chaque section est liée à un contrat, et à un nom. C’est ce nom qui sera présenté pour la facturation (vous disposez aussi d’un champ “référence client” que vous pourrez définir après validation du devis. Il faut également préciser à nouveau l’adresse du livraison du service. Un ultime test d’éligibilité est refait juste avant le remplissage de la section.

$sectionParams = (new CreateCommercialOfferSection())
    ->setClientContractId($myContract->getId())
    ->setName("My new final customer");

$eligAddress = new SetCommercialOfferSectionOfferEligibility();
$eligAddress->setAddress("111 Rue Réaumur, 75002 Paris");

$section = $prizzTelecom->createCommercialOfferSection(
    $commercialOffer->getId(),
    $sectionParams
);

$offerParam = new SetCommercialOfferSectionOffer();
$offerParam
    ->setOfferId($offer_id)
    ->setEligibility($eligAddress);

$prizzTelecom->setCommercialOfferSectionOffer(
    $commercialOffer->getId(),
    $section->getId(),
    $offerParam
);

Après cet appel, vous obtenez un devis avec une offre de “base” que vous pouvez déjà consulter dans l’espace client. Vous pouvez la modifier en mettant à jour la section.

Personnalisation : choix du débit, de la durée d’engagement

$itemsParameters = new UpdateCommercialOfferSectionItems();
$itemsParameters ->setBandwidth('100'); // il s'agit du débit en mb/s
$itemsParameters ->setGrt('4HNO'); // c'est la GTR au format : délai en heures suivi de son type HO ou HNO (cf paramètres utiles) 
$update_commercial_offer_section_items->setCommitment('12'); // c'est l'engagement en mois
//$update_commercial_offer_section_items->setExpress('7'); // certaines offres disposent d'une option Express en jours, permettant un raccordement plus rapide contre rémunération.
$prizzTelecom->updateCommercialOfferSectionItems(
    $commercialOffer->getId(),
    $section->getId(),
    $itemsParameters
);

Vous pouvez retourner consulter le devis il doit être à jour.

Demander la validation du devis

Une fois que vous avez terminé les modifications du devis vous pouvez nous le soumettre.

$prizzTelecom->submitCommercialOffer($commercialOffer->getId());

Une fois validé par nos services, la procédure de signature sera lancée. Vous recevrez un code par mail pour confirmer la commande.

Attention

Attention : le contenu du devis peut avoir changé s’il y avait des éléments qui nécessitaient une estimation. Si vous voulez intégrer le mécanisme de signature vous pouvez valider le devis avec le code comme ceci :

$prizzTelecom->signCommercialOffer(
    $commercialOffer->getId(),
    (new SignCommercialOffer())->setCode("123456")
);

3 - Suivi de commande

Suivre l’avancement d’une commande

Après la signature d’une commande

Une fois que vous avez soumis et signé le devis, il y a une étape de vérification et de validation de celui-ci par nos services. Cette étape terminée, un pack de services, avec une référence de contrat de service, est créé pour chaque section du devis. Il vous est nécessaire de récupérer cette référence de contrat de service afin de pouvoir effectuer le suivi de la commande. Pour cela, il est préférable de créer une cron pour surveiller l’apparition de cette référence.

$commercialOffer = $prizzTelecom->getCommercialOffer($commercialOfferId);
foreach ($commercialOffer->getSections() as $section) {
    $serviceContract = $section->getServiceContract();
}

Suivi de la commande

Une fois la référence de contrat de service récupérée, vous pouvez effectuer le suivi de la commande,

  • soit via l’id du contrat de service $serviceContract = $prizzTelecom->getServiceContract($serviceContract->getId());
  • soit via le nom du contrat de service $serviceContract = $prizzTelecom->getServiceContractByName($serviceContract->getName());

Et voici une partie des informations contenues dans le contrat de service, qui vous permet notamment de suivre l’activation du lien.

$serviceContract = $prizzTelecom->getServiceContract($serviceContractId);
    echo "Nom : ".$serviceContract->getName()."\n";
    echo "RefService : ".$serviceContract->getRefService()."\n";
    echo "RefClient : ".$serviceContract->getRefClient()."\n";
    echo "Statut : ".$serviceContract->getStatus()."\n";
    echo "Date souscription : ".$serviceContract->getSubscriptionDate()->format("Y/m/d H:i:s")."\n";
    echo "Date activation : ".$serviceContract->getActivationDate()->format("Y/m/d H:i:s")."\n";
    echo "Offre : ".$serviceContract->getOffer()->getName()."\n";
    foreach ($serviceContract->getServices() as $service) {
        echo "- Produit : ".$service->getProduct()->getName()."\n";
        echo "- Statut : ".$service->getStatus()."\n";
        echo "- Date activation : ".$service->getActivationDate()->format("Y/m/d H:i:s")."\n";
        echo "- Quantité : ".$service->getQuantity()."\n";
        echo "- Prix unitaire : ".$service->getUnitPrice()."\n";
        echo "- Remise : ".$service->getUnitPriceDiscount()."\n";
        echo "- Adresse : ".$service->getHouseNumber()." ".$service->getHouseNumberComplement()." ".$service->getStreetName()." ".$service->getPostalCode()." ".$service->getCityName()."\n";
    }