---
title: "Foretag udgående opkald (API)"
description: "Udløs et AI-drevet udgående opkald fra din egen kode — spørgeskema-, opfølgnings- eller bekræftelsesforløb."
---

Udgående opkald lader dig give et destinationsnummer og en agentkonfiguration
til ThunderPhone og få AI'en til at foretage opkaldet på dine
vegne. Typiske anvendelser:

- Bekræftelser af aftaler
- Opfølgende opkald til spørgeundersøgelser
- Opfølgninger ved "andet forsøg" efter et ubesvaret opkald
- Notifikationer i dispatch-stil

<Note>
  Ringer du til en hel liste? Dashboardets
  [**Kampagner**](/da/guides/outbound-campaigns)-funktion
  (`/dashboard/campaigns`) tager en CSV med kontakter og håndterer
  opkaldsvinduer med tidszonehensyn, samtidighed og genforsøgspolitik
  for dig. Denne guide dækker enkelte programmatiske opkald.
</Note>

## Forudsætninger

<Steps>
  <Step title="Vælg et nummer, der er aktiveret til udgående opkald">
    Brug et nummer, du ejer, via en
    [VoIP-forbindelse](/api-reference/voip-connections), eller anmod om tilladelse
    til at bruge dine ThunderPhone-numre til udgående opkald fra siden Phone Numbers.
    ThunderPhone-numre starter kun med indgående opkald. ThunderPhone gennemgår hver
    anmodning manuelt; når den er godkendt, kan disse numre foretage opkald op til
    den godkendte daglige grænse (nulstilles kl. 00:00 UTC) og køre kampagner, og du
    kan bede om en højere grænse. Kunders VoIP-numre har ingen daglig grænse, så vi anbefaler
    dem til udgående opkald. Se
    [Brug dine egne numre](/da/guides/bring-your-own-numbers).
  </Step>
  <Step title="Opret en agent">
    En prompt til udgående opkald starter typisk med, at agenten
    identificerer sig selv og sit formål — "Hej, det er Acme, der ringer for at
    bekræfte din aftale i morgen kl. 15…" Angiv
    `outbound_speak_order` til `agent_first` (standardindstillingen).
  </Step>
  <Step title="Behold en positiv saldo">
    Udgående opkald returnerer `402 Payment Required`, hvis saldoen er ≤
    `$0.00`. Indsæt penge eller aktivér automatisk genopfyldning under
    **Organisation → Faktureringsindstillinger** i dashboardet. Din `sk_live_`
    nøgle kan kontrollere saldoen med
    [`GET /v1/billing`](/api-reference/billing#get-billing-account), men
    kan ikke indsætte penge eller ændre automatisk genopfyldning.
  </Step>
</Steps>

## Foretag et opkald med en gemt agent

Den enkleste metode — referer til en agent via id:

```bash
curl -X POST https://api.thunderphone.com/v1/call \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from_number": "+15551234567",
    "to_number":   "+14155552671",
    "agent_id":    12
  }'
```

Svar:

```json
{ "call_id": 987654321, "status": "initiated" }
```

<Warning>
  `status: "initiated"` betyder kun, at anmodningen blev accepteret — opkaldet
  er **endnu ikke forbundet**. Forespørg
  [`GET /v1/calls/{call_id}`](/api-reference/calls#retrieve-a-call)
  for den aktuelle status (`in_progress` → `completed` / `failed`).
</Warning>

## Foretag et opkald med inline-konfiguration

Hvis du vil bruge en engangsprompt, som ikke er værd at gemme som en agent,
skal du sende `config` i stedet. Strukturen matcher svarskemaet for
[`call.incoming` webhook](/da/webhooks/call-incoming):

```bash
curl -X POST https://api.thunderphone.com/v1/call \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from_number": "+15551234567",
    "to_number":   "+14155552671",
    "config": {
      "prompt":  "You are confirming Jane Doe appointment for 3pm tomorrow…",
      "voice":   "john",
      "product": "spark"
    }
  }'
```

## Følg opkaldet

Abonner parallelt på
[`telephony.complete`-webhooken](/da/webhooks/events) —
den hurtigste måde at vide, at et opkald er afsluttet. Hvis du ikke kan modtage
indgående webhooks, skal du forespørge `GET /v1/calls/{call_id}` hvert par sekunder;
posten indeholder `end_reason`, `duration_seconds` og optagelses-URL'en,
når opkaldet afsluttes.

Hvis din agent er konfigureret til at udtrække strukturerede data efter opkaldet,
leveres disse data separat, når færdiggørelsen er fuldført.

### Send variabler pr. opkald til en gemt agent

Gemte agenter kan bruge pladsholdere som `{{name}}` eller `{{name|there}}` i
prompttekst. Når du foretager et udgående opkald med `agent_id`, skal du sende
`variables` med værdierne for det pågældende opkald:

```json
{
  "from_number": "+[REDACTED_PHONE]",
  "to_number": "+[REDACTED_PHONE]",
  "agent_id": 12,
  "variables": {
    "name": "Jordan"
  }
}
```

Brug strengværdier med pladsholdernavnet som nøgle. Disse variabler gælder for
gemte agenter; denne vejlednings indbyggede `config`-eksempel bruger dem ikke.

## Fejltilstande, du bør håndtere

| Fejl | Løsning |
|-------|-----|
| `402 Payment Required` | Indsæt saldo, eller aktivér automatisk genopfyldning |
| `400` med `code: destination_not_allowed` | ThunderPhone ringer ikke til det nummer: ugyldige numre, alarmnumre, overtakserede numre, kortnumre eller sanktionerede lande. Fra ThunderPhone-numre er kun almindelige amerikanske og canadiske numre tilladt (ingen overtakserede numre). `reason` angiver hvilket; se [blokerede destinationer](/api-reference/outbound-calls#blocked-destinations) |
| `409` med `retryable: false` for et ThunderPhone-nummer | Følg `code`: anmod om udgående opkald på siden Phone Numbers, vent på en afventende gennemgang, eller brug et andet kvalificeret nummer |
| `429` med `code: platform_outbound_daily_limit_reached` | Organisationen har brugt dagens udgående opkald fra ThunderPhone-numre. Vent på `resets_at` (00:00 UTC), anmod om en højere grænse på siden Phone Numbers, eller ring fra et nummer på din egen VoIP-forbindelse |
| `429` med `code: concurrent_call_limit_reached` | Organisationen har så mange igangværende opkald som dens [grænse for samtidige opkald](/api-reference/introduction#call-limits) (20 som standard, inklusive indgående, udgående, web- og testopkald). Prøv igen efter antallet af sekunder i `Retry-After`-headeren eller når et opkald afsluttes; send en e-mail til support@thunderphone.com for at hæve grænsen |
| `429` med `code: same_number_too_soon` | Du ringede til det samme `to_number` for mindre end 10 sekunder siden. Prøv igen efter antallet af sekunder i `Retry-After`-headeren |
| `409` med `retryable: false` for et kunde-VoIP-nummer | Ret den tilstand, der angives af `code`; ved verificeringsfejl skal du køre [`POST /v1/phone-numbers/{id}/verify-voip`](/api-reference/phone-numbers#verify-a-voip-sourced-number) |
| `409` idempotenskonflikt | Genbrug kun nøglen med den oprindelige normaliserede anmodning, eller send en ny nøgle |
| `404 from_number is not registered to this organization` | Bekræft, at `from_number` matcher et aktivt telefonnummer i din organisation. Et nummer, der allerede er under klargøring, har fejlet, frigives eller er frigivet, returnerer også dette svar |
| `500` med kun et `detail`-felt | Ingen udgående trunk er konfigureret. Kontakt support; dette er ikke et problem med nummerets tilstand, som du kan rette |
| `502 Bad Gateway` | Midlertidig SIP-/LiveKit-fejl; det er sikkert at prøve igen |

Se [referencen for udgående opkald](/api-reference/outbound-calls#error-responses)
for den komplette liste over stabile kvalifikationskoder og begge `409`-svarformater.
Hvis et aktivt nummer bliver ukvalificeret, efter anmodningen er accepteret, men før
opkaldet foretages, returnerer den endelige kontrol `409`-payloaden, der ikke kan prøves igen.

## Styring af ventetid

Udgående opkald, der varer længe, fordi modtageren er langsom til at svare
(IVR-træer, køer), kan begrænses med `max_hold_seconds`:

```json
{
  "from_number": "+15551234567",
  "to_number":   "+14155552671",
  "agent_id":    12,
  "max_hold_seconds": 120
}
```

Agenten lægger på, hvis der ikke er modtaget menneskelig lyd i de seneste
N sekunder. Standardværdien er 900 sekunder (15 minutter).

---

## Næste trin

<CardGroup cols={2}>
  <Card title="Reference for udgående opkald" icon="phone-arrow-up-right" href="/api-reference/outbound-calls">
    Alle anmodningsfelter og fejlkoder.
  </Card>
  <Card title="Modtag call.complete" icon="bolt" href="/da/webhooks/call-complete">
    Stream afsluttede udgående opkald til dit system.
  </Card>
  <Card title="Fakturering" icon="credit-card" href="/api-reference/billing">
    Automatisk genopfyldning, så udgående opkald aldrig fejler på grund af saldoen.
  </Card>
  <Card title="Test udgående agenter" icon="flask" href="/da/guides/test-agents">
    Testkør din udgående agent før produktion.
  </Card>
</CardGroup>
