Creation d'une Portabilité via Marketplace

Création d'une portabilité via l'API Marketplace Netwo.

Netwo - Effectuer une portabilité

La demande de portabilité consiste à passer une commmande.
Il s'agit d'un processus en quatre étapes :

  1. Récupérer son identifiant de préfixe de portabilité
  2. Créer un panier
  3. Récupérer les cart line correspondantes
  4. Créer une commande

1. Récupération de l'identifiant de préfixe de portabilité

Pour passer une commande de portabilité, il sera obligatoire de posséder et renseigner le préfixe de portabilité sur lequel s'appliquera la portabilité.

Il est donc nécessaire d'avoir un préfixe de portabilité enregistré sur le SaaS.

Pour cela, il est possible de lister l'ensemble des services de type "préfixe de portabilité" et pour obtenir la liste des identifiants souhaités.

Exemple :

GET /service?product_category[]=prefix_hosting

{
    "services": [
        {
            "bought": {
                "service_id": "{{prefix_service_id}}",
                "service_type": "prefix_hosting",
                "reference": "S-ZZZZ-ZZZZ",
                "external_provider_reference": null,
                "external_consumer_reference": null,
                "product_name": "Hébergement d'un préfixe de portabilité",
                "provider_name": "Netwo",
                "consumer_name": "{{consumer}}",
                "client_name": "{{client}}",
                "client_address": null,
                "status": "initialized",
                "commissioning_date": null,
                "termination_date": null,
                "resold_service_id": null,
                "bought_service_id": null,
                "resource": null,
                "specifics": {
                    "prefix_hosting": {
                        "resource": "010203",
                        "sip_trunk_reference": "S-YYYY-YYYY"
                    }
                },
                "category": "prefix_hosting"
            },
            "resold": null
        }
    ],
    "total_results": 1,
    "limit": 1000,
    "offset": 0
}

2. Création du panier avec la portabilité

La route /cart permet de créer un panier.

Il est possible de passer un objet RIO au lieu de DID si la portabilité est avec RIO.

Le format de la wanted_date est RFC3339 et le fuseau est UTC.

Cet appel renvoie un cart_id qui sera nécessaire pour récupérer les cart lines, et procéder
à l'étape du passage de commande.

Exemple :

POST /cart

{
    "lines": [
        {
            "entity": {
                  "portability": {
                        "idn": "0123456789",
                        "wanted_date": "2024-12-01T10:00:00.000Z",
                        "rio_or_did": {
                          "did": [
                            "0234567890",
                            "0234567891",
                            "0234567892"
                          ]
                        },
                        "portability_type": "total",
                        "option_call_validation": false,
                        "comments": "Informations éventuelles à passer aux opérateurs destinataires"
                  }
            }
        }
    ],
    "context": "buyer"
}

3. Récupération des cart lines

La création de commande requiert de récupérer au préalable les lignes du panier par la route /cart/{{cart_id}}/lines

Cet appel permet également de vérifier les prix qui seront appliqués lors de la commande.

GET /cart/{{cart_id}}/lines

{
  "elements": [
    {
      "cart_line_id": "{{cart_line_id}}",
      "quantity": 1,
      "index": 0,
      "discount": {
        "access_fee": null,
        "recurring_price": null
      },
      "product": {
        "product_name": "Portabilité",
        "product_category": "inbound_portability",
        "specifics": {
          "catalog": {
            "description": "La portabilité est un processus de récupération des numéros principal et secondaires permettant de réaliser auprès de l’opérateur actuel du client la demande de transfert des numéros vers le nouvel opérateur.",
            "contract_name": "Portabilité",
            "contract_version_product_id": "{{cvp_id}}",
            "variation_id": null,
            "contract_document_bundle_url": "https://www.netwo.io",
            "infra_provider_slug": null,
            "infra_provider_name": null,
            "collected_by": "Netwo"
          }
        },
        "product_feature_set": {
          "access_fee": 0.0,
          "billing_periodicity": 1,
          "is_sellable": true,
          "payment_term": "payable_in_arrears",
          "recurring_price": 0.0
        }
      },
      "options": [],
      "context": {
        "portability": {
          "idn": "0123456789",
          "rio_or_did": {
            "did": [
              "0234567890",
              "0234567891",
              "0234567892"
            ]
          },
          "comments": "Informations éventuelles à passer aux opérateurs destinataires",
          "wanted_date": "2024-12-01T10:00:00.000Z",
          "portability_type": "total",
          "routing": "auto_routing_prefix"
        }
      }
    }
  ],
  "total_results": 1,
  "limit": 100,
  "offset": 0
}

4. Création de la commande

La route /order permet de créer une commande.

La commande lancera une demande de portabilité dans un délai de quelques minutes.

Les informations d'adresse du client final sont obligatoires pour passer une commande de portabilité :

  • customer.customer_location.address.street
  • customer.customer_location.address.zip_code
  • customer.customer_location.address.city

Exemple avec une commande de portabilité sur un préfixe

POST /order

{
  "cart_id": "{{cart_id}}",
  "lines": [
    {
      "cart_line_id": "{{cart_line_id}}",
      "attributes": {
        "portability": {
          "routing": "routing_on_prefix",
          "prefix_service_id": "{{prefix_service_id}}"
        }
      },
      "customer": {
        "name": "Societé",
        "company_number": "00000000000000",
        "customer_location": {
          "address": {
            "street_number": "35",
            "street": "Rue des Jeuneurs",
            "zip_code": "75002",
            "city": "Paris"
          }
        }
      },
      "contact": {
        "name": "societe",
        "email": "[email protected]",
        "phone": "+33601020304"
      }
    }
  ]
}

Exemple avec une commande de portabilité sur un sip trunk C5

POST /order

{
  "cart_id": "{{cart_id}}",
  "lines": [
    {
      "cart_line_id": "{{cart_line_id}}",
      "attributes": {
        "portability": {
          "routing": {
            "sip_trunk_c5": {
              "service_id": "{{sip_trunk_service_id}}"
            }
          },
          "prefix_service_id": "{{prefix_service_id}}"
        }
      },
      "customer": {
        "name": "Societé",
        "company_number": "00000000000000",
        "customer_location": {
          "address": {
            "street_number": "35",
            "street": "Rue des Jeuneurs",
            "zip_code": "75002",
            "city": "Paris"
          }
        }
      },
      "contact": {
        "name": "societe",
        "email": "[email protected]",
        "phone": "+33601020304"
      }
    }
  ]
}

5. Consultation d'informations techniques détaillées

Après avoir passé une commande de portabilité, vous pouvez obtenir des informations techniques détaillées sur le traitement de votre portabilité d'un point de vue APNF.

Le contenu de l'attribut apnf_requests contient les requêtes effectivement envoyées sur le MOP - à l'APNF - à destination des opérateurs concernés par la portabilité entrante.
Il est normal que ce tableau reste vide un certain temps juste après le passage de votre commande.
Il sera rempli une fois que notre système aura validé et traité votre demande de portabilité, puis envoyé les requêtes sur le MOP et que l'APNF aura accusé réception de ces requêtes.
Ce processus peut prendre jusqu'à plusieurs heures en cas de délai de traitement anormalement long par un maillon de cette chaîne.

Information importante : ces informations techniques ne doivent être utilisées qu'à titre informatif, à vocation de debug pour communiquer avec les opérateurs concernés.

Exemple

{
    "apnf_requests": [
        {
            "operator_code": "XXXX00",
            "state": "Planned",
            "ope": "XXXX00",
            "opa": "YYYY00",
            "intermediate_id": "12345",
            "main_apnf_reference": "ABCD",
            "sub_apnf_reference": "ABCD",
            "mop_offer_code": "PS_E",
            "portability_type": "totale",
            "simplified_process_option": true,
            "scheduled_date": "2024-06-15T09:00:00Z"
        },
        {
            "operator_code": "YYYY00",
            "state": "ArOk",
            "ope": "XXXX00",
            "opa": "YYYY00",
            "intermediate_id": "12346",
            "main_apnf_reference": "ABCD",
            "sub_apnf_reference": "ABCDA",
            "mop_offer_code": "PS_E",
            "portability_type": "totale",
            "simplified_process_option": true,
            "scheduled_date": ""
        }
    ]
}