Channels
Channels handle the transport layer — receiving messages from users and sending responses back.
Telegram Bot
import { Agent } from '@moon-wave/core';import { TelegramChannel, ChannelRunner } from '@moon-wave/channels';
interface Env { GROQ_API_KEY: string; TELEGRAM_TOKEN: string;}
const agent = new Agent({ name: 'telegram-bot', model: { provider: 'groq', model: 'llama-3.3-70b-versatile' }, systemPrompt: 'You are a helpful Telegram bot.',});
export default { async fetch(request: Request, env: Env): Promise<Response> { const runner = new ChannelRunner(agent); const telegram = new TelegramChannel(env.TELEGRAM_TOKEN); return telegram.handle(request, runner, { sessionId: 'telegram', env }); },};Setup:
- Create a bot via @BotFather on Telegram
- Set the webhook:
https://api.telegram.org/bot<TOKEN>/setWebhook?url=https://your-worker.workers.dev
npx wrangler secret put TELEGRAM_TOKENWeb Chat (SSE)
Streams responses via Server-Sent Events for a real-time chat experience:
import { WebChatChannel, ChannelRunner } from '@moon-wave/channels';
export default { async fetch(request: Request, env: Env): Promise<Response> { const runner = new ChannelRunner(agent); const webchat = new WebChatChannel(); return webchat.handle(request, runner, { sessionId: 'web', env }); },};The client receives SSE events and can render tokens as they stream in.