I Built a Web Chatbot with a Telnyx AI Assistant Telnyx demonstrated a web chatbot built with its AI Assistant API, using a Flask server to handle conversations while keeping the API key server-side. The assistant, configured in the Telnyx Portal, answers questions about Telnyx and the concept of a 'Frankenstack' without requiring phone number setup or webhook tunnels. This pattern allows product teams to tune assistant instructions in the Portal while developers control the frontend and authentication. Most AI assistant demos jump straight to voice. Voice is great, but a web chat is often the cleanest place to start. You can prove the core idea quickly: configure an assistant in the Portal, send it user messages through the API, and render the response in your own interface. The Telnyx code example for this is: https://github.com/team-telnyx/telnyx-code-examples/tree/main/chat-with-ai-assistant-python https://github.com/team-telnyx/telnyx-code-examples/tree/main/chat-with-ai-assistant-python The assistant lives in Telnyx. The UI lives in your app. That split is useful. Product teams can tune the assistant instructions in the Telnyx Mission Control Portal, while developers keep full control over the frontend, authentication, routing, styling, logging, and product-specific behavior. For this demo, I used the assistant as a Telnyx Chatbot. It answers questions like what Telnyx does, what a Frankenstack is, and how AI Assistants fit into programmable communications. The app is a small Flask server with a browser UI. When the page loads, the backend creates a Telnyx conversation. When the user sends a message, the backend sends that message to the Assistant Chat API. The assistant response comes back as text and the UI renders it in the chat window. The important part is that the API key stays on the server. The browser only talks to the Flask app. This is a good first AI Assistant project because there is no phone number setup, no webhook tunnel, and no call-control state machine. You can focus on the assistant lifecycle: create conversation send message render response continue conversation That makes it easier to explain the difference between a Portal-managed assistant and a raw model completion. The assistant has configuration, instructions, conversation context, and product-level settings. Your app just decides where and how that assistant shows up. git clone https://github.com/team-telnyx/telnyx-code-examples.git cd telnyx-code-examples/chat-with-ai-assistant-python cp .env.example .env pip install -r requirements.txt python app.py Environment: TELNYX API KEY=your telnyx api key AI ASSISTANT ID=your ai assistant id PORT=5000 Open the local app and ask: What is Telnyx? Then ask: What is a Frankenstack? Those two questions make the demo easy to understand. Telnyx is the integrated communications and AI platform; a Frankenstack is what happens when teams stitch together separate vendors for telephony, speech-to-text, LLMs, text-to-speech, messaging, analytics, and workflows. For a real product, I would add user accounts, persistent conversation history, analytics, rate limits, and a handoff path to a human or support workflow. If the same assistant also powers voice or messaging, I would keep the assistant's core instructions consistent and let each channel handle its own UX. That is the nice part of this pattern: one assistant can power multiple user experiences, and the app decides how the experience feels.