OneLi ב־Vercel AI SDK
איך נותנים לסוכן שבנוי ב־Vercel AI SDK לבצע שיחות טלפון בעברית דרך OneLi, לעקוב אחרי השיחה, לענות להתייעצויות ולקבל את התוצאה.
ב־AI SDK גרסה 7 יוצרים לקוח MCP עם createMCPClient מהחבילה @ai-sdk/mcp, ומעבירים את הכלים שלו ל־generateText או לסוכן.
התקנה
- יוצרים מפתח API ב־oneli.io/app/connect ושומרים אותו במשתנה הסביבה
ONELI_API_KEYבשרת. - מתקינים את החבילות:
Terminal
npm i ai @ai-sdk/mcp @ai-sdk/openai zodנבדק מול: ai 7.0.148 · @ai-sdk/mcp 2.0.81
חיבור דרך MCP וכלי REST
TypeScript
import { createMCPClient } from '@ai-sdk/mcp';
import { generateText, stepCountIs, tool } from 'ai';
import { openai } from '@ai-sdk/openai';
import { z } from 'zod';
const mcp = await createMCPClient({
transport: { type: 'http', url: 'https://mcp.oneli.io/mcp',
headers: { Authorization: `Bearer ${process.env.ONELI_API_KEY}` } },
});
try {
const { text } = await generateText({
model: openai('gpt-5'), tools: await mcp.tools(),
stopWhen: stepCountIs(10), // default is 1 step: without this the model never answers after the tool call
prompt: 'Call +972… and book a table for 2 at 19:00',
});
console.log(text);
} finally { await mcp.close(); }
export const createCallTask = tool({
description: 'Have OneLi place a phone call. to_number in E.164.',
inputSchema: z.object({ to_number: z.string(), goal: z.string(), instructions: z.string().optional() }), // inputSchema, not parameters
execute: async (input) => {
const r = await fetch('https://api.oneli.io/v1/call-tasks', { method: 'POST',
headers: { Authorization: `Bearer ${process.env.ONELI_API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ idempotency_key: crypto.randomUUID(), ...input }) });
if (!r.ok) throw new Error(`OneLi ${r.status}`);
return r.json();
},
});
// generateText({ ..., tools: { create_call_task: createCallTask } })שימו לב
- בלי stopWhen ברירת המחדל היא צעד אחד, והמודל לא יענה אחרי קריאת הכלי.
- בגרסה 7 השם הראשי הוא isStepCount; stepCountIs עדיין מיוצא ככינוי.
- ב־tool() משתמשים ב־inputSchema ולא ב־parameters.
- למחלקת הסוכן ToolLoopAgent יש ברירת מחדל של 20 צעדים.
- חלופה מתארחת ל־OpenAI בלבד: openai.tools.mcp({ serverLabel, serverUrl, headers }).
מספרי טלפון: OneLi מקבלת מספר ישראלי בכל פורמט נפוץ (050-1234567, +972501234567). כשהשיחה מתחילה, הסוכן ממשיך עם get_call_events או עם GET /v1/call-tasks/:id/events כדי לעקוב, לענות להתייעצויות ולקבל את הסיכום.