---
title: "ஒவ்வொரு அழைப்பிற்குமான டைனமிக் கட்டமைப்பு"
description: "நீங்கள் கட்டுப்படுத்தும் webhook-இல் உள்ள தனிப்பயன் தர்க்கத்தின் அடிப்படையில், ஒவ்வொரு உள்வரும் அழைப்பிற்கும் பதிலளிக்கும் ஏஜென்ட்டைத் தனித்தனியாகத் தேர்ந்தெடுக்கவும் அல்லது அதன் prompt மற்றும் அமைப்புகளை மாற்றியமைக்கவும்."
---

இயல்பாக, ஒவ்வொரு தொலைபேசி எண்ணுக்கும் வெளியிடக்கூடிய விசைக்கும் ஒரு நிலையான ஏஜென்ட் ஒதுக்கப்பட்டிருக்கும். **ஒவ்வொரு அழைப்பாளருக்கும்** அல்லது **ஒவ்வொரு பார்வையாளருக்கும்** ஏற்ப தனிப்பயனாக்கம் தேவைப்படும்போது — VIP வழிமாற்றம், உள்நுழைந்த பயனர் சூழல், A/B prompt சோதனைகள் — வெப்ஹுக் பயன்முறைக்கு மாறி, உங்கள் சர்வர் முடிவு செய்ய அனுமதிக்கவும்.

## இது எவ்வாறு செயல்படுகிறது

1. நீங்கள் [`telephony.incoming`](/ta/webhooks/events)
   (தொலைபேசி) அல்லது [`web.incoming`](/ta/webhooks/events) (விட்ஜெட்)
   நிகழ்வுக்கு சந்தா செலுத்துகிறீர்கள். இரண்டும் **தடுக்கும்** வெப்ஹுக்குகள்:
   அழைப்பைத் தொடர்வதற்கு முன் உங்கள் பதிலுக்காக ThunderPhone 10 வினாடிகள் வரை
   காத்திருக்கும்.
2. ThunderPhone உங்களுக்கு `{call_id, from_number, to_number}` அனுப்பும் (விட்ஜெட்
   அமர்வுகள் எண்களுக்குப் பதிலாக விட்ஜெட்டுக்கான புலங்களைக் கொண்டிருக்கும் — 
   [கோரிக்கை ஸ்கீமாவைப்](/ta/webhooks/call-incoming) பார்க்கவும்).
3. உங்கள் சர்வர் ஒரு ஏஜென்ட் கட்டமைப்புடன் பதிலளிக்கும் (prompt, குரல்,
   தயாரிப்பு, கருவிகள்). அந்த அழைப்புக்கு ThunderPhone அந்தக் கட்டமைப்பைப் பயன்படுத்தும்.
4. நீங்கள் `{}` அனுப்பினாலோ, நேரம் முடிந்தாலோ அல்லது பிழை ஏற்பட்டாலோ, நிலையாக
   ஒதுக்கப்பட்ட ஏஜென்ட் மாற்றுத் தேர்வாகப் பயன்படுத்தப்படும். பாதுகாப்பான இயல்புநிலை.

<Note>
  வெப்ஹுக் எண்ட்பாயிண்ட்டுக்கு வழங்கப்பட்டாலும் அல்லது பழைய ஒற்றை-URL வெப்ஹுக்குக்கு
  வழங்கப்பட்டாலும், தொலைபேசி அழைப்புகள் (`telephony.incoming`) மற்றும் விட்ஜெட்
  அமர்வுகள் (`web.incoming`) இரண்டிற்கும் ஒரேபோல் செயல்படும்.
</Note>

<Warning>
  **இன்லைன் வெப்ஹுக் மூலம் கட்டமைக்கப்பட்ட அழைப்புகளில் ThunderPhone ஒப்புதல் அறிவிப்பு இயங்காது.**
  இந்தப் பாதை ஏஜென்ட் நிலை அழைப்பு-தொடக்க அறிவிப்பைத் தவிர்க்கிறது; மேலும்
  ThunderPhone-இன் ஒப்புதல்-அறிவிப்பு கட்டமைப்பிலிருந்து (சேவை விதிமுறைகளின்
  “பதிவு மற்றும் ஒப்புதல்” பிரிவு) வெளிப்படையாக விலக்கப்பட்டுள்ளது. இந்த
  அழைப்புகளில் பதிவுசெய்தல், கண்காணித்தல், AI-பங்கேற்பு மற்றும் அழைப்பாளர்-அடையாளம்
  தொடர்பான அனைத்து அறிவிப்புகளுக்கும் ஒப்புதல்களுக்கும் உங்கள் நிறுவனம் பொறுப்பாகும்.
  இன்லைன் வெப்ஹுக் பயன்முறையை இயக்குவதற்கு முன், அவற்றை உங்கள் சொந்த ஓட்டத்தில் —
  உதாரணமாக prompt-இன் தொடக்க ஸ்கிரிப்டில் — வழங்கவும். சேமிக்கப்பட்ட `agent_id`-ஐ
  குறிப்பிடும் வெப்ஹுக் பதில், அந்த ஏஜென்ட்டின் வழக்கமான பதிவு மற்றும் வெளிப்படுத்தல்
  கொள்கையைப் பயன்படுத்தும்.
</Warning>

## 1. வெப்ஹுக் இலக்கை கட்டமைக்கவும்

<Tabs>
<Tab title="தொலைபேசி அழைப்புகள்">
தொலைபேசி எண்களுக்கு, உங்கள் எண்ட்பாயிண்ட்டை `telephony.incoming`-க்கு சந்தா செலுத்தவும்:

```bash
curl -X POST https://api.thunderphone.com/v1/developer/webhook-endpoints \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "label":  "Prod call-incoming",
    "url":    "https://example.com/thunderphone/incoming",
    "events": ["telephony.incoming"]
  }'
```

பதில் ஒருமுறை மட்டுமே பயன்படுத்தக்கூடிய `secret`-ஐ கொண்டிருக்கும் — அதைச் சேமிக்கவும்;
கையொப்பச் சரிபார்ப்புக்கு அதைப் பயன்படுத்துவீர்கள்.
</Tab>
<Tab title="வலை விட்ஜெட்">
விட்ஜெட் அமர்வுகளுக்கு, உங்கள் எண்ட்பாயிண்ட் URL உட்பொதிக்கப்பட்ட நிலையில்
`mode="webhook"`-இல் வெளியிடக்கூடிய விசையை உருவாக்கவும்:

```bash
curl -X POST https://api.thunderphone.com/v1/publishable-key \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name":            "Dynamic widget",
    "mode":            "webhook",
    "webhook_url":     "https://example.com/thunderphone/widget-incoming",
    "allowed_domains": ["example.com"]
  }'
```

ஒவ்வொரு அமர்வு தொடக்கத்திலும் விட்ஜெட் இந்த URL-க்கு POST செய்யும்.
</Tab>
</Tabs>

## 2. ஹேண்ட்லரை செயல்படுத்துங்கள்

மூன்று வழிகாட்டும் விதிகள்:

- ஒவ்வொரு கோரிக்கையிலும் **கையொப்பத்தைச் சரிபார்க்கவும்** ([வெப்ஹுக் கையொப்பங்களைச் சரிபார்க்கவும்](/ta/guides/verify-webhook-signatures) என்பதைப் பார்க்கவும்).
  டெவலப்மெண்டில் இதைத் தவிர்க்காதீர்கள் — ஒருமுறை சரியாக அமைத்து மீண்டும் பயன்படுத்துங்கள்.
- **விரைவாகப் பதிலளிக்கவும்**. பத்து விநாடிகள் கடுமையான உச்சவரம்பாகும்; ஒவ்வொரு விநாடியும்
  அழைப்பாளருக்கு அமைதியான இடைவெளியாக இருக்கும். தேவைப்பட்டால் தரவுத்தளத் தேடல்களைச் செய்யலாம், ஆனால்
  பின்தொடரும் LLM-களை ஒத்திசைவாக அழைக்காதீர்கள் — டைனமிக் prompt உருவாக்கம் வேண்டுமெனில்,
  முன்கூட்டியே கணக்கிட்டு கேஷ் செய்யுங்கள்.
- **சரியாக மாற்று வழிக்குச் செல்லுங்கள்**. எதிர்பாராத எந்த நிலையிலும் `{}` ஐத் திருப்பி அனுப்ப வேண்டும்; அப்போது
  நிலையாக ஒதுக்கப்பட்ட ஏஜென்ட் அழைப்பைக் கையாளும்.

<CodeGroup>
```python FastAPI
import hashlib
import hmac
import json
import os

from fastapi import FastAPI, HTTPException, Request

app = FastAPI()
SECRET = os.environ["THUNDERPHONE_WEBHOOK_SECRET"]

def verify(body: bytes, sig: str) -> bool:
    expected = hmac.new(SECRET.encode(), body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, sig or "")

@app.post("/thunderphone/incoming")
async def incoming(request: Request):
    body = await request.body()
    if not verify(body, request.headers.get("X-ThunderPhone-Signature", "")):
        raise HTTPException(401)

    event = json.loads(body)
    if event["type"] not in ("telephony.incoming", "web.incoming"):
        return {}  # fall back to default

    caller = event["data"]["from_number"]
    # Cheap DB lookup: is this a known VIP?
    customer = lookup_customer(caller)
    if customer and customer.tier == "vip":
        return {
            "prompt":  f"You are a VIP concierge for {customer.name}. Be proactive…",
            "voice":   "john",
            "product": "storm-base",
        }
    return {}  # default agent handles non-VIPs

def lookup_customer(phone: str):
    # ... your CRM integration ...
    pass
```

```javascript Express
import crypto from "node:crypto";
import express from "express";

const app = express();
const SECRET = process.env.THUNDERPHONE_WEBHOOK_SECRET;

function verify(body, sig) {
  const expected = crypto.createHmac("sha256", SECRET).update(body).digest("hex");
  return sig &&
    crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig));
}

app.post(
  "/thunderphone/incoming",
  express.raw({ type: "application/json" }),
  async (req, res) => {
    if (!verify(req.body, req.header("X-ThunderPhone-Signature"))) {
      return res.sendStatus(401);
    }
    const event = JSON.parse(req.body.toString("utf8"));

    const IMPORTANT_TYPES = new Set([
      "telephony.incoming",
      "web.incoming",
    ]);
    if (!IMPORTANT_TYPES.has(event.type)) return res.json({});

    const customer = await lookupCustomer(event.data.from_number);
    if (customer?.tier === "vip") {
      return res.json({
        prompt:  `You are a VIP concierge for ${customer.name}. Be proactive…`,
        voice:   "john",
        product: "storm-base",
      });
    }
    res.json({}); // fall back to default agent
  },
);
```
</CodeGroup>

## 3. பதில் ஸ்கீமா

பதில் உடல்
[உள்வரும் அழைப்பு பதில் ஸ்கீமாவுடன்](/ta/webhooks/call-incoming)
முழுமையாகப் பொருந்தும். பொதுவாகப் பயன்படுத்தப்படும் புலங்கள்:

| புலம் | வகை | விளக்கம் |
|-------|------|-------------|
| `prompt` | சரம் (தேவையானது) | ஏஜென்டிற்கான சிஸ்டம் prompt |
| `voice` | சரம் (தேவையானது) | [`GET /v1/voices`](/api-reference/agents#voices) இலிருந்து குரல் ஐடி |
| `product` | சரம் | இயல்புநிலை `spark` |
| `background_track` | சரம் \| null | சூழல் ஒலி ஐடி |
| `acknowledgement_prompt_mode` | சரம் | `auto` அல்லது `manual` (அங்கீகாரத்துடன் Storm மட்டும்) |
| `acknowledgement_prompt` | சரம் | பயன்முறை `manual` ஆக இருக்கும்போது தேவையானது |
| `tools` | அணிவரிசை | இன்லைன் செயல்பாட்டு-கருவி ஸ்கீமாக்கள் — [செயல்பாட்டு கருவிகள்](/ta/tools/overview) பார்க்கவும் |

<Note>
  ஒவ்வொரு அழைப்பிற்குமான பேசும்-வரிசையும் `max_hold_seconds` உம்
  வெப்ஹுக் பதிலில் கிடைக்காது. நீங்கள் குறிப்பிடும்
  [ஏஜென்டில்](/api-reference/agents) அவற்றை அமைக்கவும்.
</Note>

### சேமிக்கப்பட்ட ஏஜென்டை வைத்திருந்து மாறிகளை வழங்கவும்

அந்த நிறுவனத்தின் சேமிக்கப்பட்ட ஏஜென்டை ஒவ்வொரு அழைப்பிற்குமான தரவுடன் பயன்படுத்த,
`{"agent_id": 12, "variables": {"name": "Ada"}}` ஐத் திருப்பி அனுப்பவும்.
அதன் prompt-ல் `{{name}}` அல்லது `{{name|Friend}}` இருக்கலாம். வெப்ஹுக் மாறிகள்
கோரிக்கை-நிலை மாறிகளை மேலெழுதும்; null என்பது பிளேஸ்ஹோல்டர் இயல்புநிலையைப்
பயன்படுத்தும், அல்லது எதுவும் வழங்கப்படவில்லை என்றால் வெற்றிட உரையைப் பயன்படுத்தும்.
இறுதி மதிப்புகளும் தீர்க்கப்படாத பெயர்களும் அழைப்பு விவரங்களிலும் நிறைவு வெப்ஹுக்குகளிலும்
தோன்றும். சேமிக்கப்பட்ட-ஏஜென்ட் பதில்கள் `agent_id` மற்றும் `variables` ஐ மட்டுமே
ஏற்கும். `prompt` இருந்தால், பதில் இன்லைன் கட்டமைப்பைப் பயன்படுத்தி `agent_id` ஐப்
புறக்கணிக்கும் (null அல்லது முழுஎண் அல்லாத மெட்டாடேட்டா உட்பட); இன்லைன் prompt
இன்னும் செல்லுபடியாக இருக்க வேண்டும். இன்லைன் கட்டமைப்பு பதில்களில் `variables` உம்
இருக்கலாம். சேமிக்கப்பட்ட-ஏஜென்ட் பதில்கள், தொலைபேசி மற்றும் விட்ஜெட் அழைப்புகள்
இரண்டிலும் ஏஜென்டின் வெளியிடப்பட்ட A/B பிரிப்பைப் பயன்படுத்தி, பின்னர் மாறிகளை
ரெண்டர் செய்யும். வரம்புகள் மற்றும் அமர்வு API ஆதரவுக்கு
[அழைப்பு மாறிகள்](/ta/guides/call-variables) பார்க்கவும். தடுப்புக் கட்டமைப்பு பழைய
தொலைபேசி-எண்/நிறுவன URL அல்லது வெப்ஹுக்-பயன்முறை விட்ஜெட் விசையிலிருந்து வருகிறது;
எண்ட்பாயிண்ட்-சிஸ்டம் உள்வரும் நிகழ்வுகள் அறிவிப்புகள் மட்டுமே.

## வடிவங்கள்

### உள்நுழைந்த பயனர் சூழல்

வெப்ஹுக்-பயன்முறை விட்ஜெட்களில், பார்வையாளரின் பக்கத்திற்கு அவர்கள் யார் என்பது
ஏற்கனவே தெரியும். விட்ஜெட் SDK அனுப்பும் வினவல் சரம் அளவுருவுடன்
(`?customer_id=123`) உங்கள் வெப்ஹுக்கை அழைத்து, வாடிக்கையாளரை சர்வர் பக்கத்தில் தேடவும்.

### A/B prompt வெளியீடு

இதை நீங்களே உருவாக்குவதற்கு முன், ThunderPhone-இல் வகைகளை வரையறுத்து,
டிராஃபிக்கைப் பிரித்து, ஒவ்வொரு வகையின் முடிவுகளையும் ஒப்பிடும் சொந்த
[பரிசோதனைகள்](/ta/guides/concepts) வசதி உள்ளது என்பதை நினைவில் கொள்ளவும்
(`/dashboard/experiments` மற்றும் ஏஜென்ட் பில்டரின் **A/B** தாவல்) —
வெப்ஹுக் தேவையில்லை.

எப்படியிருந்தாலும் வெப்ஹுக்-பக்கக் கட்டுப்பாடு தேவைப்பட்டால்: `call_id` → பக்கெட்
என ஹாஷ் செய்யவும்; `0..49` க்கு prompt A-ஐயும், `50..99` க்கு prompt B-ஐயும்
வழங்கவும். நீங்கள் தேர்ந்தெடுத்த பக்கெட்டை உங்கள் சொந்த DB-யில் பதிவு செய்து, பின்னர்
நிறைவடைந்த அழைப்பின் மதிப்பெண்ணுடன் தொடர்புபடுத்தவும்.

### நேர அடிப்படையிலான வழிமாற்றம்

வணிக நேரம் → "நேரடி ஆதரவு" ஏஜென்ட்; அலுவல் நேரத்திற்குப் பின் → "செய்தி எடுக்கவும்"
ஏஜென்ட். உங்கள் ஹேண்ட்லரில் `new Date().getUTCHours()` அடிப்படையில் எளிய மாற்றம்.

---

## அடுத்த படிகள்

<CardGroup cols={2}>
  <Card title="உள்வரும் அழைப்பு வெப்ஹுக் குறிப்பு" icon="phone" href="/ta/webhooks/call-incoming">
    ஒவ்வொரு கட்டமைப்பு விசையையும் உள்ளடக்கிய துல்லியமான கோரிக்கை + பதில் ஸ்கீமாக்கள்.
  </Card>
  <Card title="வெப்ஹுக் கையொப்பங்களைச் சரிபார்க்கவும்" icon="shield-check" href="/ta/guides/verify-webhook-signatures">
    HMAC-ஐ ஒருமுறை சரியாக அமைத்து, எங்கும் மீண்டும் பயன்படுத்தவும்.
  </Card>
  <Card title="கருவி ஒருங்கிணைப்பை உருவாக்கவும்" icon="screwdriver-wrench" href="/ta/guides/build-tool-integration">
    இயக்கமிக்க வழிமாற்றத்தை ஒவ்வொரு ஏஜென்டிற்குமான கருவிகளுடன் இணைக்கவும்.
  </Card>
  <Card title="வழங்கல் அர்த்தவியல்" icon="bolt" href="/ta/webhooks/overview">
    மறுமுயற்சிகள், வரிசைப்படுத்தல், நேரமுடிவுகள்.
  </Card>
</CardGroup>
