OneLi ב־Vercel AI SDK

איך נותנים לסוכן שבנוי ב־Vercel AI SDK לבצע שיחות טלפון בעברית דרך OneLi, לעקוב אחרי השיחה, לענות להתייעצויות ולקבל את התוצאה.

ב־AI SDK גרסה 7 יוצרים לקוח MCP עם createMCPClient מהחבילה @ai-sdk/mcp, ומעבירים את הכלים שלו ל־generateText או לסוכן.

התקנה

  1. יוצרים מפתח API ב־oneli.io/app/connect ושומרים אותו במשתנה הסביבה ONELI_API_KEY בשרת.
  2. מתקינים את החבילות:
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 כדי לעקוב, לענות להתייעצויות ולקבל את הסיכום.

מה הלאה

מקורות: ai-sdk.dev/docs/ai-sdk-core/mcp-tools