One Vendor Instead of Four: The Same Voice Agent, Built Without Code

A sixteen-minute build of a phone voice agent entirely inside Telnyx's console — model, prompt, tools, knowledge base, voice, phone number and web widget, with the only code being one copy-pasted embed tag. Read alongside the four-vendor Claude Code build covered previously, it is a controlled experiment in where the complexity goes when you collapse a stack into one provider. Both agents work. Both hit the same wall in the same place: the knowledge base. In this one it fails out loud on camera — "I don't have specific information about NNCode" — and the video moves on without comment.

How To Build A Phone AI Voice Agent with Telnyx
📺 Nicolai Nielsen ⏱️ 15:55 📅 23 June 2026 👁️ 4,325
Telnyx Voice agents No-code Kimi K2 Knowledge base Sponsored

📌 Same goal, opposite method

This builds the same artefact as the Claude Code walkthrough covered previously — an AI agent that answers a real phone number and books appointments — by the opposite route.

Four-vendor build (Claude Code)This build (Telnyx console)
Vendors5 — Telnyx, LiveKit, Gladia, ElevenLabs, Anthropic1
Build interfaceA spoken paragraph to a coding agentA web console
Code writtenAll of it, by the agentOne embed tag, copy-pasted
ModelClaude Haiku 4.5 (agent's own pick)Kimi K2 (human's pick)
Knowledge baseNot attemptedAttempted — and failed on camera
SponsorshipGladia affiliate linkTelnyx sponsored the video
Reading them together is more useful than reading either alone, because the pair isolates what actually changes. The build time is comparable. The demo quality is comparable. What differs is where the complexity sits: five accounts and five failure domains on one side, one console and one bill on the other — traded against being inside one vendor's product decisions entirely.

The interesting result is that the hard part turned out to be neither the plumbing nor the console. It was grounding, and both builds hit it.
Disclosure, stated up front because the video does too: Telnyx sponsored this. The first link in the description is a tracked utm_medium=sponsored URL. That does not make the demonstration false — everything shown was verified for this article — but it explains why no alternative is compared and why every rough edge passes without comment.

🎛️ Every setting, one by one 1:58

The whole agent is assembled from console fields. Listed here in the order he sets them, because the list is the architecture — every one of these was a config file or an API call in the other build.

SettingWhat it controlsWhat he chose
Agent nameIdentifierNN Code support agent
TemplateStarting prompt — healthcare, sales, lead screener, B2B demo qualification, customer serviceBlank, then pasted his own
ModelThe reasoning engineKimi K2 — see §2
Greeting modeWho speaks first — assistant, model-generated, or wait for userAssistant speaks first
Greeting textThe opening line"Hi, I'm from NN Code. How can I help you today?"
InstructionsSystem prompt, with template variablesPersona "Nova", 2–3 sentence limit, ask follow-ups
ToolsHang up, webhook, transfer, handoff, SMS, emailTicket creation, scheduling
Knowledge baseUploaded files or a URLAn FAQ .txt — see §4
VoiceLanguage, gender, TTS provider and modelDefault
Speaking planWait timings, interruption handlingDefault
Phone numberSearch, add to cart, assign to the agentPurchased in-console
WidgetEmbed snippet for a websiteCopy-pasted into a landing page
The claim that this is the same as the API is credible and he says it plainly 2:55: "Everything from the Telnyx website here, you can do through the API as well… just throw the documentation into any LLM provider like Codex, Claude Code or whatever, and you can pretty much get it hooked up."

That is the console and the coding-agent path converging on the same surface — which is exactly what §8 turns out to be about.
The "speaking plan" is the setting worth knowing exists, and it is the one no one thinks about until a call goes wrong. Wait timings and interruption handling determine whether the agent talks over a caller who pauses mid-sentence. In the four-vendor build this behaviour lives somewhere in LiveKit's turn detection; here it is a form field. He leaves it default and does not explain it, which is the right call for a demo and the wrong one for production.

🧠 The model choice 2:18

"We can choose what model we want to use for our agent as well. We're just going to go with Kimi K2. It's a pretty cheap model and also very good."
The contrast with the other build is the point. There, the coding agent selected Claude Haiku 4.5 — its own vendor's model — and the presenter noticed, said he considered alternatives more reliable, and shipped it anyway. Here a human picks an open-weight Chinese model from a dropdown in two seconds, for a stated reason.

Two seconds of thought is not deep evaluation. But it is a decision that was made rather than inherited, and on a component that dominates the latency budget of a phone call, that difference matters more than it looks.
"Cheap and very good" is asserted, not shown. No latency figure, no cost per minute, no comparison against the alternatives in the same dropdown. For a voice agent the relevant question is not benchmark quality but time-to-first-token — and neither this video nor the other one measures it.

🔌 Tools and integrations 4:16

Tool typeWhat it does
Hang upEnds the call — a tool, not a special case
WebhookThe general escape hatch to your own systems
TransferRoute the call to another number
Handoff / inviteBring in another agent or participant
Send SMSText the caller mid-call
Send emailNotify a human

Named integrations shown in the console: GitHub, ClickUp, Stripe, Notion, Microsoft Teams, ServiceNow, plus calendar scheduling.

This is exactly the "moat" the other video argued agencies still own"a lot of the businesses I've spoken to had very difficult APIs and CRMs to integrate with… Claude Code cannot develop a relationship with an API."

Telnyx's answer is to build the relationships once and sell them as checkboxes. ServiceNow ticket creation from a phone call is the sort of integration that consumes weeks of an agency's time, and it is a dropdown here.

The moat argument still holds for the long tail — the twenty-year-old CRM with no public API — but the head of the distribution is being commoditised in exactly this way, and quickly.
Note that none of these integrations is demonstrated working. They are shown as available options in a menu. The two tools that do run on camera — ticket creation and scheduling — are the ones examined in §6, and one of them says it saved to a "demo schedule".

📚 The knowledge base fails 11:53

He uploads an FAQ text file — company information, opening hours, pricing, timelines, what NN Code does — connects it, and later tests the widget on his landing page.

The agent does not know what NN Code is. Verbatim from the call:

Caller: "What information do you have about NN Code?"
Agent: "Let me look that up for you… I don't have specific information about NN Code in our system. Could you clarify what you're looking for? Is it a product, a project, or something else?"

The knowledge base is an FAQ about NN Code. The first question asked of it is about NN Code. It fails.
What makes this diagnostic rather than a one-off: the very next exchange succeeds. Asked "can you help me with AI integrations?" the agent answers "NNCode specializes in AI integrations, including voice AI agents, workflow automation, and production AI systems" — which is the uploaded file's content, retrieved correctly.

So the data was there and the retrieval worked for one phrasing and not the other. That is the characteristic failure of embedding-based lookup: a bare entity name is a weak query. "What do you know about X" carries almost no semantic signal beyond X itself; "help me with AI integrations" matches a whole paragraph of the source document.

Note also the agent's earlier stumble at 10:11, cut short in the recording: "I wasn't able to pull up the…" — the same retrieval path failing mid-sentence during the ticket flow.
The video does not acknowledge any of this, and that is the most substantive criticism available here. It moves straight from the failed answer to "so it's pretty nice to just have the small widget down at the bottom."

A viewer following along will connect a knowledge base, see it work in testing on a well-phrased question, and ship an agent that denies knowing the company it represents when a customer asks the most natural opening question there is.

He also flags — and this is to his credit — "I forgot to hit save" on the knowledge base at 8:51. Whether the widget was talking to a saved version is not established on camera.

🔀 Versioning — the best feature 8:55

"You can also just have multiple versions of your agents. So here for example you can see I have multiple different versions. You can always just promote one of them to main. And this is the one going to use in production."
Eleven seconds on the single most production-relevant capability in either video.

A prompt is a deployed artefact. Changing it changes what customers hear, and there is no compiler to catch a regression. Versioning plus promotion gives you the two things that make that survivable: a rollback path and a staging concept.

In the four-vendor Claude Code build there is no equivalent. The prompt is whatever the agent last wrote into a file. Rolling back means asking it to change something back — an operation with no guarantee of returning to a known state.

This is the strongest argument in the video for the console approach, and it goes by in a sentence between two screenshots.
What is still missing: nothing about evaluating a version before promoting it. He tests by calling and listening. That works for one agent and one person; it does not scale to a team, and there is no mention of transcript review, regression cases or call scoring — despite an analytics tab being visible on screen.

📞 Two calls, read closely 9:22

Call one — in-console test

Handles a support-ticket request and an appointment request in the same conversation, correctly collecting name and issue description before acting. Then, mid-flow: "I wasn't able to pull up the…" — and the recording moves on.

Call two — a real phone call 13:36

"Great. I'd love to set that up. To get you scheduled, I'll need your name, a good phone number, and what type of project you're working on… We have Monday at 10 a.m. and Monday at 2 p.m. open. Would either of those work for you?… You're all set for Monday at 2 p.m. Your appointment is saved in the demo schedule. To summarize, I have you down as working on an AI workflow for your ticketing system, scheduled for Monday at 2 p.m."
That is a genuinely well-run booking flow, and the closing summary is the part worth copying. Reading back the captured details — project type, day, time — is how a human receptionist catches transcription errors before they become a missed meeting. It is the single highest-value behaviour in either video's demos.
But note the phrase the agent used: "saved in the demo schedule." Not a calendar. The video shows Calendly and calendar integrations as available and describes the possibility — "someone can just call your phone, book an appointment, it schedules it through Calendly" — but what runs on camera writes to a demo store.

The distance between "the agent collected the booking correctly" and "the booking exists in your calendar" is the entire integration problem, and it is not crossed here.

💬 The honest bit about chatbots 12:21

"You don't really know if it's a human or an AI that you're talking with. Most people are actually just becoming pretty annoyed by those tools and they just want to get through to a human. But if you're trying to use AI systems, definitely just make it obvious that this is AI. You can have multiple options also to get through a human."
Unprompted, in a sponsored video, and correct on both counts. Disclose that it is an agent, and always provide an escape hatch to a person.

It is also the only ethical guidance in either voice-agent video, and it arrives in the one that had the most commercial reason to skip it. Worth noting when the same video is criticised in §4 — the criticism is about what goes unexamined, not about the presenter's candour.
The advice is stated and not implemented. The agent introduces itself as "Nova… from NN Code", never as an AI, and no path to a human is demonstrated on either call — despite transfer being one of the tools listed in §3. The right principle, unwired.

🧰 The 238 skills nobody used 3:00

The description links two repositories the video mentions only in passing. Both are real, and one of them reframes the whole "no-code versus coding agent" question.

Verified via the GitHub API:
RepositoryStarsLicenceContents
team-telnyx/telnyx-code-examples149MIT510 top-level directories — the description says "100+"
team-telnyx/ai201MITPlugin marketplace v0.4.0
Examples are organised per use case and per language — activate-sim-card- exists in C#, Go, Java, Node, PHP, Python and Ruby; alongside abandoned-cart-recovery-python, after-hours-nurse-triage-python, ai-after-hours-emergency-triage-python.
The second repository is the interesting one. Its README states: "Install the unified Telnyx plugin to give your AI coding assistant Telnyx MCP server access and 238 Agent Skills covering messaging, voice, numbers, AI, IoT, WebRTC, Twilio migration, account management." Installation is one line:
/plugin marketplace add team-telnyx/ai
The marketplace manifest confirms modular plugins — telnyx-whatsapp, telnyx-voice and others — with providers for Claude Code, Cursor and Gemini CLI, plus a .windsurf directory and an AGENTS.md.
Which makes the framing of both videos slightly obsolete. The other build wired Telnyx to LiveKit by describing the topology to Claude Code. This build clicked through a console. Telnyx's own answer is a third thing: ship the vendor's expertise as skills the coding agent loads directly — no console, and no need for the human to know the topology either.

The video links it and never opens it. That is the most significant omission here, and it is the one that connects to everything else on this site: vendors are starting to distribute capability as agent skills rather than as documentation or as a UI.

⚖️ One vendor vs four

DimensionFour vendors, coding agentOne vendor, console
Accounts & keys5 accounts, 5+ keys1 account
Failure domains5 independent1 — but total
Bills5, different units1
Component choiceBest-of-breed per layerWhatever the vendor offers
Prompt versioningNoneVersions + promote to main
Self-hostingLiveKit is Apache-2.0Not possible
PortabilityCode you own, vendors swappableConsole config, no export shown
Time to working demo~10 min + 1–2 days verification~15 min
Who chose the modelThe builder agentThe human
Knowledge groundingNot attemptedAttempted, failed on camera
The honest conclusion from the pair is that the stack was never the hard part.

Both builds produced a working agent in about a quarter of an hour. Neither addressed retry behaviour, evaluation, disclosure-in-practice, or what the caller hears when a tool call fails. The one build that attempted grounding failed it on camera and did not notice.

Collapsing five vendors into one removes five sets of credentials and five status pages. It does not remove the thing that actually determines whether the agent is usable — which is whether it reliably knows what it is supposed to know, and what it does when it does not.

🏦 Reading this from a bank

PropertyImplication in a regulated setting
Single vendor, single DPAOne processor agreement instead of five. Materially simpler procurement
Prompt versioning with promote-to-mainChange control for a customer-facing artefact. The one governance primitive present in either build
No self-hosting pathVoice, transcripts and knowledge base all sit with the provider. Voice is biometric data in most frameworks
Knowledge base failed on the primary questionAn agent that denies knowing its own institution is a customer-trust incident, not a bug
Retrieval works for some phrasings, not othersNeeds a phrasing-variation test set before launch. Testing by calling and listening will not find this
Booking saved to a "demo schedule"The integration is the project. Collecting a booking correctly is the easy half
ServiceNow, Teams, Stripe as checkboxesWhere enterprise integration effort actually goes — if they work as advertised, which was not shown
Disclose-it-is-AI advice given, not implementedIn several jurisdictions disclosure is becoming a requirement, not a courtesy
No human-transfer path demonstratedThe transfer tool exists and is unwired. For regulated support, an escape hatch is mandatory
Vendor ships 238 agent skillsThe emerging distribution model: capability delivered to your coding agent, not to your developers
The transferable observation is §8, not the console. A telecoms vendor now publishes its own capabilities as 238 agent skills installable with one command into Claude Code, Cursor or Gemini CLI.

That is a third answer to "how do you build this", distinct from both videos: not a console, and not a human describing the topology, but the vendor's knowledge shipped directly into the builder. If that pattern generalises, the interesting question stops being which stack you assemble and becomes which vendors have published skills for the thing you are trying to do.

🔍 Claims checked

ClaimResult
Telnyx console builds a full voice agent without codeDemonstrated end to end; only the widget embed is code
"100+ production-ready examples"Understatedtelnyx-code-examples has 510 top-level directories, MIT, pushed today
A Claude Code plugin existsteam-telnyx/ai, MIT, 201 ⭐, .claude-plugin/marketplace.json v0.4.0
Plugin scopeREADME: 238 Agent Skills + MCP access; Claude Code, Cursor, Gemini CLI, Windsurf
Console settings match the APIConsistent with the published dev docs and the plugin's existence
Kimi K2 is "cheap and very good"Asserted, not shown. No latency or cost figure given
Integrations: GitHub, ClickUp, Stripe, Notion, Teams, ServiceNowShown in the console menu; none demonstrated working
Knowledge base answers questions about the companyFailed on camera"I don't have specific information about NN Code in our system"
…but works for other phrasingsYes — the next question retrieved the same document correctly. Classic weak-query retrieval failure
Earlier retrieval stumble"I wasn't able to pull up the…" at 10:11, cut short, uncommented
"I forgot to hit save"His own words at 8:51. Whether the widget tested a saved version is not established
Agent versioning with promote-to-mainReal and the most production-relevant feature shown
Appointment booking worksFlow is excellent, including the read-back summary — but "saved in the demo schedule", not a calendar
"Make it obvious this is AI, offer a human"Correct advice, not implemented. The agent never identifies as AI; no transfer demonstrated
Video is sponsored by TelnyxDisclosedutm_medium=sponsored in the first description link
Method note. YouTube caption routes were unavailable, so the transcript was produced locally with Whisper large-v3-turbo — 349 segments across the full 15:54. It rendered Telnyx as "Telnix", "Telenex" and "Talenix", NN Code as "NenCode" and "NN Code", Claude Code as "cloud code" and "plot code", Kimi K2 as "Kimi K26", and Lovable as "lowball"; all corrected against vendor sources. Repository claims were checked against the GitHub API for both linked repositories, the raw .claude-plugin/marketplace.json and the team-telnyx/ai README. Nothing was built — no Telnyx account was created and no number purchased — so console behaviour is reported as shown on screen. Comparisons are against the four-vendor Claude Code build covered separately on this site. Verified 5 August 2026.

💡 Key takeaways

  1. Same agent, opposite method: one vendor and a console instead of five vendors and a coding agent. Comparable build time, comparable demo — the difference is where the complexity sits.
  2. The knowledge base failed the most obvious question. Asked what it knew about the company it represents, the agent said it had no information — then answered correctly when the same content was asked for differently.
  3. That failure is diagnostic, not incidental. A bare entity name is a weak retrieval query. "Tell me about X" carries almost no signal; "help me with AI integrations" matches a paragraph.
  4. The video does not notice. It moves straight from the failed answer to praising the widget — which is how a viewer ships an agent that denies knowing its own company.
  5. Agent versioning with promote-to-main is the best feature in either build, and gets eleven seconds. A prompt is a deployed artefact; rollback and staging are what make changing it survivable.
  6. The four-vendor build has no equivalent. Its prompt is whatever the coding agent last wrote to a file, with no known-good state to return to.
  7. A human picked the model here, in two seconds, for a stated reason. Shallow — but a decision made rather than inherited from the builder's own vendor preference.
  8. The booking flow's read-back summary is the behaviour worth copying: restating project, day and time catches transcription errors before they become missed meetings.
  9. But it saved to a "demo schedule", not a calendar. Collecting a booking correctly is the easy half; the integration is the project.
  10. Enterprise integrations are becoming checkboxes. ServiceNow, Teams, Stripe and Notion in a dropdown is precisely the agency work the other video called a moat — commoditised at the head of the distribution.
  11. "Make it obvious this is AI and offer a human" is the only ethical guidance in either video — unprompted, in the sponsored one. And unimplemented: the agent never says it is AI and no transfer is shown.
  12. The biggest omission is in the description, not the video: Telnyx ships 238 agent skills installable into Claude Code with one command. Vendors are starting to distribute capability as skills rather than as docs or a UI.

🔗 Resources & links

🕐 Timestamp index

0:00The plan — call the agent from a phone
0:27The Telnyx platform — "no-code AI agent"
1:32Templates — healthcare, sales, lead screener
1:58Building the agent, field by field
2:18Model choice — Kimi K2
2:24Greeting mode — who speaks first
2:55"You can do the exact same thing through the API"
3:00"Throw the docs into Codex or Claude Code"
3:36The system prompt — "you're Nova"
4:16Tools — webhook, transfer, SMS, email
4:52Connecting the knowledge base
5:27The FAQ text file being uploaded
6:11Voice settings and speaking plan
6:31Integrations — ServiceNow, Stripe, Notion, Teams
7:55Langfuse tracking mentioned in passing
8:21Buying a phone number — search, add to cart
8:51"I forgot to hit save"
8:55Agent versions and promote-to-main
9:22First test call — ticket and booking
10:11"I wasn't able to pull up the…"
11:53"I don't have specific information about NN Code"
12:08The same content, retrieved correctly
12:21"Make it obvious that this is AI"
13:36The real phone call
14:54"Saved in the demo schedule" + read-back summary
15:30"The only thing I had in code was embedding the widget"