> ## Documentation Index
> Fetch the complete documentation index at: https://docs.thunderphone.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Foretag udgående opkald (API)

> Udløs et AI-drevet udgående opkald fra din egen kode — spørgeskemaer, opfølgning eller bekræftelsesflows.

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

* Aftalebekræftelser
* Opfølgende opkald til undersøgelser
* "Andet forsøg"-opfølgninger efter et ubesvaret opkald
* Notifikationer i dispatch-stil

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

## Forudsætninger

<Steps>
  <Step title="Tilføj et VoIP-nummer">
    Udgående opkald kræver, at du ejer `from_number` via en
    [VoIP-forbindelse](/api-reference/voip-connections). Demo-numre
    er kun til indgående opkald. Se
    [Medbring 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="Hold en positiv saldo">
    Udgående opkald returnerer `402 Payment Required`, hvis saldoen er ≤
    `$0.00`. Fyld saldoen op via
    [`POST /v1/billing/top-up`](/api-reference/billing#top-up-balance)
    eller aktiver [automatisk genopfyldning](/api-reference/billing#update-auto-reload).
  </Step>
</Steps>

## Foretag et opkald med en gemt agent

Den enkleste metode — referer til en agent via id:

```bash theme={null}
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":   "+14155550199",
    "agent_id":    12
  }'
```

Svar:

```json theme={null}
{ "call_id": 987654321, "status": "initiated" }
```

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

## Foretag et opkald med indlejret konfiguration

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

```bash theme={null}
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":   "+14155550199",
    "config": {
      "prompt":  "You are confirming Jane Doe appointment for 3pm tomorrow…",
      "voice":   "john",
      "product": "spark"
    }
  }'
```

## Følg opkaldet

Abonner parallelt på
[`telephony.complete` webhook](/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 optagelsens
URL, når opkaldet afsluttes.

## Fejltilstande, der er værd at håndtere

| Fejl                                                     | Løsning                                                                                                    |
| -------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| `402 Payment Required`                                   | Fyld saldoen op, eller aktiver automatisk genopfyldning                                                    |
| `403` udgående opkald blokeret (demo-nummer)             | Tilføj et VoIP-nummer i stedet                                                                             |
| `403` udgående opkald blokeret (ubekræftet VoIP)         | Kør [`POST /v1/phone-numbers/{id}/verify-voip`](/api-reference/phone-numbers#verify-a-voip-sourced-number) |
| `404 from_number is not registered to this organization` | Bekræft, at `from_number` matcher et telefonnummer, du ejer                                                |
| `502 Bad Gateway`                                        | Midlertidig SIP- / LiveKit-fejl; det er sikkert at prøve igen                                              |

## Styring af ventetid

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

```json theme={null}
{
  "from_number": "+15551234567",
  "to_number":   "+14155550199",
  "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 (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 optankning, så udgående opkald aldrig fejler på grund af saldoen.
  </Card>

  <Card title="Test udgående agenter" icon="flask" href="/da/guides/test-agents">
    Kør en prøvekørsel af din udgående agent før produktion.
  </Card>
</CardGroup>
