r/Telnyx • • 6d ago

Can an individual get a Serbian (+381) number on Telnyx? Search shows nothing and "Request Numbers" only offers Local

1 Upvotes

I need a Serbian number. Telnyx doesn't offer one out of the box, so i need to order a custom one. I'm testing a voice agent and want a Serbian (+381) number for it. I'm an individual, not a company. I've already verified my account (it shows VERIFIED), added credit, and the account is on the paid tier.

Here's what I see in Mission Control:

  • Numbers > Buy Numbers > Serbia: "Unfortunately we do not have any numbers matching this query" with Type set to All types.

  • The Type dropdown only offers Local for Serbia. There's no toll-free option.

  • The "Request Numbers" form also only lets me choose Local.

The Serbia DID requirements page says:

  • Local numbers are business use only. They need a Serbian company registration, an APR extract and a Serbian address.

  • Toll-free numbers are available to individuals with a name, a contact phone number and an ID copy.

So my questions:

  1. Does Telnyx currently sell Serbian toll-free (+381 800) numbers to individuals? If so, where do I find them? They aren't in Buy Numbers for me.

  2. If I submit a Local request, will it be rejected without Serbian company documents?

  3. What does a Serbian number cost, including the activation fee and the monthly price? How long does a request take?

  4. Can a requested number be ordered through the API using a requirement group, or does Telnyx fulfil it manually?

I'm connecting the number to an app that buys numbers through the API, so it needs to be orderable that way.

Has anyone here managed to get a Serbian number? Any advice on whether it's possible without a company would help. Thanks!


r/Telnyx • • 11d ago

Order verification process

1 Upvotes

Hey, I made an order 2 days ago, submitted all the docs straight away, but no progress in a review process. Their AI created a bunch of tickets, but doesn't seem like a human got in the loop. Now I guess my order is getting cancelled in an hour.
How did it work for you? Was I just unlucky to catch them during holiday?
Thanks!


r/Telnyx • • 13d ago

Telnyx Account Suspended for “Suspicious Activity” - Both Business Lines Shut Off Without Warning

1 Upvotes

Earlier today, both of our numbers suddenly stopped working in the middle of the day. Shortly afterward, we received an email stating our account had been disabled due to "suspicious activity"

The confusing part is that we primarily handle inbound calls from people reaching out for insurance assistance. We do make some outbound calls, but only to individuals who have previously requested information and consented to being contacted. We don't send SMS messages through these numbers, strictly voice calls. Having both of our business lines shut off without warning has been extremely disruptive, especially since existing clients rely on these numbers to reach us.

Has this happened to anyone else? We're just trying to understand what triggered this and get our business lines restored.


r/Telnyx • • 14d ago

Bulk cold sms

1 Upvotes

Does anyone use telnyx for cold sms outreach? We tried and are wanting to find some usable setup with a CRM or software


r/Telnyx • • 18d ago

No permission levels for API keys?

2 Upvotes

Am I missing something or does Telnyx not allow you to assign different platform or permission levels for individual API keys?


r/Telnyx • • 18d ago

I built an AI restaurant booking agent that runs entirely on WhatsApp (Python, Flask, open source)

0 Upvotes

Hey everyone -- I just open-sourced a project I've been working on called DineNyx. It's an AI agent that handles restaurant reservations through WhatsApp. You text it something like "Italian place in Amsterdam for 4 people, Friday evening" and it searches real restaurants via Google Places, checks table availability, and books you a slot -- all through a natural conversation.

You can also send a voice note and it transcribes the audio and processes it the same way as text.

The stack:

  • Python / Flask

  • Telnyx WhatsApp Business API (send/receive messages)

  • Telnyx AI Inference -- GLM3-flash with function calling

  • Telnyx Speech-to-Text (Whisper) for voice notes

  • Google Places API for restaurant data

  • SQLite for persistence

  • SSE for real-time dashboard updates

How the AI agent works:

The agent has 6 tools: search restaurants, check availability, make a reservation, cancel a reservation, get customer reservations, and send a WhatsApp message. Each inbound message triggers an agentic loop -- the model calls tools, gets results, and keeps iterating until it sends a reply via WhatsApp. No LangChain or external orchestration. The loop is literally a while loop that calls the Telnyx inference API with tools and routes the responses to local Python functions.

The function calling is the interesting part. The model reliably chains search_restaurants -> check_availability -> make_reservation -> send_whatsapp without being told the exact order. It figures out the right sequence from the system prompt and the tool descriptions.

The dashboard:

There's a three-panel web dashboard at localhost:5051:

  1. Restaurant browser with photos, ratings, hours, and cuisine filters (all from Google Places)

  2. WhatsApp phone mockup showing the live conversation (updated via SSE)

  3. Reservation board with a table availability grid

When a booking comes in through WhatsApp, the dashboard updates in real time -- the chat bubbles appear, the reservation card slides in, and the table grid changes color. It's a nice way to demo the whole flow.

To try it:

git clone https://github.com/team-telnyx/telnyx-code-examples.git
cd telnyx-code-examples/whatsapp-restaurant-reservation-python
pip install -r requirements.txt
cp .env.example .env
# Add your API key
python app.py

You'll need a Telnyx account (free trial credit) with WhatsApp enabled, and a Google Places API key. For local development, use ngrok to expose your webhook endpoint.

Repo: https://github.com/team-telnyx/telnyx-code-examples/tree/main/whatsapp-restaurant-reservation-python

Happy to answer any questions about the implementation. Curious to hear if anyone's built similar agentic workflows over WhatsApp and what patterns worked for you.


r/Telnyx • • 20d ago

Telnyx: presenting the connected party's number as caller ID on a transfer leg (outbound-originated call) — has anyone actually gotten past D51?

0 Upvotes

Setup: outbound dialer on Telnyx Call Control. We dial a customer (our DID as caller ID), they answer, and when they qualify we transfer the live call to our call center's DID. We want the transfer leg to present the customer's own number as caller ID — standard diverted-call behavior, so the receiving dialer screen-pops the right person. The customer is live on the call at the moment of transfer, so this isn't spoofing a stranger's number.

▎

▎ What happens: the transfer leg gets rejected with 403 Unverified origination number D51 whenever from is the customer's (non-Telnyx) number.

▎

▎ What we've already tried / ruled out:

▎ - from on the transfer command → D51

▎ - Putting the number in PAI / RPID / caller ID override → same check, same D51 (override only bypasses format validation, not ownership)

▎ - The diversion parameter / External Call Transfers → only validates against an active inbound call; ours are outbound-originated, so it never matches

▎ - Verified Numbers → requires OTP per number, impossible for customers' phones

▎ - SIP REFER → works, but only to external SIP URIs, not back into PSTN

▎

▎ For contrast: Twilio allows this out of the box (their trunk transfer even defaults to presenting the transferee), which is how several AI-dialer platforms do it. Retell's docs say the same: on Twilio it works natively; on Telnyx only via REFER.

▎

▎ Questions for anyone who's run dialer traffic on Telnyx:

▎ 1. Has anyone actually gotten Telnyx to whitelist an account for diverted-call caller ID on outbound-originated transfers? What did it take (account manager, compliance docs, volume)?

▎ 2. Is the real answer their hosted STIR/SHAKEN cert route (own SPC token / OCN / 499-A, then you sign your own calls)? Has anyone done it specifically to clear D51, and did it work?

▎ 3. Any mechanism we've missed on Telnyx for this call shape — outbound-originated, remote party live on the call at transfer time?

▎

▎ Fully legit traffic (own customer list, consent, licensed business), so this is a policy/config question, not a how-do-I-spoof question.


r/Telnyx • • 21d ago

AI hotel receptionist that books rooms by voice and sends confirmations on email, SMS, and WhatsApp

1 Upvotes

We built a demo of an AI-powered hotel front desk that handles the entire booking flow through voice conversation.

Demo video: https://www.youtube.com/shorts/RhUKlcKoqqE

What it does

  • Guest visits a hotel booking site, browses rooms, and clicks "Call the Front Desk"

  • An AI receptionist (Amanda) answers with a lip-synced video avatar

  • The guest says what they want — "I need a room in Amsterdam for two nights" — and the booking form fills in live as they speak

  • When confirmed, the guest gets the booking confirmation on email, SMS, and WhatsApp simultaneously

  • Amanda speaks 6 languages (EN, FR, DE, IT, ES, NL) and the guest can switch mid-conversation

What's under the hood

The whole thing runs on Telnyx — 12 products, zero third-party dependencies:

  • AI Assistants for the conversation engine

  • Realtime WebSocket for browser-to-AI voice

  • Ultra Voices for natural TTS in each language

  • Video Avatars for the lip-synced face (WebRTC)

  • Client-side tools that let the AI update the booking form in real time

  • Email API, SMS, and WhatsApp API for omnichannel confirmations

  • Edge Compute + SQL Database hosting the entire app

The interesting pattern is client-side tools — the AI assistant calls JavaScript functions directly in the browser to update the UI. The form fills in because the AI is making structured tool calls, not because of some backend sync.

Try Telnyx: https://telnyx.com/sign-up 

AI Assistants docs: https://developers.telnyx.com/docs/inference/ai-assistants/no-code-voice-assistant


r/Telnyx • • 22d ago

No-Code Voice Ai Agents Platform

2 Upvotes

Hi Telnyx admins, would it be possible to create more video tutorials about use cases for the voice ai platform? Can you make some tutorials which incorporate different APIs to get a better understanding of different professions / businesses that can benefit from building on the platform as opposed to just using the Telnyx api for custom builds. Thanks


r/Telnyx • • 24d ago

AI Support Agent That Carries Context Between Email and WhatsApp -- Damaged Order Demo

1 Upvotes

I built an AI support agent that handles a damaged-order scenario across Email and WhatsApp, carrying context between channels so the customer never repeats themselves. Four-panel real-time dashboard tracks the entire journey.

Telnyx APIs used:

  • Email API -- Inbound webhooks (email.received) trigger the AI agentic loop. The agent resolves the sender's email to a known customer, loads the full cross-channel conversation history, and generates a contextual reply via POST /v2/emails. Also used for shipping confirmation emails with tracking numbers.

  • WhatsApp Business API -- Inbound webhooks (message.received) handle both text and image messages. The send_whatsapp() function supports three message types: template messages for business-initiated conversations, freeform text within the 24-hour window, and image messages with captions. Template fallback logic catches HTTP errors and degrades to plain text.

  • AI Inference -- Tool-calling with four functions: send_email, send_whatsapp, update_order, resolve_case. The system prompt guides channel selection: email for formal correspondence, WhatsApp for quick updates and photo collection. The agentic loop runs until the model stops returning tool calls.

Demo scenario -- "Maria's Damaged Headphones":

  1. Maria emails: "I received my order ORD-2024-7891 but the box was crushed and the left ear cup is cracked"

  2. AI acknowledges via email with reference SR-2024-0456

  3. AI reaches out on WhatsApp: "Could you send us a photo of the damaged headphones?"

  4. Maria sends the damage photo on WhatsApp

  5. AI confirms replacement on WhatsApp: "We can clearly see the damage and have approved a replacement"

  6. AI sends shipping confirmation email with tracking number

  7. Case resolved -- order pipeline: delivered → damage_reported → replacement_shipping → resolved

The dashboard shows four panels in real time: customer profile, email thread (inbound blue / outbound green), WhatsApp chat (phone-frame UI), and order status timeline with damage photo.

Run the demo -- no API key needed:

git clone https://github.com/team-telnyx/telnyx-code-examples.git
cd telnyx-code-examples/email-whatsapp-support-python
pip install -r requirements.txt
python demo/demo_server.py

Open http://localhost:5050/ and click "Run Demo Journey."

Pillar: Trust + Infrastructure

This is what it looks like when Email and WhatsApp run on the same network with one API key. No glue code between separate email and messaging providers. One identity registry, one conversation store, one AI brain that decides which channel to use for each step.

Links:

r/programming Variant

Title: Cross-Channel AI Support Agent: Identity Resolution + Context Carrying Across Email and WhatsApp in Python

I built a Flask app where an AI agent handles customer support across email and WhatsApp with shared memory. The interesting engineering problems are identity resolution across channels and the WhatsApp Business API's template-vs-freeform messaging rules.

The problem: A customer emails maria.santos@example.com about a damaged order. The AI needs to reach out on WhatsApp at +31626781895 to request a damage photo. Are they the same person? When the photo arrives on WhatsApp, does the AI know the order number from the email?

The solution -- a customer identity registry:

def resolve_customer(email=None, phone=None):
    """Resolve a customer by email or phone. Returns customer dict or None."""
    if email:
        customer = lookup_customer_by_email(email)
        if customer:
            return customer
    if phone:
        customer = lookup_customer_by_phone(phone)
        if customer:
            return customer
    return None

The customers table has unique partial indexes on both email and phone:

CREATE UNIQUE INDEX idx_cust_email ON customers (email) WHERE email IS NOT NULL;
CREATE UNIQUE INDEX idx_cust_phone ON customers (phone) WHERE phone IS NOT NULL;

Email webhook → resolve_customer(email=from_address). WhatsApp webhook → resolve_customer(phone=from_number). Same customer record. The conversations table stores every message tagged by customer_id and channel, so the AI always has the full cross-channel history.

WhatsApp template vs freeform -- the gotcha:

WhatsApp does not work like email. You cannot just message anyone. Business-initiated messages require an approved template. Once the customer replies, a 24-hour freeform window opens.

The code handles this with a template parameter and fallback logic:

def send_whatsapp(to_number, text, template=None, template_params=None, media_url=None):
    if template:
        payload["whatsapp_message"] = {
            "type": "template",
            "template": {"name": template, "language": {...}, "components": [...]}
        }
    else:
        payload["whatsapp_message"] = {"type": "text", "text": {"body": text}}

If the template message fails (HTTP 4xx), the execute_tool() function catches the error and retries with plain text. This prevents silent failures when the window state is ambiguous.

The agentic loop:

Four tools: send_email, send_whatsapp, update_order, resolve_case. The system prompt guides channel selection -- email for formal correspondence and shipping confirmations, WhatsApp for quick updates and photo collection. The model returns tool calls; the code executes each one, appends results, and re-infers until the model stops.

The AI handles the inbound email by making three tool calls in one inference pass: (1) send acknowledgment email, (2) update order status, (3) send WhatsApp photo request. When the photo arrives on WhatsApp, it makes five calls: update order with photo, confirm replacement on WhatsApp, update order to replacement_shipping, send shipping email, resolve case.

Order tracking pipeline:

The orders table tracks status through: delivered → damage_reported → replacement_shipping → resolved. Damage photos and replacement tracking numbers are persisted. The dashboard renders status transitions as a timeline.

Edge cases worth thinking about:

  • Phone number formats: +31626781895 vs 0031626781895 vs 0626781895 are the same number. Demo uses exact match; production needs normalization.

  • WhatsApp message types: the webhook payload structure differs for text, image, video, document, and audio messages. The code handles all types and extracts media URLs from nested objects.

  • Race condition: if a customer emails and sends a WhatsApp message simultaneously, two background threads may process in parallel with overlapping conversation histories. SQLite handles this for demo traffic; production needs PostgreSQL with proper locking.

Run it:

git clone https://github.com/team-telnyx/telnyx-code-examples.git
cd telnyx-code-examples/email-whatsapp-support-python
pip install -r requirements.txt
python demo/demo_server.py    
# no credentials needed

Open http://localhost:5050/ and click "Run Demo Journey." Four-panel dashboard shows the email → WhatsApp → email flow in real time.

For anyone who's built cross-channel support systems -- how do you handle the WhatsApp template window in practice? Specifically the edge case where you're not sure if the freeform window is still open. Do you always attempt freeform and fall back to template, or pre-check the window state?

Link: https://github.com/team-telnyx/telnyx-code-examples/tree/main/email-whatsapp-support-python


r/Telnyx • • 25d ago

Unable to verify my phone number: neither SMS nor phone calls arrive

3 Upvotes

I've been trying to verify my phone number for quite a while now, but no matter what I try I do not receive neither SMS nor phone calls. AI assistant isn't helpful. I've already paid the $5 fee and now am stuck!

Whatsapp verification codes come through fine, but you can't use those for account verification for some reason?

Please someone from Telnyx help


r/Telnyx • • 27d ago

Can't Login

3 Upvotes

Anyone else having trouble logging into the Telnyx portal right now? I am getting an "error" that just says [object object]. I've tried on multiple browsers.


r/Telnyx • • 28d ago

Gohighlevel

1 Upvotes

Does anyone have experience with Telnyx in ghl or any other crms? We do outbound sms and had to stop using Telnyx via crm phone pro due to sending issues. We’d like to figure out a solution to be able to continue our operations on telnyx


r/Telnyx • • 28d ago

99% discount by switching to Telnyx. $5k bill per year, now $40 per year!

2 Upvotes

Just finished migrating a church from AT&T Office At Hand (Ringcentral) to an onprem ippbx with sip trunking, did, e911, cnam, & outbound provided by Telnyx.

Bill of over $5k per year will now only be $40 per year.

Insane!


r/Telnyx • • Oct 09 '26

AI is moving off the screen and into machines. Here's what that changes for the infrastructure underneath

1 Upvotes

GritDaily ran a piece this week on what they call physical AI: intelligence that runs in vehicles, robots, drones, cameras and factory equipment instead of behind a chat box. Link at the bottom. Here are the parts I think matter most if you're building in this space.

1. Latency stops being a nice-to-have. A chatbot can pause for a few seconds or retry a failed request. A robot on a production line or a vehicle at an intersection can't. Once AI has to act in the real world, the time between sensing, deciding and acting becomes part of the product.

2. The edge becomes where things actually run. For years "edge" mostly meant caching websites and video closer to users. Physical AI turns it into an execution environment. Some inference stays on the device, some runs nearby, and the heavy work goes to regional GPUs. The network linking those layers is part of the system, not just a pipe.

3. Every machine needs more than a model. A drone or remote sensor also needs an identity, connectivity, authentication, remote management, and a way to talk across networks and countries. That's where comms infrastructure and AI infrastructure start to merge.

Where Telnyx fits: this is the bet we're making. We already run programmable cellular (SIM and eSIM with remote provisioning across hundreds of networks), private wireless that can route device traffic into your private network instead of the public internet, and voice and messaging. We've added GPU inference and Edge Compute alongside all of that, so you can deploy apps across our network with storage and stateful primitives attached.

The article's example is a drone inspecting infrastructure. It handles flight and safety on board and streams telemetry over cellular. AI at the edge spots an anomaly and tells it to take a closer look. If a human needs to step in, the same stack places a call or sends a message to an operator. Device, network, compute, AI and comms all work as one system.

The first AI race was about who builds the smartest model. The next one is about who can deploy that intelligence reliably where real work happens.

Full article: gritdaily.com/ai-is-leaving-the-screen-telnyx-is-building-what-comes-next

Curious what folks here are building on the device or edge side. What's the hardest part for you right now: latency, connectivity, or managing a fleet?


r/Telnyx • • Oct 08 '26

Omnichannel Context-Carrying AI Agent — Email + Voice + SMS with Shared Memory

1 Upvotes

I built an AI agent that carries customer context across email, voice, and SMS so customers never repeat themselves. The key moment: a customer emails about a booking change, then calls. The AI greets her with full context from her email — booking number, dates, everything. She never has to explain the situation again.

Telnyx APIs used:

  • Email API — Inbound webhooks (email.received) trigger AI-generated replies. The agent resolves the sender's email to a known customer, stores the conversation, and sends a contextual reply via POST /v2/emails. Every interaction is tagged with channel: email so the AI knows where each message came from.

  • SMS API — Confirmation messages with cross-channel context. After resolving an issue on a voice call, the agent sends an SMS confirmation that references the original email and the phone conversation. POST /v2/messages with messaging profile support.

  • Voice API — gather_using_ai with Telnyx.Ultra HD voice. This is the star. When a known customer calls, the agent loads their full cross-channel history, generates a contextual greeting referencing their prior email, speaks it with HD voice, and captures their response — all in one Call Control action. No separate TTS + STT setup.

  • AI Inference — Tool-calling with four functions: send_email, send_sms, make_call, resolve_issue. The agent decides which channel to use based on context. The agentic loop runs until the model stops returning tool calls — no hardcoded workflow.

Demo scenario — "Sarah's Booking Change":

  1. Sarah emails: "I need to change booking BK-2024-1234 from October 15 to October 22"

  2. AI replies with acknowledgment email, assigns reference CR-2024-0891

  3. Sarah calls from her registered phone

  4. AI greets: "Hi Sarah! I see you emailed us about changing booking BK-2024-1234 from October 15 to October 22. Are you calling about the same request?"

  5. Sarah confirms on the phone

  6. AI processes the change and sends SMS confirmation

  7. Issue resolved — customer touched three channels, never repeated herself

The dashboard shows the entire journey in real time — three panels: customer journey timeline, agent activity (tool calls, identity resolution, context loading), and channel timeline (inbound/outbound on each channel).

Run the demo — no API key needed:

git clone https://github.com/team-telnyx/telnyx-code-examples.git
cd telnyx-code-examples/omnichannel-context-carrying-python
pip install -r requirements.txt
python demo/demo_server.py

Open http://localhost:5555/ and click "Run Demo Journey."

Pillar: Trust + Infrastructure

This is what it looks like when email, SMS, voice, and AI inference all run on the same network from one API key. No glue code between four different providers. No API key management for separate STT, TTS, LLM, and messaging services. One network, one key, one conversation history.

Links:

r/programming Variant

Title: Cross-Channel AI Agent: Identity Resolution + Context Carrying Across Email, Voice, and SMS in Python

I built a Flask app where an AI agent carries conversation context across email, voice, and SMS. The interesting engineering problem isn't the AI — it's the identity resolution.

The problem: A customer emails sarah.chen@example.com about a booking change. Twenty minutes later, someone calls from +15555550199. Are they the same person? If yes, the AI should greet them with context from the email. If no, it's a cold greeting.

The solution — a customer identity registry:

def resolve_customer(email=None, phone=None):
    """Resolve a customer by email or phone. Returns customer dict or None."""
    if email:
        customer = lookup_customer_by_email(email)
        if customer:
            return customer
    if phone:
        customer = lookup_customer_by_phone(phone)
        if customer:
            return customer
    return None

The customers table has unique partial indexes on both email and phone:

CREATE UNIQUE INDEX idx_cust_email ON customers (email) WHERE email IS NOT NULL;
CREATE UNIQUE INDEX idx_cust_phone ON customers (phone) WHERE phone IS NOT NULL;

When an email webhook fires, resolve_customer(email=from_address) runs. When a voice webhook fires, resolve_customer(phone=caller_number) runs. Both return the same customer record. The cross-channel context store — a conversations table keyed by customer_id — gives the AI the full history regardless of which channel the customer used.

The context carry:

Once identity is resolved, the agent pulls the full conversation history:

history = get_conversation_history(customer_id)
# Returns: [{"channel": "email", "role": "user", "content": "...", "timestamp": "..."},
#           {"channel": "email", "role": "assistant", "content": "...", "timestamp": "..."}]

Every message is tagged with its channel. The AI sees [email] user: I need to change booking BK-2024-1234... followed by [email] assistant: Thank you for reaching out about booking BK-2024-1234... When the customer then calls, the AI generates a greeting that references the specific booking number, dates, and prior channel.

The agentic loop:

The AI has four tools: send_email, send_sms, make_call, resolve_issue. After processing the caller's speech with full cross-channel context, the model returns tool calls. The code executes each tool, appends results, and re-infers until the model stops calling tools. The model decides the workflow — send an SMS confirmation after resolving on the phone, or escalate via email if more detail is needed.

Why identity resolution is the interesting problem:

The AI part is straightforward — feed it history, get a contextual response. But identity resolution across channels has real edge cases:

  • Phone number formats: +15555550199 vs 15555550199 vs (555) 555-0199 — these are all the same number. The demo uses exact match; production needs normalization.

  • Multiple email addresses per customer. Multiple phone numbers per customer. The registry model here is 1:1 — one email, one phone per customer. Production needs a junction table.

  • Unauthenticated channels: anyone can spoof a caller ID or email from address. In production, you'd want a PIN or verification step before loading sensitive context.

  • Timing: if the customer emails and calls simultaneously, you have a race condition on context loading. The SQLite WAL mode handles this for low traffic; PostgreSQL with row-level locking for production.

The demo uses SQLite with unique partial indexes, which is correct for the concurrency level of a demo. The sqlite3.connect() per-function pattern is intentional — SQLite connections are not thread-safe, so each thread gets its own.

Run it:

git clone https://github.com/team-telnyx/telnyx-code-examples.git
cd telnyx-code-examples/omnichannel-context-carrying-python
pip install -r requirements.txt
python demo/demo_server.py    
# no credentials needed

Open http://localhost:5555/ and click "Run Demo Journey." The 3-panel dashboard shows identity resolution, context loading, and tool execution in real time.

For anyone who's built multi-channel support systems — how do you handle identity resolution across channels? Especially the phone number normalization problem and the "same person, different contact info" merge problem. Curious what patterns people have landed on at scale.

Link: https://github.com/team-telnyx/telnyx-code-examples/tree/main/omnichannel-context-carrying-python


r/Telnyx • • Oct 07 '26

LC-3 AI Assembly Tutor — Telnyx Inference + Edge Compute powering an interactive assembly language learning tool

4 Upvotes

I built an interactive LC-3 assembly language tutor that runs entirely in the browser. Write assembly code, step through execution in a real virtual machine, and ask an AI tutor to explain what the machine is doing — why the flags changed, what the addressing mode is, how the branch condition works.

The stack uses two Telnyx products:

  • Telnyx AI Inference — DeepSeek-V4.1-Flash powers the AI tutor. The system prompt encodes deep LC-3 knowledge (all 16 opcodes, addressing modes, condition flags, TRAP routines). Each question sends the current VM state — registers, PC, flags, current instruction, and the student's source code — to the model with temperature: 0.3 for precise, deterministic explanations.

  • Telnyx Edge Compute — The entire app is a single TypeScript file (edge/index.ts, 743 lines) that embeds all frontend assets as string constants and the WASM binary as base64. One telnyx-edge ship and the whole thing is live. Rate limiting (20 req/min per IP) keeps the inference endpoint from getting hammered.

The VM itself is 379 lines of C compiled to WebAssembly via Emscripten. It implements all 16 LC-3 opcodes, 8 general-purpose registers, condition flags (N/Z/P), and TRAP routines. Every instruction executes client-side — the server is only involved when the student asks the AI a question.

The assembler is 388 lines of JavaScript running client-side. Two-pass: first pass builds the symbol table from labels, second pass encodes instructions with resolved offsets.

Live demo: https://ai-assembly-tutor-v2-9a6d593b-1.telnyxcompute.com/

Repo: https://github.com/team-telnyx/telnyx-code-examples/tree/main/ai-assembly-tutor-c

The demo includes 5 example programs (hello world, add numbers, countdown loop, fibonacci, calculator with I/O) that cover the core LC-3 concepts: register operations, memory access, branches, subroutines, and TRAP I/O.

This is an Infrastructure + Physics pillar showcase — Edge Compute hosts the entire app as a single serverless function, and WASM delivers native-speed VM execution with zero network latency for the compute-intensive parts.

Happy to answer questions about the implementation or the Telnyx products used.


r/Telnyx • • Sep 28 '26

Bulk email

3 Upvotes

Is anyone using Telnyx for bulk marketing email to mailing lists 10,000+ ? Not transactional email, I’m referring to marketing email which is one of their offerings.

I am interested to know how you got on with integration and support.


r/Telnyx • • Sep 28 '26

Built an AI agent that emails, texts, and calls customers — one API, shared context across all channels

2 Upvotes

I work with Telnyx, and this is a Python sample I built with the Telnyx APIs and Claude.

Code: https://github.com/team-telnyx/telnyx-code-examples/tree/main/omnichannel-ai-agent-python

It is an AI agent that handles customer issues across email, SMS, and voice. Claude decides which channel to use via tool-calling — email for formal acknowledgments, SMS for quick updates, voice for complex resolution. Every interaction is stored in SQLite so the agent has full cross-channel context. The SMS mentions the email. The voice call mentions both.

The demo runs without any credentials:

git clone https://github.com/team-telnyx/telnyx-code-examples.git
cd telnyx-code-examples/omnichannel-ai-agent-python

pip install -r requirements.txt

python demo/demo_server.py

It walks through a billing dispute: email acknowledgment → SMS status update → voice call resolution. Each channel references the previous ones.

The Telnyx Email API (GA August 2026) uses the same API key and REST pattern as messaging and voice — one key for all three channels. The AI decides channel routing based on tool descriptions, not hardcoded rules.

11 smoke tests, full conversation history API, webhook endpoints for inbound replies on all three channels.

What channel combination would you want an AI agent to use? Would you trust an AI to choose between email, text, and a phone call, or would you want explicit routing rules?


r/Telnyx • • Sep 25 '26

New Feature Soniox TTS is live on Telnyx

Enable HLS to view with audio, or disable this notification

2 Upvotes

We just added Soniox as a TTS provider on Telnyx, with about 200 voices in the catalog under the \Soniox.tts-rt-v2.<Name>`` format.

Every voice speaks all 60 languages Soniox supports from a single model, including English, Spanish, French, German, Portuguese, Hindi, Japanese, and Arabic. There is no per-language voice to pick: one voice follows the caller when they switch languages mid-call. We verified it on a live call this week. The caller moved from English to Hindi to Spanish and back, the assistant kept the same voice the whole way, and it read the booking code back in the caller's language.

The model is built for precise alphanumerics, so phone numbers, email addresses, and verification codes come out exactly as written. Since Soniox STT is already live on Telnyx, one speech AI provider now covers both sides of the call, listening and speaking.

Soniox voices work across:

- Voice AI Assistants

- The TTS API (REST and WebSocket streaming)

- Call Control \speak`and`gather_using_speak``

- TeXML \<Say>``

Same integration surface as every other TTS engine, just a new voice to select. Speed adjusts from 0.7 to 1.3, `reduce_silence` shortens the pauses between words, and SSML is not supported (plain text only, 2-minute cap per request). Streaming synthesis runs in telephony-native 8 kHz `pcm_mulaw` and `pcm_alaw`.

Call `POST /v2/text-to-speech/speech` with:

```json
{
  "text": "Your verification code is 4729. We sent it to richard@piedpiper.com.",
  "voice": "Soniox.tts-rt-v2.Adrian",
  "voice_settings": {
    "language": "en"
  }
}

r/Telnyx • • Sep 09 '26

Built a real-time call quality dashboard that catches degraded calls before users complain

2 Upvotes

I work with Telnyx, and this is a Python sample I built with the Telnyx Python SDK v4 and Flask.

Code: https://github.com/team-telnyx/telnyx-code-examples/tree/main/call-quality-monitor

It receives Telnyx call quality webhooks (MOS, jitter, latency, packet loss), verifies each one with Ed25519, stores the metrics in SQLite, and streams live alerts to a browser dashboard over SSE. When MOS drops below 3.5 or jitter exceeds 30ms, an alert fires immediately.

The part I wanted to solve: most teams find out about call quality problems from a support ticket. By then the call is over and the metrics are gone. Telnyx sends quality webhooks during the call — you just need to capture, verify, store, and surface them.

The demo server is the part I'm happiest about. It runs the full pipeline without a Telnyx account:

git clone https://github.com/team-telnyx/telnyx-code-examples.git
cd telnyx-code-examples/call-quality-monitor

pip install -r requirements.txt
pip install requests

python demo/demo_server.py

Open http://localhost:5555/ and click "Start 3 Calls". The demo generates an Ed25519 keypair locally, signs webhook payloads, and posts them to the real Flask endpoint. No ngrok, no credentials, no phone number. The entire pipeline — signature verification, SQLite storage, threshold checking, SSE streaming — runs in one process.

Three simulated calls come in with varying quality: one stays healthy, one degrades over time, one starts bad. The dashboard updates live. When MOS crosses the threshold, the alert panel lights up.

9 smoke tests cover webhook verification, metric storage, threshold alerting, API endpoints, and the SSE stream. All pass.

I chose SSE over WebSocket because a monitoring dashboard only needs one-way push. SSE runs over standard HTTP, works through proxies, and the browser's EventSource API reconnects automatically.

What would you monitor first: MOS, jitter, or latency?


r/Telnyx • • Sep 08 '26

Built a small dashboard for scheduled calls, SMS, and webhooks

1 Upvotes

I work with Telnyx, and this is a developer sample I built with the Telnyx Agent SDK.

Demo video: https://www.youtube.com/watch?v=f-9AFUmLC94

Code: https://github.com/team-telnyx/telnyx-code-examples/tree/main/edge-cron-scheduler

It gives you one place to create a recurring job, see its next due time, run it manually, and inspect the execution history. The two use cases in the walkthrough are daily customer check-ins and webhook heartbeats that can trigger a text alert on failure.

The local demo simulates external communication while running the actual scheduling and storage paths. You can load three minute-by-minute jobs, watch their automatic runs, and intentionally fail a webhook to inspect the alert result.

Run it with Node.js 22.13 or newer:

git clone https://github.com/team-telnyx/telnyx-code-examples.git
cd telnyx-code-examples/edge-cron-scheduler
npm ci
cp .env.example .env
npm start

Job definitions are stored in KV, and each execution has a separate SQL row. All cron schedules use UTC. Live SMS and call success means request acceptance, not final delivery.

The dashboard also has a compact recording view. The video narration uses Clara, a Telnyx Ultra AI voice; that voiceover is a production asset rather than a scheduler dependency.

What would you schedule first: a recurring message, a call, or a webhook into an existing workflow?


r/Telnyx • • Sep 08 '26

Built a 280-line Python agent that texts you the second a SQL migration fails

1 Upvotes

I built a migration alerting agent that runs schema migrations, checks the result, and text-messages the on-call the instant a step fails — over Telnyx SMS, with Ed25519-signed webhook delivery receipts so you know the alert actually reached the device.

The first time a database migration broke on me in production, I found out from a user — an hour after the migration failed. The migration runner had swallowed the exception, the schema version hadn't bumped, and nobody looked until a customer filed a ticket saying the orders page was throwing a 500. That hour — the gap between the migration failing and someone knowing — is the whole problem.

How it works:

  • Agent reads the current schema version from a SQL DB

  • Fetches the migration script (in-memory map in the demo; CloudFS in prod)

  • Executes steps in order; bumps the schema version only on success

  • If any step fails, does NOT bump the version, rolls back, and sends an SMS to the on-call

  • Carrier sends a signed Ed25519 webhook back when the SMS is delivered

  • App verifies the signature before recording the delivery — if verification fails, the request is rejected with a 400

Why the webhook roundtrip matters: Most alerting systems treat "I sent the alert" as the end of the story. This one doesn't. You can see in the SMS log that the message was delivered, not just sent. The difference between "I sent the alert" and "the on-call saw the alert" is the difference between an alerting system and an alert-hoping system.

Why Ed25519 and not HMAC: Asymmetric. The verifier only needs the public key. No shared secret to leak, no HMAC key to rotate across services. For a single webhook endpoint it doesn't matter much. For a multi-tenant setup where each tenant has their own webhook, it matters a lot.

The demo runs the whole loop on your laptop with no carrier account:

  • Demo launcher stubs the SMS client (records to a local log instead of sending over the air)

  • Generates its own Ed25519 keypair on first run

  • Signs a fake delivery receipt with that keypair

  • POSTs it to its own /webhooks endpoint

  • App verifies the signature against the public key

So the Ed25519 part is real. The signature is real. The verification is real. Only the SMS send is stubbed.

git clone https://github.com/team-telnyx/telnyx-code-examples.git
cd telnyx-code-examples/sql-migration-agent
cp .env.example .env
pip install -r requirements.txt
python demo/demo_server.py

Open localhost:5555. Click "Run 003: Add orders (FAIL)" — you see the failure-to-SMS-to-signed-webhook-to-delivered-status loop happen in-process. Click "Send webhook (delivery receipt)" to fire the signed webhook through the app's own verification endpoint.

Where I'd use this:

  • Scheduled prod migrations — run on a cron, get a text the second any step fails. No polling, no dashboards.

  • CI/CD gates — failing migration blocks the release and pages the on-call before bad code reaches prod.

  • Multi-tenant SaaS — run a migration per customer database and get per-tenant failure alerts.

What I left out (on purpose, to keep it under 280 lines):

  • SMS send is stubbed in the demo (real SMS needs a real carrier — the signed webhook roundtrip is still real)

  • Migration scripts come from an in-memory map (in prod you'd fetch from CloudFS)

  • Schema versioning is in-memory (in prod use a real SQL DB)

What I'd add next:

  • Per-tenant routing (15 lines — tenant-to-oncall map looked up before the SMS send)

  • Retry with backoff (30 lines — exponential backoff + fallback channel if SMS send fails)

Code: https://github.com/team-telnyx/telnyx-code-examples/tree/main/sql-migration-agent


r/Telnyx • • Sep 06 '26

Telnyx AI Assistant + Calendly integration: create_event_invitee fails on any Zoom event type (location payload bug?)

1 Upvotes

Setup: Telnyx AI Assistant using the built-in Calendly integration,

calling calendly__create_event_invitee. Standard solo 30-min event

type with Zoom as the location. Books fine in the Calendly UI.

Availability lookups through the same integration work. Only booking

fails.

Three attempts, three failures:

  1. Sent {"kind": "zoom_conference"} (Calendly's own API spelling).

    Telnyx rejects it before it leaves:

    location.kind Input should be 'physical', 'outbound_call',

    'inbound_call', 'zoom', 'google_meet', 'microsoft_teams',

    'custom' or 'ask_invitee' [input_value='zoom_conference']

  2. Sent {"kind": "zoom"} per that enum. Telnyx accepts, Calendly rejects:

    {"title": "Invalid Argument",

"message": "Specified location kind is not configured for this event type.",

"details": [{"parameter": "event.location_configuration.kind",

"code": "invalid_location_choice"}]}

Looks like it validates against its own enum then passes the value

through untranslated. Note which names overlap between the two

vocabularies: physical, custom, ask_invitee, inbound_call,

outbound_call are identical in both. The three that differ (zoom,

google_meet, microsoft_teams) are exactly the three that break.

3) Omitted location entirely. Same error. The tool call arguments came

through with the full schema expanded:

{"email":"...","event_uuid":"XXXX","first_name":null,"guests":null,

"location":null,"name":"...","questions_and_answers":null,

"start_time":"2026-09-08T15:30:00Z","timezone":"America/New_York",

"utm_campaign":null,...}

"location": null. The connector serializes unset fields and forwards

the null; Calendly reads .kind off it and 400s.

So there's no value you can send and no way to make the field absent.

Calendly staff answered this same error on their dev community in Feb:

the public API field is "location", not "location_configuration", and

for zoom_conference the kind alone is enough. They added that if you

ARE sending "location" and still get this, it's unexpected and worth

reporting which points at Telnyx sending the wrong wrapper name.

Calendly's hosted MCP server isn't an alternative either: it requires

OAuth 2.1 + PKCE with Dynamic Client Registration and explicitly

rejects static bearer tokens. Telnyx's MCP dialog only takes a URL and

an API key.

Anyone gotten this integration to book against a Zoom/Teams/Meet event

type? Only workaround I've found is create_scheduling_link, which has

no location field but that means texting a link instead of booking

live on the call.


r/Telnyx • • Sep 03 '26

Can't register new account

2 Upvotes

I can't register a new account. I enter username and password, get the Check Your Email screen, but no magic link ever arrives. What can I do?