← Brayden WatkinsTelegram Support Agent

Live work · Telegram Support Agent

Telegram Support Agent.

Production conversational agent with confidence-based escalation.

LiveNode.jsTelegram Bot APIGroqPM2

Knowledge-base grounded support bot. Handles 19/23 conversations autonomously in the demo run. Escalates to a human when confidence drops.

Demo · Try it

See it in action.

B

Business Support Bot

online · powered by Claude

Hi, I'm the Business Support Bot. Tap a question below to see how I respond. Low-confidence answers escalate to a human owner.

demo · powered by Claude

Tap a question to send it

I · About

Most support bots ship something that pretends to be helpful and ends up frustrating customers. This one knows when to ask for help. Each deployment loads a per-client knowledge base (FAQs, pricing, policies, product details). When a user asks a question, the bot reasons over the knowledge base, scores its own confidence, answers if confident, escalates if not. Every conversation rolls up into a daily digest the business owner reads at 8am.

II · How it works

The pipeline.

  1. 01Per-client knowledge base loaded from JSON file (FAQs, pricing, policies)
  2. 02User sends a message via Telegram
  3. 03Claude generates a response using the knowledge base as context
  4. 04Self-confidence score appended to every response (0-1)
  5. 05If score < 0.7, the response is suppressed and an escalation message is sent ('this needs human help; owner will respond shortly')
  6. 06All conversations logged to per-day file
  7. 07Daily digest at 8am summarizing flagged escalations and unanswered questions

III · Sample

Confidence scoring + escalation logic.

async function respondToMessage(message, kb) {
  const response = await groq.chat.completions.create({
    model: "llama-3.3-70b",
    messages: [
      { role: "system", content: SYSTEM_WITH_KB(kb) },
      { role: "user", content: message.text }
    ],
    response_format: {
      type: "json_object",
      schema: {
        answer: "string",
        confidence: "number",
        sources_used: "string[]"
      }
    }
  });

  const parsed = JSON.parse(response.choices[0].message.content);

  if (parsed.confidence < 0.7) {
    await escalate(message, parsed);
    return ESCALATION_MESSAGE;
  }

  await logSuccess(message, parsed);
  return parsed.answer;
}