docs: compare OwpenGram Server's implemented features to Telegram's official server
Feature-by-feature comparison across transport/auth, messaging, groups, media, bots, calls, stories, secret chats, sync, themes, moderation, and the payments/Stars economy - marking each Full / Partial / Stub / None, with the deliberate omissions and OwpenGram-only additions called out separately.
This commit is contained in:
parent
3289882dbd
commit
eb23afdd39
1 changed files with 286 additions and 0 deletions
286
docs/telegram-feature-comparison.md
Normal file
286
docs/telegram-feature-comparison.md
Normal file
|
|
@ -0,0 +1,286 @@
|
|||
# OwpenGram Server vs. Telegram - Feature Comparison
|
||||
|
||||
This document compares what OwpenGram Server actually implements against the
|
||||
behaviour of Telegram's official server, as seen through the MTProto API
|
||||
(layer 228) and the official clients (Telegram Desktop is the primary target,
|
||||
with Android / iOS / Web compatibility paths).
|
||||
|
||||
It is written from the server code in this repository: ~633 canonical
|
||||
`registerRPC` handlers across `internal/rpc`, plus the domain services in
|
||||
`internal/app/*`. "Telegram" below means the closed official backend.
|
||||
|
||||
Legend:
|
||||
|
||||
- **Full** - implemented with real server-side state and semantics
|
||||
- **Partial** - core paths work; edges, scale features, or moderation depth missing
|
||||
- **Stub** - RPC is answered with a fixed/empty valid response so clients don't
|
||||
hang or crash, but there is no feature behind it
|
||||
- **None** - not registered / not implemented
|
||||
|
||||
---
|
||||
|
||||
## 1. Transport, auth keys, sessions
|
||||
|
||||
| Area | Telegram | OwpenGram | Status |
|
||||
|---|---|---|---|
|
||||
| MTProto 2.0 over TCP | Full | TCP transport, RSA key exchange, auth keys, salts, ack/resend, bad-msg notifications, RPC dispatch | Full |
|
||||
| Obfuscated / padded intermediate / other transports | Full (TCP, HTTP, WS, obfuscation) | intermediate / padded-intermediate focus | Partial |
|
||||
| Multiple data centers, CDN DCs, DC migration | Full (5+ DCs, `PHONE_MIGRATE`, CDN file DCs) | Single logical DC; `help.getConfig` advertises one; no CDN redirects | None (by design) |
|
||||
| Perfect-forward-secrecy temp auth keys (`auth.bindTempAuthKey`) | Full | Implemented | Full |
|
||||
| Takeout / data export sessions | Full (`account.initTakeoutSession`) | Not registered | None |
|
||||
| Web / bot authorizations listing & reset | Full | `account.getWebAuthorizations`, `resetWebAuthorization(s)` | Full |
|
||||
|
||||
## 2. Login and accounts
|
||||
|
||||
| Area | Telegram | OwpenGram | Status |
|
||||
|---|---|---|---|
|
||||
| Phone-number login with SMS/flash-call/app code | Full, global SMS delivery | Dev login code; external delivery via SMS webhook or SMTP; email as identity (no phone required) | Partial (delivery is operator-provided) |
|
||||
| QR-code login (`auth.exportLoginToken` / `acceptLoginToken`) | Full | Implemented | Full |
|
||||
| Cloud password / 2FA (SRP) | Full | `account.getPassword`, `updatePasswordSettings`, `auth.checkPassword`, recovery e-mail, `resetPassword` | Full |
|
||||
| Passkey / WebAuthn sign-in | Not in official server | `auth.initPasskeyLogin` / `finishPasskeyLogin`, `account.*Passkey*` | Extra (OwpenGram-only) |
|
||||
| "Login with Telegram" as an OIDC provider for 3rd-party sites | Not applicable | Self-hosted OpenID Connect provider (`internal/telegramloginhttp`) | Extra |
|
||||
| Sign-up, terms of service, delete account, account TTL | Full | Implemented incl. `account.setAccountTTL`, `deleteAccount` with reason | Full |
|
||||
| Login email as second factor | Full | Implemented | Full |
|
||||
| Active sessions / authorizations management | Full | `account.getAuthorizations`, `resetAuthorization`, TTL, `changeAuthorizationSettings` | Full |
|
||||
|
||||
## 3. Users, contacts, privacy
|
||||
|
||||
| Area | Telegram | OwpenGram | Status |
|
||||
|---|---|---|---|
|
||||
| Profiles, bios, profile photos, personal channel | Full | `users.getFullUser`, `photos.*`, `account.updatePersonalChannel` | Full |
|
||||
| Usernames + collectible/fragment usernames | Full | Mint / transfer / activate, `account.reorderUsernames`, `fragment.getCollectibleInfo` | Full |
|
||||
| Contact import / export / search / resolve phone | Full | `contacts.importContacts`, `resolvePhone`, `search`, close friends | Full |
|
||||
| Blocked list, privacy rules, "who can..." keys | Full (all privacy keys) | `account.getPrivacy` / `setPrivacy`, global privacy settings, blocked list | Partial (common keys; some newer keys may be defaulted) |
|
||||
| Presence / last seen | Full | `account.updateStatus`, `contacts.getStatuses`, presence fan-out | Full |
|
||||
| Birthdays, close friends, contact notes | Full | `contacts.getBirthdays`, `editCloseFriends`, `updateContactNote` | Full |
|
||||
| Global name search directory | Full | `contacts.search` over local users/chats | Partial (local instance only) |
|
||||
|
||||
## 4. Messaging (private chats)
|
||||
|
||||
| Area | Telegram | OwpenGram | Status |
|
||||
|---|---|---|---|
|
||||
| Send / edit / delete / forward / reply | Full | `messages.sendMessage` / `sendMedia` / `sendMultiMedia` / `editMessage` / `forwardMessages` | Full |
|
||||
| Rich entities, formatted text, link previews | Full | Entities, `messages.getWebPage` / `getWebPagePreview`, TDesktop rich messages | Full |
|
||||
| Albums / grouped media | Full | `album_group` grouping | Full |
|
||||
| Reactions (emoji + custom emoji), paid reactions | Full incl. paid (Stars) | `sendReaction`, available/recent/top/default reactions, tags; **no paid reactions** | Partial |
|
||||
| Scheduled messages | Full | `getScheduledHistory`, `sendScheduledMessages`, `deleteScheduledMessages` | Full |
|
||||
| Self-destruct / TTL, default history TTL | Full | `setHistoryTTL`, `setDefaultHistoryTTL`, TTL-oriented paths | Partial |
|
||||
| Read receipts, read date, "who read" in groups | Full | `readHistory`, `getOutboxReadDate`, `getMessageReadParticipants` | Full |
|
||||
| Drafts (incl. cloud drafts sync) | Full | `saveDraft`, `getAllDrafts`, `clearAllDrafts` | Full |
|
||||
| Saved Messages, saved dialogs, pinned saved | Full | `getSavedDialogs`, `getSavedHistory`, `toggleSavedDialogPin` | Full |
|
||||
| Quick replies (business) | Full | `getQuickReplies`, `sendQuickReplyMessages`, `editQuickReplyShortcut` | Full |
|
||||
| Translation (`messages.translateText`) | Full | Provider-backed batch translation, per-peer language, rate limits | Full |
|
||||
| Transcribe voice (`messages.transcribeAudio`) | Full (Premium) | Registered | Partial (provider-dependent) |
|
||||
| Fact-check / sponsored-message plumbing | Full | `getSponsoredMessages`, `viewSponsoredMessage`, `reportSponsoredMessage` | Partial (plumbing) |
|
||||
| To-do lists in messages | Full | `appendTodoList`, `toggleTodoCompleted` | Full |
|
||||
| Search: in-chat, global, by date, counters, calendar | Full | `messages.search`, `searchGlobal`, `getSearchCounters`, `getSearchResultsCalendar` / `Positions` | Full |
|
||||
|
||||
## 5. Groups, supergroups, channels
|
||||
|
||||
| Area | Telegram | OwpenGram | Status |
|
||||
|---|---|---|---|
|
||||
| Basic groups create / add / migrate to supergroup | Full | `messages.createChat`, `addChatUser`, `migrateChat` | Full |
|
||||
| Supergroups / channels create, join, leave, delete | Full | `channels.createChannel` / `joinChannel` / `leaveChannel` / `deleteChannel` | Full |
|
||||
| Admin rights, banned rights, default banned rights, ranks | Full | `channels.editAdmin` / `editBanned`, `editChatDefaultBannedRights`, `editChatParticipantRank` | Full |
|
||||
| Invite links (permanent, named, request-to-join, importers) | Full | `messages.exportChatInvite`, `getExportedChatInvites`, `hideChatJoinRequest`, importers | Full |
|
||||
| Participants list, admin log, hidden participants | Full | `channels.getParticipants`, `getAdminLog`, `toggleParticipantsHidden` | Full |
|
||||
| Forum topics | Full | `getForumTopics`, `editForumTopic`, pinned topics, view-as-messages | Full |
|
||||
| Linked discussion group | Full | `setDiscussionGroup`, `getGroupsForDiscussion`, `readDiscussion` | Full |
|
||||
| Slow mode, join-to-send, join-request, anti-spam, gigagroup | Full | `toggleSlowMode`, `toggleJoinToSend`, `toggleAntiSpam`, `convertToGigagroup` | Full |
|
||||
| Public username directory + previews for non-members | Full | `channels.searchPosts`, resolve, public landing pages | Full |
|
||||
| Boosts / boost level perks | Full | `premium.applyBoost`, `getBoostsStatus`, `getMyBoosts` | Partial (levels tracked; not all perks gated) |
|
||||
| Channel monetization, paid posts, suggested posts | Full (Stars/TON) | `service_suggested_post`, `toggleSuggestedPostApproval`, `updatePaidMessagesPrice` | Partial (no real payout ledger) |
|
||||
| Statistics (channel / megagroup / message / story) | Full | `stats.getBroadcastStats`, `getMegagroupStats`, `getMessageStats`, `loadAsyncGraph` | Partial (graphs from local data) |
|
||||
| Communities / peer links (layer 228) | Full | `communities.*` create / join / peer links / bans | Partial (new API) |
|
||||
|
||||
## 6. Media and files
|
||||
|
||||
| Area | Telegram | OwpenGram | Status |
|
||||
|---|---|---|---|
|
||||
| Upload / download, big-file parts, file hashes | Full | `upload.saveFilePart` / `saveBigFilePart` / `getFile` / `getFileHashes` | Full |
|
||||
| CDN-backed downloads, `upload.getCdnFile` | Full | None - always served from origin | None (by design) |
|
||||
| Storage backends | Google infra | Local disk **or** S3/MinIO-compatible, switchable per deployment; low-space guard; stale-media cleanup | Full (self-host) |
|
||||
| Web files / proxied external media (`upload.getWebFile`) | Full | Registered, external media fetch | Partial |
|
||||
| Photos, documents, thumbnails, GIFv conversion, video | Full | Implemented incl. canonical GIFv conversion | Full |
|
||||
| Web page previews, instant view | Full | Previews yes; **Instant View pages** no | Partial |
|
||||
| Map/venue tile cache | Full | Cache hooks only | Partial |
|
||||
|
||||
## 7. Stickers, emoji, GIFs
|
||||
|
||||
| Area | Telegram | OwpenGram | Status |
|
||||
|---|---|---|---|
|
||||
| Sticker sets install/archive/reorder, custom emoji, masks | Full | `messages.*StickerSet*`, `getCustomEmojiDocuments`, mask stickers | Full |
|
||||
| Create / edit own sticker set (`stickers.*`) | Full | `createStickerSet`, `addStickerToSet`, `renameStickerSet`, suggest short name | Full |
|
||||
| Featured / trending / recent / faved stickers | Full | `getFeaturedStickers`, `getRecentStickers`, `getFavedStickers` | Full |
|
||||
| Emoji keywords / groups / status | Full | `getEmojiKeywords*`, `getEmojiGroups`, emoji status incl. collectible | Full |
|
||||
| Saved GIFs + inline `@gif` catalog | Full | Admin-curated categorized `@gif` catalog, auto-save on send | Full (plus extras) |
|
||||
| Premium animated emoji / effects | Full | `messages.getAvailableEffects` | Partial |
|
||||
|
||||
## 8. Bots and mini apps
|
||||
|
||||
| Area | Telegram | OwpenGram | Status |
|
||||
|---|---|---|---|
|
||||
| Bot messaging, callbacks, inline mode | Full | `getInlineBotResults`, `sendInlineBotResult`, `getBotCallbackAnswer`, `setBotCallbackAnswer` | Full |
|
||||
| BotFather-style bot creation & config | Full | `bots.createBot`, `setBotInfo`, `setBotCommands`, menu button, usernames | Full |
|
||||
| Web apps / mini apps (`messages.requestWebView`, main/app/simple) | Full | `webViewRequest`, `mainWebViewRequest`, `appWebViewRequest`, `prolongWebView`, `sendWebViewData` | Full |
|
||||
| Attachment-menu bots | Full | `getAttachMenuBots`, `toggleBotInAttachMenu` | Full |
|
||||
| Bot API HTTP gateway (getUpdates / webhooks) | Full (`api.telegram.org`) | Minimal Bot API gateway in `internal/botapi`; persistent `getUpdates`, webhook delivery | Partial (subset of methods) |
|
||||
| Business connections / Business AI replies | Full | `account.getBotBusinessConnection`, connected bots, business automation, AI echo | Partial |
|
||||
| Bot payments (`payments.sendPaymentForm`, invoices) | Full | **Not registered** | None |
|
||||
| Star-ref / affiliate programs | Full | `bots.updateStarRefProgram` shell | Stub |
|
||||
| Games (`messages.setGameScore`, high scores) | Full | Registered incl. inline high scores | Full |
|
||||
|
||||
## 9. Calls and live streams
|
||||
|
||||
| Area | Telegram | OwpenGram | Status |
|
||||
|---|---|---|---|
|
||||
| 1:1 call signaling (DH, `phone.requestCall` ... `discardCall`) | Full | Full state machine with g_a hash commit, ring timeout, tombstones (`internal/app/phone`) | Full (signaling) |
|
||||
| Group calls / voice chats | Full | `phone.joinGroupCall`, participants, `editGroupCallParticipant`, titles, scheduled starts | Full (signaling/state) |
|
||||
| Conference calls (layer 228 chain blocks) | Full | `createConferenceCall`, `getGroupCallChainBlocks`, invite/decline | Partial |
|
||||
| Media relay | Global TURN + SFU fleet | SFU/TURN **building blocks** (`internal/sfu`, `internal/turnsrv`); operator must run relays | Partial |
|
||||
| RTMP live streaming into channels | Full | `phone.getGroupCallStreamRtmpUrl`, RTMP ingest, segmenter (`internal/app/livestream`) | Full |
|
||||
| Screen sharing / presentation | Full | `joinGroupCallPresentation` / `leaveGroupCallPresentation` | Full (signaling) |
|
||||
| Call debug / rating | Full | `saveCallDebug`, `setCallRating` | Full |
|
||||
|
||||
## 10. Stories
|
||||
|
||||
| Area | Telegram | OwpenGram | Status |
|
||||
|---|---|---|---|
|
||||
| Post / edit / delete stories, media | Full | `stories.sendStory`, `editStory`, `deleteStories`, `canSendStory` | Full |
|
||||
| Read state, views, viewers list, reactions | Full | `readStories`, `incrementStoryViews`, `getStoryViewsList`, `sendReaction` | Full |
|
||||
| Pinned stories / profile grid, archive | Full | `togglePinned`, `getPinnedStories`, `getStoriesArchive` | Full |
|
||||
| Story albums (layer 228) | Full | `createAlbum`, `getAlbumStories`, `reorderAlbums` | Full |
|
||||
| Stealth mode, hidden peers | Full | `activateStealthMode`, `toggleAllStoriesHidden`, `togglePeerStoriesHidden` | Full |
|
||||
| Channel stories + live stories | Full | Channel posting via access checks; `stories.startLive` | Partial |
|
||||
| Story boosts / repost / public forwards | Full | `stats.getStoryPublicForwards`, search posts | Partial |
|
||||
|
||||
## 11. Dialogs, sync, folders
|
||||
|
||||
| Area | Telegram | OwpenGram | Status |
|
||||
|---|---|---|---|
|
||||
| Dialog list, pinned, manual unread, archive folder | Full | `getDialogs`, `getPinnedDialogs`, `markDialogUnread`, `folders.editPeerFolders` | Full |
|
||||
| Chat folders / dialog filters, suggested filters | Full | `getDialogFilters`, `updateDialogFilter`, `getSuggestedDialogFilters`, filter tags | Full |
|
||||
| Shareable folders / chatlist invites | Full | `chatlists.exportChatlistInvite`, join/import, updates, revoked handling | Full |
|
||||
| Update sequencing: `updates.getState` / `getDifference` / `getChannelDifference` | Full | Implemented incl. durable updates, `pts`/`qts`/`seq`, offline difference recovery | Full |
|
||||
| Real-time push over the MTProto connection | Full | Online fan-out, reliable dispatch | Full |
|
||||
| **External push (APNs / FCM / GCM)** | Full | **None** - `account.registerDevice` only records the in-connection MTProto push session; other token types are ignored | None (by design) |
|
||||
| Notification settings / exceptions / reactions-notify | Full | `getNotifySettings`, `getNotifyExceptions`, `getReactionsNotifySettings` | Full |
|
||||
|
||||
## 12. Secret chats (E2E)
|
||||
|
||||
| Area | Telegram | OwpenGram | Status |
|
||||
|---|---|---|---|
|
||||
| DH handshake, `messages.requestEncryption` -> accept/discard | Full | State machine + id/access_hash allocation, blind g_a storage (`internal/app/secretchat`) | Full |
|
||||
| Encrypted message / file / service delivery, `qts` queue | Full | `sendEncrypted`, `sendEncryptedFile`, `sendEncryptedService`, `uploadEncryptedFile` | Full |
|
||||
| Encrypted typing, read history, spam report | Full | `setEncryptedTyping`, `readEncryptedHistory`, `reportEncryptedSpam` | Full |
|
||||
| Rekeying / perfect forward secrecy for long chats | Full | Handled at handshake layer; server is a blind relay | Partial |
|
||||
|
||||
## 13. Themes, wallpapers, appearance
|
||||
|
||||
| Area | Telegram | OwpenGram | Status |
|
||||
|---|---|---|---|
|
||||
| Wallpapers install/upload/reset, multi-wallpaper | Full | `account.getWallPapers`, `installWallPaper`, `getMultiWallPapers` | Full |
|
||||
| Custom themes create/install/update, chat themes | Full | `account.createTheme`, `installTheme`, `getChatThemes`, `messages.setChatTheme` | Full |
|
||||
| Peer colors, profile colors, name colors | Full | `help.getPeerColors`, `account.updateColor`, `channels.updateColor` | Full |
|
||||
| Unique-gift chat themes | Full | `account.getUniqueGiftChatThemes` (empty - no gifts) | Stub |
|
||||
| Ringtones | Full | `account.getSavedRingtones` | Full |
|
||||
|
||||
## 14. Payments, Stars, gifts, Premium - deliberately omitted
|
||||
|
||||
Telegram's economy layer is intentionally **not implemented**. OwpenGram keeps
|
||||
a handful of read-only RPCs answered with valid empty/zero responses purely so
|
||||
the official clients render "no Stars / no gifts" instead of hanging or
|
||||
retrying in a storm.
|
||||
|
||||
| Area | Telegram | OwpenGram |
|
||||
|---|---|---|
|
||||
| Invoice / payment form / shipping / checkout | Full (`payments.sendPaymentForm`, ...) | Not registered |
|
||||
| Telegram Stars balance, purchase, transactions | Full | `getStarsStatus` / `Subscriptions` / `Transactions` return zero balance, empty ledger |
|
||||
| Star gifts / collectible gifts / gift profiles | Full | `getStarGifts` / `getSavedStarGifts` return empty lists |
|
||||
| Google Play / App Store receipt verification | Full | `canPurchaseStore` returns `false`; `assignPlayMarketTransaction` -> `STORE_PAYMENT_UNAVAILABLE` |
|
||||
| Premium subscription, gift codes, giveaways | Full | `payments.getPremiumGiftCodeOptions` empty; Premium status can be granted server-side by the operator, not purchased |
|
||||
| TON / channel revenue withdrawal | Full | `getStarsRevenueStats` / `RevenueAdsAccountUrl` return fixed zero/compat values |
|
||||
| Business Stars / paid messages payout | Full | Price fields tracked; no real ledger or payout |
|
||||
|
||||
## 15. Moderation, admin, operations
|
||||
|
||||
| Area | Telegram | OwpenGram | Status |
|
||||
|---|---|---|---|
|
||||
| Report spam / peer / message / reaction / profile photo | Full | `messages.report`, `account.reportPeer`, `reportProfilePhoto`, `channels.reportSpam` | Full |
|
||||
| Global ban / spam-bot / account restrictions | Full (internal) | Per-account freeze (admin read-only restriction advertised via appConfig), moderation cases, appeal links (`internal/app/moderation`) | Partial |
|
||||
| Anti-spam service for groups | Full (`@GroupAnti-SpamBot`) | `channels.toggleAntiSpam`, `reportAntiSpamFalsePositive` | Partial |
|
||||
| Admin API + web UI | Not public | RBAC-scoped admin API tokens, web UI (`internal/adminapi`, `internal/web`) | Extra |
|
||||
| Broadcast / announcements to all users | Not public | Admin-panel broadcast from the official account to all or a picked list | Extra |
|
||||
| Shared-device detection across accounts | Internal | Implemented | Extra |
|
||||
| TUI server panel (setup wizard, start/stop, git-pull update, log tail, .env editor) | N/A | Bundled (`tui-panel`) | Extra |
|
||||
| Metrics, pprof, DB tracing, load-test harness | Internal | `internal/observability`, `internal/loadtest`, `internal/loadharness` | Extra |
|
||||
|
||||
## 16. Verification and badges
|
||||
|
||||
| Area | Telegram | OwpenGram | Status |
|
||||
|---|---|---|---|
|
||||
| Official blue checkmark | Full (manual) | `@verifybot` flow, verification worker | Full (self-host policy) |
|
||||
| Third-party bot verification mark (icon + label before a name) | Full (`bots.setCustomVerification`) | `@marksbot` mechanism - **experimental, hidden by default** | Partial |
|
||||
| Scam / fake labels | Full | Flag paths present | Partial |
|
||||
|
||||
## 17. Misc API surface
|
||||
|
||||
| Area | Telegram | OwpenGram | Status |
|
||||
|---|---|---|---|
|
||||
| `help.getConfig` / `getAppConfig` / `getCountriesList` / timezones / promo | Full | Implemented | Full |
|
||||
| Language packs (`langpack.*`) | Full | `getLangPack`, `getDifference`, `getStrings`, seeded packs | Full |
|
||||
| App update check (`help.getAppUpdate`) | Full | Registered | Partial (operator-fed) |
|
||||
| Deep-link info, t.me link resolution | Full | `help.getDeepLinkInfo`, public link landing pages | Full |
|
||||
| `contacts.getLocated` (nearby people/chats) | Full | Not registered | None |
|
||||
| Peer color / emoji-status catalogs | Full | Implemented | Full |
|
||||
| `smsjobs.*` (Android SMS relay income) | Full | Not registered | None |
|
||||
|
||||
---
|
||||
|
||||
## Summary
|
||||
|
||||
**Strong, near-complete parity:**
|
||||
|
||||
- MTProto edge, auth, sessions, PFS, 2FA/SRP
|
||||
- Private chat messaging: send/edit/delete/forward/reply/reactions/scheduled/
|
||||
drafts/search/translation/albums/rich text
|
||||
- Groups, supergroups, channels: admin model, invite links, forum topics,
|
||||
discussion groups, slow mode, anti-spam toggles, public search
|
||||
- Media pipeline with pluggable local-disk or S3 storage
|
||||
- Stickers / custom emoji / GIFs (with an extended `@gif` catalog)
|
||||
- Bots, inline mode, web apps / mini apps, games
|
||||
- Stories (incl. layer 228 albums, stealth mode)
|
||||
- Secret chats (E2E, server as blind relay)
|
||||
- Dialogs/folders/chatlists and the full update-difference sync machinery
|
||||
- Themes, wallpapers, peer colors, language packs
|
||||
|
||||
**Partial / compatibility-first:**
|
||||
|
||||
- Calls and live streams: signaling and state are complete; media relay needs
|
||||
an operator-run SFU/TURN
|
||||
- Boosts, channel/story statistics, communities, business features, conference
|
||||
calls: core flows present, some perks and edges not gated
|
||||
- Bot API HTTP gateway: a useful subset, not the full `api.telegram.org`
|
||||
- Moderation: instance-level tooling exists, no global trust-and-safety network
|
||||
|
||||
**Deliberately not implemented:**
|
||||
|
||||
- The entire payments/economy layer: invoices, Telegram Stars, star gifts,
|
||||
Premium purchase, TON/revenue withdrawal, Play/App Store billing. Read-only
|
||||
RPCs return valid empty responses so clients don't break.
|
||||
- External push notifications (APNs / FCM / GCM). Delivery is only over the
|
||||
live MTProto connection; `registerDevice` records the in-connection push
|
||||
session and ignores other token types.
|
||||
- Multi-DC / CDN infrastructure: one logical DC, files always served from
|
||||
origin, no DC-migration redirects.
|
||||
- `contacts.getLocated` (nearby), takeout sessions, `smsjobs.*`, Instant View.
|
||||
|
||||
**OwpenGram-only additions not in Telegram's server:**
|
||||
|
||||
- WebAuthn / passkey sign-in
|
||||
- Self-hosted "Login with Telegram" OpenID Connect provider
|
||||
- Admin API + web UI, RBAC admin tokens, admin broadcast/announcements
|
||||
- Shared-device detection
|
||||
- Bundled TUI server-operations panel
|
||||
- AI compose / rewrite with pluggable local or external providers
|
||||
- Pluggable S3/MinIO media backend with live switch
|
||||
Loading…
Add table
Add a link
Reference in a new issue