Migrare da Telserv a Bird
Questa guida è per le integrazioni che chiamano l'API partner di Telserv, V1 o V2, per acquistare, instradare e rilasciare numeri, e che ora passano all'Bird API.
L'Bird API serve ogni prodotto Bird, quindi le sue operazioni su numeri e voce seguono le convenzioni di Bird anziché quelle di Telserv. La maggior parte delle funzionalità usate dalla tua integrazione ha una chiamata Bird corrispondente. Endpoint, payload, identificatori e autenticazione sono diversi, quindi pianifica una riscrittura dell'integrazione. Dove Bird svolge un'attività in modo diverso, questa guida mostra come.
Questa guida è in fase di sviluppo. Copre ciò che Bird fa oggi e cresce man mano che procede la migrazione. Se un'operazione Telserv che usi non è elencata qui, richiede ancora analisi e lavoro prima di poter essere aggiunta; chiedi al tuo contatto per la migrazione.
Prima di iniziare
- Un'organizzazione Bird con verifica dell'identità completata, necessaria per il primo acquisto di un numero.
- Una chiave API con gli scope usati dalle ricette:
numbersa livello di scrittura per numeri e ordini,compliancea livello di scrittura per le operazioni autonome sulla documentazione di titolarità, evoice_managementa livello di scrittura per trunk SIP, numeri voce e numeri verificati. La chiamata di test richiede anchevoice:write, e la lettura dei leg di chiamata richiedevoice:read. - Saldo del wallet. Gli ordini vengono pagati dal wallet. Quando un ordine viene rifiutato spiega i rifiuti
402e412.
I numeri che la tua integrazione gestisce in Telserv non devono essere riacquistati. Una volta spostati nel tuo spazio di lavoro Bird, compaiono in GET /v1/numbers. Il tuo contatto per la migrazione conferma quando ciò avviene. Per ottenere l'identificatore nda_ di un numero spostato, cercalo con GET /v1/numbers?number=<digits> indicando le cifre con il prefisso internazionale e conserva il id come NUMBER_ID.
Gli esempi leggono la tua chiave da BIRD_API_KEY e il suo host regionale da BIRD_API_URL: https://eu1.platform.bird.com per una chiave bk_eu1_, oppure https://us1.platform.bird.com per una chiave bk_us1_. Le altre variabili, come TRUNK_ID e NUMBER_ID, contengono un identificatore di una risposta precedente; ogni passaggio indica quale imposta.
Cosa cambia nel contratto
| Area | API partner Telserv | Bird API |
|---|---|---|
| Autenticazione | Header X-ApiKey (V2) o parametro apiKey (V1), verificato rispetto alla tua allowlist IP | Authorization: Bearer con una chiave API i cui scope indicano le aree di prodotto utilizzabili. Una allowlist IP è opzionale: impostala in IP restrictions sulla chiave in API keys |
| Identificatori | Interi. L'acquisto di un numero gli assegna un nuovo id | TypeID con prefisso come nda_, nor_, vnu_ e spt_. Un numero mantiene il proprio id nda_ finché è allocato a te |
| Numeri di telefono | Cifre senza + iniziale | E.164 con lo + iniziale |
| Paginazione | Offset start e limit, fino a 1000 per pagina | Cursori: limit fino a 100 (predefinito 25), poi starting_after impostato sul next_cursor della pagina precedente. Vedi Paginazione |
| Errori | errorCode indica una classe di eccezione e 403 copre sia una risorsa mancante sia molti errori di validazione | error.code è un codice E stabile con una pagina di documentazione e, dove un recupero è noto, un remediation. Una risorsa mancante risponde 404, una precondizione non soddisfatta 412 e un input non valido 422 con i dettagli dei campi. Vedi Errori |
| Ambienti | LIVE e SANDBOX, ciascuno con le proprie chiavi | Un solo ambiente. Ogni ordine acquista e addebita un numero reale, e ogni chiamata di test è una chiamata reale |
| Nuovi tentativi | Nessuna chiave di idempotenza | Un header Idempotency-Key sulle scritture. La stessa chiave e lo stesso body restituiscono la prima risposta con Idempotency-Replay: true; la stessa chiave con un body diverso risponde 409. Vedi Idempotenza |
L'Bird API rifiuta un parametro di query che non riconosce con 422 e E01029. Rimuovi dalle tue richieste i filtri esclusivi di Telserv, come city, invece di passarli invariati.
Due identificatori per un numero
Un numero con capacità vocale assegnato al tuo spazio di lavoro ha due record, ciascuno con il proprio identificatore:
- L'allocazione, restituita da
GET /v1/numbers. Il suoidinizia connda_per un numero dedicato e connal_per uno condiviso, e ilnumber_iddi un ordine è l'identificatorenda_del numero acquistato. Usala per leggere, denominare e referenziare il numero, e per rilasciare un numero dedicato. - Il record vocale,
vnu_, restituito daGET /v1/voice/numbers. Usalo per leggere e modificare dove vanno le chiamate in entrata del numero. Un numero senza capacità vocale, ad esempio un numero solo SMS, non ha un record vocale.
Le operazioni vocali rifiutano un identificatore nda_ o nal_ con 422. Per trovare il record vocale di un numero, elenca i numeri vocali con search impostato sulle cifre del numero e prendi la voce il cui provider.number_id corrisponde al id dell'allocazione. Instrada un numero verso il tuo trunk SIP mostra la richiesta, e Gestire i tuoi numeri di telefono tratta la ricerca.
Il GET /numbers/{dnisId} di Telserv diventa due letture in Bird: l'allocazione per lo stato e la documentazione di titolarità, e il record vocale per l'instradamento.
Mappare le operazioni Telserv su Bird
Ogni tabella elenca un'operazione, la chiamata Telserv che la eseguiva e la chiamata Bird che la esegue ora. Le note sotto ogni tabella descrivono cosa cambia nella richiesta o nella risposta.
Acquisto
| Operazione | Telserv | Bird |
|---|---|---|
| Cerca numeri in vendita | GET /shop | GET /v1/numbers/available |
| Verifica un numero | GET /shop/{stockDnisId} | GET /v1/numbers/available/{number} |
| Acquista un numero | POST /shop/{stockDnisId} | POST /v1/numbers/orders |
| Riserva un numero | POST /shop/{stockDnisId}/reserve, GET /shop/reserved | POST /v1/numbers/orders |
- Ricerca.
country_codeè obbligatorio, quindi una ricerca copre un solo paese.prefixaccetta le cifre nazionali dopo il prefisso internazionale: ilprefix=3170di Telserv diventacountry_code=NL&prefix=70. Restringi per prefisso locale conprefixal posto dicity, e pernumber_typeecapabilitiesal posto diproductId. - Documentazione nei risultati di ricerca. Ogni risultato contiene
ownership_registration_requiredal posto del filtroexcludeNumbersRequireVerification. Un valoretrueindica che il numero è fatturato dall'acquisto, ma non invia SMS e non gestisce chiamate vocali in entrata o in uscita finché la documentazione non viene approvata. - Verifica di un singolo numero. Si indirizza tramite il suo numero E.164.
- Prezzi. Telserv restituiva
pricing.staticPricingnelle letture dettagliate di un numero e di un prodotto. In Bird, ogni risultato di ricerca contiene il prezzo per la tua organizzazione inpricing:setup_priceal posto dinrc, erecurring_priceperrecurring_periodal posto dimrc, conintervals_per_chargeper il numero di periodi coperti da un singolo addebito. Cerca e acquista un numero con il tuo riferimento descrive i campi del prezzo. - Acquisto. Invia
numbere unreferenceopzionale. L'ordine è pagato dal tuo wallet. La maggior parte degli ordini risponde201; un ordine in attesa di un operatore risponde202, e lo interroghi periodicamente. - Prenotazione. Ordinare il numero lo riserva. Verifica prima un candidato, poi ordinalo.
Numeri
| Operazione | Telserv | Bird |
|---|---|---|
| Elencare i numeri | GET /numbers | GET /v1/numbers |
| Leggere un numero | GET /numbers/{dnisId} | GET /v1/numbers/{number_id} con l'id nda_ o nal_ dell'allocazione, e GET /v1/voice/numbers/{number_id} con l'id vnu_ del record vocale |
| Modificare un numero | PATCH /numbers/{dnisId} | PATCH /v1/numbers/{number_id} con l'id nda_ o nal_ dell'allocazione, e PATCH /v1/voice/numbers/{number_id} con l'id vnu_ del record vocale |
| Rilasciare un numero | DELETE /numbers/{dnisId}?requestedCancelDate= | DELETE /v1/numbers/{number_id} alla fine del periodo pagato, oppure POST /v1/numbers/{number_id}/release subito, entrambi con l'id nda_ dell'allocazione |
- Lista. La lista contiene i numeri attualmente assegnati a te. Un numero rilasciato che hai ordinato in Bird resta visibile tramite il suo ordine in
GET /v1/numbers/orders. Riconcilia i tuoi numeri mappa i filtri. - Lettura. Stato, documentazione di titolarità e prezzo si trovano sull'allocazione, mentre l'instradamento è sul record vocale. L'oggetto
pricingdell'allocazione, conrecurring_priceperrecurring_periodeintervals_per_charge, sostituiscepricing.staticPricing.mrc, e anche la lista lo riporta, mentre ilGET /numbersdi Telserv non lo faceva. - Modifica.
nameereferencesono sull'allocazione, e l'instradamento è sul record vocale. Imposta un codec forzato e un limite alle chiamate simultanee sulla tua apparecchiatura SIP.destinationDistributionTypediventaprioritydel gateway sul trunk SIP:FailOverassegna a ogni gateway unprioritydiverso, eRoundRobinassegna loro lo stesso. - Rilascio.
DELETEmantiene il numero fino alla fine del periodo già pagato e lo rilascia a quel punto.POST …/releaselo rilascia immediatamente. Nessuna delle due accetta una data. Rilasciare un numero mostra entrambe le richieste.
Destinazioni e profili
| Operazione | Telserv | Bird |
|---|---|---|
| Inviare le chiamate all'apparecchiatura SIP | POST /numbers/{dnisId}/destinations | POST /v1/voice/trunks/{trunk_id}/gateways, poi instrada trunk |
| Inoltrare le chiamate a un telefono | POST /numbers/{dnisId}/destinations | Instrada forward |
| Smettere di ricevere chiamate | DELETE /numbers/{dnisId}/destinations | Instrada reject |
| Leggere i profili di destinazione | GET /destinationprofiles, GET /destinationprofiles/{id} | GET /v1/voice/trunks e GET /v1/voice/trunks/{trunk_id}/gateways |
| Applicare un profilo a un numero | POST /numbers/{dnisId}/destinations/profile | Instrada trunk con trunk_id |
- Apparecchiatura SIP. Un gateway appartiene al trunk e serve ogni numero instradato verso di esso, quindi numeri che richiedono liste di destinazione diverse necessitano di trunk diversi.
sortOrderdiventapriority. Applica tempo di squillo e finestre temporali sulla tua apparecchiatura SIP. - Inoltro. Imposta
forward_toeforward_as.forward_todeve essere uno dei tuoi numeri verificati; un numero non verificato risponde412conE21053.forward_assceglie quale numero la chiamata inoltrata mostra come chiamante. Un numero ha un solo instradamento alla volta, quindi per ripiegare dall'apparecchiatura SIP a un numero telefonico, inoltra la chiamata dalla tua apparecchiatura SIP. - Smettere di ricevere chiamate. Il numero rifiuta le chiamate finché non lo instradi di nuovo. Per mantenere un'impostazione predefinita fissa al posto di un profilo predefinito, instrada il numero verso un trunk che contiene i tuoi gateway predefiniti.
- Profili.
distributionTypediventapriority:FailOverassegna a ogni gateway unprioritydiverso, eRoundRobinassegna a tutti lo stesso. La distribuzione è impostata per trunk, quindi numeri che richiedono una distribuzione diversa richiedono trunk diversi. Il segnaposto{dnis}diventa{number}indestination_format, e unprefixCLIPdiventa il testo prima di{number}inorigination_format. - Applicare un profilo. Un trunk è indirizzato tramite il suo identificatore
spt_, mentre Telserv indirizzava un profilo per nome.
Documenti e dati dell'utente finale
| Operazione | Telserv | Bird |
|---|---|---|
| Leggere i requisiti | GET /products/conditions, GET /masterdata/productconditions | GET /v1/compliance/requirements per il numero, oppure con program e senza subject_id per il modulo che un paese richiede prima che tu possieda un numero |
| Caricare un documento | POST /numbers/{dnisId}/documents | POST /v1/compliance/attachments, poi cita l'allegato nell'invio. Vedi Inviare la documentazione di titolarità |
| Inviare i dati dell'utente finale | POST /numbers/{dnisId}/enduserdata | POST /v1/compliance/submissions, con i documenti, in un'unica richiesta. Vedi Invia la documentazione di titolarità |
| Sostituire un documento | Di nuovo POST /numbers/{dnisId}/documents | POST /v1/compliance/submissions/{submission_id}/resupply con le risposte rifiutate o scadute |
| Controllare lo stato della documentazione | GET /numbers/{dnisId}/documents | ownership su GET /v1/numbers/{number_id}, e l'invio per l'esito di ogni risposta |
- Requisiti. Il catalogo delle condizioni di Telserv copriva tutti i prodotti insieme; Bird legge un modulo alla volta. Richiedi i requisiti di un numero con
subject_kind=number, il suo identificatorenda_comesubject_ide il suocountry_code, oppure leggi un modulo prima dell'acquisto conprogramimpostato sul tipo di numero e senzasubject_id. Ogni voce infieldssostituisce una condizione Telserv o un'etichetta dell'utente finale: il suokeyè la chiave sotto cui rispondi, edata_typedocumentindica una voce che richiede un file. - Documenti. Carica il file come
multipart/form-dataal posto di unfileContentin base64; Carica ogni documento elenca i file accettati. Caricare due volte lo stesso file restituisce lo stesso allegato. Il solo caricamento non invia nulla: è l'invio che cita il suoattachment_ida farlo. - Dati dell'utente finale e documenti insieme. Telserv accettava ogni documento con una chiamata separata e i dati dell'utente finale come un unico elenco di etichette in un'altra chiamata. Bird accetta tutte le risposte, testuali e documenti, in un unico invio, e non esistono bozze: la richiesta invia le risposte per la revisione. Poi segui
ownership.next, che indica un nuovo inoltro per le correzioni e un nuovo invio solo quando serve (Invia tutte le risposte). - Sostituzioni. Invia solo le risposte che sostituisci; le altre mantengono la loro revisione. Telserv accettava un nuovo file per una condizione mentre il numero era in attesa di verifica, e il file azzerava la revisione di quella condizione; Bird sostituisce una risposta rifiutata, scaduta o non ancora fornita, e rifiuta una risposta ancora in revisione o già accettata, tranne una risposta contrassegnata con
editable_for_verifier_repairmentre è aperta una correzione richiesta da noi (Correggi una risposta rifiutata). - Avanzamento.
ownership.statuseownership.nextindicano a che punto è il numero. Ogni risposta ha il propriostate, e una risposta rifiutata riporta ilreasondel revisore. Bird invia inoltre ogni esito via email ai proprietari della tua organizzazione e alla persona che ha inviato o corretto l'invio per ultima.ownershipè di solitonullquando il numero non richiede documentazione.
Invia la documentazione di titolarità mostra le richieste, e Inviare la documentazione di titolarità di un numero descrive l'intero flusso, incluso l'invio dalla dashboard e insieme all'ordine.
Prodotti e dati anagrafici
| Operazione | Telserv | Bird |
|---|---|---|
| Sfogliare i prodotti | GET /products, GET /products/{productId} | GET /v1/numbers/available, che richiede country_code e restituisce i numeri in vendita in quel solo paese. Bird non ha un catalogo globale dei prodotti, e nulla corrisponde a productId. Nessuna API elenca i paesi e i tipi di numero in vendita; la pagina dei prezzi dei numeri telefonici elenca i prezzi standard di Bird per paese. |
Ogni risultato di ricerca descrive il proprio prodotto con number_type, capabilities e ownership_registration_required, e riporta il prezzo per la tua organizzazione al posto di pricing.staticPricing del prodotto (nrc e mrc). I prezzi standard di Bird sono nella pagina prezzi dei numeri telefonici. Il sessionPricing al minuto di Telserv non ha un equivalente in queste letture; le tariffe voce sono nella pagina prezzi voce.
I tipi di numero Telserv corrispondono a number_type di Bird in questo modo:
numberType Telserv | Bird number_type |
|---|---|
DID | local o national, a seconda del numero |
FreePhone | toll_free |
Mobile | mobile |
Cosa funziona diversamente
Queste operazioni Telserv funzionano diversamente in Bird. Pianificale prima di spostare un'integrazione che dipende da una di esse.
- Documentazione. Invia i documenti e i dati dell'utente finale di un numero in un'unica submission, senza bozze, e correggi le risposte rifiutate con il resupply.
- Prenotazioni. Ordina il numero quando lo hai scelto; l'ordine lo riserva.
- Impostazioni di chiamata per numero. Applica un codec forzato, un limite di chiamate simultanee, il tempo di squillo e le fasce orarie sulla tua apparecchiatura SIP.
- Una data di rilascio. Bird rilascia un numero alla fine del periodo pagato o immediatamente, non in una data a tua scelta. Conserva le date di cancellazione che hai inviato a Telserv dalla tua parte e agisci su ciascuna quando arriva a scadenza.
- Saldo del wallet. Controlla il saldo e ricarica nella dashboard.
Cerca e acquista un numero con il tuo riferimento
Cerca in un solo paese. Combina number_type, capabilities e prefix per restringere i risultati:
curl "$BIRD_API_URL/v1/numbers/available?country_code=NL&number_type=mobile&capabilities=voice&limit=10" \
--header "Authorization: Bearer $BIRD_API_KEY"Ogni risultato riporta un oggetto pricing con il prezzo che la tua organizzazione paga per il numero, al netto delle imposte e nella tua valuta di fatturazione, con eventuali prezzi concordati con Bird applicati:
setup_priceviene addebitato una sola volta quando ordini il numero. Un costo pubblicato pari a zero ha unamountdi"0". Il campo stesso ènullquando non si applica alcun costo di attivazione, e anche ogni volta cherecurring_priceènull, perché quel numero non può essere ordinato.recurring_priceè la tariffa perrecurring_period.intervals_per_chargeindica quantirecurring_periodcopre un singolo addebito. L'addebito ricorrente al netto delle imposte èrecurring_pricemoltiplicato perintervals_per_charge, prelevato quando il numero viene assegnato al tuo spazio di lavoro e a ogni rinnovo; il costo di attivazione è separato. Per un ordine in attesa di un operatore, l'assegnazione avviene quando l'ordine è completato.
Il riferimento API mostra un esempio di risultato. Un risultato con pricing.recurring_price: null non fornisce un prezzo ricorrente. Contatta il team commerciale per ottenere un prezzo per quel paese e tipo di numero prima di effettuare l'ordine.
La dashboard e API usano lo stesso prezzo dell'organizzazione, inclusa la conversione nella tua valuta di fatturazione. La lettura di un prezzo non blocca un preventivo: variazioni di tariffe o tassi di cambio prima di un addebito successivo possono modificarne l'importo. Se la ricerca del prezzo fallisce, la ricerca restituisce 503 con E14009. Riprova la lettura con backoff esponenziale; un errore nella ricerca del prezzo non significa mai che il numero non costa nulla.
Per confermare un candidato e il suo prezzo prima di ordinarlo, leggilo con GET /v1/numbers/available/{number}. Un 404 significa che non è più in vendita.
Ordina il numero con il riferimento che usavi in Telserv e scegli una chiave di idempotenza da conservare per ogni nuovo tentativo di questo acquisto:
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"}'Una risposta 201 contiene status: completed e un number_id, l'identificatore nda_ del numero. Conservalo come NUMBER_ID. Una risposta 202 significa che l'ordine è in attesa di un operatore: interroga l'ordine finché il suo status non è completed o failed. Un costo di attivazione già addebitato non viene rimborsato se l'ordine poi fallisce. Il riferimento viene impostato sul numero quando l'ordine è completato. Può contenere fino a 100 caratteri e non deve essere univoco.
Un nuovo tentativo di ordine per un numero già assegnato al tuo spazio di lavoro restituisce l'ordine esistente, quindi riprovare non comporta un doppio addebito. Acquistare e rilasciare un numero spiega i rifiuti.
Per impostare o modificare un riferimento in seguito, invia reference (e opzionalmente name) a PATCH /v1/numbers/{number_id}. Invia null per svuotare un campo.
Verificare che un numero possa gestire le chiamate
Un numero il cui status è pending_ownership_registration è assegnato e fatturato, ma non invia SMS e rifiuta le chiamate vocali in entrata e in uscita finché la documentazione di titolarità non viene approvata. Prima di instradare un numero o effettuare una chiamata di test verso di esso, leggilo con GET /v1/numbers/{number_id} e verifica che status sia active. Se è in attesa, invia la documentazione di titolarità. Lo stato di un numero assegnato spiega ciascun valore.
Gli esempi seguenti usano un numero mobile olandese. Controlla il status del tuo numero allo stesso modo, qualunque sia il suo paese.
Inviare la documentazione di titolarità
Telserv riceveva la documentazione di un numero con un POST /numbers/{dnisId}/documents per ogni documento e un POST /numbers/{dnisId}/enduserdata per tutte le etichette. Bird riceve entrambi in un'unica submission, dopo che hai caricato i documenti.
-
Leggi il
country_codedel numero e conservalo comeCOUNTRY_CODE. Il comando lo estrae conjq; se non usijq, leggilo manualmente:Esempio di codiceCOUNTRY_CODE=$(curl -s "$BIRD_API_URL/v1/numbers/$NUMBER_ID" \ --header "Authorization: Bearer $BIRD_API_KEY" | jq -r .country_code) -
Leggi cosa richiede il paese del numero. Ogni voce in
fieldsha ilkeycon cui rispondi, undata_typeerequired, che indica se la risposta è obbligatoria. Conserva ilprogramindicato dalla risposta comePROGRAM:Esempio di codicecurl "$BIRD_API_URL/v1/compliance/requirements?subject_kind=number&subject_id=$NUMBER_ID&country_code=$COUNTRY_CODE" \ --header "Authorization: Bearer $BIRD_API_KEY"Un
422conE19001significa che per quel paese non esiste un modulo di titolarità. -
Carica ogni documento richiesto da un campo
documentcome file, al posto difileContentin base64. Conserva iliddella risposta, l'identificatoretca_dell'allegato, comeATTACHMENT_ID:Esempio di codicecurl --request POST "$BIRD_API_URL/v1/compliance/attachments" \ --header "Authorization: Bearer $BIRD_API_KEY" \ --form "file=@registration-certificate.pdf" -
Invia tutte le risposte insieme: una voce per ogni campo il cui
requiredètruee per ogni campo opzionale per cui hai una risposta reale, con i dati dell'utente finale comevaluee ogni documento comeattachment_id. Ometti un campo opzionale invece di inventarne il valore. L'esempio mostra due risposte; aggiungi le altre obbligatorie prima dell'invio. Questa richiesta sottopone le risposte a revisione. Conserva iliddella risposta, l'identificatorecsb_della submission, comeSUBMISSION_ID:Esempio di codicecurl --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"'"}]}'Una risposta
201restituisce la submission. Un422non invia nulla: correggi il body e invialo con una nuova chiave di idempotenza, perché la chiave riproduce il rifiuto. Invia tutte le risposte spiega ogni rifiuto. -
Quando un revisore rifiuta una risposta, sostituisci solo quella, come descritto in Correggi una risposta rifiutata:
Esempio di codicecurl --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"}]}'
Per inviare la documentazione durante l'acquisto, invia lo stesso answers nel blocco compliance di POST /v1/numbers/orders. Quell'ordine usa lo scope numbers esistente a livello di scrittura, anche quando include la documentazione.
Segui la revisione con ownership.status su GET /v1/numbers/{number_id}. Le risposte sono una dichiarazione legale resa a nome della tua azienda, quindi invia solo risposte confermate da una persona che ne è responsabile. Inviare la documentazione di titolarità di un numero descrive ogni richiesta, la revisione e l'invio insieme all'ordine.
Instradare un numero verso il tuo trunk SIP
Un nuovo numero non ha un instradamento proprio, quindi segue l'instradamento predefinito del tuo spazio di lavoro. Quell'instradamento parte come reject, ma uno spazio di lavoro che ne ha già impostato uno risponde alle chiamate del nuovo numero secondo quell'instradamento non appena il numero viene allocato. Per consegnare le sue chiamate alla tua apparecchiatura, crea un trunk SIP con le chiamate in entrata attive, assegnagli un gateway e punta il numero verso il trunk. Trunk SIP spiega come collegare la tua apparecchiatura al trunk.
-
Crea il trunk con le chiamate in entrata attive. Conserva
iddalla risposta, l'identificatorespt_del trunk, comeTRUNK_ID:Esempio di codicecurl --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}' -
Aggiungi un gateway. Per impostazione predefinita il gateway riceve i numeri chiamato e chiamante in E.164 con il relativo
+. Se la tua apparecchiatura si aspetta numeri senza+, come faceva il segnaposto{dnis}di Telserv, impostadestination_formatper il numero chiamato eorigination_formatper il numero chiamante a{number}:Esempio di codicecurl --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}"}'Per il failover, aggiungi un secondo gateway; Cosa serve a un gateway spiega
prioritye i formati dei numeri. Creare di nuovo lo stesso gateway senza una chiave di idempotenza restituisce409conE21047. -
Trova il record vocale del numero. Cerca con le cifre del numero e prendi
iddella voce il cuiprovider.number_idcorrisponde aliddell'allocazione. Conservalo comeVOICE_NUMBER_ID:Esempio di codicecurl "$BIRD_API_URL/v1/voice/numbers?search=31612345678" \ --header "Authorization: Bearer $BIRD_API_KEY" -
Indirizza il numero al trunk:
Esempio di codicecurl --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"'"}}}'Una risposta
200mostra il nuovo instradamento. Un trunk con le chiamate in entrata disattivate risponde412conE21052.
Disattivare le chiamate in entrata su un trunk, o eliminare il trunk, riporta ogni numero instradato su di esso all'instradamento predefinito del tuo spazio di lavoro, e riattivare le chiamate in entrata non ripristina quegli instradamenti. Consegnare le chiamate a un trunk SIP spiega questo e gli instradamenti trunk, forward e reject.
Riconciliare i tuoi numeri
Scorri la lista con la dimensione di pagina massima. Passa next_cursor di ogni pagina come NEXT_CURSOR per leggere la pagina successiva, finché next_cursor non è null. La lista non restituisce un conteggio totale.
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"I filtri della lista di Telserv corrispondono a quelli di Bird in questo modo:
Filtro Telserv su GET /numbers | Filtro Bird su GET /v1/numbers |
|---|---|
number, che corrisponde all'inizio del numero | prefix senza country_code, che corrisponde alle cifre dall'inizio del numero completo |
prefix, che corrisponde al prefisso di accesso e di area come 3170 | country_code con prefix impostato sulle cifre nazionali: country_code=NL&prefix=70 |
reference con un valore parziale | search, che corrisponde a parte del numero, del nome o del riferimento, senza distinzione tra maiuscole e minuscole |
reference con un valore esatto tra virgolette | reference, che restituisce i numeri con quel riferimento esatto. La corrispondenza distingue tra maiuscole e minuscole |
| Novità in Bird | number restituisce un numero intero fornito con il suo prefisso internazionale, con o senza + o 00: +31612345678, 31612345678 e 0031612345678 trovano lo stesso numero |
Trova un numero nella tua lista descrive ogni filtro in dettaglio.
Ogni voce riporta pricing, con recurring_price per recurring_period e intervals_per_charge. Se il prezzo non è fisso per il numero, recurring_price è la tariffa corrente della tua organizzazione, e ogni rinnovo addebita la tariffa in vigore al momento del rinnovo, quindi un addebito già fatturato può differire. Elenca tutti i numeri che possiedi spiega in quale valuta viene addebitato ogni numero, quando pricing o i suoi prezzi sono null e cosa fare quando pricing.error è impostato.
Un numero rilasciato esce da questa lista, e leggerlo tramite number_id restituisce 404. Se lo hai ordinato in Bird, il suo ordine completato resta in GET /v1/numbers/orders.
Rilasciare un numero
Entrambe le richieste si applicano a un numero dedicato, tramite il suo identificatore nda_; un numero condiviso viene rifiutato con E14002. Per mantenere il numero fino alla fine del periodo già pagato, cancellalo:
curl --request DELETE "$BIRD_API_URL/v1/numbers/$NUMBER_ID" \
--header "Authorization: Bearer $BIRD_API_KEY" \
--header "Idempotency-Key: cancel-CUST-778812"Una risposta 202 restituisce il numero con releases_at, la fine del periodo pagato. Il numero mantiene il suo stato attuale fino a quel momento, l'abbonamento non si rinnova e il numero viene rilasciato a quella scadenza. Ripetere la richiesta restituisce lo stesso releases_at, e una cancellazione non può essere annullata. Un numero senza abbonamento viene rilasciato immediatamente, e la risposta è 200 con il status del numero impostato su released.
Per rilasciare il numero subito, anche se è già programmato per la cancellazione:
curl --request POST "$BIRD_API_URL/v1/numbers/$NUMBER_ID/release" \
--header "Authorization: Bearer $BIRD_API_KEY" \
--header "Idempotency-Key: release-CUST-778812"Una risposta 204 significa che il numero è rilasciato, con effetto immediato. Il resto del periodo in corso non viene rimborsato.
Finché un pagamento di rinnovo per il numero è in arretrato, entrambe le richieste rispondono 409 con E03015 fino al saldo.
Nessuna delle due richieste accetta una data, quindi mantieni la pianificazione che hai inviato a Telserv come requestedCancelDate dal tuo lato. Per mantenere un numero fino alla sua data, cancellalo quando la data rientra nel periodo di fatturazione corrente: viene rilasciato alla fine di quel periodo, alla data o dopo. Per cederlo esattamente alla data, rilascialo quel giorno. Rilasciare un numero spiega cosa fa ciascuna richiesta al numero, ai suoi addebiti e a un nuovo tentativo.
Effettuare una chiamata di test al tuo numero
Per verificare un instradamento da un capo all'altro, effettua una chiamata al numero da un altro numero che il tuo spazio di lavoro può presentare come caller ID. Il paese del numero deve essere abilitato nelle tue destinazioni vocali, altrimenti la chiamata non viene completata. La richiesta qui sotto esegue una sequenza inline che riaggancia quando la chiamata riceve risposta, quindi non serve una sequenza salvata. Effettua una chiamata reale e si applicano le normali tariffe di chiamata.
Salva la richiesta come test-call.json. Inserisci il caller ID che presenti in from, un numero verificato o di proprietà del tuo spazio di lavoro, e il numero sotto 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": {}
}
}Inviala:
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.jsonImposta TEST_CALL_KEY su un valore nuovo per ogni test e riutilizzalo quando riprovi lo stesso test dopo un timeout o un risultato incerto: la stessa chiave e la stessa richiesta entro tre ore riproducono la prima accettazione invece di effettuare una seconda chiamata. Una risposta 202 accetta la chiamata e restituisce il suo initial_leg_id. L'accettazione non dimostra che la chiamata sia stata connessa: leggi il leg con GET /v1/voice/legs/{leg_id}, oppure elenca i leg effettuati verso il numero con GET /v1/voice/legs e il suo filtro to, e verifica che la tua apparecchiatura abbia ricevuto la chiamata. Creare una chiamata vocale illustra i requisiti di caller ID e destinazione e le regole per riprovare.
Passi successivi
Risorse correlate
Continua con la documentazione, le guide e gli esempi per questo argomento.