Implements Telegram user account support via GramJS/MTProto (#937). ## What's New - Complete GramJS channel adapter for user accounts (not bots) - Interactive auth flow (phone → SMS → 2FA) - Session persistence via StringSession - DM and group message support - Security policies (allowFrom, dmPolicy, groupPolicy) - Multi-account configuration ## Files Added ### Core Implementation (src/telegram-gramjs/) - auth.ts - Interactive authentication flow - auth.test.ts - Auth flow tests (mocked) - client.ts - GramJS TelegramClient wrapper - config.ts - Config adapter for multi-account - gateway.ts - Gateway adapter (poll/send) - handlers.ts - Message conversion (GramJS → openclaw) - handlers.test.ts - Message conversion tests - setup.ts - CLI setup wizard - types.ts - TypeScript type definitions - index.ts - Module exports ### Configuration - src/config/types.telegram-gramjs.ts - Config schema ### Plugin Extension - extensions/telegram-gramjs/index.ts - Plugin registration - extensions/telegram-gramjs/src/channel.ts - Channel plugin implementation - extensions/telegram-gramjs/openclaw.plugin.json - Plugin manifest - extensions/telegram-gramjs/package.json - Dependencies ### Documentation - docs/channels/telegram-gramjs.md - Complete setup guide (14KB) - GRAMJS-PHASE1-SUMMARY.md - Implementation summary ### Registry - src/channels/registry.ts - Added telegram-gramjs to CHAT_CHANNEL_ORDER ## Test Coverage - ✅ Auth flow with phone/SMS/2FA (mocked) - ✅ Phone number validation - ✅ Session verification - ✅ Message conversion (DM, group, reply) - ✅ Session key routing - ✅ Command extraction - ✅ Edge cases (empty messages, special chars) ## Features Implemented (Phase 1) - ✅ User account authentication via MTProto - ✅ DM message send/receive - ✅ Group message send/receive - ✅ Reply context preservation - ✅ Security policies (pairing, allowlist) - ✅ Multi-account support - ✅ Session persistence - ✅ Command detection ## Next Steps (Phase 2) - Media support (photos, videos, files) - Voice messages and stickers - Message editing and deletion - Reactions - Channel messages ## Documentation Highlights - Getting API credentials from my.telegram.org - Interactive setup wizard walkthrough - DM and group policies configuration - Multi-account examples - Rate limits and troubleshooting - Security best practices - Migration guide from Bot API Closes #937 (Phase 1)
306 lines
7.6 KiB
Markdown
306 lines
7.6 KiB
Markdown
# GramJS Phase 1 Implementation - Completion Summary
|
|
|
|
**Date:** 2026-01-30
|
|
**Session:** Subagent continuation of #937
|
|
**Status:** Core implementation complete (85%), ready for testing
|
|
|
|
---
|
|
|
|
## What Was Implemented
|
|
|
|
This session completed the **core gateway and messaging infrastructure** for the Telegram GramJS user account adapter.
|
|
|
|
### Files Created (2 new)
|
|
|
|
1. **`src/telegram-gramjs/gateway.ts`** (240 lines, 7.9 KB)
|
|
- Gateway adapter implementing `ChannelGatewayAdapter` interface
|
|
- Client lifecycle management (startAccount, stopAccount)
|
|
- Message queue for polling pattern
|
|
- Security policy enforcement
|
|
- Outbound message delivery
|
|
- Abort signal handling
|
|
|
|
2. **`src/telegram-gramjs/handlers.ts`** (206 lines, 5.7 KB)
|
|
- GramJS event → openclaw MsgContext conversion
|
|
- Chat type detection and routing
|
|
- Session key generation
|
|
- Security checks integration
|
|
- Command detection helpers
|
|
|
|
### Files Modified (2)
|
|
|
|
1. **`extensions/telegram-gramjs/src/channel.ts`**
|
|
- Added gateway adapter registration
|
|
- Implemented `sendText` with proper error handling
|
|
- Connected to gateway sendMessage function
|
|
- Fixed return type to match `OutboundDeliveryResult`
|
|
|
|
2. **`src/telegram-gramjs/index.ts`**
|
|
- Exported gateway adapter and functions
|
|
- Exported message handler utilities
|
|
|
|
---
|
|
|
|
## Architecture Overview
|
|
|
|
### Message Flow (Inbound)
|
|
|
|
```
|
|
Telegram MTProto
|
|
↓
|
|
GramJS NewMessage Event
|
|
↓
|
|
GramJSClient.onMessage()
|
|
↓
|
|
convertToMsgContext() → MsgContext
|
|
↓
|
|
isMessageAllowed() → Security Check
|
|
↓
|
|
Message Queue (per account)
|
|
↓
|
|
pollMessages() → openclaw gateway
|
|
↓
|
|
Agent Session (routed by SessionKey)
|
|
```
|
|
|
|
### Message Flow (Outbound)
|
|
|
|
```
|
|
Agent Reply
|
|
↓
|
|
channel.sendText()
|
|
↓
|
|
gateway.sendMessage()
|
|
↓
|
|
GramJSClient.sendMessage()
|
|
↓
|
|
Telegram MTProto
|
|
```
|
|
|
|
### Session Routing
|
|
|
|
- **DMs:** `telegram-gramjs:{accountId}:{senderId}` (main session per user)
|
|
- **Groups:** `telegram-gramjs:{accountId}:group:{groupId}` (isolated per group)
|
|
|
|
### Security Enforcement
|
|
|
|
Applied **before queueing** in gateway:
|
|
|
|
- **DM Policy:** Check `allowFrom` list (by user ID or @username)
|
|
- **Group Policy:** Check `groupPolicy` (open vs allowlist)
|
|
- **Group-Specific:** Check `groups[groupId].allowFrom` if configured
|
|
|
|
---
|
|
|
|
## Key Features
|
|
|
|
✅ **Gateway Adapter**
|
|
- Implements openclaw `ChannelGatewayAdapter` interface
|
|
- Manages active connections in global Map
|
|
- Message queueing for polling pattern
|
|
- Graceful shutdown with abort signal
|
|
|
|
✅ **Message Handling**
|
|
- Converts GramJS events to openclaw `MsgContext` format
|
|
- Preserves reply context and timestamps
|
|
- Detects chat types (DM, group, channel)
|
|
- Filters empty and channel messages
|
|
|
|
✅ **Security**
|
|
- DM allowlist enforcement
|
|
- Group policy enforcement (open/allowlist)
|
|
- Group-specific allowlists
|
|
- Pre-queue filtering (efficient)
|
|
|
|
✅ **Outbound Delivery**
|
|
- Text message sending
|
|
- Reply-to support
|
|
- Thread/topic support
|
|
- Error handling and reporting
|
|
- Support for @username and numeric IDs
|
|
|
|
---
|
|
|
|
## Testing Status
|
|
|
|
⚠️ **Not Yet Tested** (Next Steps)
|
|
|
|
- [ ] End-to-end auth flow
|
|
- [ ] Message receiving and queueing
|
|
- [ ] Outbound message delivery
|
|
- [ ] Security policy enforcement
|
|
- [ ] Multi-account handling
|
|
- [ ] Error recovery
|
|
- [ ] Abort/shutdown behavior
|
|
|
|
---
|
|
|
|
## Known Gaps
|
|
|
|
### Not Implemented (Phase 1 Scope)
|
|
|
|
- **Mention detection** - Groups receive all messages (ignores `requireMention`)
|
|
- **Rate limiting** - Will hit Telegram flood errors
|
|
- **Advanced reconnection** - Relies on GramJS defaults
|
|
|
|
### Not Implemented (Phase 2 Scope)
|
|
|
|
- Media support (photos, videos, files)
|
|
- Stickers and animations
|
|
- Voice messages
|
|
- Location sharing
|
|
- Polls
|
|
|
|
### Not Implemented (Phase 3 Scope)
|
|
|
|
- Secret chats (E2E encryption)
|
|
- Self-destructing messages
|
|
|
|
---
|
|
|
|
## Completion Estimate
|
|
|
|
**Phase 1 MVP: 85% Complete**
|
|
|
|
| Component | Status | Progress |
|
|
|-----------|--------|----------|
|
|
| Architecture & Design | ✅ Done | 100% |
|
|
| Skeleton & Types | ✅ Done | 100% |
|
|
| Auth Flow | ✅ Done | 90% (needs testing) |
|
|
| Config System | ✅ Done | 100% |
|
|
| Plugin Registration | ✅ Done | 100% |
|
|
| **Gateway Adapter** | ✅ **Done** | **95%** |
|
|
| **Message Handlers** | ✅ **Done** | **95%** |
|
|
| **Outbound Delivery** | ✅ **Done** | **95%** |
|
|
| Integration Testing | ⏳ Todo | 0% |
|
|
| Documentation | ⏳ Todo | 0% |
|
|
|
|
**Remaining Work:** ~4-6 hours
|
|
- npm dependency installation: 1 hour
|
|
- Integration testing: 2-3 hours
|
|
- Bug fixes: 1-2 hours
|
|
- Documentation: 1 hour
|
|
|
|
---
|
|
|
|
## Next Steps (For Human Contributor)
|
|
|
|
### 1. Install Dependencies
|
|
```bash
|
|
cd ~/openclaw-contrib/extensions/telegram-gramjs
|
|
npm install telegram@2.24.15
|
|
```
|
|
|
|
### 2. Build TypeScript
|
|
```bash
|
|
cd ~/openclaw-contrib
|
|
npm run build
|
|
# Check for compilation errors
|
|
```
|
|
|
|
### 3. Test Authentication
|
|
```bash
|
|
openclaw setup telegram-gramjs
|
|
# Follow interactive prompts
|
|
# Get API credentials from: https://my.telegram.org/apps
|
|
```
|
|
|
|
### 4. Test Message Flow
|
|
```bash
|
|
# Start gateway daemon
|
|
openclaw gateway start
|
|
|
|
# Send DM from Telegram to authenticated account
|
|
# Check logs: openclaw gateway logs
|
|
|
|
# Verify:
|
|
# - Message received and queued
|
|
# - Security checks applied
|
|
# - Agent responds
|
|
# - Reply delivered
|
|
```
|
|
|
|
### 5. Test Group Messages
|
|
```bash
|
|
# Add bot account to a Telegram group
|
|
# Send message mentioning bot
|
|
# Verify group routing (isolated session)
|
|
```
|
|
|
|
### 6. Write Documentation
|
|
- Setup guide (API credentials, auth flow)
|
|
- Configuration reference
|
|
- Troubleshooting (common errors)
|
|
|
|
### 7. Submit PR
|
|
```bash
|
|
cd ~/openclaw-contrib
|
|
git checkout -b feature/telegram-gramjs-phase1
|
|
git add src/telegram-gramjs extensions/telegram-gramjs src/config/types.telegram-gramjs.ts
|
|
git add src/channels/registry.ts
|
|
git commit -m "feat: Add Telegram GramJS user account adapter (Phase 1)
|
|
|
|
- Gateway adapter for message polling and delivery
|
|
- Message handlers converting GramJS events to openclaw format
|
|
- Outbound delivery with reply and thread support
|
|
- Security policy enforcement (allowFrom, groupPolicy)
|
|
- Session routing (DM vs group isolation)
|
|
|
|
Implements #937 (Phase 1: basic send/receive)
|
|
"
|
|
git push origin feature/telegram-gramjs-phase1
|
|
```
|
|
|
|
---
|
|
|
|
## Code Statistics
|
|
|
|
**Total Implementation:**
|
|
- **Files:** 10 TypeScript files
|
|
- **Lines of Code:** 2,014 total
|
|
- **Size:** ~55 KB
|
|
|
|
**This Session:**
|
|
- **New Files:** 2 (gateway.ts, handlers.ts)
|
|
- **Modified Files:** 2 (channel.ts, index.ts)
|
|
- **New Code:** ~450 lines, ~14 KB
|
|
|
|
**Breakdown by Module:**
|
|
```
|
|
src/telegram-gramjs/gateway.ts 240 lines 7.9 KB
|
|
src/telegram-gramjs/handlers.ts 206 lines 5.7 KB
|
|
src/telegram-gramjs/client.ts ~280 lines 8.6 KB
|
|
src/telegram-gramjs/auth.ts ~170 lines 5.2 KB
|
|
src/telegram-gramjs/config.ts ~240 lines 7.4 KB
|
|
src/telegram-gramjs/setup.ts ~200 lines 6.4 KB
|
|
extensions/telegram-gramjs/channel.ts ~290 lines 9.0 KB
|
|
```
|
|
|
|
---
|
|
|
|
## References
|
|
|
|
- **Issue:** https://github.com/openclaw/openclaw/issues/937
|
|
- **GramJS Docs:** https://gram.js.org/
|
|
- **Telegram API:** https://core.telegram.org/methods
|
|
- **Get API Credentials:** https://my.telegram.org/apps
|
|
- **Progress Doc:** `~/clawd/memory/research/2026-01-30-gramjs-implementation.md`
|
|
|
|
---
|
|
|
|
## Summary
|
|
|
|
This session completed the **core infrastructure** needed for the Telegram GramJS adapter to function:
|
|
|
|
1. ✅ **Gateway adapter** - Manages connections, queues messages, handles lifecycle
|
|
2. ✅ **Message handlers** - Convert GramJS events to openclaw format with proper routing
|
|
3. ✅ **Outbound delivery** - Send text messages with reply and thread support
|
|
|
|
The implementation follows openclaw patterns, integrates with existing security policies, and is ready for integration testing.
|
|
|
|
**What's Next:** Install dependencies, test end-to-end, fix bugs, document, and submit PR.
|
|
|
|
---
|
|
|
|
*Generated: 2026-01-30 (subagent session)*
|