Migreren van Telserv naar Bird
Deze handleiding is voor integraties die de Telserv-partner-API aanroepen, V1 of V2, om nummers te kopen, te routeren en vrij te geven, en die nu overstappen naar de Bird API.
De Bird API bedient elk Bird-product, dus de nummers en spraakbewerkingen volgen de eigen conventies van Bird in plaats van die van Telserv. De meeste mogelijkheden die je integratie gebruikt, hebben een Bird-aanroep. De endpoints, payloads, identifiers en authenticatie verschillen, dus plan een herschrijving van de integratie. Waar Bird een taak anders uitvoert, laat deze handleiding zien hoe.
Deze handleiding is nog in ontwikkeling. Hij beschrijft wat Bird nu kan, en groeit mee met de migratie. Als een Telserv-bewerking die je gebruikt hier niet vermeld staat, moet die nog worden geëvalueerd en uitgewerkt voordat hij kan worden toegevoegd; vraag je migratiecontactpersoon ernaar.
Voordat je begint
- Een Bird-organisatie met voltooide identiteitsverificatie, die vereist is voor de eerste nummeraankoop.
- Een API-key met de scopes die de recepten gebruiken:
numbersop schrijfniveau voor nummers en orders,complianceop schrijfniveau voor de losse bewerkingen voor eigendomspapierwerk, envoice_managementop schrijfniveau voor SIP-trunks, spraaknummers en geverifieerde nummers. De testoproep heeft ookvoice:writenodig, en het lezen van oproeplegs vereistvoice:read. - Walletsaldo. Orders worden betaald vanuit de wallet. Wanneer een order wordt geweigerd legt de
402- en412-weigeringen uit.
De nummers die je integratie in Telserv beheert, hoeven niet opnieuw te worden gekocht. Zodra je nummers zijn verplaatst naar je Bird-werkruimte, verschijnen ze in GET /v1/numbers. Je migratiecontactpersoon bevestigt wanneer dat is gebeurd. Om de nda_-identifier van een verplaatst nummer op te halen, zoek je het op met GET /v1/numbers?number=<digits>, geef je de cijfers met hun landcode mee en bewaar je de id als NUMBER_ID.
De voorbeelden lezen je key uit BIRD_API_KEY en de bijbehorende regionale host uit BIRD_API_URL: https://eu1.platform.bird.com voor een bk_eu1_-key, of https://us1.platform.bird.com voor een bk_us1_-key. De overige variabelen, zoals TRUNK_ID en NUMBER_ID, bevatten een identifier uit een eerdere respons; elke stap vermeldt welke hij instelt.
Wat er verandert in het contract
| Gebied | Telserv-partner-API | Bird API |
|---|---|---|
| Authenticatie | X-ApiKey-header (V2) of apiKey-parameter (V1), gecontroleerd tegen je IP-allowlist | Authorization: Bearer met een API-key waarvan de scopes de productgebieden benoemen die hij mag gebruiken. Een IP-allowlist is optioneel: stel die in onder IP restrictions op de key in API-keys |
| Identifiers | Integers. Bij de aankoop van een nummer krijgt het een nieuwe id | TypeIDs met prefix zoals nda_, nor_, vnu_ en spt_. Een nummer behoudt zijn nda_-id zolang het aan je is toegewezen |
| Telefoonnummers | Cijfers zonder een voorloopteken + | E.164 met de voorloop-+ |
| Paginering | start- en limit-offsets, maximaal 1000 per pagina | Cursors: limit tot 100 (standaard 25), daarna starting_after ingesteld op de next_cursor van de vorige pagina. Zie Paginering |
| Fouten | errorCode benoemt een uitzonderingsklasse, en 403 dekt zowel een ontbrekende resource als veel validatiefouten | error.code is een stabiele E-code met een documentatiepagina en, waar een herstelactie bekend is, een remediation. Een ontbrekende resource antwoordt met 404, een niet-vervulde voorwaarde met 412, en ongeldige invoer met 422 inclusief velddetails. Zie Fouten |
| Omgevingen | LIVE en SANDBOX, elk met eigen keys | Eén omgeving. Elke bestelling koopt en factureert een echt nummer, en elk testgesprek is een echt gesprek |
| Opnieuw proberen | Geen idempotentiesleutel | Een Idempotency-Key-header bij schrijfbewerkingen. Dezelfde sleutel en body spelen het eerste antwoord opnieuw af met Idempotency-Replay: true; dezelfde sleutel met een andere body geeft 409. Zie Idempotentie |
De Bird API weigert een queryparameter die het niet herkent met 422 en E01029. Verwijder Telserv-specifieke filters zoals city uit je verzoeken in plaats van ze mee te sturen.
Twee identifiers voor één nummer
Een spraakgeschikt nummer dat aan je werkruimte is toegewezen heeft twee records, elk met een eigen identifier:
- De toewijzing, geretourneerd door
GET /v1/numbers. Deidbegint metnda_voor een dedicated nummer en metnal_voor een gedeeld nummer, en denumber_idvan een bestelling is denda_-identifier van het gekochte nummer. Gebruik deze om het nummer te lezen, te benoemen en te refereren, en om een dedicated nummer vrij te geven. - Het spraakrecord,
vnu_, geretourneerd doorGET /v1/voice/numbers. Gebruik dit om te lezen en te wijzigen waar de inkomende oproepen van het nummer naartoe gaan. Een nummer zonder spraakmogelijkheid, zoals een SMS-only nummer, heeft geen spraakrecord.
De spraakbewerkingen weigeren een nda_- of nal_-identifier met 422. Om het spraakrecord van een nummer te vinden, lijst je spraaknummers op met search ingesteld op de cijfers van het nummer en neem je de vermelding waarvan provider.number_id overeenkomt met de id van de toewijzing. Een nummer routeren naar je SIP-trunk toont het verzoek, en Je telefoonnummers beheren behandelt het opzoeken.
Telserv's GET /numbers/{dnisId} wordt twee reads in Bird: de toewijzing voor status en eigendomspapierwerk, en het spraakrecord voor de route.
Telserv-bewerkingen koppelen aan Bird
Elke tabel vermeldt een taak, de Telserv-aanroep die het deed, en de Bird-aanroep die het nu doet. De opmerkingen onder elke tabel beschrijven wat er verandert in het verzoek of het antwoord.
Kopen
| Taak | Telserv | Bird |
|---|---|---|
| Nummers zoeken die te koop zijn | GET /shop | GET /v1/numbers/available |
| Eén nummer controleren | GET /shop/{stockDnisId} | GET /v1/numbers/available/{number} |
| Een nummer kopen | POST /shop/{stockDnisId} | POST /v1/numbers/orders |
| Een nummer vastleggen | POST /shop/{stockDnisId}/reserve, GET /shop/reserved | POST /v1/numbers/orders |
- Zoeken.
country_codeis verplicht, dus een zoekopdracht bestrijkt één land.prefixverwacht de nationale cijfers na de landcode: Telservprefix=3170wordtcountry_code=NL&prefix=70. Verfijn op netnummer metprefixin plaats vancity, en opnumber_typeencapabilitiesin plaats vanproductId. - Eigendomspapierwerk in zoekresultaten. Elk resultaat bevat
ownership_registration_requiredin plaats van hetexcludeNumbersRequireVerification-filter. Een waardetruebetekent dat het nummer vanaf aankoop wordt gefactureerd, maar geen SMS verstuurt en geen inkomende of uitgaande spraakoproepen verwerkt totdat het papierwerk is goedgekeurd. - Eén nummer controleren. Het wordt aangesproken op zijn E.164-nummer.
- Prijzen. Telserv gaf
pricing.staticPricingterug bij de gedetailleerde reads van een nummer en van een product. In Bird bevat elk zoekresultaat de prijs voor je organisatie inpricing:setup_pricein plaats vannrc, enrecurring_priceperrecurring_periodin plaats vanmrc, metintervals_per_chargevoor het aantal perioden dat één heffing dekt. Een nummer zoeken en kopen met je referentie beschrijft de prijsvelden. - Kopen. Stuur
numberen een optionelereference. De bestelling wordt betaald vanuit je wallet. De meeste bestellingen antwoorden met201; een bestelling die op een carrier wacht antwoordt met202, en je pollt deze. - Reserveren. Het bestellen van het nummer reserveert het. Controleer eerst een kandidaat en bestel het dan.
Nummers
| Taak | Telserv | Bird |
|---|---|---|
| Je nummers opvragen | GET /numbers | GET /v1/numbers |
| Eén nummer lezen | GET /numbers/{dnisId} | GET /v1/numbers/{number_id} met de nda_- of nal_-id van de toewijzing, en GET /v1/voice/numbers/{number_id} met de vnu_-id van het spraakrecord |
| Een nummer wijzigen | PATCH /numbers/{dnisId} | PATCH /v1/numbers/{number_id} met de nda_- of nal_-id van de toewijzing, en PATCH /v1/voice/numbers/{number_id} met de vnu_-id van het spraakrecord |
| Een nummer vrijgeven | DELETE /numbers/{dnisId}?requestedCancelDate= | DELETE /v1/numbers/{number_id} aan het einde van de betaalde periode, of POST /v1/numbers/{number_id}/release direct, beide met de nda_-id van de toewijzing |
- Lijst. De lijst bevat de nummers die nu aan je zijn toegewezen. Een vrijgegeven nummer dat je in Bird hebt besteld, blijft zichtbaar via de bestelling in
GET /v1/numbers/orders. Je nummers afstemmen beschrijft de filters. - Lezen. Status, eigendomspapierwerk en de prijs staan op de toewijzing, en de route staat op het spraakrecord. Het
pricing-object van de toewijzing, metrecurring_priceperrecurring_periodenintervals_per_charge, vervangtpricing.staticPricing.mrc, en de lijst bevat het ook, waar Telserv'sGET /numbersdat niet deed. - Wijzigen.
nameenreferencestaan op de toewijzing, en de route staat op het spraakrecord. Stel een afgedwongen codec en een limiet op gelijktijdige gesprekken in op je SIP-apparatuur.destinationDistributionTypewordt gatewaypriorityop de SIP-trunk:FailOvergeeft elke gateway een anderepriority, enRoundRobingeeft ze dezelfde. - Vrijgeven.
DELETEhoudt het nummer aan tot het einde van de periode waarvoor je al hebt betaald en geeft het dan vrij.POST …/releasegeeft het direct vrij. Geen van beide accepteert een datum. Een nummer vrijgeven toont beide verzoeken.
Bestemmingen en profielen
| Taak | Telserv | Bird |
|---|---|---|
| Gesprekken naar SIP-apparatuur sturen | POST /numbers/{dnisId}/destinations | POST /v1/voice/trunks/{trunk_id}/gateways, daarna trunk routeren |
| Gesprekken doorsturen naar een telefoon | POST /numbers/{dnisId}/destinations | Routeer forward |
| Geen oproepen meer aannemen | DELETE /numbers/{dnisId}/destinations | Routeer reject |
| Bestemmingsprofielen lezen | GET /destinationprofiles, GET /destinationprofiles/{id} | GET /v1/voice/trunks en GET /v1/voice/trunks/{trunk_id}/gateways |
| Een profiel op een nummer toepassen | POST /numbers/{dnisId}/destinations/profile | Routeer trunk met trunk_id |
- SIP-apparatuur. Een gateway hoort bij de trunk en bedient elk nummer dat ernaartoe gerouteerd is, dus nummers die verschillende bestemmingslijsten nodig hebben, hebben verschillende trunks nodig.
sortOrderwordtpriority. Pas beltijd en tijdvensters toe op je SIP-apparatuur. - Doorschakelen. Stel
forward_toenforward_asin.forward_tomoet een van je geverifieerde nummers zijn; een niet-geverifieerd nummer geeft412metE21053.forward_asbepaalt welk nummer het doorgeschakelde gesprek toont als beller. Een nummer heeft één route tegelijk, dus om terug te vallen van SIP-apparatuur naar een telefoonnummer schakel je het gesprek door vanaf je SIP-apparatuur. - Geen oproepen meer aannemen. Het nummer weigert oproepen totdat je het opnieuw routeert. Om een vaste standaard te behouden in plaats van een standaardprofiel, routeer je het nummer naar een trunk die je standaardgateways bevat.
- Profielen.
distributionTypewordtpriority:FailOvergeeft elke gateway een anderepriority, enRoundRobingeeft ze dezelfde. Distributie wordt per trunk ingesteld, dus nummers die een andere distributie nodig hebben, hebben andere trunks nodig. De{dnis}-placeholder wordt{number}indestination_format, en eenprefixCLIPwordt de tekst vóór{number}inorigination_format. - Een profiel toepassen. Een trunk wordt aangesproken met zijn
spt_-identifier, terwijl Telserv een profiel op naam aansprak.
Documenten en eindgebruikersgegevens
| Taak | Telserv | Bird |
|---|---|---|
| Vereisten bekijken | GET /products/conditions, GET /masterdata/productconditions | GET /v1/compliance/requirements voor het nummer, of met program en zonder subject_id voor het formulier dat een land vraagt voordat je een nummer hebt |
| Een document uploaden | POST /numbers/{dnisId}/documents | POST /v1/compliance/attachments, en verwijs daarna in de inzending naar de bijlage. Zie Het eigendomspapierwerk indienen |
| Eindgebruikersgegevens sturen | POST /numbers/{dnisId}/enduserdata | POST /v1/compliance/submissions, samen met de documenten, in één verzoek. Zie Het eigendomspapierwerk indienen |
| Een document vervangen | POST /numbers/{dnisId}/documents opnieuw | POST /v1/compliance/submissions/{submission_id}/resupply met de afgewezen of verlopen antwoorden |
| Voortgang papierwerk bekijken | GET /numbers/{dnisId}/documents | ownership op GET /v1/numbers/{number_id}, en de indiening voor het oordeel over elk antwoord |
- Vereisten. De voorwaardencatalogus van Telserv besloeg alle producten tegelijk; Bird leest één formulier per keer. Vraag de vereisten van één nummer op met
subject_kind=number, denda_-identifier ervan alssubject_iden decountry_codeervan, of lees een formulier vóór de aankoop metprogramingesteld op het nummertype en zondersubject_id. Elke vermelding infieldsvervangt een Telserv-voorwaarde of eindgebruikerslabel: dekeyervan is de sleutel waaronder je antwoordt, endata_typedocumentmarkeert een vermelding die een bestand verwacht. - Documenten. Upload het bestand als
multipart/form-datain plaats van een base64-fileContent; Elk document uploaden vermeldt de geaccepteerde bestanden. Als je hetzelfde bestand twee keer uploadt, krijg je dezelfde bijlage terug. Een upload alleen dient niets in: dat doet de indiening die deattachment_idervan vermeldt. - Eindgebruikersgegevens en documenten samen. Telserv nam elk document in een eigen aanroep aan, en de eindgebruikersgegevens als één lijst labels in een andere. Bird neemt elk antwoord, getypt en document, in één indiening aan, en er zijn geen concepten: het verzoek dient de antwoorden in ter beoordeling. Volg daarna
ownership.next, dat resupply noemt voor correcties en alleen een nieuwe indiening als die nodig is (Elk antwoord indienen). - Vervangingen. Stuur alleen de antwoorden die je vervangt; de andere behouden hun beoordeling. Telserv accepteerde een nieuw bestand voor een voorwaarde zolang het nummer op verificatie wachtte, en dat bestand zette de beoordeling van die voorwaarde opnieuw in gang; Bird vervangt een antwoord dat is afgewezen, verlopen of nog niet aangeleverd, en weigert een antwoord dat nog wordt beoordeeld of al is geaccepteerd, behalve een antwoord gemarkeerd als
editable_for_verifier_repairzolang een door ons gevraagde correctie openstaat (Een afgewezen antwoord corrigeren). - Voortgang.
ownership.statusenownership.nextmelden waar het nummer staat. Elk antwoord heeft een eigenstate, en een afgewezen antwoord bevat dereasonvan de beoordelaar. Bird mailt elk resultaat ook naar de eigenaren van je organisatie en naar de persoon die de indiening het laatst heeft ingediend of gecorrigeerd.ownershipis meestalnullals het nummer geen papierwerk vereist.
Het eigendomspapierwerk indienen toont de verzoeken, en Het eigendomspapierwerk van een nummer indienen behandelt de hele flow, inclusief indienen vanuit het dashboard en samen met de bestelling.
Producten en stamgegevens
| Taak | Telserv | Bird |
|---|---|---|
| Producten bekijken | GET /products, GET /products/{productId} | GET /v1/numbers/available, dat country_code vereist en de nummers teruggeeft die in dat ene land te koop zijn. Bird heeft geen wereldwijde productcatalogus, en niets komt overeen met productId. Geen enkele API geeft de landen en nummertypen weer die te koop zijn; de pagina met telefoonnummerprijzen toont de standaardprijzen van Bird per land. |
Elk zoekresultaat beschrijft het product met number_type, capabilities en ownership_registration_required, en bevat de prijs voor je organisatie in plaats van de pricing.staticPricing van het product (nrc en mrc). De standaardprijzen van Bird staan op de pagina telefoonnummerprijzen. De sessionPricing per minuut van Telserv heeft geen equivalent bij deze reads; spraaktarieven staan op de pagina spraakprijzen.
Telserv-nummertypen komen als volgt overeen met number_type van Bird:
Telserv numberType | Bird number_type |
|---|---|
DID | local of national, afhankelijk van het nummer |
FreePhone | toll_free |
Mobile | mobile |
Wat werkt er anders
Deze Telserv-taken werken anders in Bird. Houd er rekening mee voordat je een integratie verplaatst die van een van deze taken afhankelijk is.
- Papierwerk. Dien de documenten en eindgebruikersgegevens van een nummer in één inzending in, zonder concepten, en corrigeer afgewezen antwoorden met een nieuwe aanlevering.
- Reserveringen. Bestel het nummer zodra je het gekozen hebt; de bestelling reserveert het.
- Belinstellingen per nummer. Stel een afgedwongen codec, een limiet op gelijktijdige gesprekken, beltijd en tijdvensters in op je SIP-apparatuur.
- Een vrijgavedatum. Bird geeft een nummer vrij aan het einde van de betaalde periode of direct, niet op een datum die je kiest. Bewaar de annuleringsdatums die je naar Telserv stuurde aan jouw kant, en voer ze uit wanneer ze actueel worden.
- Walletsaldo. Controleer het saldo en vul het aan in het dashboard.
Een nummer zoeken en kopen met je referentie
Zoek in één land. Combineer number_type, capabilities en prefix om de resultaten te verfijnen:
curl "$BIRD_API_URL/v1/numbers/available?country_code=NL&number_type=mobile&capabilities=voice&limit=10" \
--header "Authorization: Bearer $BIRD_API_KEY"Elk resultaat bevat een pricing-object met de prijs die je organisatie voor het nummer betaalt, exclusief belasting en in je factureringsvaluta, met eventuele prijzen die je met Bird hebt afgesproken:
setup_pricewordt eenmalig in rekening gebracht wanneer je het nummer bestelt. Een gepubliceerd bedrag van nul heeft eenamountvan"0". Het veld zelf isnullals er geen installatiekosten van toepassing zijn, en ook altijd wanneerrecurring_pricenullis, omdat dat nummer niet kan worden besteld.recurring_priceis het tarief perrecurring_period.intervals_per_chargeis het aantalrecurring_periods dat één heffing dekt. De terugkerende kosten vóór belasting zijnrecurring_pricevermenigvuldigd metintervals_per_charge, afgeschreven wanneer het nummer aan je werkruimte wordt toegewezen en bij elke verlenging; de installatiekosten staan apart. Bij een bestelling die op een carrier wacht, vindt de toewijzing plaats wanneer de bestelling voltooid is.
De API-referentie toont een voorbeeldresultaat. Een resultaat met pricing.recurring_price: null geeft geen terugkerende prijs op. Neem contact op met sales om vóór het bestellen een prijs voor dat land en nummertype te laten vaststellen.
Het dashboard en API gebruiken dezelfde organisatieprijs, inclusief omrekening naar je factureringsvaluta. Een prijsopvraging legt geen offerte vast: tarief- of wisselkoerswijzigingen vóór een latere afschrijving kunnen het bedrag veranderen. Als de opvraging mislukt, geeft de zoekopdracht 503 terug met E14009. Probeer de opvraging opnieuw met exponentiële backoff; een mislukte opvraging betekent nooit dat het nummer niets kost.
Om een kandidaat en de prijs ervan te bevestigen voordat je bestelt, lees je het nummer op met GET /v1/numbers/available/{number}. Een 404 betekent dat het niet meer te koop is.
Bestel het nummer met de referentie die je in Telserv gebruikte, en kies een idempotentiesleutel die je bewaart voor als je deze aankoop opnieuw moet proberen:
curl --request POST "$BIRD_API_URL/v1/numbers/orders" \
--header "Authorization: Bearer $BIRD_API_KEY" \
--header "Content-Type: application/json" \
--header "Idempotency-Key: order-CUST-778812" \
--data '{"number": "+31612345678", "reference": "CUST-778812"}'Een 201-antwoord bevat status: completed en een number_id, de nda_-identifier van het nummer. Bewaar deze als NUMBER_ID. Een 202-antwoord betekent dat de bestelling wacht op een carrier: poll de bestelling tot de status ervan completed of failed is. Een al afgeschreven installatiekost wordt niet terugbetaald als de bestelling daarna mislukt. De referentie wordt op het nummer gezet wanneer de bestelling voltooid is. Ze bevat maximaal 100 tekens en hoeft niet uniek te zijn.
Als je een bestelling opnieuw probeert voor een nummer dat al aan je werkruimte is toegewezen, krijg je de bestaande bestelling terug, dus een nieuwe poging brengt niet dubbel in rekening. Een nummer kopen en vrijgeven legt de weigeringen uit.
Om een referentie later in te stellen of te wijzigen, stuur je reference (en optioneel name) naar PATCH /v1/numbers/{number_id}. Stuur null om een veld te wissen.
Controleer of een nummer gesprekken kan voeren
Een nummer waarvan status de waarde pending_ownership_registration heeft, is toegewezen en wordt gefactureerd, maar het verstuurt geen SMS en weigert inkomende en uitgaande spraakoproepen totdat het eigendomspapierwerk is goedgekeurd. Lees het nummer op met GET /v1/numbers/{number_id} en controleer dat status gelijk is aan active voordat je het routeert of er een testoproep naartoe plaatst. Als het in behandeling is, dien je het eigendomspapierwerk in. De status van een toegewezen nummer licht elke waarde toe.
De voorbeelden hieronder gebruiken een Nederlands mobiel nummer. Controleer de status van je eigen nummer op dezelfde manier, ongeacht het land.
Het eigendomspapierwerk indienen
Telserv nam het papierwerk van een nummer aan met één POST /numbers/{dnisId}/documents per document en één POST /numbers/{dnisId}/enduserdata voor alle labels. Bird neemt beide aan in één inzending, nadat je de documenten hebt geüpload.
-
Lees de
country_codevan het nummer op en bewaar deze alsCOUNTRY_CODE. Het commando haalt deze eruit metjq; lees hem handmatig af als jejqniet gebruikt:CodevoorbeeldCOUNTRY_CODE=$(curl -s "$BIRD_API_URL/v1/numbers/$NUMBER_ID" \ --header "Authorization: Bearer $BIRD_API_KEY" | jq -r .country_code) -
Lees op wat het land van het nummer vraagt. Elke vermelding in
fieldsheeft dekeywaaronder je antwoordt, eendata_typeenrequired, dat aangeeft of je de vermelding moet beantwoorden. Bewaar deprogramdie het antwoord noemt alsPROGRAM:Codevoorbeeldcurl "$BIRD_API_URL/v1/compliance/requirements?subject_kind=number&subject_id=$NUMBER_ID&country_code=$COUNTRY_CODE" \ --header "Authorization: Bearer $BIRD_API_KEY"Een
422metE19001betekent dat er voor dat land geen eigendomsformulier bestaat. -
Upload elk document waar een
document-veld om vraagt, als bestand in plaats van base64-fileContent. Bewaar deiduit het antwoord, detca_-identifier van de bijlage, alsATTACHMENT_ID:Codevoorbeeldcurl --request POST "$BIRD_API_URL/v1/compliance/attachments" \ --header "Authorization: Bearer $BIRD_API_KEY" \ --form "file=@registration-certificate.pdf" -
Dien alle antwoorden tegelijk in: één vermelding voor elk veld waarvan
requiredtrueis, en voor elk optioneel veld waarvoor je een echt antwoord hebt, met de eindgebruikersgegevens alsvalueen elk document alsattachment_id. Laat een optioneel veld weg in plaats van er een waarde voor te verzinnen. Het voorbeeld toont twee antwoorden; voeg de overige verplichte antwoorden toe voordat je het verstuurt. Dit verzoek dient de antwoorden in ter beoordeling. Bewaar deiduit het antwoord, decsb_-identifier van de inzending, alsSUBMISSION_ID:Codevoorbeeldcurl --request POST "$BIRD_API_URL/v1/compliance/submissions" \ --header "Authorization: Bearer $BIRD_API_KEY" \ --header "Content-Type: application/json" \ --header "Idempotency-Key: ownership-CUST-778812" \ --data '{"subject_kind": "number", "subject_id": "'"$NUMBER_ID"'", "program": "'"$PROGRAM"'", "country_code": "'"$COUNTRY_CODE"'", "answers": [{"key": "business_registration_number", "value": "90012768"}, {"key": "business_registration_certificate", "attachment_id": "'"$ATTACHMENT_ID"'"}]}'Een
201-antwoord geeft de inzending terug. Een422dient niets in: corrigeer de body en verstuur deze met een nieuwe idempotentiesleutel, omdat de oude sleutel de weigering opnieuw afspeelt. Alle antwoorden indienen legt elke weigering uit. -
Als een beoordelaar een antwoord afwijst, vervang je alleen dat antwoord, zoals Een afgewezen antwoord corrigeren beschrijft:
Codevoorbeeldcurl --request POST "$BIRD_API_URL/v1/compliance/submissions/$SUBMISSION_ID/resupply" \ --header "Authorization: Bearer $BIRD_API_KEY" \ --header "Content-Type: application/json" \ --header "Idempotency-Key: ownership-fix-1-CUST-778812" \ --data '{"answers": [{"key": "business_registration_number", "value": "90012769"}]}'
Om in te dienen terwijl je koopt, stuur je dezelfde answers in het compliance-blok van POST /v1/numbers/orders. Die bestelling gebruikt de bestaande numbers-scope op schrijfniveau, ook wanneer ze papierwerk bevat.
Volg de beoordeling met ownership.status op GET /v1/numbers/{number_id}. De antwoorden zijn een juridische verklaring namens je bedrijf, dus dien alleen antwoorden in die zijn bevestigd door iemand die er verantwoordelijk voor is. Het eigendomspapierwerk van een nummer indienen beschrijft elk verzoek, de beoordeling en het indienen bij de bestelling.
Routeer een nummer naar je SIP-trunk
Een nieuw nummer heeft geen eigen route en volgt dus de standaardroute van je werkruimte. Die standaardroute begint als reject, maar in een werkruimte die er al een heeft ingesteld, worden de oproepen naar een nieuw nummer volgens die route afgehandeld zodra het nummer is toegewezen. Om de oproepen bij je apparatuur af te leveren, maak je een SIP-trunk aan met inkomende oproepen ingeschakeld, geef je deze een gateway en laat je het nummer naar de trunk verwijzen. SIP-trunks behandelt het verbinden van je apparatuur met de trunk.
-
Maak de trunk aan met inkomende oproepen ingeschakeld. Bewaar de
iduit het antwoord, despt_-identifier van de trunk, alsTRUNK_ID:Codevoorbeeldcurl --request POST "$BIRD_API_URL/v1/voice/trunks" \ --header "Authorization: Bearer $BIRD_API_KEY" \ --header "Content-Type: application/json" \ --header "Idempotency-Key: trunk-production-pbx" \ --data '{"name": "Production PBX", "inbound_enabled": true}' -
Voeg een gateway toe. Standaard ontvangt de gateway de gekozen en bellende nummers in E.164 met hun
+. Als je apparatuur nummers zonder de+verwacht, zoals de{dnis}-placeholder van Telserv deed, stel dandestination_formatvoor het gekozen nummer enorigination_formatvoor het bellende nummer in op{number}:Codevoorbeeldcurl --request POST "$BIRD_API_URL/v1/voice/trunks/$TRUNK_ID/gateways" \ --header "Authorization: Bearer $BIRD_API_KEY" \ --header "Content-Type: application/json" \ --header "Idempotency-Key: gateway-pbx-primary" \ --data '{"sip_uri": "sip:pbx.example.com:5060", "priority": 0, "destination_format": "{number}", "origination_format": "{number}"}'Voeg voor failover een tweede gateway toe; Wat een gateway nodig heeft legt
priorityen de nummerformaten uit. Dezelfde gateway opnieuw aanmaken zonder idempotentiesleutel geeft409metE21047als antwoord. -
Zoek het spraakrecord van het nummer. Zoek op de cijfers van het nummer en neem de
idvan de vermelding waarvanprovider.number_iddeidvan de toewijzing is. Bewaar deze alsVOICE_NUMBER_ID:Codevoorbeeldcurl "$BIRD_API_URL/v1/voice/numbers?search=31612345678" \ --header "Authorization: Bearer $BIRD_API_KEY" -
Laat het nummer naar de trunk verwijzen:
Codevoorbeeldcurl --request PATCH "$BIRD_API_URL/v1/voice/numbers/$VOICE_NUMBER_ID" \ --header "Authorization: Bearer $BIRD_API_KEY" \ --header "Content-Type: application/json" \ --data '{"inbound_configuration": {"route": {"type": "trunk", "trunk_id": "'"$TRUNK_ID"'"}}}'Een
200-antwoord toont de nieuwe route. Een trunk met inkomende oproepen uitgeschakeld geeft412metE21052als antwoord.
Als je inkomende oproepen op een trunk uitschakelt of de trunk verwijdert, keert elk nummer dat ernaar routeert terug naar de standaardroute van je werkruimte, en opnieuw inschakelen herstelt die routes niet. Oproepen afleveren op een SIP-trunk legt dit uit, samen met de trunk-, forward- en reject-routes.
Je nummers afstemmen
Doorloop de lijst met de grootste paginagrootte. Geef de next_cursor van elke pagina door als NEXT_CURSOR om de volgende pagina op te halen, totdat next_cursor gelijk is aan null. De lijst geeft geen totaalaantal terug.
curl "$BIRD_API_URL/v1/numbers?limit=100" \
--header "Authorization: Bearer $BIRD_API_KEY"
curl "$BIRD_API_URL/v1/numbers?limit=100&starting_after=$NEXT_CURSOR" \
--header "Authorization: Bearer $BIRD_API_KEY"De lijstfilters van Telserv komen als volgt overeen met die van Bird:
Telserv-filter op GET /numbers | Bird-filter op GET /v1/numbers |
|---|---|
number, dat overeenkomt met het begin van het nummer | prefix zonder country_code, dat overeenkomt met de cijfers vanaf het begin van het volledige nummer |
prefix, dat gelijk is aan het toegangs- en netnummer zoals 3170 | country_code met prefix ingesteld op de nationale cijfers: country_code=NL&prefix=70 |
reference met een gedeeltelijke waarde | search, dat overeenkomt met een deel van het nummer, de naam of de referentie, hoofdletterongevoelig |
reference met een exacte waarde tussen aanhalingstekens | reference, dat de nummers met die exacte referentie retourneert. De overeenkomst is hoofdlettergevoelig |
| Nieuw in Bird | number retourneert één volledig nummer opgegeven met de landcode, met of zonder + of 00: +31612345678, 31612345678 en 0031612345678 vinden hetzelfde nummer |
Zoek een nummer in je lijst behandelt elk filter in detail.
Elke vermelding bevat pricing, met recurring_price per recurring_period en intervals_per_charge. Tenzij een prijs voor het nummer vaststaat, is recurring_price het huidige tarief van je organisatie, en elke verlenging brengt het tarief in rekening dat geldt op het moment van verlenging, dus een al gefactureerd bedrag kan ervan afwijken. Alle nummers in je bezit opvragen legt uit in welke valuta elk nummer wordt gefactureerd, wanneer pricing of de prijzen ervan null zijn, en wat je doet als pricing.error is ingesteld.
Een vrijgegeven nummer verdwijnt uit deze lijst, en opvragen op number_id geeft 404. Als je het in Bird hebt besteld, blijft de voltooide bestelling zichtbaar in GET /v1/numbers/orders.
Een nummer vrijgeven
Beide verzoeken gelden voor een dedicated nummer, op basis van zijn nda_-identifier; een gedeeld nummer wordt geweigerd met E14002. Om het nummer te behouden tot het einde van de periode waarvoor je al hebt betaald, annuleer je het:
curl --request DELETE "$BIRD_API_URL/v1/numbers/$NUMBER_ID" \
--header "Authorization: Bearer $BIRD_API_KEY" \
--header "Idempotency-Key: cancel-CUST-778812"Een 202-antwoord geeft het nummer terug met releases_at, het einde van de betaalde periode. Het nummer behoudt zijn huidige status tot dat moment, het abonnement wordt niet verlengd en het nummer wordt dan vrijgegeven. Nogmaals opvragen geeft dezelfde releases_at, en een annulering kan niet ongedaan worden gemaakt. Een nummer zonder onderliggend abonnement wordt direct vrijgegeven, en het antwoord is 200 met status van het nummer ingesteld op released.
Om het nummer nu vrij te geven, ook als er al een annulering gepland is:
curl --request POST "$BIRD_API_URL/v1/numbers/$NUMBER_ID/release" \
--header "Authorization: Bearer $BIRD_API_KEY" \
--header "Idempotency-Key: release-CUST-778812"Een 204-antwoord betekent dat het nummer is vrijgegeven, met onmiddellijke ingang. De rest van de huidige periode wordt niet terugbetaald.
Zolang een verlengingsbetaling voor het nummer achterstallig is, beantwoorden beide verzoeken 409 met E03015 totdat deze is voldaan.
Geen van beide verzoeken accepteert een datum, dus bewaar het schema dat je naar Telserv hebt gestuurd als requestedCancelDate aan je eigen kant. Om een nummer tot zijn datum te behouden, annuleer je het zodra de datum binnen de huidige factureringsperiode valt: het wordt vrijgegeven wanneer die periode eindigt, op of na de datum. Om het precies op de datum op te geven, geef je het die dag vrij. Een nummer vrijgeven beschrijft wat elk verzoek doet met het nummer, de kosten en een nieuwe poging.
Plaats een testoproep naar je nummer
Om een route end-to-end te controleren, plaats je een oproep naar het nummer vanaf een ander nummer dat je werkruimte als beller-ID mag presenteren. Het land van het nummer moet ingeschakeld zijn in je spraakbestemmingen, anders gaat de oproep niet door. Het onderstaande verzoek voert een inline-reeks uit die ophangt zodra de oproep wordt beantwoord, dus een opgeslagen reeks is niet nodig. Het plaatst een echte oproep, en de normale gesprekskosten zijn van toepassing.
Sla het verzoek op als test-call.json. Zet het beller-ID dat je presenteert in from, een eigen of geverifieerd nummer van je werkruimte, en het nummer dat je test in to:
{
"from": "+31612345679",
"to": "+31612345678",
"sequence": {
"definition": {
"schema_version": 1,
"expression_environment": "bird.cel.v1",
"nodes": [
{
"id": "entry",
"type": "trigger.start_call",
"type_version": 1,
"config": {},
"input": {},
"connections": { "event": { "node_id": "end", "port": "input" } }
},
{ "id": "end", "type": "voice.hangup", "type_version": 1, "config": {}, "input": {} }
]
},
"entry_node_id": "entry",
"trigger_data": {}
}
}Verstuur het:
curl --request POST "$BIRD_API_URL/v1/voice/calls" \
--header "Authorization: Bearer $BIRD_API_KEY" \
--header "Content-Type: application/json" \
--header "Idempotency-Key: ${TEST_CALL_KEY:?Set TEST_CALL_KEY once for this test call}" \
--data-binary @test-call.jsonStel TEST_CALL_KEY in op een nieuwe waarde voor elke test, en hergebruik het wanneer je dezelfde test opnieuw probeert na een time-out of een onduidelijk resultaat: dezelfde sleutel en hetzelfde verzoek binnen drie uur spelen de eerste acceptatie opnieuw af in plaats van een tweede oproep te plaatsen. Een 202-antwoord accepteert de oproep en retourneert het initial_leg_id. Acceptatie bewijst niet dat de oproep verbonden is: lees de leg met GET /v1/voice/legs/{leg_id}, of bekijk de legs die naar het nummer zijn geplaatst met GET /v1/voice/legs en het to-filter, en controleer of je apparatuur de oproep heeft ontvangen. Een spraakoproep aanmaken beschrijft de vereisten voor beller-ID en bestemming en de regels voor opnieuw proberen.
Volgende stappen
Gerelateerde bronnen
Ga verder met de documentatie, handleidingen en voorbeelden voor dit onderwerp.