Build an SMS Triage Bot on Telnyx Edge Compute Telnyx has released an open-source TypeScript example for building an SMS triage bot on its Edge Compute platform with the Agent SDK. The bot classifies inbound messages into billing, support, sales, or general topics using AI inference, routes them to appropriate queues, and stores triage history in durable actor state. The example avoids hardcoded API keys by routing both messaging and inference through the Telnyx environment binding. Support SMS inboxes are usually a routing problem before they are an AI problem. Someone asks about billing. Someone else needs technical support. A third person wants to talk to sales. The app has to understand the message, pick the right destination, reply to the customer, and remember what happened. This TypeScript example does that on Telnyx Edge Compute with the Agent SDK. Code: https://github.com/team-telnyx/telnyx-code-examples/tree/main/agent-sms-triage-bot https://github.com/team-telnyx/telnyx-code-examples/tree/main/agent-sms-triage-bot agent-sms-triage-bot receives inbound SMS webhooks, classifies each message into one of four topics, looks up the route for that topic, replies by SMS, and stores triage history in durable actor state. The topics are: billing support sales general The default route table maps those topics to queue names: php billing - billing-queue support - support-queue sales - sales-queue general - general-queue php Inbound SMS - POST /webhooks/sms - TriageAgent.triage from, text - Telnyx AI Inference classifies topic - durable route table lookup - SMS reply - triage history update The app uses one TriageAgent actor per inbound number. That actor stores route rules, recent history, total messages, and topic counts. POST /webhooks/sms receives Telnyx message.received events POST /debug/triage simulates inbound SMS POST /routes updates the route table GET /routes lists route rules GET /history returns recent triage history GET /debug/state inspects actor state GET /health/liveness and GET /health/readiness provide health checksThe core class is TriageAgent . It extends the Agent SDK Agent class and uses durable state for: The AI classification call uses the Telnyx binding: js const completion = await this.env.TELNYX.ai.openai.chat.createCompletion { model: this.env.AI MODEL || "moonshotai/Kimi-K2.6", messages: { role: "system", content: CLASSIFY SYSTEM PROMPT }, { role: "user", content: Customer message: "${text}" }, , max tokens: 2000, temperature: 0.2, } ; The SMS reply uses the same binding pattern: await this.env.TELNYX.messages.send { from: state.fromNumber || state.phoneNumber, to: from, text: replyText, } ; That means the example does not hardcode an API key in application code. Messaging and inference both go through this.env.TELNYX . After deploying with telnyx-edge ship , you can test without sending a real SMS: curl -X POST https://agent-sms-triage-bot-