---
title: "செயல்பாட்டு கருவிகள்"
description: "உங்கள் AI ஏஜென்ட்களுக்கு உரையாடலின் நடுவில் வெளிப்புற API-களை அழைக்கும் செயல்பாட்டு கருவிகளை வழங்குங்கள் — வாடிக்கையாளர் தரவைப் பெறுங்கள், சந்திப்புகளைப் பதிவு செய்யுங்கள், பதிவுகளைப் புதுப்பியுங்கள் — வகை குறிப்பிடப்பட்ட அளவுருக்களுடன்."
---

செயல்பாட்டு கருவிகள், தொலைபேசி அழைப்புகளின் போது உங்கள் AI ஏஜென்ட்கள் வெளிப்புற API-களை அழைக்க அனுமதிக்கின்றன. வாடிக்கையாளர் தரவைத் தேட, கிடைப்பைச் சரிபார்க்க, சந்திப்புகளை முன்பதிவு செய்ய அல்லது உங்கள் backend ஆதரிக்கும் எந்தச் செயலையும் செய்ய அவற்றைப் பயன்படுத்தவும்.

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

1. நீங்கள் ஒரு schema-வுடன் கருவிகளை வரையறுக்கிறீர்கள் (கருவி ஏற்கும் arguments என்ன)
2. நீங்கள் `endpoint` உள்ளமைவை வழங்குகிறீர்கள் (ThunderPhone உங்கள் API-ஐ எங்கு அழைக்கும்) — அல்லது உங்கள் நிறுவன webhook-இல் கருவி அழைப்புகளைப் பெற அதை விடலாம்
3. அழைப்பின் போது, உரையாடலின் அடிப்படையில் கருவியை எப்போது பயன்படுத்த வேண்டும் என்பதை AI தீர்மானிக்கிறது
4. ThunderPhone கருவி arguments-உடன் உங்கள் endpoint-ஐ அழைக்கிறது
5. உரையாடலைத் தொடர உங்கள் API பதில் மீண்டும் AI-க்கு வழங்கப்படுகிறது

| திறன் | இது இயங்கும் இடம் | அமைப்பு |
| --- | --- | --- |
| [உள்ளமைக்கப்பட்ட கருவிகள்](/ta/guides/built-in-tools) | ThunderPhone | Prompt வழிமுறைகள்; சில கருவிகளுக்கு ஏஜென்ட் அமைப்பும் தேவைப்படும் |
| [செயலி இணைப்புகள்](/ta/guides/connect-apps) | ThunderPhone மற்றும் இணைக்கப்பட்ட வழங்குநர் | கணக்கை இணைத்து, அங்கீகரிக்கப்பட்ட செயல்களை இணைக்கவும் |
| [API இணைப்புகள்](/ta/guides/api-connections) மற்றும் செயல்பாட்டு கருவிகள் | உங்கள் HTTP API | Endpoint மற்றும் schema-வை வரையறுக்கவும் அல்லது webhook மூலம் செயல்பாட்டு அழைப்புகளைப் பெறவும் |
| [MCP சேவையகங்கள்](/ta/guides/mcp-servers) | தொலைநிலை MCP சேவையகம் | சேவையகத்தைச் சேர்த்து, அதன் கருவிகளைக் கண்டறிந்து, அதை ஏஜென்ட்டுடன் இணைக்கவும் |

---

## கருவி Schema

ஒவ்வொரு கருவியும் இந்த அமைப்பைப் பின்பற்றுகிறது:

```json
{
  "type": "function",
  "function": {
    "name": "search_appointments",
    "description": "Find available appointment slots for a given date",
    "parameters": {
      "type": "object",
      "properties": {
        "date": {
          "type": "string",
          "description": "Date in YYYY-MM-DD format"
        },
        "service": {
          "type": "string",
          "description": "Type of service (e.g., 'consultation', 'follow-up')"
        }
      },
      "required": ["date"]
    }
  },
  "endpoint": {
    "url": "https://api.example.com/appointments/search",
    "method": "POST",
    "headers": {
      "X-Api-Key": "your-api-key"
    }
  },
  "timeout": 120
}
```

### கருவி உள்ளமைவு

| புலம் | வகை | அவசியம் | விளக்கம் |
|-------|------|----------|-------------|
| `timeout` | எண் | இல்லை | வினாடிகளில் அதிகபட்ச செயல்பாட்டு நேரம் (இயல்புநிலை: `20`, அதிகபட்சம்: `180`) |

### செயல்பாட்டு வரையறை

| புலம் | வகை | அவசியம் | விளக்கம் |
|-------|------|----------|-------------|
| `name` | சரம் | ஆம் | கருவிக்கான தனித்துவ அடையாளங்காட்டி |
| `description` | சரம் | ஆம் | இந்தக் கருவியை எப்போது பயன்படுத்த வேண்டும் என்பதை AI-க்கு விளக்குகிறது |
| `parameters` | பொருள் | ஆம் | கருவி arguments-க்கான JSON Schema |

### Endpoint உள்ளமைவு

| புலம் | வகை | அவசியம் | விளக்கம் |
|-------|------|----------|-------------|
| `url` | சரம் | ஆம் | உங்கள் API endpoint URL |
| `method` | சரம் | இல்லை | HTTP முறை (இயல்புநிலை: `POST`) |
| `headers` | பொருள் | இல்லை | சேர்க்க வேண்டிய தனிப்பயன் headers |

<Note>
  `endpoint` உள்ளமைவு AI மாதிரிக்கு அனுப்பப்படுவதில்லை—இது கருவி அழைப்பைச் செயல்படுத்த ThunderPhone-ஆல் மட்டுமே பயன்படுத்தப்படுகிறது.
</Note>

---

## இரண்டு அழைப்பு பாதைகள்

உங்கள் சேவையகம் பெறும் கோரிக்கை, கருவியில்
`endpoint` உள்ளதா என்பதைப் பொறுத்தது:

| | `endpoint` **உள்ள** கருவி | `endpoint` **இல்லாத** கருவி |
|---|---|---|
| கோரிக்கை செல்லும் இடம் | நேரடியாக `endpoint.url`-க்கு | உங்கள் நிறுவனத்தின் [பழைய webhook URL](/api-reference/organizations#legacy-single-url-webhook) |
| உட்பகுதி | **வெறும் கருவி arguments** | `telephony.tool` / `web.tool` உறை |
| Headers | உங்கள் `endpoint.headers` + `X-ThunderPhone-Call-ID` + `X-ThunderPhone-Signature` | `Content-Type` + `X-ThunderPhone-Signature` |
| கையொப்ப விசை | நிறுவன webhook ரகசியம் | நிறுவன webhook ரகசியம் |

இரண்டு பாதைகளும் **ஒத்திசைவானவை** — AI, வாக்கியத்தின் நடுவில்
முடிவுக்காகக் காத்திருக்கிறது. இயல்புநிலை நேர முடிவு **20 s**; நீண்ட செயல்பாட்டு நேரத்தை
அனுமதிக்க, கருவியின் மேல்நிலை `timeout`-ஐ அமைக்கவும்; தளத்தின்
அதிகபட்சம் **180 s** வரை அனுமதிக்கப்படுகிறது. கையாளிகளை வேகமாக வைத்திருக்கவும். கலவையாகப் பயன்படுத்தலாம்:
webhook URL கொண்ட நிறுவனத்தின் அழைப்பில், `endpoint` உள்ள கருவிகள்
நேரடியாக அழைக்கப்படும்; மற்றவை webhook-க்கு மாற்றாகச் செல்லும்.

## நேரடி endpoint அழைப்புகள்

AI, `endpoint` உள்ள ஒரு கருவியை அழைக்கும்போது, ThunderPhone உங்கள் URL-க்கு
ஒரு கோரிக்கையை அனுப்பும்:

### கோரிக்கை தலைப்புகள்

```http
POST /appointments/search HTTP/1.1
Host: api.example.com
Content-Type: application/json
X-ThunderPhone-Signature: abc123...
X-ThunderPhone-Call-ID: 987654321
X-Api-Key: your-api-key
```

உங்கள் `endpoint.headers`-இலிருந்து வரும் தனிப்பயன் தலைப்புகள் எப்போதும்
மாற்றமின்றி சேர்க்கப்படும்; கூடுதலாக ThunderPhone பெயர்வெளியிலுள்ள இரண்டு தலைப்புகளும் சேர்க்கப்படும்:

- `X-ThunderPhone-Signature` — உங்கள் **நிறுவன webhook ரகசியத்தை** விசையாகக் கொண்டு, துல்லியமான கோரிக்கை-உடல்
  பைட்களின் HMAC-SHA256
- `X-ThunderPhone-Call-ID` — தற்போதைய அழைப்பு ID

உங்கள் `endpoint.headers` அதை மேலெழுதாத வரை `Content-Type: application/json`
அமைக்கப்படும் — தனிப்பயன் `Content-Type` முன்னுரிமை பெறும்.

<Warning>
  கையொப்பம் நிறுவன அளவிலான webhook ரகசியத்தைக் கொண்டு உருவாக்கப்படுகிறது; அது
  [`GET /v1/webhook`](/api-reference/organizations#legacy-single-url-webhook)-இலிருந்து பெறப்படுகிறது.
  உங்கள் நிறுவனம் பழைய webhook-ஐ ஒருபோதும் கட்டமைக்கவில்லை என்றால், ரகசியம் இருக்காது;
  அப்போது கருவி அழைப்புகளில் **மட்டும்** `X-ThunderPhone-Call-ID` இருக்கும் — விடுபட்ட
  கையொப்பத்தில் கடுமையாகத் தோல்வியுறும் ஹேண்ட்லர் அவற்றை நிராகரிக்கும்.
  ரகசியத்தைப் பெற பழைய webhook-ஐ கட்டமைக்கவும் அல்லது உங்கள் சொந்த
  பகிரப்பட்ட ரகசியத்தை `endpoint.headers`-இல் சேர்க்கவும்.
</Warning>

### கோரிக்கை உடல்

`POST` / `PUT` / `PATCH`-க்கு, உடலில் **மட்டும்** கருவி
வாதங்கள் இருக்கும் (wrapper இல்லை); அவை நியமமான வடிவில் (வரிசைப்படுத்தப்பட்ட விசைகள், சுருக்கமான
பிரிப்பான்கள்) வரிசைப்படுத்தப்படும்:

```json
{"date":"2025-01-02","service":"consultation"}
```

`GET` / `DELETE`-க்கு, வாதங்கள் **வினவல் அளவுருக்களாக**
அனுப்பப்படும்; உடல் காலியாக இருக்கும் — பின்னர் கையொப்பம் காலியான
பைட் சரத்தின் மீது கணக்கிடப்படும். பார்க்கவும்
[webhook கையொப்பங்களைச் சரிபார்க்கவும்](/ta/guides/verify-webhook-signatures).

### பதில்

கருவி முடிவுடன் JSON பதிலை வழங்கவும்:

```json
{
  "available_slots": ["9:00 AM", "2:00 PM", "4:30 PM"],
  "timezone": "America/Los_Angeles"
}
```

பதில் வடிவமைக்கப்பட்டு, உரையாடலைத் தொடர AI-க்கு வழங்கப்படும்.
JSON அல்லாத பதில்கள் `{"data": "<text>"}` எனச் சுற்றிவைக்கப்படும்;
நேரம் முடிதல் மற்றும் இணைப்புத் தோல்விகள் AI-க்கு பிழைகளாகத் தெரிவிக்கப்படும், எனவே
ஏஜென்ட் மன்னிப்பு கேட்டு நின்றுபோகாமல் தொடர முடியும்.

## Webhook-முறை அனுப்புதல்

`endpoint` **இல்லாத** கருவிகள், உங்கள் நிறுவனத்தின் பழைய
webhook URL-க்கு கையொப்பமிடப்பட்ட `telephony.tool` (தொலைபேசி அழைப்புகள்) அல்லது `web.tool`
(வலை அழைப்புகள்) கோரிக்கையாக அனுப்பப்படும். செயல்படுத்தலுக்குப் பிறகு webhook endpoint-களுக்கு
வழங்கப்படும் [தணிக்கை அறிவிப்புகளைப்](/ta/webhooks/events) போலல்லாமல், இந்தக் கோரிக்கையே **தான்**
செயல்படுத்தல் — உங்கள் HTTP பதிலே கருவி முடிவாகும்.

```json
{
  "type": "telephony.tool",
  "data": {
    "call_id": 987654321,
    "tool_name": "search_appointments",
    "arguments": { "date": "2026-04-21" },
    "from_number": "+14155550199",
    "to_number": "+15551234567"
  }
}
```

`web.tool`, `from_number` /
`to_number`-க்கு பதிலாக `origin_domain`-ஐக் கொண்டிருக்கும். நேரடி endpoint அழைப்புகளுக்கான
அதே பதில் ஒப்பந்தத்தின்படி, கருவி முடிவை JSON ஆகப் பதிலளிக்கவும். மற்ற ஒவ்வொரு webhook-ஐப் போலவே,
கோரிக்கையும் மூல உடலின் மீது நிறுவன webhook ரகசியத்துடன் கையொப்பமிடப்படும்.

<Note>
  சந்தா செய்துள்ள [webhook endpoint-கள்](/ta/webhooks/endpoints), ஒவ்வொரு கருவியும் செயல்படுத்தப்பட்ட
  **பிறகான அறிவிப்பை** கூடுதலாகத் தடை செய்யாத `telephony.tool` / `web.tool` ஆகப் பெறுகின்றன
  (அதை இயக்கிய பாதை எதுவாக இருந்தாலும்); இதில் கருவியின் பதிலும் அடங்கும் —
  தணிக்கைப் பதிவுகளுக்கு பயனுள்ளது. பார்க்கவும்
  [நிகழ்வுகள் பட்டியல்](/ta/webhooks/events).
</Note>

---

## கையொப்பச் சரிபார்ப்பு

நேரடி tool அழைப்புகள் webhooks போலவே கையொப்பமிடப்படுகின்றன:

- துல்லியமான request-body பைட்டுகளின் மீது HMAC-SHA256 (நியம JSON —
  வரிசைப்படுத்தப்பட்ட keys, கூடுதல் whitespace இல்லை)
- உங்கள் org webhook secret-ஐப் பயன்படுத்தி key செய்யப்படுகிறது
- `GET` / `DELETE` tools காலியான byte string-இல் கையொப்பமிடும்

<CodeGroup>
```python Python
import hmac
import hashlib

def verify_tool_call(body: bytes, signature: str, secret: str) -> bool:
    expected = hmac.new(secret.encode(), body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, signature)

@app.post("/appointments/search")
async def search_appointments(request: Request):
    body = await request.body()
    signature = request.headers.get("X-ThunderPhone-Signature", "")

    if not verify_tool_call(body, signature, WEBHOOK_SECRET):
        raise HTTPException(status_code=401)

    data = json.loads(body)
    date = data["date"]

    # Look up availability
    slots = await get_available_slots(date)

    return {"available_slots": slots}
```

```javascript Node.js
app.post('/appointments/search', express.raw({type: 'application/json'}), (req, res) => {
  const signature = req.headers['x-thunderphone-signature'] || '';
  const expected = crypto
    .createHmac('sha256', WEBHOOK_SECRET)
    .update(req.body)
    .digest('hex');

  if (!signature ||
      signature.length !== expected.length ||
      !crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature))) {
    return res.status(401).send('Invalid signature');
  }

  const { date, service } = JSON.parse(req.body);

  // Look up availability
  const slots = getAvailableSlots(date, service);

  res.json({ available_slots: slots });
});
```
</CodeGroup>

காலியான body நிகழ்வு மற்றும் secret இல்லாதபோதான எச்சரிக்கை உட்பட முழுமையான வழிமுறைகள் [webhook கையொப்பங்களைச் சரிபார்க்கவும்](/ta/guides/verify-webhook-signatures) என்பதில் உள்ளன.

---

## எடுத்துக்காட்டு: முழுமையான முன்பதிவு ஓட்டம்

முழுமையான appointment முன்பதிவு அமைப்பிற்கான tools தொகுப்பு இதோ:

```json
{
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "search_appointments",
        "description": "Find available appointment slots",
        "parameters": {
          "type": "object",
          "properties": {
            "date": { "type": "string", "description": "YYYY-MM-DD" },
            "service": { "type": "string" }
          },
          "required": ["date"]
        }
      },
      "endpoint": {
        "url": "https://api.example.com/appointments/search",
        "method": "POST",
        "headers": { "X-Api-Key": "key" }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "book_appointment",
        "description": "Book an appointment at a specific time",
        "parameters": {
          "type": "object",
          "properties": {
            "date": { "type": "string", "description": "YYYY-MM-DD" },
            "time": { "type": "string", "description": "HH:MM format" },
            "customer_name": { "type": "string" },
            "customer_phone": { "type": "string" }
          },
          "required": ["date", "time", "customer_name"]
        }
      },
      "endpoint": {
        "url": "https://api.example.com/appointments/book",
        "method": "POST",
        "headers": { "X-Api-Key": "key" }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "cancel_appointment",
        "description": "Cancel an existing appointment",
        "parameters": {
          "type": "object",
          "properties": {
            "confirmation_number": { "type": "string" }
          },
          "required": ["confirmation_number"]
        }
      },
      "endpoint": {
        "url": "https://api.example.com/appointments/cancel",
        "method": "POST",
        "headers": { "X-Api-Key": "key" }
      }
    }
  ]
}
```

---

## சிறந்த நடைமுறைகள்

<AccordionGroup>
  <Accordion title="தெளிவான விளக்கங்களை எழுதுங்கள்">
    `description` புலம், கருவியை **எப்போது** பயன்படுத்த வேண்டும் என்பதை AI புரிந்துகொள்ள உதவுகிறது. அது என்ன செய்கிறது, எப்போது பொருத்தமானது என்பதைக் குறிப்பாக விளக்குங்கள்.
  </Accordion>

  <Accordion title="பிழைகளை நேர்த்தியாகக் கையாளுங்கள்">
    பொதுவான 500 பிழைகளுக்குப் பதிலாக, AI புரிந்துகொள்ளக்கூடிய பிழைச் செய்திகளைத் திருப்பியனுப்புங்கள்: `{"error": "No slots available for that date"}`.
  </Accordion>

  <Accordion title="பதில்களைச் சுருக்கமாக வைத்திருங்கள்">
    உரையாடலைத் தொடர AI-க்கு தேவையானதை மட்டும் திருப்பியனுப்புங்கள். பெரிய payloadகள் பதில் நேரத்தை மெதுவாக்கும்.
  </Accordion>

  <Accordion title="தேவையான புலங்களை விவேகமாகப் பயன்படுத்துங்கள்">
    உண்மையில் அவசியமானபோது மட்டுமே புலங்களை `required` எனக் குறிக்கவும். கருவியை அழைப்பதற்கு முன் AI, தேவையான தகவல்களை பயனரிடம் கேட்கும்.
  </Accordion>
</AccordionGroup>

---

## தொடர்புடையவை

<CardGroup cols={2}>
  <Card title="உள்ளமைக்கப்பட்ட கருவிகள்" icon="wrench" href="/ta/guides/built-in-tools">
    எண்ட்பாயிண்டை வரையறுக்காமல், தளத்தால் நிர்வகிக்கப்படும் அழைப்பு செயல்களை prompt மூலம் இயக்குங்கள்.
  </Card>
  <Card title="ஆப் இணைப்புகள்" icon="plug" href="/ta/guides/connect-apps">
    HubSpot, Salesforce, Slack, Google
    Calendar, Google Sheets மற்றும் Cal.com-க்கான தளத்தால் நிர்வகிக்கப்படும் கருவிகள் — எண்ட்பாயிண்ட் தேவையில்லை.
  </Card>
  <Card title="MCP சேவையகங்கள்" icon="server" href="/ta/guides/mcp-servers">
    MCP சேவையகத்தை இணைத்து, ஏஜென்ட் அதன் கருவிகளை அழைக்க அனுமதியுங்கள்.
  </Card>
  <Card title="API இணைப்புகள்" icon="code" href="/ta/guides/api-connections">
    ஏஜென்ட்களுடன் இணைக்கக்கூடிய, மீண்டும் பயன்படுத்தக்கூடிய REST ஒருங்கிணைப்புகள்.
  </Card>
  <Card title="Webhook கையொப்பங்களைச் சரிபார்க்கவும்" icon="shield-check" href="/ta/guides/verify-webhook-signatures">
    Webhookகள் மற்றும் கருவி அழைப்புகளுக்கான ஒரே சரிபார்ப்பு உதவியாளர்.
  </Card>
</CardGroup>
