---
title: "Brug dine egne numre (VoIP, API)"
description: "Forbind Twilio eller Telnyx, eller SignalWire, Vonage, Plivo og enhver anden SIP-trunk via SIP, importér de telefonnumre, du allerede ejer, og lad ThunderPhone-agenter besvare og foretage opkald på dem."
---

Godkendte ThunderPhone-numre kan foretage udgående opkald og køre kampagner. Hvis
du foretrækker at bruge numre, du ejer, via din egen VoIP-udbyder, guider denne vejledning
dig gennem forbindelsesforløbet: **test legitimationsoplysninger → opret forbindelse
→ importér numre → bekræft**.

<Note>
  Dashboardet har en guidet version af hele dette flow under
  **Forbindelser → VoIP** (`/dashboard/voip-connections`): først en sti til
  at forbinde eksisterende numre (Twilio og Telnyx med API-nøgle; SignalWire,
  Vonage, Plivo og enhver anden trunk via den manuelle SIP-formular med
  udbyderspecifikke trin og en AI-generator til opsætningsvejledninger), og
  derefter en guidet opsætning, der åbner en ny Telnyx-konto.
</Note>

## Understøttede udbydere

| Udbyder | `provider`-id | Bemærkninger |
|----------|---------------|-------|
| Twilio | `twilio` | Konto-SID + Auth Token; én forbindelse pr. Twilio-konto eller underkonto (se [Twilio-underkonti](#twilio-subaccounts)) |
| Telnyx | `telnyx` | API-nøgle; guidet onboarding er tilgængelig (`setup_method: guided_telnyx`) |
| SignalWire | `signalwire` | Ingen indbygget udbyderforbindelse; forbind den som `manual` med SignalWire SIP-forudindstillingen |
| Vonage | `vonage` | Ingen indbygget udbyderforbindelse; forbind den som `manual` med Vonage SIP-forudindstillingen |
| Manuel SIP | `manual` | Enhver SIP-trunk, herunder SignalWire, Vonage og Plivo. Hvis du starter fra en af disse udbyderfelter i dashboardet, er forbindelsen stadig `manual` og gemmer valget i `sip_config.preset` (`signalwire`, `vonage` eller `plivo`) |

## 1. Test legitimationsoplysninger

Før du opretter en vedvarende VoIP-forbindelse, skal du teste udbyderens
legitimationsoplysninger for at bekræfte, at de virker. Dette returnerer et
`verification_evidence_id`, som du sender videre til oprettelsestrinnet, så
legitimationsoplysningerne ikke bliver opkrævet dobbelt for test.

```bash
curl -X POST https://api.thunderphone.com/v1/voip-connections/test \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "provider":    "telnyx",
    "credentials": { "apiKey": "KEY...", "connectionId": "123456" },
    "sip_config":  { "domain": "acme.sip.telnyx.com" }
  }'
```

```json Response
{
  "status": "pass",
  "verification_evidence_id": "b9a2...",
  "suggested_connection_name": "Telnyx: Acme Main (+15550001234)",
  "checks": {
    "credentials_valid": true,
    "inbound_reachable": true,
    "outbound_authorized": true
  }
}
```

Hvis en kontrol fejler, vil responsens `status` være `fail`, og `checks` vil
vise, hvilket trin der fejlede. Ret konfigurationen hos udbyderen
(trunk-tildeling, IP-tilladelsesliste, autorisation til udgående opkald), og prøv igen.

## 2. Opret forbindelsen

Send det `verification_evidence_id`, du lige har fået:

```bash
curl -X POST https://api.thunderphone.com/v1/voip-connections \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name":         "Acme Telnyx Main",
    "provider":     "telnyx",
    "setup_method": "api_key",
    "credentials":  { "apiKey": "KEY...", "connectionId": "123456" },
    "sip_config":   { "domain": "acme.sip.telnyx.com" },
    "verification_evidence_id": "b9a2..."
  }'
```

Svaret er et [VoipConnection-objekt](/api-reference/voip-connections#connection-object)
med `status="connected"`. Legitimationsoplysninger og andre hemmelige forbindelsesværdier gemmes på serveren og returneres aldrig
i klartekst af efterfølgende GET-anmodninger — for at rotere dem skal du køre en ny
`test` og PATCH med det nye bevis.

### Twilio-underkonti

En Twilio-forbindelse er knyttet til den enkelte Twilio-konto, hvis
Account SID og Auth Token den indeholder. Twilio opbevarer telefonnumre og SIP-
trunks i hver underkonto, så en forbindelse oprettet med
hovedkontoen kun kan se hovedkontoens egne numre, og en eksisterende
forbindelse kan ikke senere skiftes til en anden underkonto.

For at få adgang til numre i underkonti skal du oprette én forbindelse pr.
underkonto. Dashboardet gør dette for dig: Når du forbinder en hovedkonto med
aktive underkonti, viser opsætningsdialogen dem, du markerer dem, du vil bruge,
og ThunderPhone opretter en forbindelse (og en SIP-trunk) i hver af dem. Det
samme flow er tilgængeligt via API'et:

```bash
# Discover active subaccounts visible to the parent credentials
curl -X POST https://api.thunderphone.com/v1/voip-connections/twilio/subaccounts \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"credentials": {"accountSid": "ACparent...", "authToken": "..."}}'
```

```json Response
{
  "discovery_id": "7c1e...",
  "parent": { "sid": "ACparent...", "friendly_name": "Acme" },
  "subaccounts": [
    { "sid": "ACsupport...", "friendly_name": "Acme Support", "already_connected": false, "connection_id": null },
    { "sid": "ACsales...",   "friendly_name": "Acme Sales",   "already_connected": true,  "connection_id": 5 }
  ]
}
```

```bash
# Create a connection for each selected subaccount
curl -X POST https://api.thunderphone.com/v1/voip-connections/twilio/subaccounts/connect \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"discovery_id": "7c1e...", "subaccount_sids": ["ACsupport..."]}'
```

Svaret indeholder én række pr. underkonto med `status` som
`created`, `skipped` (allerede forbundet) eller `failed` samt en `error`,
du kan handle på. Rækkerne er uafhængige, så en fejl i én underkonto
blokerer aldrig de andre, og et `discovery_id` forbliver gyldigt i 30
minutter, så en mislykket række blot kan prøves igen. Underkontotokens
læses fra Twilio på registreringstidspunktet og gemmes på den nye forbindelse;
de returneres aldrig af API'et. Hver ny forbindelse importerer og
verificerer derefter numre på samme måde som en forbindelse, du har oprettet manuelt.
Tilføj `"enable_transfers": true` for også at aktivere opkaldsoverførsler på hver
ny forbindelses SIP-trunk; en fejl dér rapporteres i den pågældende
forbindelses `test_result.transfer_enable_error` og får ikke rækken til at fejle.

## 3. Vis og importér numre

Se de numre, der er synlige med dine legitimationsoplysninger, og som ikke allerede
findes i en ThunderPhone-organisation:

```bash
curl https://api.thunderphone.com/v1/voip-connections/5/available-numbers \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"
```

Importér derefter dem, du vil bruge:

```bash
curl -X POST https://api.thunderphone.com/v1/voip-connections/5/import-numbers \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"numbers": ["+15550001234", "+15550009999"]}'
```

Hver import bliver til en [telefonnummerressource](/api-reference/phone-numbers)
i din organisation med `number_type="voip"` og `status="provisioning"`.

## 4. Bekræft hvert importeret nummer

Import registrerer nummeret som *tilgængeligt*; faktisk viderestilling af opkald
gennem det kræver verificering. For udbyderforbindelser (Twilio,
Telnyx) kontrollerer det igen udbyderens legitimationsoplysninger og SIP-tilgængelighed.
For en **manuel SIP**-forbindelse forsøger det først et loopback-selvopkald:
ThunderPhone foretager et kort testopkald *fra* nummeret, *gennem* din SIP-
trunk, *tilbage til det samme nummer*. Hvis det ikke verificerer den indgående rute, går det
videre til et kort testopkald *fra* nummeret, *gennem* din SIP-trunk,
*til* et ThunderPhone-nummer. Disse tests kontrollerer trunkens brugernavn,
adgangskode, transport, udgående routing og indgående levering. Din operatør
fakturerer disse opkald som alle andre.

```bash
curl -X POST https://api.thunderphone.com/v1/phone-numbers/{id}/verify-voip \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"
```

Ved succes skifter `voip_verification_status` til `verified`, og
nummeret får `status="active"`. Et nummer på din egen Telnyx-konto
fortsætter med at modtage indgående opkald, hvis testopkaldet fejler,
eller hvis udgående opkald endnu ikke er konfigureret: det får
`status="active"` med `voip_verification_status` sat til `unverified`,
og svaret angiver hvorfor. Ved fejl beskriver svaret
hvad der fejlede — for en manuel trunk er det udbyderens SIP-svar, for
eksempel *"afviste ThunderPhones legitimationsoplysninger (SIP 401)"* eller *"kunne
ikke route et opkald (SIP 404)"* — ret det (legitimationsoplysninger,
tilladte kilde-IP'er, en manglende trunk-tildeling i udbyderens dashboard),
og prøv igen.

For en manuel SIP-forbindelse med tilladelsesliste fejler testen af indgående opkald også, hvis
disse tilladte kilde-IP-adresser ville blokere et reelt indgående opkald.

## 5. Tildel agenter og modtag et opkald

Når nummeret er bekræftet, tildeler du agenter til indgående / udgående
opkald på samme måde som for et ThunderPhone-nummer. Se
[Håndter indgående opkald](/da/guides/handle-inbound-calls) og
[Foretag udgående opkald](/da/guides/place-outbound-calls).

## Roterende legitimationsoplysninger

Når en udbydernøgle roterer, skal du køre test-og-opdater-flowet igen:

```bash
# 1. Test the new credentials
curl -X POST https://api.thunderphone.com/v1/voip-connections/test ...

# 2. PATCH the connection with the new evidence
curl -X PATCH https://api.thunderphone.com/v1/voip-connections/{id} \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "credentials": { "apiKey": "NEW_KEY..." },
    "verification_evidence_id": "fresh-evidence-id"
  }'
```

Forbindelsen forbliver på plads — du behøver ikke importere numre igen.

---

## Næste trin

<CardGroup cols={2}>
  <Card title="Reference for VoIP-forbindelser" icon="phone-volume" href="/api-reference/voip-connections">
    Alle felter i svarene for forbindelse, bevis og import.
  </Card>
  <Card title="Reference for telefonnumre" icon="phone" href="/api-reference/phone-numbers">
    Tildel agenter, overfør mellem organisationer, frigiv numre.
  </Card>
  <Card title="Foretag udgående opkald" icon="arrow-up-right" href="/da/guides/place-outbound-calls">
    Nu hvor du ejer nummeret, kan du begynde at foretage udgående opkald.
  </Card>
</CardGroup>
