---
title: "अपने नंबर लाएँ (VoIP, API)"
description: "Twilio, Telnyx, SignalWire, Vonage, Plivo और किसी भी अन्य SIP ट्रंक को SIP के ज़रिए कनेक्ट करें, अपने मौजूदा फ़ोन नंबर इंपोर्ट करें, और ThunderPhone एजेंट्स को उन पर कॉल रिसीव करने और करने दें।"
---

अनुमोदित ThunderPhone नंबर आउटबाउंड कॉल कर सकते हैं और कैंपेन चला सकते हैं। यदि
आप अपने VoIP प्रदाता के माध्यम से अपने नंबर इस्तेमाल करना पसंद करते हैं, तो यह गाइड
आपको कनेक्शन फ़्लो से परिचित कराती है: **क्रेडेंशियल्स टेस्ट करें → कनेक्शन बनाएं
→ नंबर इंपोर्ट करें → सत्यापित करें**।

<Note>
  डैशबोर्ड में इस पूरे फ़्लो का एक गाइडेड वर्ज़न **कनेक्शंस → VoIP** (`/dashboard/voip-connections`) के अंतर्गत उपलब्ध है: पहले मौजूदा कनेक्शन का पाथ (API key के ज़रिए Twilio और Telnyx; मैन्युअल SIP फ़ॉर्म के ज़रिए SignalWire, Vonage, Plivo और कोई भी अन्य ट्रंक, जिसमें प्रोवाइडर-विशिष्ट स्टेप्स और AI सेटअप-गाइड जनरेटर शामिल है), और दूसरा गाइडेड सेटअप जो एक नया Telnyx अकाउंट खोलता है।
</Note>

## समर्थित प्रदाता

| प्रदाता | `provider` आईडी | नोट्स |
|----------|---------------|-------|
| Twilio | `twilio` | अकाउंट SID + Auth Token; प्रत्येक Twilio अकाउंट या सबअकाउंट के लिए एक कनेक्शन ([Twilio सबअकाउंट्स](#twilio-subaccounts) देखें) |
| Telnyx | `telnyx` | API key; गाइडेड ऑनबोर्डिंग उपलब्ध है (`setup_method: guided_telnyx`) |
| SignalWire | `signalwire` | कोई नेटिव प्रदाता कनेक्शन नहीं; इसे SignalWire SIP प्रीसेट के साथ `manual` के रूप में कनेक्ट करें |
| Vonage | `vonage` | कोई नेटिव प्रदाता कनेक्शन नहीं; इसे Vonage SIP प्रीसेट के साथ `manual` के रूप में कनेक्ट करें |
| मैनुअल SIP | `manual` | SignalWire, Vonage और Plivo सहित कोई भी SIP ट्रंक। यदि आप डैशबोर्ड में इनमें से किसी प्रदाता टाइल से शुरू करते हैं, तो कनेक्शन फिर भी `manual` रहता है और चयन को `sip_config.preset` में स्टोर करता है (`signalwire`, `vonage` या `plivo`) |

## 1. क्रेडेंशियल्स टेस्ट करें

स्थायी VoIP कनेक्शन बनाने से पहले, प्रदाता के
क्रेडेंशियल्स की जाँच करके पुष्टि करें कि वे काम करते हैं। इससे एक
`verification_evidence_id` मिलता है, जिसे आप बनाने के चरण में भेजते हैं ताकि
टेस्टिंग के लिए क्रेडेंशियल्स पर दोबारा शुल्क न लगे।

```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
  }
}
```

यदि कोई जाँच विफल होती है, तो रिस्पॉन्स `status` `fail` होगा और `checks`
दिखाएगा कि कौन-सा चरण विफल हुआ। प्रदाता-पक्ष का कॉन्फ़िग ठीक करें (ट्रंक
असाइनमेंट, IP allowlist, आउटबाउंड ऑथराइज़ेशन) और फिर से प्रयास करें।

## 2. कनेक्शन बनाएं

अभी प्राप्त किए गए `verification_evidence_id` को पास करें:

```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..."
  }'
```

रिस्पॉन्स एक [VoipConnection ऑब्जेक्ट](/api-reference/voip-connections#connection-object)
है जिसकी `status="connected"` है। क्रेडेंशियल्स और अन्य सीक्रेट कनेक्शन वैल्यू सर्वर-साइड स्टोर किए जाते हैं और बाद के GETs द्वारा कभी भी
प्लेन टेक्स्ट में वापस नहीं किए जाते — रोटेट करने के लिए, नया
`test` चलाएँ और नए एविडेंस के साथ PATCH करें।

### Twilio सबअकाउंट

एक Twilio कनेक्शन उसी एकल Twilio अकाउंट से बंधा होता है जिसके
Account SID और Auth Token उसमें होते हैं। Twilio हर सबअकाउंट के भीतर फोन नंबर और SIP
ट्रंक रखता है, इसलिए पैरेंट अकाउंट से बनाया गया कनेक्शन केवल पैरेंट के अपने नंबर देखता है,
और किसी मौजूदा कनेक्शन को बाद में किसी अलग सबअकाउंट पर स्विच नहीं किया जा सकता।

सबअकाउंट में मौजूद नंबरों तक पहुंचने के लिए, हर
सबअकाउंट के लिए एक कनेक्शन बनाएं। डैशबोर्ड यह आपके लिए करता है: जब आप ऐसे पैरेंट
अकाउंट को कनेक्ट करते हैं जिसमें सक्रिय सबअकाउंट हैं, तो सेटअप डायलॉग उन्हें सूचीबद्ध करता है, आप
जिन्हें चाहते हैं उन्हें चुनते हैं, और ThunderPhone हर एक में एक कनेक्शन (और एक
SIP ट्रंक) बनाता है। यही फ्लो API के माध्यम से भी उपलब्ध है:

```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..."]}'
```

रिस्पॉन्स में हर सबअकाउंट के लिए एक पंक्ति होती है, जिसमें `status` `created`, `skipped` (पहले से कनेक्टेड) या `failed` होता है, साथ ही एक `error` होता है जिस पर आप कार्रवाई कर सकते हैं। पंक्तियां स्वतंत्र होती हैं, इसलिए एक सबअकाउंट में विफलता अन्य को कभी ब्लॉक नहीं करती, और `discovery_id` 30 मिनट तक मान्य रहता है, इसलिए विफल पंक्ति को बस फिर से आज़माया जा सकता है। सबअकाउंट टोकन डिस्कवरी के समय Twilio से पढ़े जाते हैं और नए कनेक्शन पर स्टोर किए जाते हैं; वे कभी API द्वारा वापस नहीं किए जाते। इसके बाद हर नया कनेक्शन नंबरों को ठीक उसी तरह इंपोर्ट और वेरिफ़ाई करता है जैसे आपके द्वारा मैन्युअल रूप से बनाए गए कनेक्शन में होता है। हर नए कनेक्शन के SIP ट्रंक के लिए कॉल ट्रांसफ़र भी चालू करने हेतु `"enable_transfers": true` जोड़ें; वहां विफलता उस कनेक्शन के `test_result.transfer_enable_error` में रिपोर्ट होती है और पंक्ति विफल नहीं होती।

## 3. नंबर सूचीबद्ध और इंपोर्ट करें

अपने क्रेडेंशियल को दिखाई देने वाले उन नंबरों की जांच करें जो पहले से
किसी ThunderPhone संगठन में नहीं हैं:

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

फिर जिनकी आवश्यकता हो उन्हें इंपोर्ट करें:

```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"]}'
```

हर इंपोर्ट आपके संगठन में `number_type="voip"` और `status="provisioning"` के साथ एक [फोन नंबर रिसोर्स](/api-reference/phone-numbers) बन जाता है।

## 4. हर इंपोर्ट किए गए नंबर को वेरिफ़ाई करें

इंपोर्ट करने पर नंबर *उपलब्ध* के रूप में रजिस्टर हो जाता है; उसके माध्यम से कॉल को वास्तव में रूट करने के लिए वेरिफिकेशन आवश्यक है। प्रोवाइडर कनेक्शन (Twilio, Telnyx) के लिए यह प्रोवाइडर क्रेडेंशियल और SIP रीचेबिलिटी की फिर से जांच करता है। **मैन्युअल SIP** कनेक्शन के लिए, यह पहले एक लूपबैक सेल्फ-कॉल आज़माता है:
ThunderPhone नंबर *से*, आपके SIP ट्रंक *के माध्यम से*, *उसी नंबर पर वापस* एक छोटा प्रोब कॉल करता है। अगर इससे इनबाउंड पाथ वेरिफाई नहीं होता, तो यह नंबर *से*, आपके SIP ट्रंक *के माध्यम से*, किसी ThunderPhone नंबर *पर* एक छोटे प्रोब कॉल पर वापस आ जाता है। ये टेस्ट ट्रंक के यूज़रनेम,
पासवर्ड, ट्रांसपोर्ट, आउटबाउंड रूटिंग और इनबाउंड डिलीवरी की जांच करते हैं। आपका कैरियर
इन कॉल्स का बिल किसी भी अन्य कॉल की तरह करता है।

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

सफल होने पर, `voip_verification_status` बदलकर `verified` हो जाता है और
नंबर `status="active"` में प्रवेश करता है। आपके अपने Telnyx अकाउंट का कोई नंबर अपनी टेस्ट कॉल विफल होने या आउटबाउंड अभी सेट अप न होने पर भी इनबाउंड कॉल लेना जारी रखता है: वह `voip_verification_status`
को `unverified` पर सेट करके `status="active"` हो जाता है, और रिस्पॉन्स इसका कारण बताता है। विफल होने पर, रिस्पॉन्स स्पष्ट रूप से बताता है
कि क्या विफल हुआ — मैन्युअल ट्रंक के लिए यह कैरियर का SIP उत्तर होता है, उदाहरण के लिए *"ThunderPhone के क्रेडेंशियल्स अस्वीकार किए गए (SIP 401)"* या *"कॉल रूट नहीं की जा सकी (SIP 404)"* — इसे ठीक करें (क्रेडेंशियल्स, अनुमत सोर्स IPs, प्रोवाइडर डैशबोर्ड में गायब ट्रंक असाइनमेंट) और फिर से कॉल करें।

अलाउलिस्ट किए गए मैन्युअल SIP कनेक्शन के लिए, अगर वे Allowed Source IPs किसी वास्तविक इनबाउंड कॉल को ब्लॉक करते हैं, तो इनकमिंग-कॉल टेस्ट भी विफल हो जाता है।

## 5. एजेंट असाइन करें और कॉल लें

नंबर वेरिफ़ाई हो जाने के बाद, आप इनबाउंड / आउटबाउंड एजेंट को उसी तरह असाइन
करते हैं जैसे ThunderPhone नंबर के लिए करते हैं। देखें
[इनबाउंड कॉल हैंडल करें](/hi/guides/handle-inbound-calls) और
[आउटबाउंड कॉल करें](/hi/guides/place-outbound-calls)।

## क्रेडेंशियल रोटेट करना

जब प्रोवाइडर की बदलती है, तो टेस्ट-फिर-अपडेट फ्लो दोबारा चलाएं:

```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"
  }'
```

कनेक्शन यथावत रहता है — नंबर दोबारा इंपोर्ट करने की आवश्यकता नहीं है।

---

## अगले चरण

<CardGroup cols={2}>
  <Card title="VoIP कनेक्शन रेफरेंस" icon="phone-volume" href="/api-reference/voip-connections">
    कनेक्शन, एविडेंस और इंपोर्ट रिस्पॉन्स में हर फ़ील्ड।
  </Card>
  <Card title="फ़ोन नंबर रेफरेंस" icon="phone" href="/api-reference/phone-numbers">
    एजेंट असाइन करें, संगठनों के बीच ट्रांसफर करें, नंबर रिलीज़ करें।
  </Card>
  <Card title="आउटबाउंड कॉल करें" icon="arrow-up-right" href="/hi/guides/place-outbound-calls">
    अब जब नंबर आपका है, आउटबाउंड कॉल करना शुरू करें।
  </Card>
</CardGroup>
