---
title: "ಫಂಕ್ಷನ್ ಟೂಲ್‌ಗಳು"
description: "ನಿಮ್ಮ AI ಏಜೆಂಟ್‌ಗಳಿಗೆ ಸಂಭಾಷಣೆಯ ಮಧ್ಯೆ ಬಾಹ್ಯ APIಗಳನ್ನು ಕರೆಸುವ ಫಂಕ್ಷನ್ ಟೂಲ್‌ಗಳನ್ನು ನೀಡಿ — ಗ್ರಾಹಕ ಡೇಟಾವನ್ನು ಪಡೆಯಿರಿ, ಅಪಾಯಿಂಟ್‌ಮೆಂಟ್‌ಗಳನ್ನು ಬುಕ್ ಮಾಡಿ, ದಾಖಲೆಗಳನ್ನು ನವೀಕರಿಸಿ — ಟೈಪ್ ಮಾಡಿದ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳೊಂದಿಗೆ."
---

ಕಾರ್ಯ ಸಾಧನಗಳು ನಿಮ್ಮ AI ಏಜೆಂಟ್‌ಗಳು ಫೋನ್ ಕರೆಗಳ ಸಮಯದಲ್ಲಿ ಬಾಹ್ಯ APIಗಳನ್ನು ಆಹ್ವಾನಿಸಲು ಅನುಮತಿಸುತ್ತವೆ. ಗ್ರಾಹಕ ಡೇಟಾವನ್ನು ಹುಡುಕಲು, ಲಭ್ಯತೆಯನ್ನು ಪರಿಶೀಲಿಸಲು, ಅಪಾಯಿಂಟ್‌ಮೆಂಟ್‌ಗಳನ್ನು ಬುಕ್ ಮಾಡಲು ಅಥವಾ ನಿಮ್ಮ ಬ್ಯಾಕೆಂಡ್ ಬೆಂಬಲಿಸುವ ಯಾವುದೇ ಕ್ರಿಯೆಯನ್ನು ನಿರ್ವಹಿಸಲು ಅವುಗಳನ್ನು ಬಳಸಿ.

## ಇದು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ

1. ನೀವು ಸ್ಕೀಮಾದೊಂದಿಗೆ ಸಾಧನಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತೀರಿ (ಸಾಧನವು ಸ್ವೀಕರಿಸುವ ಆರ್ಗ್ಯುಮೆಂಟ್‌ಗಳು)
2. ನೀವು `endpoint` ಸಂರಚನೆಯನ್ನು ಒದಗಿಸುತ್ತೀರಿ (ThunderPhone ನಿಮ್ಮ API ಅನ್ನು ಎಲ್ಲಿ ಕರೆಯುತ್ತದೆ) — ಅಥವಾ ನಿಮ್ಮ ಸಂಸ್ಥೆಯ ವೆಬ್‌ಹುಕ್‌ನಲ್ಲಿ ಸಾಧನ ಕರೆಗಳನ್ನು ಸ್ವೀಕರಿಸಲು ಅದನ್ನು ಬಿಡಬಹುದು
3. ಕರೆಯ ಸಮಯದಲ್ಲಿ, ಸಂಭಾಷಣೆಯ ಆಧಾರದ ಮೇಲೆ ಸಾಧನವನ್ನು ಯಾವಾಗ ಬಳಸಬೇಕೆಂದು AI ನಿರ್ಧರಿಸುತ್ತದೆ
4. ThunderPhone ಸಾಧನದ ಆರ್ಗ್ಯುಮೆಂಟ್‌ಗಳೊಂದಿಗೆ ನಿಮ್ಮ ಎಂಡ್‌ಪಾಯಿಂಟ್‌ಗೆ ಕರೆ ಮಾಡುತ್ತದೆ
5. ಸಂಭಾಷಣೆಯನ್ನು ಮುಂದುವರಿಸಲು ನಿಮ್ಮ API ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು AI ಗೆ ಮರಳಿ ನೀಡಲಾಗುತ್ತದೆ

| ಸಾಮರ್ಥ್ಯ | ಇದು ಎಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ | ಹೊಂದಿಸುವಿಕೆ |
| --- | --- | --- |
| [ಅಂತರ್ನಿರ್ಮಿತ ಸಾಧನಗಳು](/kn/guides/built-in-tools) | ThunderPhone | ಪ್ರಾಂಪ್ಟ್ ಸೂಚನೆಗಳು; ಕೆಲವು ಸಾಧನಗಳಿಗೆ ಏಜೆಂಟ್ ಸೆಟ್ಟಿಂಗ್ ಕೂಡ ಅಗತ್ಯವಿರುತ್ತದೆ |
| [ಅಪ್ಲಿಕೇಶನ್ ಸಂಪರ್ಕಗಳು](/kn/guides/connect-apps) | ThunderPhone ಮತ್ತು ಸಂಪರ್ಕಿತ ಪೂರೈಕೆದಾರ | ಖಾತೆಯನ್ನು ಸಂಪರ್ಕಿಸಿ ಮತ್ತು ಅನುಮೋದಿತ ಕ್ರಿಯೆಗಳನ್ನು ಲಗತ್ತಿಸಿ |
| [API ಸಂಪರ್ಕಗಳು](/kn/guides/api-connections) ಮತ್ತು ಕಾರ್ಯ ಸಾಧನಗಳು | ನಿಮ್ಮ HTTP API | ಎಂಡ್‌ಪಾಯಿಂಟ್ ಮತ್ತು ಸ್ಕೀಮಾವನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಿ, ಅಥವಾ ವೆಬ್‌ಹುಕ್ ಮೂಲಕ ಕಾರ್ಯ ಕರೆಗಳನ್ನು ಸ್ವೀಕರಿಸಿ |
| [MCP ಸರ್ವರ್‌ಗಳು](/kn/guides/mcp-servers) | ದೂರಸ್ಥ MCP ಸರ್ವರ್ | ಸರ್ವರ್ ಸೇರಿಸಿ, ಅದರ ಸಾಧನಗಳನ್ನು ಪತ್ತೆಹಚ್ಚಿ ಮತ್ತು ಅದನ್ನು ಏಜೆಂಟ್‌ಗೆ ಲಗತ್ತಿಸಿ |

---

## ಸಾಧನ ಸ್ಕೀಮಾ

ಪ್ರತಿಯೊಂದು ಸಾಧನವೂ ಈ ರಚನೆಯನ್ನು ಅನುಸರಿಸುತ್ತದೆ:

```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` | ಆಬ್ಜೆಕ್ಟ್ | ಹೌದು | ಸಾಧನದ ಆರ್ಗ್ಯುಮೆಂಟ್‌ಗಳಿಗಾಗಿ JSON ಸ್ಕೀಮಾ |

### ಎಂಡ್‌ಪಾಯಿಂಟ್ ಸಂರಚನೆ

| ಕ್ಷೇತ್ರ | ವಿಧ | ಅಗತ್ಯವಿದೆಯೇ | ವಿವರಣೆ |
|-------|------|----------|-------------|
| `url` | ಸ್ಟ್ರಿಂಗ್ | ಹೌದು | ನಿಮ್ಮ API ಎಂಡ್‌ಪಾಯಿಂಟ್ URL |
| `method` | ಸ್ಟ್ರಿಂಗ್ | ಇಲ್ಲ | HTTP ವಿಧಾನ (ಡೀಫಾಲ್ಟ್: `POST`) |
| `headers` | ಆಬ್ಜೆಕ್ಟ್ | ಇಲ್ಲ | ಸೇರಿಸಬೇಕಾದ ಕಸ್ಟಮ್ ಹೆಡರ್‌ಗಳು |

<Note>
  `endpoint` ಸಂರಚನೆಯನ್ನು AI ಮಾದರಿಗೆ ಕಳುಹಿಸಲಾಗುವುದಿಲ್ಲ—ಸಾಧನ ಕರೆಯನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ThunderPhone ಮಾತ್ರ ಇದನ್ನು ಬಳಸುತ್ತದೆ.
</Note>

---

## ಎರಡು ಆಹ್ವಾನ ಮಾರ್ಗಗಳು

ನಿಮ್ಮ ಸರ್ವರ್ ಯಾವ ವಿನಂತಿಯನ್ನು ಸ್ವೀಕರಿಸುತ್ತದೆ ಎಂಬುದು ಸಾಧನವು
`endpoint` ಹೊಂದಿದೆಯೇ ಎಂಬುದರ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ:

| | `endpoint` **ಹೊಂದಿರುವ** ಸಾಧನ | `endpoint` **ಹೊಂದಿರದ** ಸಾಧನ |
|---|---|---|
| ವಿನಂತಿ ಎಲ್ಲಿ ಹೋಗುತ್ತದೆ | ನೇರವಾಗಿ `endpoint.url` ಗೆ | ನಿಮ್ಮ ಸಂಸ್ಥೆಯ [ಲೆಗಸಿ ವೆಬ್‌ಹುಕ್ URL](/api-reference/organizations#legacy-single-url-webhook) ಗೆ |
| ಬಾಡಿ | **ಕೇವಲ ಸಾಧನ ಆರ್ಗ್ಯುಮೆಂಟ್‌ಗಳು** | `telephony.tool` / `web.tool` ಎನ್‌ವೆಲಪ್ |
| ಹೆಡರ್‌ಗಳು | ನಿಮ್ಮ `endpoint.headers` + `X-ThunderPhone-Call-ID` + `X-ThunderPhone-Signature` | `Content-Type` + `X-ThunderPhone-Signature` |
| ಸಹಿ ಕೀ | ಸಂಸ್ಥೆಯ ವೆಬ್‌ಹುಕ್ ಸೀಕ್ರೆಟ್ | ಸಂಸ್ಥೆಯ ವೆಬ್‌ಹುಕ್ ಸೀಕ್ರೆಟ್ |

ಎರಡೂ ಮಾರ್ಗಗಳು **ತಡೆಹಿಡಿಯುವ** ಸ್ವರೂಪದವು — ಫಲಿತಾಂಶಕ್ಕಾಗಿ AI ವಾಕ್ಯದ ಮಧ್ಯದಲ್ಲೇ
ಕಾಯುತ್ತಿದೆ. ಡೀಫಾಲ್ಟ್ ಕಾಲಾವಧಿ **20 ಸೆ**; ಹೆಚ್ಚು ಸಮಯದ ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಯನ್ನು ಅನುಮತಿಸಲು ಸಾಧನದ
ಮೇಲ್ಮಟ್ಟದ `timeout` ಅನ್ನು ಹೊಂದಿಸಿ, ಗರಿಷ್ಠ **180 ಸೆ** ಪ್ಲಾಟ್‌ಫಾರ್ಮ್
ಮಿತಿಯವರೆಗೆ. ಹ್ಯಾಂಡ್ಲರ್‌ಗಳನ್ನು ವೇಗವಾಗಿರಿಸಿ. ಮಿಶ್ರಣವೂ ಸರಿ:
ಸಂಸ್ಥೆಯು ವೆಬ್‌ಹುಕ್ URL ಹೊಂದಿರುವ ಕರೆಯಲ್ಲಿ, `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` — ನಿಮ್ಮ **ಸಂಸ್ಥೆಯ ವೆಬ್‌ಹುಕ್ ಸೀಕ್ರೆಟ್** ಬಳಸಿ ಕೀ ಮಾಡಲಾದ, ನಿಖರ ವಿನಂತಿ-ಬಾಡಿ
  ಬೈಟ್‌ಗಳ HMAC-SHA256
- `X-ThunderPhone-Call-ID` — ಪ್ರಸ್ತುತ ಕರೆ ID

ನಿಮ್ಮ `endpoint.headers` ಅದನ್ನು ಓವರ್‌ರೈಡ್ ಮಾಡದ ಹೊರತು `Content-Type: application/json`
ಹೊಂದಿಸಲಾಗುತ್ತದೆ — ಕಸ್ಟಮ್ `Content-Type` ಗೆ ಆದ್ಯತೆ ಇರುತ್ತದೆ.

<Warning>
  ಸಹಿಯನ್ನು ಸಂಸ್ಥೆ-ಮಟ್ಟದ ವೆಬ್‌ಹುಕ್ ಸೀಕ್ರೆಟ್ ಬಳಸಿ ಕೀ ಮಾಡಲಾಗುತ್ತದೆ, ಇದು
  [`GET /v1/webhook`](/api-reference/organizations#legacy-single-url-webhook) ನಿಂದ ಲಭ್ಯವಾಗುತ್ತದೆ.
  ನಿಮ್ಮ ಸಂಸ್ಥೆಯು ಲೆಗಸಿ ವೆಬ್‌ಹುಕ್ ಅನ್ನು ಎಂದಿಗೂ ಕಾನ್ಫಿಗರ್ ಮಾಡಿಲ್ಲದಿದ್ದರೆ,
  ಯಾವುದೇ ಸೀಕ್ರೆಟ್ ಇರುವುದಿಲ್ಲ ಮತ್ತು ಟೂಲ್ ಕರೆಗಳು **ಮಾತ್ರ** `X-ThunderPhone-Call-ID` ಅನ್ನು ಹೊಂದಿರುತ್ತವೆ —
  ಕಾಣೆಯಾದ ಸಹಿಯ ಮೇಲೆ ಹಾರ್ಡ್-ಫೇಲ್ ಆಗುವ ಹ್ಯಾಂಡ್ಲರ್ ಅವುಗಳನ್ನು ತಿರಸ್ಕರಿಸುತ್ತದೆ.
  ಸೀಕ್ರೆಟ್ ಪಡೆಯಲು ಲೆಗಸಿ ವೆಬ್‌ಹುಕ್ ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಿ, ಅಥವಾ ನಿಮ್ಮದೇ
  ಹಂಚಿಕೊಂಡ ಸೀಕ್ರೆಟ್ ಅನ್ನು `endpoint.headers` ನಲ್ಲಿ ಇರಿಸಿ.
</Warning>

### ವಿನಂತಿ ಬಾಡಿ

`POST` / `PUT` / `PATCH` ಗಾಗಿ, ಬಾಡಿಯು **ಮಾತ್ರ** ಟೂಲ್
ಆರ್ಗ್ಯುಮೆಂಟ್‌ಗಳನ್ನು ಹೊಂದಿರುತ್ತದೆ (ಯಾವುದೇ ರ್ಯಾಪರ್ ಇಲ್ಲದೆ), ಕ್ಯಾನೊನಿಕಲ್ ಆಗಿ ಸೀರಿಯಲೈಸ್ ಮಾಡಲಾಗುತ್ತದೆ (ವಿಂಗಡಿಸಿದ ಕೀಗಳು, ಸಾಂದ್ರ
ಸೆಪರೇಟರ್‌ಗಳು):

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

`GET` / `DELETE` ಗಾಗಿ, ಆರ್ಗ್ಯುಮೆಂಟ್‌ಗಳನ್ನು **ಕ್ವೆರಿ ಪ್ಯಾರಾಮೀಟರ್‌ಗಳಾಗಿ**
ಕಳುಹಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಬಾಡಿ ಖಾಲಿಯಾಗಿರುತ್ತದೆ — ಆಗ ಖಾಲಿ
ಬೈಟ್ ಸ್ಟ್ರಿಂಗ್ ಮೇಲೆ ಸಹಿಯನ್ನು ಲೆಕ್ಕಹಾಕಲಾಗುತ್ತದೆ. [ವೆಬ್‌ಹುಕ್ ಸಹಿಗಳನ್ನು ಪರಿಶೀಲಿಸಿ](/kn/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 ಗೆ ದೋಷಗಳಾಗಿ ವರದಿ ಮಾಡಲಾಗುತ್ತದೆ, ಆದ್ದರಿಂದ
ಏಜೆಂಟ್ ಕ್ಷಮೆಯಾಚಿಸಿ ಸ್ಥಗಿತಗೊಳ್ಳುವ ಬದಲು ಮುಂದುವರಿಯಬಹುದು.

## ವೆಬ್‌ಹುಕ್-ಮೋಡ್ ಡಿಸ್ಪ್ಯಾಚ್

`endpoint` **ಇಲ್ಲದ** ಟೂಲ್‌ಗಳನ್ನು ನಿಮ್ಮ ಸಂಸ್ಥೆಯ ಲೆಗಸಿ
ವೆಬ್‌ಹುಕ್ URL ಗೆ ಸಹಿ ಮಾಡಿದ `telephony.tool` (ಫೋನ್ ಕರೆಗಳು) ಅಥವಾ `web.tool`
(ವೆಬ್ ಕರೆಗಳು) ವಿನಂತಿಯಾಗಿ ಡಿಸ್ಪ್ಯಾಚ್ ಮಾಡಲಾಗುತ್ತದೆ. ಕಾರ್ಯಗತಗೊಳಿಸಿದ ನಂತರ ವೆಬ್‌ಹುಕ್ ಎಂಡ್‌ಪಾಯಿಂಟ್‌ಗಳಿಗೆ ತಲುಪಿಸುವ [ಆಡಿಟ್ ಅಧಿಸೂಚನೆಗಳಿಗಿಂತ](/kn/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` ಇರುತ್ತದೆ. ಟೂಲ್ ಫಲಿತಾಂಶವನ್ನು JSON ಆಗಿ ಪ್ರತಿಕ್ರಿಯಿಸಿ — ನೇರ ಎಂಡ್‌ಪಾಯಿಂಟ್ ಕರೆಗಳಂತೆಯೇ
ಅದೇ ಪ್ರತಿಕ್ರಿಯೆ ಒಪ್ಪಂದವಿದೆ. ಇತರ ಪ್ರತಿಯೊಂದು ವೆಬ್‌ಹುಕ್‌ನಂತೆ, ಕಚ್ಚಾ ಬಾಡಿಯ ಮೇಲೆ ಸಂಸ್ಥೆಯ
ವೆಬ್‌ಹುಕ್ ಸೀಕ್ರೆಟ್ ಬಳಸಿ ವಿನಂತಿಗೆ ಸಹಿ ಮಾಡಲಾಗುತ್ತದೆ.

<Note>
  ಸಬ್‌ಸ್ಕ್ರೈಬ್ ಮಾಡಿದ [ವೆಬ್‌ಹುಕ್ ಎಂಡ್‌ಪಾಯಿಂಟ್‌ಗಳು](/kn/webhooks/endpoints) ಹೆಚ್ಚುವರಿಯಾಗಿ
  ಪ್ರತಿ ಟೂಲ್ ಕಾರ್ಯಗತಗೊಂಡ **ನಂತರ**
  ತಡೆರಹಿತ `telephony.tool` / `web.tool` **ಅಧಿಸೂಚನೆಯನ್ನು ಸ್ವೀಕರಿಸುತ್ತವೆ** (ಅದನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಿದ ಯಾವುದೇ ಪಥದಿಂದ), ಇದರಲ್ಲಿ
  ಟೂಲ್‌ನ ಪ್ರತಿಕ್ರಿಯೆಯೂ ಸೇರಿರುತ್ತದೆ — ಆಡಿಟ್ ಟ್ರೇಲ್‌ಗಳಿಗೆ ಉಪಯುಕ್ತ. [ಈವೆಂಟ್‌ಗಳ ಕ್ಯಾಟಲಾಗ್](/kn/webhooks/events)
  ನೋಡಿ.
</Note>

---

## ಸಹಿ ಪರಿಶೀಲನೆ

ನೇರ ಟೂಲ್ ಕರೆಗಳಿಗೆ ವೆಬ್‌ಹುಕ್‌ಗಳಂತೆಯೇ ಸಹಿ ಮಾಡಲಾಗುತ್ತದೆ:

- ನಿಖರವಾದ ವಿನಂತಿ-ಬಾಡಿ ಬೈಟ್‌ಗಳ ಮೇಲಿನ HMAC-SHA256 (ಕ್ಯಾನಾನಿಕಲ್ JSON — ವಿಂಗಡಿಸಲಾದ ಕೀಗಳು, ಹೆಚ್ಚುವರಿ ವೈಟ್‌ಸ್ಪೇಸ್ ಇಲ್ಲ)
- ನಿಮ್ಮ ಸಂಸ್ಥೆಯ ವೆಬ್‌ಹುಕ್ ಸೀಕ್ರೆಟ್ ಬಳಸಿ ಕೀ ಮಾಡಲಾಗಿದೆ
- `GET` / `DELETE` ಟೂಲ್‌ಗಳು ಖಾಲಿ ಬೈಟ್ ಸ್ಟ್ರಿಂಗ್‌ಗೆ ಸಹಿ ಮಾಡುತ್ತವೆ

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

ಖಾಲಿ-ಬಾಡಿ ಪ್ರಕರಣ ಮತ್ತು ಸೀಕ್ರೆಟ್ ಇಲ್ಲದಿರುವ ಎಚ್ಚರಿಕೆಯನ್ನು ಒಳಗೊಂಡ ಸಂಪೂರ್ಣ ಪಾಕವಿಧಾನಗಳು [ವೆಬ್‌ಹುಕ್ ಸಹಿಗಳನ್ನು ಪರಿಶೀಲಿಸಿ](/kn/guides/verify-webhook-signatures) ನಲ್ಲಿ ಇವೆ.

---

## ಉದಾಹರಣೆ: ಸಂಪೂರ್ಣ ಬುಕಿಂಗ್ ಫ್ಲೋ

ಸಂಪೂರ್ಣ ಅಪಾಯಿಂಟ್‌ಮೆಂಟ್ ಬುಕಿಂಗ್ ವ್ಯವಸ್ಥೆಗಾಗಿ ಟೂಲ್‌ಗಳ ಒಂದು ಸೆಟ್ ಇಲ್ಲಿದೆ:

```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="ದೋಷಗಳನ್ನು ಸಮರ್ಪಕವಾಗಿ ನಿರ್ವಹಿಸಿ">
    AI ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬಹುದಾದ ದೋಷ ಸಂದೇಶಗಳನ್ನು ಹಿಂತಿರುಗಿಸಿ: `{"error": "No slots available for that date"}` ಎಂಬುದು ಸಾಮಾನ್ಯ 500 ದೋಷಗಳಿಗಿಂತ ಉತ್ತಮ.
  </Accordion>

  <Accordion title="ಪ್ರತಿಕ್ರಿಯೆಗಳನ್ನು ಸಂಕ್ಷಿಪ್ತವಾಗಿಡಿ">
    ಸಂಭಾಷಣೆಯನ್ನು ಮುಂದುವರಿಸಲು AI ಗೆ ಅಗತ್ಯವಿರುವುದನ್ನು ಮಾತ್ರ ಹಿಂತಿರುಗಿಸಿ. ದೊಡ್ಡ ಪೇಲೋಡ್‌ಗಳು ಪ್ರತಿಕ್ರಿಯೆ ಸಮಯವನ್ನು ನಿಧಾನಗೊಳಿಸುತ್ತವೆ.
  </Accordion>

  <Accordion title="ಅಗತ್ಯ ಕ್ಷೇತ್ರಗಳನ್ನು ವಿವೇಕದಿಂದ ಬಳಸಿ">
    ನಿಜವಾಗಿಯೂ ಅಗತ್ಯವಿದ್ದಾಗ ಮಾತ್ರ ಕ್ಷೇತ್ರಗಳನ್ನು `required` ಎಂದು ಗುರುತಿಸಿ. ಉಪಕರಣವನ್ನು ಕರೆಯುವ ಮೊದಲು AI ಅಗತ್ಯ ಮಾಹಿತಿಗಾಗಿ ಬಳಕೆದಾರರನ್ನು ಕೇಳುತ್ತದೆ.
  </Accordion>
</AccordionGroup>

---

## ಸಂಬಂಧಿತ

<CardGroup cols={2}>
  <Card title="ಅಂತರ್ನಿರ್ಮಿತ ಉಪಕರಣಗಳು" icon="wrench" href="/kn/guides/built-in-tools">
    ಎಂಡ್‌ಪಾಯಿಂಟ್ ಅನ್ನು ವ್ಯಾಖ್ಯಾನಿಸದೆ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್ ನಿರ್ವಹಿಸುವ ಕರೆ ಕ್ರಿಯೆಗಳಿಗೆ prompt ನೀಡಿ.
  </Card>
  <Card title="ಆ್ಯಪ್ ಸಂಪರ್ಕಗಳು" icon="plug" href="/kn/guides/connect-apps">
    HubSpot, Salesforce, Slack, Google
    Calendar, Google Sheets ಮತ್ತು Cal.com ಗಾಗಿ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್ ನಿರ್ವಹಿಸುವ ಉಪಕರಣಗಳು — ಎಂಡ್‌ಪಾಯಿಂಟ್ ಅಗತ್ಯವಿಲ್ಲ.
  </Card>
  <Card title="MCP ಸರ್ವರ್‌ಗಳು" icon="server" href="/kn/guides/mcp-servers">
    MCP ಸರ್ವರ್ ಅನ್ನು ಜೋಡಿಸಿ ಮತ್ತು ಏಜೆಂಟ್ ತನ್ನ ಉಪಕರಣಗಳನ್ನು ಕರೆಯಲು ಅನುಮತಿಸಿ.
  </Card>
  <Card title="API ಸಂಪರ್ಕಗಳು" icon="code" href="/kn/guides/api-connections">
    ಏಜೆಂಟ್‌ಗಳಿಗೆ ಜೋಡಿಸಬಹುದಾದ ಮರುಬಳಕೆ ಮಾಡಬಹುದಾದ REST ಏಕೀಕರಣಗಳು.
  </Card>
  <Card title="ವೆಬ್‌ಹುಕ್ ಸಹಿಗಳನ್ನು ಪರಿಶೀಲಿಸಿ" icon="shield-check" href="/kn/guides/verify-webhook-signatures">
    ವೆಬ್‌ಹುಕ್‌ಗಳು ಮತ್ತು ಉಪಕರಣ ಕರೆಗಳಿಗಾಗಿ ಒಂದು ಪರಿಶೀಲನಾ ಸಹಾಯಕ.
  </Card>
</CardGroup>
