ಫಂಕ್ಷನ್ ಟೂಲ್ಗಳು
ಫಂಕ್ಷನ್ ಟೂಲ್ಗಳು ನಿಮ್ಮ AI ಏಜೆಂಟ್ಗಳಿಗೆ ಫೋನ್ ಕರೆಗಳ ಸಮಯದಲ್ಲಿ ಬಾಹ್ಯ APIಗಳನ್ನು ಕರೆಯಲು ಅನುಮತಿಸುತ್ತವೆ. ಗ್ರಾಹಕ ಡೇಟಾವನ್ನು ಹುಡುಕಲು, ಲಭ್ಯತೆಯನ್ನು ಪರಿಶೀಲಿಸಲು, ಅಪಾಯಿಂಟ್ಮೆಂಟ್ಗಳನ್ನು ಬುಕ್ ಮಾಡಲು ಅಥವಾ ನಿಮ್ಮ ಬ್ಯಾಕೆಂಡ್ ಬೆಂಬಲಿಸುವ ಯಾವುದೇ ಕ್ರಿಯೆಯನ್ನು ನಿರ್ವಹಿಸಲು ಅವುಗಳನ್ನು ಬಳಸಿ.
ಇದು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ
- ನೀವು ಸ್ಕೀಮಾದೊಂದಿಗೆ ಟೂಲ್ಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತೀರಿ (ಟೂಲ್ ಯಾವ ಆರ್ಗ್ಯುಮೆಂಟ್ಗಳನ್ನು ಸ್ವೀಕರಿಸುತ್ತದೆ)
- ನೀವು
endpointಕಾನ್ಫಿಗರೇಶನ್ ಒದಗಿಸುತ್ತೀರಿ (ThunderPhone ನಿಮ್ಮ APIಯನ್ನು ಎಲ್ಲಿ ಕರೆಯುತ್ತದೆ) — ಅಥವಾ ನಿಮ್ಮ ಸಂಸ್ಥೆಯ ವೆಬ್ಹುಕ್ನಲ್ಲಿ ಟೂಲ್ ಕರೆಗಳನ್ನು ಸ್ವೀಕರಿಸಲು ಅದನ್ನು ಬಿಡಬಹುದು - ಕರೆಯ ಸಮಯದಲ್ಲಿ, ಸಂಭಾಷಣೆಯ ಆಧಾರದ ಮೇಲೆ ಟೂಲ್ ಅನ್ನು ಯಾವಾಗ ಬಳಸಬೇಕೆಂದು AI ನಿರ್ಧರಿಸುತ್ತದೆ
- ThunderPhone ಟೂಲ್ ಆರ್ಗ್ಯುಮೆಂಟ್ಗಳೊಂದಿಗೆ ನಿಮ್ಮ endpoint ಅನ್ನು ಕರೆಯುತ್ತದೆ
- ಸಂಭಾಷಣೆಯನ್ನು ಮುಂದುವರಿಸಲು ನಿಮ್ಮ API ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು AIಗೆ ಮರಳಿ ಒದಗಿಸಲಾಗುತ್ತದೆ
ಟೂಲ್ ಸ್ಕೀಮಾ
ಪ್ರತಿಯೊಂದು ಟೂಲ್ ಈ ರಚನೆಯನ್ನು ಅನುಸರಿಸುತ್ತದೆ:
{
"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"
}
}
}
ಫಂಕ್ಷನ್ ವ್ಯಾಖ್ಯಾನ
| ಕ್ಷೇತ್ರ | ವಿಧ | ಅಗತ್ಯವಿದೆ | ವಿವರಣೆ |
|---|---|---|---|
name | ಸ್ಟ್ರಿಂಗ್ | ಹೌದು | ಟೂಲ್ಗೆ ಅನನ್ಯ ಗುರುತಿಸುವಿಕೆ |
description | ಸ್ಟ್ರಿಂಗ್ | ಹೌದು | ಈ ಟೂಲ್ ಅನ್ನು ಯಾವಾಗ ಬಳಸಬೇಕೆಂದು AIಗೆ ವಿವರಿಸುತ್ತದೆ |
parameters | ಆಬ್ಜೆಕ್ಟ್ | ಹೌದು | ಟೂಲ್ ಆರ್ಗ್ಯುಮೆಂಟ್ಗಳಿಗಾಗಿ JSON ಸ್ಕೀಮಾ |
Endpoint ಕಾನ್ಫಿಗರೇಶನ್
| ಕ್ಷೇತ್ರ | ವಿಧ | ಅಗತ್ಯವಿದೆ | ವಿವರಣೆ |
|---|---|---|---|
url | ಸ್ಟ್ರಿಂಗ್ | ಹೌದು | ನಿಮ್ಮ API endpoint URL |
method | ಸ್ಟ್ರಿಂಗ್ | ಇಲ್ಲ | HTTP ವಿಧಾನ (ಡೀಫಾಲ್ಟ್: POST) |
headers | ಆಬ್ಜೆಕ್ಟ್ | ಇಲ್ಲ | ಸೇರಿಸಬೇಕಾದ ಕಸ್ಟಮ್ ಹೆಡರ್ಗಳು |
ಎರಡು ಕರೆಯುವ ಮಾರ್ಗಗಳು
ನಿಮ್ಮ ಸರ್ವರ್ ಯಾವ ವಿನಂತಿಯನ್ನು ಸ್ವೀಕರಿಸುತ್ತದೆ ಎಂಬುದು ಟೂಲ್ನಲ್ಲಿ
endpoint ಇದೆಯೇ ಎಂಬುದರ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿರುತ್ತದೆ:
endpoint ಹೊಂದಿರುವ ಟೂಲ್ | endpoint ಇಲ್ಲದ ಟೂಲ್ | |
|---|---|---|
| ವಿನಂತಿ ಎಲ್ಲಿ ಹೋಗುತ್ತದೆ | ನೇರವಾಗಿ endpoint.url ಗೆ | ನಿಮ್ಮ ಸಂಸ್ಥೆಯ ಲೆಗಸಿ ವೆಬ್ಹುಕ್ URL ಗೆ |
| ಬಾಡಿ | ಕೇವಲ ಟೂಲ್ ಆರ್ಗ್ಯುಮೆಂಟ್ಗಳು | telephony.tool / web.tool ಎನ್ವಲಪ್ |
| ಹೆಡರ್ಗಳು | ನಿಮ್ಮ endpoint.headers + X-ThunderPhone-Call-ID + X-ThunderPhone-Signature | Content-Type + X-ThunderPhone-Signature |
| ಸೈನಿಂಗ್ ಕೀ | ಸಂಸ್ಥೆಯ ವೆಬ್ಹುಕ್ ಸೀಕ್ರೆಟ್ | ಸಂಸ್ಥೆಯ ವೆಬ್ಹುಕ್ ಸೀಕ್ರೆಟ್ |
ಎರಡೂ ಮಾರ್ಗಗಳು ಬ್ಲಾಕಿಂಗ್ ಆಗಿವೆ — ಫಲಿತಾಂಶಕ್ಕಾಗಿ AI ವಾಕ್ಯದ ಮಧ್ಯದಲ್ಲೇ
ಕಾಯುತ್ತಿದೆ — ಮತ್ತು 20 s ಸಮಯಮಿತಿಯನ್ನು ಹೊಂದಿವೆ. ಹ್ಯಾಂಡ್ಲರ್ಗಳನ್ನು ವೇಗವಾಗಿರಿಸಿ. ಮಿಶ್ರಣವೂ
ಸರಿ: ವೆಬ್ಹುಕ್ URL ಹೊಂದಿರುವ ಸಂಸ್ಥೆಯ ಕರೆಯಲ್ಲಿ, endpoint ಇರುವ ಟೂಲ್ಗಳನ್ನು
ನೇರವಾಗಿ ಕರೆಯಲಾಗುತ್ತದೆ ಮತ್ತು ಉಳಿದವು ವೆಬ್ಹುಕ್ಗೆ ಹಿಂತಿರುಗುತ್ತವೆ.
ನೇರ ಎಂಡ್ಪಾಯಿಂಟ್ ಕರೆಗಳು
AI endpoint ಹೊಂದಿರುವ ಉಪಕರಣವನ್ನು ಆಹ್ವಾನಿಸಿದಾಗ, ThunderPhone ನಿಮ್ಮ URL ಗೆ
ವಿನಂತಿಯನ್ನು ಕಳುಹಿಸುತ್ತದೆ:
ವಿನಂತಿ ಹೆಡರ್ಗಳು
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-SHA256X-ThunderPhone-Call-ID— ಪ್ರಸ್ತುತ ಕರೆ ID
ನಿಮ್ಮ endpoint.headers ಅದನ್ನು ಓವರ್ರೈಡ್ ಮಾಡದ ಹೊರತು
Content-Type: application/json ಹೊಂದಿಸಲಾಗುತ್ತದೆ — ಕಸ್ಟಮ್ Content-Type ಗೆ ಆದ್ಯತೆ.
ವಿನಂತಿ ಬಾಡಿ
POST / PUT / PATCH ಗಾಗಿ, ಬಾಡಿಯು ಕೇವಲ ಉಪಕರಣದ
ಆರ್ಗ್ಯುಮೆಂಟ್ಗಳನ್ನು (ಯಾವುದೇ ರ್ಯಾಪರ್ ಇಲ್ಲದೆ) ಕ್ಯಾನಾನಿಕಲ್ ರೀತಿಯಲ್ಲಿ (ವಿಂಗಡಿಸಿದ ಕೀಗಳು, ಸಾಂದ್ರ
ವಿಭಜಕಗಳು) ಸೀರಿಯಲೈಸ್ ಮಾಡಿ ಒಳಗೊಂಡಿರುತ್ತದೆ:
{"date":"2025-01-02","service":"consultation"}
GET / DELETE ಗಾಗಿ, ಆರ್ಗ್ಯುಮೆಂಟ್ಗಳನ್ನು ಕ್ವೆರಿ ಪ್ಯಾರಾಮೀಟರ್ಗಳಾಗಿ
ಕಳುಹಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಬಾಡಿ ಖಾಲಿಯಾಗಿರುತ್ತದೆ — ನಂತರ ಸಹಿಯನ್ನು ಖಾಲಿ
ಬೈಟ್ ಸ್ಟ್ರಿಂಗ್ ಮೇಲೆ ಲೆಕ್ಕಹಾಕಲಾಗುತ್ತದೆ. ನೋಡಿ
ವೆಬ್ಹುಕ್ ಸಹಿಗಳನ್ನು ಪರಿಶೀಲಿಸಿ.
ಪ್ರತಿಕ್ರಿಯೆ
ಉಪಕರಣದ ಫಲಿತಾಂಶದೊಂದಿಗೆ 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
(ವೆಬ್ ಕರೆಗಳು) ವಿನಂತಿಯಾಗಿ ರವಾನಿಸಲಾಗುತ್ತದೆ. ಕಾರ್ಯಗತಗೊಳಿಸಿದ ನಂತರ ವೆಬ್ಹುಕ್ ಎಂಡ್ಪಾಯಿಂಟ್ಗಳಿಗೆ
ತಲುಪಿಸುವ ಆಡಿಟ್ ಅಧಿಸೂಚನೆಗಳಿಗಿಂತ ಭಿನ್ನವಾಗಿ, ಈ ವಿನಂತಿಯೇ
ಕಾರ್ಯಗತಗೊಳಿಸುವಿಕೆಯಾಗಿದೆ — ನಿಮ್ಮ HTTP ಪ್ರತಿಕ್ರಿಯೆಯೇ ಉಪಕರಣದ ಫಲಿತಾಂಶವಾಗಿರುತ್ತದೆ.
{
"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 ಆಗಿ ಪ್ರತಿಕ್ರಿಯಿಸಿ —
ನೇರ ಎಂಡ್ಪಾಯಿಂಟ್ ಕರೆಗಳಂತೆಯೇ ಅದೇ ಪ್ರತಿಕ್ರಿಯೆ ಒಪ್ಪಂದ. ಇತರ ಎಲ್ಲ ವೆಬ್ಹುಕ್ಗಳಂತೆ, ವಿನಂತಿಗೆ
ಮೂಲ ಬಾಡಿಯ ಮೇಲೆ ಸಂಸ್ಥೆಯ ವೆಬ್ಹುಕ್ ರಹಸ್ಯದಿಂದ ಸಹಿ ಮಾಡಲಾಗುತ್ತದೆ.
ಸಹಿ ಪರಿಶೀಲನೆ
ನೇರ ಟೂಲ್ ಕರೆಗಳಿಗೆ ವೆಬ್ಹುಕ್ಗಳ ರೀತಿಯಲ್ಲೇ ಸಹಿ ಮಾಡಲಾಗುತ್ತದೆ:
- ನಿಖರವಾದ ವಿನಂತಿ-ಬಾಡಿ ಬೈಟ್ಗಳ ಮೇಲೆ HMAC-SHA256 (ಕ್ಯಾನಾನಿಕಲ್ JSON — ಕ್ರಮಬದ್ಧಗೊಳಿಸಿದ ಕೀಗಳು, ಹೆಚ್ಚುವರಿ ಖಾಲಿ ಜಾಗವಿಲ್ಲ)
- ನಿಮ್ಮ ಸಂಸ್ಥೆಯ ವೆಬ್ಹುಕ್ ಸೀಕ್ರೆಟ್ ಬಳಸಿ ಕೀ ಮಾಡಲಾಗಿದೆ
GET/DELETEಟೂಲ್ಗಳು ಖಾಲಿ ಬೈಟ್ ಸ್ಟ್ರಿಂಗ್ಗೆ ಸಹಿ ಮಾಡುತ್ತವೆ
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}
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 });
});
ಖಾಲಿ-ಬಾಡಿ ಸಂದರ್ಭ ಮತ್ತು ಸೀಕ್ರೆಟ್ ಇಲ್ಲದಿರುವ ಎಚ್ಚರಿಕೆ ಸೇರಿದಂತೆ ಸಂಪೂರ್ಣ ವಿಧಾನಗಳು ವೆಬ್ಹುಕ್ ಸಹಿಗಳನ್ನು ಪರಿಶೀಲಿಸಿ ನಲ್ಲಿ ಇವೆ.
ಉದಾಹರಣೆ: ಸಂಪೂರ್ಣ ಬುಕಿಂಗ್ ಫ್ಲೋ
ಸಂಪೂರ್ಣ ಅಪಾಯಿಂಟ್ಮೆಂಟ್ ಬುಕಿಂಗ್ ವ್ಯವಸ್ಥೆಗಾಗಿ ಟೂಲ್ಗಳ ಒಂದು ಸೆಟ್ ಇಲ್ಲಿದೆ:
{
"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" }
}
}
]
}
ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು
ಸ್ಪಷ್ಟ ವಿವರಣೆಗಳನ್ನು ಬರೆಯಿರಿ
description ಕ್ಷೇತ್ರವು AI ಗೆ ಉಪಕರಣವನ್ನು ಯಾವಾಗ ಬಳಸಬೇಕೆಂದು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ. ಅದು ಏನು ಮಾಡುತ್ತದೆ ಮತ್ತು ಯಾವಾಗ ಸೂಕ್ತವಾಗಿದೆ ಎಂಬುದನ್ನು ನಿರ್ದಿಷ್ಟವಾಗಿ ವಿವರಿಸಿ.
ದೋಷಗಳನ್ನು ಸುವ್ಯವಸ್ಥಿತವಾಗಿ ನಿರ್ವಹಿಸಿ
ಸಾಮಾನ್ಯ 500 ದೋಷಗಳ ಬದಲಿಗೆ AI ಅರ್ಥಮಾಡಿಕೊಳ್ಳಬಹುದಾದ ದೋಷ ಸಂದೇಶಗಳನ್ನು ಹಿಂತಿರುಗಿಸಿ: {"error": "No slots available for that date"}.
ಪ್ರತಿಕ್ರಿಯೆಗಳನ್ನು ಸಂಕ್ಷಿಪ್ತವಾಗಿಡಿ
ಸಂಭಾಷಣೆಯನ್ನು ಮುಂದುವರಿಸಲು AI ಗೆ ಬೇಕಾದುದನ್ನು ಮಾತ್ರ ಹಿಂತಿರುಗಿಸಿ. ದೊಡ್ಡ ಪೇಲೋಡ್ಗಳು ಪ್ರತಿಕ್ರಿಯೆ ಸಮಯವನ್ನು ನಿಧಾನಗೊಳಿಸುತ್ತವೆ.
ಅಗತ್ಯ ಕ್ಷೇತ್ರಗಳನ್ನು ವಿವೇಚನೆಯಿಂದ ಬಳಸಿ
ನಿಜವಾಗಿಯೂ ಅಗತ್ಯವಿದ್ದಾಗ ಮಾತ್ರ ಕ್ಷೇತ್ರಗಳನ್ನು required ಎಂದು ಗುರುತಿಸಿ. ಉಪಕರಣವನ್ನು ಕರೆಯುವ ಮೊದಲು AI ಬಳಕೆದಾರರನ್ನು ಅಗತ್ಯ ಮಾಹಿತಿಗಾಗಿ ಕೇಳುತ್ತದೆ.
ಸಂಬಂಧಿತ
HubSpot, Salesforce, Slack, Google Calendar, Google Sheets ಮತ್ತು Cal.com ಗಾಗಿ ಪ್ಲಾಟ್ಫಾರ್ಮ್-ನಿರ್ವಹಿತ ಉಪಕರಣಗಳು — ಎಂಡ್ಪಾಯಿಂಟ್ ಅಗತ್ಯವಿಲ್ಲ.
MCP ಸರ್ವರ್ ಅನ್ನು ಲಗತ್ತಿಸಿ ಮತ್ತು ಏಜೆಂಟ್ ಅದರ ಉಪಕರಣಗಳನ್ನು ಕರೆಯಲು ಅನುಮತಿಸಿ.
ಏಜೆಂಟ್ಗಳಿಗೆ ಲಗತ್ತಿಸಬಹುದಾದ ಮರುಬಳಕೆ ಮಾಡಬಹುದಾದ REST ಏಕೀಕರಣಗಳು.
ವೆಬ್ಹುಕ್ಗಳು ಮತ್ತು ಉಪಕರಣ ಕರೆಗಳಿಗಾಗಿ ಒಂದು ಪರಿಶೀಲನಾ ಸಹಾಯಕ.