diff --git a/data/core.telegram.org/api/channel.html b/data/core.telegram.org/api/channel.html deleted file mode 100644 index ce31e183ac..0000000000 --- a/data/core.telegram.org/api/channel.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - Channels - - - - - - - - - - - - - -
- -
-
-
- -

Channels

- -
- -

Channels, chats, supergroups & gigagroups

-

Channels are a tool for broadcasting your messages to large audiences. They can have an unlimited number of subscribers, they can be public with a permanent URL and each post in a channel has its own view counter.
-Technically, they are represented by channel constructors.

-

Supergroups are a powerful tool for building communities and can support up to 200,000 members each.
-Technically, supergroups are actually channels: they are represented by channel constructors, with the megagroup flag set to true.

-

Gigagroups are something inbetween a channel and a supergroup.
-An admin, when prompted by the API using suggestions », can convert a megagroup into a gigagroup using channels.convertToGigagroup (one way only).
-After that, only admins will be able to write in the group (like when send_messages rights are disabled for all group participants by default), but the participant limit is removed and the group can become much bigger than a supergroup (e.g. >200,000 currently).
-Also, one can't invite people into gigagroups and participants of voice chats in gigagroups are muted by default.

-

Channels and supergroup can be created using the channels.createChannel method, by setting the appropriate broadcast or megagroup flags.
-Supergroups can also be assigned a geo_point to become geochats.

-

In previous versions of telegram, only normal groups (represented by chat constructors) could be created using messages.createChat: these groups have fewer features, and can only have 200 members at max.

-

Migration

-

To upgrade a legacy group to a supergroup, messages.migrateChat can be used. -The chats field of the result will have two objects:

-
    -
  • A chat constructor with a migrated_to field, indicating the address of the new supergroup
  • -
  • The new channel megagroup constructor
  • -
-

When getting full info about the migrated channel, the channelFull object will have migrated_from_chat_id and migrated_from_max_id fields indicating the original ID of the chat, and the message ID in the original chat at which the group was migrated.

-

All users of the chat will receive an updateNewMessage from the old chat with a messageService containing a messageActionChatMigrateTo constructor.

-

All new messages have to be sent to the new supergroup.

-

When working with migrated groups clients need to handle loading of the message history (as well as search results et cetera) from both the legacy group and the new supergroup. This is done by merging the two messages lists (requested with different Peer values) client side.

-

Rights

-

Channels, legacy groups and supergroups allow setting granular permissions both for admins and specific users; channels, supergroups and legacy groups also allow setting global granular permissions for users.

-

For more info on how to set and modify rights, see here ».

-

Pinned messages

-

Telegram allows pinning multiple messages on top in a chat, group, supergroup or channel.

-

See here » for more info on pinning and unpinning messages.

-

Discussion

-

Groups can be associated to a channel as a discussion group, to allow users to discuss about posts.

-

For more info on how to set a discussion group in channel, see here »

-

Recent actions

-

Both supergroups and channels offer a so-called admin log, a log of recent relevant supergroup and channel actions, like the modification of group/channel settings or information on behalf of an admin, user kicks and bans, and more.

-

See here » for more info.

- -
- -
-
- -
- - - - - - - - diff --git a/data/core.telegram.org/api/datacenter.html b/data/core.telegram.org/api/datacenter.html deleted file mode 100644 index 4bb25565a7..0000000000 --- a/data/core.telegram.org/api/datacenter.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - Working with Different Data Centers - - - - - - - - - - - - - -
- -
-
-
- -

Working with Different Data Centers

- -

The servers are divided into several data centers (hereinafter “DCs”) in different parts of the world. -A complete list of proxy access points for these DCs may be obtained using help.getConfig:

-
dcOption#18b7a10d flags:# ipv6:flags.0?true media_only:flags.1?true tcpo_only:flags.2?true cdn:flags.3?true static:flags.4?true id:int ip_address:string port:int secret:flags.10?bytes = DcOption;
-config#330b4067 flags:# phonecalls_enabled:flags.1?true default_p2p_contacts:flags.3?true preload_featured_stickers:flags.4?true ignore_phone_entities:flags.5?true revoke_pm_inbox:flags.6?true blocked_mode:flags.8?true pfs_enabled:flags.13?true date:int expires:int test_mode:Bool this_dc:int dc_options:Vector<DcOption> dc_txt_domain_name:string chat_size_max:int megagroup_size_max:int forwarded_count_max:int online_update_period_ms:int offline_blur_timeout_ms:int offline_idle_timeout_ms:int online_cloud_timeout_ms:int notify_cloud_delay_ms:int notify_default_delay_ms:int push_chat_period_ms:int push_chat_limit:int saved_gifs_limit:int edit_time_limit:int revoke_time_limit:int revoke_pm_time_limit:int rating_e_decay:int stickers_recent_limit:int stickers_faved_limit:int channels_read_media_period:int tmp_sessions:flags.0?int pinned_dialogs_count_max:int pinned_infolder_count_max:int call_receive_timeout_ms:int call_ring_timeout_ms:int call_connect_timeout_ms:int call_packet_timeout_ms:int me_url_prefix:string autoupdate_url_prefix:flags.7?string gif_search_username:flags.9?string venue_search_username:flags.10?string img_search_username:flags.11?string static_maps_provider:flags.12?string caption_length_max:int message_length_max:int webfile_dc_id:int suggested_lang_code:flags.2?string lang_pack_version:flags.2?int base_lang_pack_version:flags.2?int = Config;
----functions---
-help.getConfig#c4f9186b = Config;
-

In this context, this_dc is the number of the current DC, dc_options is a list of all DCs available at the moment, each of which has an id, ip, and port for establishing a connection. Please note that ip and port may change frequently, based on proxy server load and the user's current location.
-Typically, each DC has at least one IPv4 and one IPv6 endpoint available.

-

To optimize client communication with the API, each client must use the connection to the closest access point for its main queries (sending messages, getting contacts, etc.). Therefore, knowing how to select a DC is required before communicating with the API.

-

Registration/Authorization

-

The auth.sendCode method is the basic entry point when registering a new user or authorizing an existing user. 95% of all redirection cases to a different DC will occure when invoking this method.

-

The client does not yet know which DC it will be associated with; therefore, it establishes an encrypted connection to a random address and sends its query to that address. -Having received a phone_number from a client, we can find out whether or not it is registered in the system. If it is, then, if necessary, instead of sending a text message, we request that it establish a connection with a different DC first (PHONE_MIGRATE_X error). -If we do not yet have a user with this number, we examine its IP-address. We can use it to identify the closest DC. Again, if necessary, we redirect the user to a different DC (NETWORK_MIGRATE_X error).

-

Testing Redirects

-

There are reserved phone number prefixes to test the correctness of the application’s handling of redirects between DCs. Read more in User Authorization article.

-

File Access

-

A file saved by a user with upload.saveFilePart will be available for direct download only from the DC where the query was executed. That is why each file has a dc_id parameter:

-
document#1e87342b flags:# id:long access_hash:long file_reference:bytes date:int mime_type:string size:int thumbs:flags.0?Vector<PhotoSize> video_thumbs:flags.1?Vector<VideoSize> dc_id:int attributes:Vector<DocumentAttribute> = Document;
-photo#fb197a65 flags:# has_stickers:flags.0?true id:long access_hash:long file_reference:bytes date:int sizes:Vector<PhotoSize> video_sizes:flags.1?Vector<VideoSize> dc_id:int = Photo;
-
-encryptedFile#4a70994c id:long access_hash:long size:int dc_id:int key_fingerprint:int = EncryptedFile;
-
-userProfilePhoto#82d1f706 flags:# has_video:flags.0?true photo_id:long stripped_thumb:flags.1?bytes dc_id:int = UserProfilePhoto;
-chatPhoto#1c6e1c11 flags:# has_video:flags.0?true photo_id:long stripped_thumb:flags.1?bytes dc_id:int = ChatPhoto;
-

To download the file, an encrypted connection to DC dc_id must be established and used to execute the upload.getFile query. -If an attempt is made to download the file over a wrong connection, the FILE_MIGRATE_X error will be returned.

-

Please note that encryption keys are not copied between DCs; therefore, the process of establishing an encrypted connection is started from the very beginning for each new DC. An issued auth_key can be associated with the current authorized user by using an authorization transfer.

-

User Migration

-

During the process of working with the API, user information is accumulated in the DC with which the user is associated. This is the reason a user cannot be associated with a different DC by means of the client. However, in the future, during prolonged communication from an unusual location, we may decide that the user’s data must be moved to a different DC. After some time, the data will be copied and the association will be updated. Once this happens, when executing any query transmitted to the old DC, the API will return the USER_MIGRATE_X error. The client will then have to establish a connection with the new DC and repeat the query.

-

Authorization Transfer

-

The following methods can be used to eliminate the need for users to enter the code from a text message every time:

-
auth.exportedAuthorization#b434e2b8 id:long bytes:bytes = auth.ExportedAuthorization;
-auth.authorization#cd050916 flags:# tmp_sessions:flags.0?int user:User = auth.Authorization;
----functions---
-auth.importAuthorization#a57a7dad id:long bytes:bytes = auth.Authorization;
-auth.exportAuthorization#e5bfffcd dc_id:int = auth.ExportedAuthorization;
-

auth.exportAuthorization must be executed in the current DC (the DC with which a connection has already been established), passing in dc_id as the value for the new DC. The method should return the user identifier and a long string of random data. An import operation can be performed at the new DC by sending it what was received. Queries requiring authorization can then be successfully executed in the new DC.

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/api/pfs.html b/data/core.telegram.org/api/pfs.html deleted file mode 100644 index 51580e3410..0000000000 --- a/data/core.telegram.org/api/pfs.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - Perfect Forward Secrecy - - - - - - - - - - - - - -
- -
-
-
- -

Perfect Forward Secrecy

- -
Related articles
-

-
-

This article is about Perfect Forward Secrecy in cloud chats, see also PFS in Secret Chats.

-
-
-

Telegram supports Perfect Forward Secrecy (PFS).

-

To make this possible, the client generates a permanent authorization key using p_q_inner_data and a temporary key using p_q_inner_data_temp. (See Creating an Authorization Key for more info.) These 2 operations may be done in parallel and even using the same connection. The client must save an expires_at unix timestamp expires_at = time + expires_in.

-

Important: in order to achieve PFS, the client must never use the permanent auth_key_id directly. Every message that is sent to MTProto, must be encrypted by a temp_auth_key_id, that was bound to the perm_auth_key_id.

-

An unbound temp_auth_key_id may only be used with the following methods:

- -

In order to bind a temporary authorization key to the permanent key the client creates a special binding message and executes the auth.bindTempAuthKey method using temp_auth_key. Once auth.bindTempAuthKey has been executed successfully, the client may signUp / signIn using other auth.* methods and continue using the API as usual; the client must also rewrite client info using initConnection after each binding. Each permanent key may only be bound to one temporary key at a time, binding a new temporary key overwrites the previous one.

-

Once the temporary key expires, the client needs to generate a new temporary key using p_q_inner_data_temp. Then it needs to re-bind that new temporary key to the initial permanent key. A new key can also be generated in advance, so that the client has a new key ready by the time the old one has expired.

-

For additional security, the client can store the temporary authorization key in RAM only and never save it in persistent storage.

-

A temporary authorization key may expire at any moment before expires_at, since such keys are also stored only in the RAM on the server-side. Be prepared to handle resulting MTProto errors correctly (non-existent auth_key_id results in a 404 error).

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/apple_privacy.html b/data/core.telegram.org/apple_privacy.html deleted file mode 100644 index 0994640de1..0000000000 --- a/data/core.telegram.org/apple_privacy.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - Page moved - - - - - - - - - - - - - -
- -
-
-
-
-

Page moved

- -

This is not the droid you're looking for.
The page has been moved.

-
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/bots/2-0-intro.html b/data/core.telegram.org/bots/2-0-intro.html deleted file mode 100644 index 76a98e5867..0000000000 --- a/data/core.telegram.org/bots/2-0-intro.html +++ /dev/null @@ -1,230 +0,0 @@ - - - - - Introducing Bot API 2.0 - - - - - - - - - - - - - -
- -
-
-
-
-

Introducing Bot API 2.0

- -
- -
-

Howdy! This text assumes that you‘re familiar with Telegram’s bot platform.
If this is not the case, kindly check out our Introduction to Bots.

-
-

Today we‘re introducing the biggest change to Telegram’s Bot Platform since June 2015. These new tools will help you create fluid and intuitive interfaces for your bots. And bots are becoming a lot more capable. They can now send any type of content supported on Telegram, provide location-based services and integrate with other services deeply based on users' phone numbers.

-

If you'd like a more concise changelog, you can find one in the Bot API Manual.

-

New Inline Keyboards

-

To begin with, we're adding a new type of keyboard that is integrated directly into the message it belongs to. Inline keyboards are available for messages sent both in chat mode and inline mode.

-
- - - -

- - - -
- -

Unlike with custom reply keyboards, pressing buttons on inline keyboards doesn't result in messages sent to the chat. Instead, inline keyboards support buttons that work behind the scenes: callback buttons, URL buttons and switch to inline buttons.

-
-

Manual: Inline keyboards »

-
-

Callback buttons

-

When a user presses a callback button, no messages are sent to the chat. Instead, your bot simply receives the relevant query. Upon receiving the query, your bot can display some result in a notification at the top of the chat screen or in an alert.

-
-

-
- -

Sample bot
@music – This sample music bot uses inline callback buttons to flip pages and reload random results.

-

Read on to updating messages to find out how callback buttons can get even cooler.

-

URL buttons

-

Buttons of this type have a small arrow icon to help the user understand that tapping on a URL button will open an external link. Naturally, we'll show them a confirmation alert before opening the link in the browser.

-
-
-
- -

Switch to Inline buttons

-

Pressing a switch to inline button prompts the user to select a chat, opens it and inserts the bot's username into the input field. You can also pass a query that will be inserted along with the username – this way your users will immediately get some inline results they can share.

-
-

-
- -

Sample bot
@sticker – This sticker search bot offers a ‘switch to inline’ button to teach users how to use it in inline mode.

-

Updating Messages

-

Since inline keyboards don‘t send additional messages to the chat, it made sense to give bots a way of manipulating their existing messages, so that they don’t have to send a new message each time they need to update something. This helps reduce clutter and build more fluid interfaces.

-
-
- -
-
- -

Sample bot
@music – Watch how the music bot updates its messages with search results when you press the navigation buttons.

-
-

Manual: Updating messages »

-
-

Locations and Numbers

-

Some bots need extra data from the user to work properly. For example, knowing the user‘s location helps provide more relevant geo-specific results. The user’s phone number can be very useful for integrations with other services, like banks, etc.

-

We've added an easy way for bots to ask the user for their location and phone number using special buttons. Note that both phone number and location request buttons will only work in private chats.

-
-

-
- -

When these buttons are pressed, Telegram clients will display a confirmation alert that tells the user what's about to happen.

-
-

Manual: Number and location buttons »

-
-

Inline bots can also request location data from their users. Use the /setinlinegeo command with @BotFather to enable this. Your bot will ask the user for permission to access their location whenever they send an inline request.

-

Sample bot
@foursquare – This bot will ask for permission to access the user's location, then provide geo-targeted results.

-

Inline Bots 2.0

-

Speaking of inline bots, they are also getting a major upgrade today.

-

New types of content

-

Inline bots now support all types of content available in Telegram (19 in all), they are now capable of sending stickers, videos, music, locations, documents and more.

-
-

-
- -

Sample bots
@sticker – This sticker bot will accept one or more emoji and search for relevant stickers.
@music – The music bot allows users to send mp3 tracks from a database of public domain classical music.

-
-

Manual: Types of inline content »

-
-

Switching between inline mode and private chat

-

Some inline bots can benefit from an initial setup process, like connecting them to an account on an external service (e.g., YouTube). We've added an easy way of switching between the private chat with a bot and whatever chat the user wants to share inline results in.

-
-

-
- -

You can now display a special ‘Switch to PM’ button above the inline results (or instead of them). This button will open a private chat with the bot and pass a parameter of your choosing, so that you can prompt the user for the relevant setup actions. Once done, you can use an inline keyboard with a switch_inline_query button to send the user back to the original chat.

-

Sample bots
@youtube – Shows a ‘Sign in to YouTube’ button, then suggests personalized results.

-
-

Manual: Switch to PM

-
-

Better inline UI

-

Since sending content via inline bots works differently from sending ordinary messages, we‘ve changed the interface a little. There’s hardly a more effective way of explaining that there‘s no need to hit ’Send':

-
-

-
- -

Tapping on the cross icon once will clear the query, tapping twice will give the ‘Send’ button back to the user.

-

Group Admins

-

As a dessert, we‘re beginning to roll out tools that will allow you to create bot solutions for group admins. As the first step, we’ve added methods to remove members from groups and supergroups.

-
-

Manual: Group management »

-
-

And that's about it for now. Stay tuned for more updates and subscribe to our official @Botnews channel on Telegram.

-
-

Read the full changelog for this update »

-
-
- -
- -
-
- -
- - - - - - - - diff --git a/data/core.telegram.org/constructor/auth.loginToken b/data/core.telegram.org/constructor/auth.loginToken deleted file mode 100644 index 442a8fcf65..0000000000 --- a/data/core.telegram.org/constructor/auth.loginToken +++ /dev/null @@ -1,155 +0,0 @@ - - - - - auth.loginToken - - - - - - - - - - - - - -
- -
-
-
- -

auth.loginToken

- -

Login token (for QR code login)

-

- -
-
auth.loginToken#629f1980 expires:int token:bytes = auth.LoginToken;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
expiresintExpiry date of QR code
tokenbytesToken to render in QR code
-

Type

-

auth.LoginToken

-

Related pages

-

Login via QR code

-

QR code login flow

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/auth.sentCodeTypeApp b/data/core.telegram.org/constructor/auth.sentCodeTypeApp deleted file mode 100644 index 93a21cc044..0000000000 --- a/data/core.telegram.org/constructor/auth.sentCodeTypeApp +++ /dev/null @@ -1,147 +0,0 @@ - - - - - auth.sentCodeTypeApp - - - - - - - - - - - - - -
- -
-
-
- -

auth.sentCodeTypeApp

- -

The code was sent through the telegram app

-

- -
-
auth.sentCodeTypeApp#3dbb5986 length:int = auth.SentCodeType;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
lengthintLength of the code in bytes
-

Type

-

auth.SentCodeType

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/botCommandScopePeerAdmins.html b/data/core.telegram.org/constructor/botCommandScopePeerAdmins.html deleted file mode 100644 index df1545b0f4..0000000000 --- a/data/core.telegram.org/constructor/botCommandScopePeerAdmins.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - botCommandScopePeerAdmins - - - - - - - - - - - - - -
- -
-
-
- -

botCommandScopePeerAdmins

- -

The specified bot commands will be valid for all admins of the specified group or supergroup.

-

- -
-
botCommandScopePeerAdmins#3fd863d1 peer:InputPeer = BotCommandScope;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
peerInputPeerThe chat
-

Type

-

BotCommandScope

-

Related pages

-

Channels

-

How to handle channels, supergroups, groups, and what's the difference between them.

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/botCommandScopeUsers.html b/data/core.telegram.org/constructor/botCommandScopeUsers.html deleted file mode 100644 index 8deaa3132e..0000000000 --- a/data/core.telegram.org/constructor/botCommandScopeUsers.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - botCommandScopeUsers - - - - - - - - - - - - - -
- -
-
-
- -

botCommandScopeUsers

- -

The specified bot commands will only be valid in all private chats with users.

-

- -
-
botCommandScopeUsers#3c4f04d8 = BotCommandScope;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

BotCommandScope

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/channelAdminLogEventActionChangeTitle.html b/data/core.telegram.org/constructor/channelAdminLogEventActionChangeTitle.html deleted file mode 100644 index 1a86376430..0000000000 --- a/data/core.telegram.org/constructor/channelAdminLogEventActionChangeTitle.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - channelAdminLogEventActionChangeTitle - - - - - - - - - - - - - -
- -
-
-
- -

channelAdminLogEventActionChangeTitle

- -

Channel/supergroup title was changed

-

- -
-
channelAdminLogEventActionChangeTitle#e6dfb825 prev_value:string new_value:string = ChannelAdminLogEventAction;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
prev_valuestringPrevious title
new_valuestringNew title
-

Type

-

ChannelAdminLogEventAction

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/channelAdminLogEventsFilter.html b/data/core.telegram.org/constructor/channelAdminLogEventsFilter.html deleted file mode 100644 index 12e74c74e6..0000000000 --- a/data/core.telegram.org/constructor/channelAdminLogEventsFilter.html +++ /dev/null @@ -1,266 +0,0 @@ - - - - - channelAdminLogEventsFilter - - - - - - - - - - - - - -
- -
-
-
- -

channelAdminLogEventsFilter

- -

Filter only certain admin log events

-

- -
-
channelAdminLogEventsFilter#ea107ae4 flags:# join:flags.0?true leave:flags.1?true invite:flags.2?true ban:flags.3?true unban:flags.4?true kick:flags.5?true unkick:flags.6?true promote:flags.7?true demote:flags.8?true info:flags.9?true settings:flags.10?true pinned:flags.11?true edit:flags.12?true delete:flags.13?true group_call:flags.14?true invites:flags.15?true = ChannelAdminLogEventsFilter;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
joinflags.0?trueJoin events
leaveflags.1?trueLeave events
inviteflags.2?trueInvite events
banflags.3?trueBan events
unbanflags.4?trueUnban events
kickflags.5?trueKick events
unkickflags.6?trueUnkick events
promoteflags.7?trueAdmin promotion events
demoteflags.8?trueAdmin demotion events
infoflags.9?trueInfo change events (when about, linked chat, location, photo, stickerset, title or username data of a channel gets modified)
settingsflags.10?trueSettings change events (invites, hidden prehistory, signatures, default banned rights)
pinnedflags.11?trueMessage pin events
editflags.12?trueMessage edit events
deleteflags.13?trueMessage deletion events
group_callflags.14?trueGroup call events
invitesflags.15?trueInvite events
-

Type

-

ChannelAdminLogEventsFilter

-

Related pages

-

channelAdminLogEventActionParticipantJoin

-

A user has joined the group (in the case of big groups, info of the user that has joined isn't shown)

-

channelAdminLogEventActionParticipantLeave

-

A user left the channel/supergroup (in the case of big groups, info of the user that has joined isn't shown)

-

channelAdminLogEventActionParticipantInvite

-

A user was invited to the group

-

channelAdminLogEventActionParticipantToggleBan

-

The banned rights of a user were changed

-

channelAdminLogEventActionParticipantToggleAdmin

-

The admin rights of a user were changed

-

channelAdminLogEventActionChangeAbout

-

The description was changed

-

channelAdminLogEventActionChangeLinkedChat

-

The linked chat was changed

-

channelAdminLogEventActionChangeLocation

-

The geogroup location was changed

-

channelAdminLogEventActionChangePhoto

-

The channel/supergroup's picture was changed

-

channelAdminLogEventActionChangeStickerSet

-

The supergroup's stickerset was changed

-

channelAdminLogEventActionChangeTitle

-

Channel/supergroup title was changed

-

channelAdminLogEventActionChangeUsername

-

Channel/supergroup username was changed

-

channelAdminLogEventActionToggleInvites

-

Invites were enabled/disabled

-

channelAdminLogEventActionTogglePreHistoryHidden

-

The hidden prehistory setting was changed

-

channelAdminLogEventActionToggleSignatures

-

Channel signatures were enabled/disabled

-

channelAdminLogEventActionDefaultBannedRights

-

The default banned rights were modified

-

channelAdminLogEventActionUpdatePinned

-

A message was pinned

-

channelAdminLogEventActionEditMessage

-

A message was edited

-

channelAdminLogEventActionDeleteMessage

-

A message was deleted

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/channelForbidden.html b/data/core.telegram.org/constructor/channelForbidden.html deleted file mode 100644 index 4bbfea3305..0000000000 --- a/data/core.telegram.org/constructor/channelForbidden.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - channelForbidden - - - - - - - - - - - - - -
- -
-
-
- -

channelForbidden

- -

Indicates a channel/supergroup we can't access because we were banned, or for some other reason.

-

- -
-
channelForbidden#17d493d5 flags:# broadcast:flags.5?true megagroup:flags.8?true id:long access_hash:long title:string until_date:flags.16?int = Chat;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
broadcastflags.5?trueIs this a channel
megagroupflags.8?trueIs this a supergroup
idlongChannel ID
access_hashlongAccess hash
titlestringTitle
until_dateflags.16?intThe ban is valid until the specified date
-

Type

-

Chat

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/chatAdminWithInvites.html b/data/core.telegram.org/constructor/chatAdminWithInvites.html deleted file mode 100644 index 2cb09ddca8..0000000000 --- a/data/core.telegram.org/constructor/chatAdminWithInvites.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - chatAdminWithInvites - - - - - - - - - - - - - -
- -
-
-
- -

chatAdminWithInvites

- -

Info about chat invites generated by admins.

-

- -
-
chatAdminWithInvites#f2ecef23 admin_id:long invites_count:int revoked_invites_count:int = ChatAdminWithInvites;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
admin_idlongThe admin
invites_countintNumber of invites generated by the admin
revoked_invites_countintNumber of revoked invites
-

Type

-

ChatAdminWithInvites

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/chatEmpty.html b/data/core.telegram.org/constructor/chatEmpty.html deleted file mode 100644 index 6da255ac45..0000000000 --- a/data/core.telegram.org/constructor/chatEmpty.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - chatEmpty - - - - - - - - - - - - - -
- -
-
-
- -

chatEmpty

- -

Empty constructor, group doesn't exist

-

- -
-
chatEmpty#29562865 id:long = Chat;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
idlongGroup identifier
-

Type

-

Chat

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/chatOnlines.html b/data/core.telegram.org/constructor/chatOnlines.html deleted file mode 100644 index 1b60313c4b..0000000000 --- a/data/core.telegram.org/constructor/chatOnlines.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - chatOnlines - - - - - - - - - - - - - -
- -
-
-
- -

chatOnlines

- -

Number of online users in a chat

-

- -
-
chatOnlines#f041e250 onlines:int = ChatOnlines;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
onlinesintNumber of online users
-

Type

-

ChatOnlines

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/chatPhoto.html b/data/core.telegram.org/constructor/chatPhoto.html deleted file mode 100644 index ab58e4b801..0000000000 --- a/data/core.telegram.org/constructor/chatPhoto.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - chatPhoto - - - - - - - - - - - - - -
- -
-
-
- -

chatPhoto

- -

Group profile photo.

-

- -
-
chatPhoto#1c6e1c11 flags:# has_video:flags.0?true photo_id:long stripped_thumb:flags.1?bytes dc_id:int = ChatPhoto;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
has_videoflags.0?trueWhether the user has an animated profile picture
photo_idlongPhoto ID
stripped_thumbflags.1?bytesStripped thumbnail
dc_idintDC where this photo is stored
-

Type

-

ChatPhoto

-

Related pages

-

Uploading and Downloading Files

-

How to transfer large data batches correctly.

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/decryptedMessageActionDeleteMessages.html b/data/core.telegram.org/constructor/decryptedMessageActionDeleteMessages.html deleted file mode 100644 index 84ca393f2b..0000000000 --- a/data/core.telegram.org/constructor/decryptedMessageActionDeleteMessages.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - decryptedMessageActionDeleteMessages - - - - - - - - - - - - - -
- -
-
-
- -

decryptedMessageActionDeleteMessages

- -

Deleted messages.

-

- -
-
===8===
-decryptedMessageActionDeleteMessages#65614304 random_ids:Vector<long> = DecryptedMessageAction;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
random_idsVector<long>List of deleted message IDs
-

Type

-

DecryptedMessageAction

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/decryptedMessageActionRequestKey.html b/data/core.telegram.org/constructor/decryptedMessageActionRequestKey.html deleted file mode 100644 index 0c11da965b..0000000000 --- a/data/core.telegram.org/constructor/decryptedMessageActionRequestKey.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - decryptedMessageActionRequestKey - - - - - - - - - - - - - -
- -
-
-
- -

decryptedMessageActionRequestKey

- -

Request rekeying, see rekeying process

-

- -
-
===20===
-decryptedMessageActionRequestKey#f3c9611b exchange_id:long g_a:bytes = DecryptedMessageAction;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
exchange_idlongExchange ID
g_abytesg_a, see rekeying process
-

Type

-

DecryptedMessageAction

-

Related pages

-

Perfect Forward Secrecy

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/encryptedMessageService.html b/data/core.telegram.org/constructor/encryptedMessageService.html deleted file mode 100644 index 0afb2bea87..0000000000 --- a/data/core.telegram.org/constructor/encryptedMessageService.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - encryptedMessageService - - - - - - - - - - - - - -
- -
-
-
- -

encryptedMessageService

- -

Encrypted service message

-

- -
-
encryptedMessageService#23734b06 random_id:long chat_id:int date:int bytes:bytes = EncryptedMessage;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
random_idlongRandom message ID, assigned by the author of message
chat_idintID of encrypted chat
dateintDate of sending
bytesbytesTL-serialising of DecryptedMessage type, encrypted with the key creatied at stage of chat initialization
-

Type

-

EncryptedMessage

-

Related pages

-

DecryptedMessage

-

Object describes the contents of an encrypted message.

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/error.html b/data/core.telegram.org/constructor/error.html deleted file mode 100644 index 69c78c8093..0000000000 --- a/data/core.telegram.org/constructor/error.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - error - - - - - - - - - - - - - -
- -
-
-
- -

error

- -

Error.

-

- -
-
error#c4b9f9bb code:int text:string = Error;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
codeintError code
textstringMessage
-

Type

-

Error

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/help.countriesListNotModified b/data/core.telegram.org/constructor/help.countriesListNotModified deleted file mode 100644 index e6f5083550..0000000000 --- a/data/core.telegram.org/constructor/help.countriesListNotModified +++ /dev/null @@ -1,132 +0,0 @@ - - - - - help.countriesListNotModified - - - - - - - - - - - - - -
- -
-
-
- -

help.countriesListNotModified

- -

The country list has not changed

-

- -
-
help.countriesListNotModified#93cc1f32 = help.CountriesList;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

help.CountriesList

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/help.inviteText b/data/core.telegram.org/constructor/help.inviteText deleted file mode 100644 index 9c7335c45f..0000000000 --- a/data/core.telegram.org/constructor/help.inviteText +++ /dev/null @@ -1,147 +0,0 @@ - - - - - help.inviteText - - - - - - - - - - - - - -
- -
-
-
- -

help.inviteText

- -

Text of a text message with an invitation to install Telegram.

-

- -
-
help.inviteText#18cb9f78 message:string = help.InviteText;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
messagestringText of the message
-

Type

-

help.InviteText

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/help.termsOfService b/data/core.telegram.org/constructor/help.termsOfService deleted file mode 100644 index 246228af43..0000000000 --- a/data/core.telegram.org/constructor/help.termsOfService +++ /dev/null @@ -1,175 +0,0 @@ - - - - - help.termsOfService - - - - - - - - - - - - - -
- -
-
-
- -

help.termsOfService

- -

Info about the latest telegram Terms Of Service

-

- -
-
help.termsOfService#780a0310 flags:# popup:flags.0?true id:DataJSON text:string entities:Vector<MessageEntity> min_age_confirm:flags.1?int = help.TermsOfService;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
popupflags.0?trueWhether a prompt must be showed to the user, in order to accept the new terms.
idDataJSONID of the new terms
textstringText of the new terms
entitiesVector<MessageEntity>Message entities for styled text
min_age_confirmflags.1?intMinimum age required to sign up to telegram, the user must confirm that they is older than the minimum age.
-

Type

-

help.TermsOfService

-

Related pages

-

Styled text with message entities

-

How to create styled text with message entities

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/inputMediaGame.html b/data/core.telegram.org/constructor/inputMediaGame.html deleted file mode 100644 index 7df272590c..0000000000 --- a/data/core.telegram.org/constructor/inputMediaGame.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - inputMediaGame - - - - - - - - - - - - - -
- -
-
-
- -

inputMediaGame

- -

A game

-

- -
-
inputMediaGame#d33f43f3 id:InputGame = InputMedia;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
idInputGameThe game to forward
-

Type

-

InputMedia

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/inputMediaVenue.html b/data/core.telegram.org/constructor/inputMediaVenue.html deleted file mode 100644 index c30a50dfa2..0000000000 --- a/data/core.telegram.org/constructor/inputMediaVenue.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - inputMediaVenue - - - - - - - - - - - - - -
- -
-
-
- -

inputMediaVenue

- -

Can be used to send a venue geolocation.

-

- -
-
inputMediaVenue#c13d1c11 geo_point:InputGeoPoint title:string address:string provider:string venue_id:string venue_type:string = InputMedia;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
geo_pointInputGeoPointGeolocation
titlestringVenue name
addressstringPhysical address of the venue
providerstringVenue provider: currently only "foursquare" needs to be supported
venue_idstringVenue ID in the provider's database
venue_typestringVenue type in the provider's database
-

Type

-

InputMedia

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/inputMessagesFilterChatPhotos.html b/data/core.telegram.org/constructor/inputMessagesFilterChatPhotos.html deleted file mode 100644 index d047f3860e..0000000000 --- a/data/core.telegram.org/constructor/inputMessagesFilterChatPhotos.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - inputMessagesFilterChatPhotos - - - - - - - - - - - - - -
- -
-
-
- -

inputMessagesFilterChatPhotos

- -

Return only chat photo changes

-

- -
-
inputMessagesFilterChatPhotos#3a20ecb8 = MessagesFilter;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

MessagesFilter

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/inputMessagesFilterContacts.html b/data/core.telegram.org/constructor/inputMessagesFilterContacts.html deleted file mode 100644 index 747ce8b244..0000000000 --- a/data/core.telegram.org/constructor/inputMessagesFilterContacts.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - inputMessagesFilterContacts - - - - - - - - - - - - - -
- -
-
-
- -

inputMessagesFilterContacts

- -

Return only messages containing contacts

-

- -
-
inputMessagesFilterContacts#e062db83 = MessagesFilter;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

MessagesFilter

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/inputMessagesFilterGeo.html b/data/core.telegram.org/constructor/inputMessagesFilterGeo.html deleted file mode 100644 index 718a470d29..0000000000 --- a/data/core.telegram.org/constructor/inputMessagesFilterGeo.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - inputMessagesFilterGeo - - - - - - - - - - - - - -
- -
-
-
- -

inputMessagesFilterGeo

- -

Return only messages containing geolocations

-

- -
-
inputMessagesFilterGeo#e7026d0d = MessagesFilter;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

MessagesFilter

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/inputMessagesFilterGif.html b/data/core.telegram.org/constructor/inputMessagesFilterGif.html deleted file mode 100644 index 2580a4f703..0000000000 --- a/data/core.telegram.org/constructor/inputMessagesFilterGif.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - inputMessagesFilterGif - - - - - - - - - - - - - -
- -
-
-
- -

inputMessagesFilterGif

- -

Return only messages containing gifs

-

- -
-
inputMessagesFilterGif#ffc86587 = MessagesFilter;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

MessagesFilter

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/inputMessagesFilterPhotos.html b/data/core.telegram.org/constructor/inputMessagesFilterPhotos.html deleted file mode 100644 index 6bdeeddeaa..0000000000 --- a/data/core.telegram.org/constructor/inputMessagesFilterPhotos.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - inputMessagesFilterPhotos - - - - - - - - - - - - - -
- -
-
-
- -

inputMessagesFilterPhotos

- -

Filter for messages containing photos.

-

- -
-
inputMessagesFilterPhotos#9609a51c = MessagesFilter;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

MessagesFilter

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/inputPrivacyValueDisallowUsers.html b/data/core.telegram.org/constructor/inputPrivacyValueDisallowUsers.html deleted file mode 100644 index 97b06761f7..0000000000 --- a/data/core.telegram.org/constructor/inputPrivacyValueDisallowUsers.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - inputPrivacyValueDisallowUsers - - - - - - - - - - - - - -
- -
-
-
- -

inputPrivacyValueDisallowUsers

- -

Disallow only certain users

-

- -
-
inputPrivacyValueDisallowUsers#90110467 users:Vector<InputUser> = InputPrivacyRule;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
usersVector<InputUser>Users to disallow
-

Type

-

InputPrivacyRule

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/inputSecureFileLocation.html b/data/core.telegram.org/constructor/inputSecureFileLocation.html deleted file mode 100644 index 6c9537bf22..0000000000 --- a/data/core.telegram.org/constructor/inputSecureFileLocation.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - inputSecureFileLocation - - - - - - - - - - - - - -
- -
-
-
- -

inputSecureFileLocation

- -

Location of encrypted telegram passport file.

-

- -
-
inputSecureFileLocation#cbc7ee28 id:long access_hash:long = InputFileLocation;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
idlongFile ID, id parameter value from secureFile
access_hashlongChecksum, access_hash parameter value from secureFile
-

Type

-

InputFileLocation

-

Related pages

-

secureFile

-

Secure passport file, for more info see the passport docs »

-

Telegram Passport Manual

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/inputStickeredMediaDocument.html b/data/core.telegram.org/constructor/inputStickeredMediaDocument.html deleted file mode 100644 index 3f4fb18435..0000000000 --- a/data/core.telegram.org/constructor/inputStickeredMediaDocument.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - inputStickeredMediaDocument - - - - - - - - - - - - - -
- -
-
-
- -

inputStickeredMediaDocument

- -

A document with stickers attached

-

- -
-
inputStickeredMediaDocument#438865b id:InputDocument = InputStickeredMedia;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
idInputDocumentThe document
-

Type

-

InputStickeredMedia

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/keyboardButtonRequestGeoLocation.html b/data/core.telegram.org/constructor/keyboardButtonRequestGeoLocation.html deleted file mode 100644 index 8451de876c..0000000000 --- a/data/core.telegram.org/constructor/keyboardButtonRequestGeoLocation.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - keyboardButtonRequestGeoLocation - - - - - - - - - - - - - -
- -
-
-
- -

keyboardButtonRequestGeoLocation

- -

Button to request a user's geolocation

-

- -
-
keyboardButtonRequestGeoLocation#fc796b3f text:string = KeyboardButton;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
textstringButton text
-

Type

-

KeyboardButton

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/messageEntityMentionName.html b/data/core.telegram.org/constructor/messageEntityMentionName.html deleted file mode 100644 index 712ce087ca..0000000000 --- a/data/core.telegram.org/constructor/messageEntityMentionName.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - messageEntityMentionName - - - - - - - - - - - - - -
- -
-
-
- -

messageEntityMentionName

- -

Message entity representing a user mention: for creating a mention use inputMessageEntityMentionName.

-

- -
-
messageEntityMentionName#dc7b1140 offset:int length:int user_id:long = MessageEntity;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
offsetintOffset of message entity within message (in UTF-8 codepoints)
lengthintLength of message entity within message (in UTF-8 codepoints)
user_idlongIdentifier of the user that was mentioned
-

Type

-

MessageEntity

-

Related pages

-

Mentions

-

Telegram allows mentioning other users in case of urgent duckling matters, and quickly navigating to those mentions in order to read them as swiftly as possible.

-

inputMessageEntityMentionName

-

Message entity that can be used to create a user user mention: received mentions use the messageEntityMentionName constructor, instead.

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/messageEntityUnderline.html b/data/core.telegram.org/constructor/messageEntityUnderline.html deleted file mode 100644 index 4b365f0359..0000000000 --- a/data/core.telegram.org/constructor/messageEntityUnderline.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - messageEntityUnderline - - - - - - - - - - - - - -
- -
-
-
- -

messageEntityUnderline

- -

Message entity representing underlined text.

-

- -
-
messageEntityUnderline#9c4e7e8b offset:int length:int = MessageEntity;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
offsetintOffset of message entity within message (in UTF-8 codepoints)
lengthintLength of message entity within message (in UTF-8 codepoints)
-

Type

-

MessageEntity

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/messages.channelMessages b/data/core.telegram.org/constructor/messages.channelMessages deleted file mode 100644 index aff3b7a91e..0000000000 --- a/data/core.telegram.org/constructor/messages.channelMessages +++ /dev/null @@ -1,185 +0,0 @@ - - - - - messages.channelMessages - - - - - - - - - - - - - -
- -
-
-
- -

messages.channelMessages

- -

Channel messages

-

- -
-
messages.channelMessages#64479808 flags:# inexact:flags.1?true pts:int count:int offset_id_offset:flags.2?int messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.Messages;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
inexactflags.1?trueIf set, returned results may be inexact
ptsintEvent count after generation
countintTotal number of results were found server-side (may not be all included here)
offset_id_offsetflags.2?intIndicates the absolute position of messages[0] within the total result set with count count.
This is useful, for example, if the result was fetched using offset_id, and we need to display a progress/total counter (like photo 134 of 200, for all media in a chat, we could simply use photo ${offset_id_offset} of ${count}.
messagesVector<Message>Found messages
chatsVector<Chat>Chats
usersVector<User>Users
-

Type

-

messages.Messages

-

Related pages

-

Working with Updates

-

How to subscribe to updates and handle them properly.

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/messages.chats b/data/core.telegram.org/constructor/messages.chats deleted file mode 100644 index 46b42bddcd..0000000000 --- a/data/core.telegram.org/constructor/messages.chats +++ /dev/null @@ -1,147 +0,0 @@ - - - - - messages.chats - - - - - - - - - - - - - -
- -
-
-
- -

messages.chats

- -

List of chats with auxiliary data.

-

- -
-
messages.chats#64ff9fd5 chats:Vector<Chat> = messages.Chats;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
chatsVector<Chat>List of chats
-

Type

-

messages.Chats

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/messages.exportedChatInvite b/data/core.telegram.org/constructor/messages.exportedChatInvite deleted file mode 100644 index ed012109ba..0000000000 --- a/data/core.telegram.org/constructor/messages.exportedChatInvite +++ /dev/null @@ -1,152 +0,0 @@ - - - - - messages.exportedChatInvite - - - - - - - - - - - - - -
- -
-
-
- -

messages.exportedChatInvite

- -

Info about a chat invite

-

- -
-
messages.exportedChatInvite#1871be50 invite:ExportedChatInvite users:Vector<User> = messages.ExportedChatInvite;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
inviteExportedChatInviteInfo about the chat invite
usersVector<User>Mentioned users
-

Type

-

messages.ExportedChatInvite

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/notifyBroadcasts.html b/data/core.telegram.org/constructor/notifyBroadcasts.html deleted file mode 100644 index 88e3f877f3..0000000000 --- a/data/core.telegram.org/constructor/notifyBroadcasts.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - notifyBroadcasts - - - - - - - - - - - - - -
- -
-
-
- -

notifyBroadcasts

- -

Channel notification settings

-

- -
-
notifyBroadcasts#d612e8ef = NotifyPeer;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

NotifyPeer

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/pageBlockAudio.html b/data/core.telegram.org/constructor/pageBlockAudio.html deleted file mode 100644 index 0eee4140f0..0000000000 --- a/data/core.telegram.org/constructor/pageBlockAudio.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - pageBlockAudio - - - - - - - - - - - - - -
- -
-
-
- -

pageBlockAudio

- -

Audio

-

- -
-
pageBlockAudio#804361ea audio_id:long caption:PageCaption = PageBlock;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
audio_idlongAudio ID (to be fetched from the container page constructor
captionPageCaptionAudio caption
-

Type

-

PageBlock

-

Related pages

-

page

-

Instant view page

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/pageBlockFooter.html b/data/core.telegram.org/constructor/pageBlockFooter.html deleted file mode 100644 index 48fb1c6f04..0000000000 --- a/data/core.telegram.org/constructor/pageBlockFooter.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - pageBlockFooter - - - - - - - - - - - - - -
- -
-
-
- -

pageBlockFooter

- -

Page footer

-

- -
-
pageBlockFooter#48870999 text:RichText = PageBlock;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
textRichTextContents
-

Type

-

PageBlock

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/payments.ValidatedRequestedInfo b/data/core.telegram.org/constructor/payments.ValidatedRequestedInfo deleted file mode 100644 index ac3d46faf0..0000000000 --- a/data/core.telegram.org/constructor/payments.ValidatedRequestedInfo +++ /dev/null @@ -1,145 +0,0 @@ - - - - - payments.ValidatedRequestedInfo - - - - - - - - - - - - - -
- -
-
-
- -

payments.ValidatedRequestedInfo

- -

Validated user-provided info

-

{schema}

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
idflags.0?stringID
shipping_optionsflags.1?Vector<ShippingOption>Shipping options
-

Type

-

payments.ValidatedRequestedInfo

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/phone.groupParticipants b/data/core.telegram.org/constructor/phone.groupParticipants deleted file mode 100644 index 6e155921d2..0000000000 --- a/data/core.telegram.org/constructor/phone.groupParticipants +++ /dev/null @@ -1,175 +0,0 @@ - - - - - phone.groupParticipants - - - - - - - - - - - - - -
- -
-
-
- -

phone.groupParticipants

- -

Info about the participants of a group call or livestream

-

- -
-
phone.groupParticipants#f47751b6 count:int participants:Vector<GroupCallParticipant> next_offset:string chats:Vector<Chat> users:Vector<User> version:int = phone.GroupParticipants;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
countintNumber of participants
participantsVector<GroupCallParticipant>List of participants
next_offsetstringIf not empty, the specified list of participants is partial, and more participants can be fetched specifying this parameter as offset in phone.getGroupParticipants.
chatsVector<Chat>Mentioned chats
usersVector<User>Mentioned users
versionintVersion info
-

Type

-

phone.GroupParticipants

-

Related pages

-

phone.getGroupParticipants

-

Get group call participants

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/phoneCallRequested.html b/data/core.telegram.org/constructor/phoneCallRequested.html deleted file mode 100644 index 1b3a37fab6..0000000000 --- a/data/core.telegram.org/constructor/phoneCallRequested.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - phoneCallRequested - - - - - - - - - - - - - -
- -
-
-
- -

phoneCallRequested

- -

Requested phone call

-

- -
-
phoneCallRequested#14b0ed0c flags:# video:flags.6?true id:long access_hash:long date:int admin_id:long participant_id:long g_a_hash:bytes protocol:PhoneCallProtocol = PhoneCall;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
videoflags.6?trueWhether this is a video call
idlongPhone call ID
access_hashlongAccess hash
dateintWhen was the phone call created
admin_idlongID of the creator of the phone call
participant_idlongID of the other participant of the phone call
g_a_hashbytesParameter for key exchange
protocolPhoneCallProtocolCall protocol info to be passed to libtgvoip
-

Type

-

PhoneCall

-

Related pages

-

End-to-End Encrypted Voice Calls

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/pollAnswerVoters.html b/data/core.telegram.org/constructor/pollAnswerVoters.html deleted file mode 100644 index 75f2d78bad..0000000000 --- a/data/core.telegram.org/constructor/pollAnswerVoters.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - pollAnswerVoters - - - - - - - - - - - - - -
- -
-
-
- -

pollAnswerVoters

- -

A poll answer, and how users voted on it

-

- -
-
pollAnswerVoters#3b6ddad2 flags:# chosen:flags.0?true correct:flags.1?true option:bytes voters:int = PollAnswerVoters;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
chosenflags.0?trueWhether we have chosen this answer
correctflags.1?trueFor quizes, whether the option we have chosen is correct
optionbytesThe param that has to be passed to messages.sendVote.
votersintHow many users voted for this option
-

Type

-

PollAnswerVoters

-

Related pages

-

messages.sendVote

-

Vote in a poll

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/privacyKeyAddedByPhone.html b/data/core.telegram.org/constructor/privacyKeyAddedByPhone.html deleted file mode 100644 index 00d27e6f12..0000000000 --- a/data/core.telegram.org/constructor/privacyKeyAddedByPhone.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - privacyKeyAddedByPhone - - - - - - - - - - - - - -
- -
-
-
- -

privacyKeyAddedByPhone

- -

Whether people can add you to their contact list by your phone number

-

- -
-
privacyKeyAddedByPhone#42ffd42b = PrivacyKey;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

PrivacyKey

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/privacyKeyChatInvite.html b/data/core.telegram.org/constructor/privacyKeyChatInvite.html deleted file mode 100644 index c015ff99d2..0000000000 --- a/data/core.telegram.org/constructor/privacyKeyChatInvite.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - privacyKeyChatInvite - - - - - - - - - - - - - -
- -
-
-
- -

privacyKeyChatInvite

- -

Whether the user can be invited to chats

-

- -
-
privacyKeyChatInvite#500e6dfa = PrivacyKey;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

PrivacyKey

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/privacyValueAllowUsers.html b/data/core.telegram.org/constructor/privacyValueAllowUsers.html deleted file mode 100644 index 3ef647ecb1..0000000000 --- a/data/core.telegram.org/constructor/privacyValueAllowUsers.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - privacyValueAllowUsers - - - - - - - - - - - - - -
- -
-
-
- -

privacyValueAllowUsers

- -

Allow only certain users

-

- -
-
privacyValueAllowUsers#b8905fb2 users:Vector<long> = PrivacyRule;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
usersVector<long>Allowed users
-

Type

-

PrivacyRule

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/securePasswordKdfAlgoPBKDF2HMACSHA512iter100000.html b/data/core.telegram.org/constructor/securePasswordKdfAlgoPBKDF2HMACSHA512iter100000.html deleted file mode 100644 index 52154f487a..0000000000 --- a/data/core.telegram.org/constructor/securePasswordKdfAlgoPBKDF2HMACSHA512iter100000.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - securePasswordKdfAlgoPBKDF2HMACSHA512iter100000 - - - - - - - - - - - - - -
- -
-
-
- -

securePasswordKdfAlgoPBKDF2HMACSHA512iter100000

- -

PBKDF2 with SHA512 and 100000 iterations KDF algo

-

- -
-
securePasswordKdfAlgoPBKDF2HMACSHA512iter100000#bbf2dda0 salt:bytes = SecurePasswordKdfAlgo;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
saltbytesSalt
-

Type

-

SecurePasswordKdfAlgo

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/securePlainPhone.html b/data/core.telegram.org/constructor/securePlainPhone.html deleted file mode 100644 index 1f4e593a15..0000000000 --- a/data/core.telegram.org/constructor/securePlainPhone.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - securePlainPhone - - - - - - - - - - - - - -
- -
-
-
- -

securePlainPhone

- -

Phone number to use in telegram passport: it must be verified, first ».

-

- -
-
securePlainPhone#7d6099dd phone:string = SecurePlainData;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
phonestringPhone number
-

Type

-

SecurePlainData

-

Related pages

-

Telegram Passport Manual

-

Telegram Passport Encryption Details

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/secureValueErrorTranslationFiles.html b/data/core.telegram.org/constructor/secureValueErrorTranslationFiles.html deleted file mode 100644 index cd92c66ae1..0000000000 --- a/data/core.telegram.org/constructor/secureValueErrorTranslationFiles.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - secureValueErrorTranslationFiles - - - - - - - - - - - - - -
- -
-
-
- -

secureValueErrorTranslationFiles

- -

Represents an issue with the translated version of a document. The error is considered resolved when a file with the document translation changes.

-

- -
-
secureValueErrorTranslationFiles#34636dd8 type:SecureValueType file_hash:Vector<bytes> text:string = SecureValueError;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
typeSecureValueTypeOne of secureValueTypePersonalDetails, secureValueTypePassport, secureValueTypeDriverLicense, secureValueTypeIdentityCard, secureValueTypeInternalPassport, secureValueTypeUtilityBill, secureValueTypeBankStatement, secureValueTypeRentalAgreement, secureValueTypePassportRegistration, secureValueTypeTemporaryRegistration
file_hashVector<bytes>Hash
textstringError message
-

Type

-

SecureValueError

-

Related pages

-

secureValueTypePersonalDetails

-

Personal details

-

secureValueTypePassport

-

Passport

-

secureValueTypeDriverLicense

-

Driver's license

-

secureValueTypeIdentityCard

-

Identity card

-

secureValueTypeInternalPassport

-

Internal passport

-

secureValueTypeUtilityBill

-

Utility bill

-

secureValueTypeBankStatement

-

Bank statement

-

secureValueTypeRentalAgreement

-

Rental agreement

-

secureValueTypePassportRegistration

-

Internal registration passport

-

secureValueTypeTemporaryRegistration

-

Temporary registration

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/secureValueTypeIdentityCard.html b/data/core.telegram.org/constructor/secureValueTypeIdentityCard.html deleted file mode 100644 index 1c7cc95e63..0000000000 --- a/data/core.telegram.org/constructor/secureValueTypeIdentityCard.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - secureValueTypeIdentityCard - - - - - - - - - - - - - -
- -
-
-
- -

secureValueTypeIdentityCard

- -

Identity card

-

- -
-
secureValueTypeIdentityCard#a0d0744b = SecureValueType;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

SecureValueType

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/sendMessageGamePlayAction.html b/data/core.telegram.org/constructor/sendMessageGamePlayAction.html deleted file mode 100644 index 8d740c9ef6..0000000000 --- a/data/core.telegram.org/constructor/sendMessageGamePlayAction.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - sendMessageGamePlayAction - - - - - - - - - - - - - -
- -
-
-
- -

sendMessageGamePlayAction

- -

User is playing a game

-

- -
-
sendMessageGamePlayAction#dd6a8f48 = SendMessageAction;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

SendMessageAction

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/storage.fileJpeg b/data/core.telegram.org/constructor/storage.fileJpeg deleted file mode 100644 index e1a859366b..0000000000 --- a/data/core.telegram.org/constructor/storage.fileJpeg +++ /dev/null @@ -1,132 +0,0 @@ - - - - - storage.fileJpeg - - - - - - - - - - - - - -
- -
-
-
- -

storage.fileJpeg

- -

JPEG image. MIME type: image/jpeg.

-

- -
-
storage.fileJpeg#7efe0e = storage.FileType;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

storage.FileType

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/storage.filePartial b/data/core.telegram.org/constructor/storage.filePartial deleted file mode 100644 index cf42fb7137..0000000000 --- a/data/core.telegram.org/constructor/storage.filePartial +++ /dev/null @@ -1,132 +0,0 @@ - - - - - storage.filePartial - - - - - - - - - - - - - -
- -
-
-
- -

storage.filePartial

- -

Part of a bigger file.

-

- -
-
storage.filePartial#40bc6f52 = storage.FileType;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

storage.FileType

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/storage.filePng b/data/core.telegram.org/constructor/storage.filePng deleted file mode 100644 index 485b594028..0000000000 --- a/data/core.telegram.org/constructor/storage.filePng +++ /dev/null @@ -1,132 +0,0 @@ - - - - - storage.filePng - - - - - - - - - - - - - -
- -
-
-
- -

storage.filePng

- -

PNG image. MIME type: image/png.

-

- -
-
storage.filePng#a4f63c0 = storage.FileType;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

storage.FileType

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/storage.fileUnknown b/data/core.telegram.org/constructor/storage.fileUnknown deleted file mode 100644 index 51ce4820de..0000000000 --- a/data/core.telegram.org/constructor/storage.fileUnknown +++ /dev/null @@ -1,132 +0,0 @@ - - - - - storage.fileUnknown - - - - - - - - - - - - - -
- -
-
-
- -

storage.fileUnknown

- -

Unknown type.

-

- -
-
storage.fileUnknown#aa963b05 = storage.FileType;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

storage.FileType

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/storage.fileWebp b/data/core.telegram.org/constructor/storage.fileWebp deleted file mode 100644 index edcc4d67a9..0000000000 --- a/data/core.telegram.org/constructor/storage.fileWebp +++ /dev/null @@ -1,132 +0,0 @@ - - - - - storage.fileWebp - - - - - - - - - - - - - -
- -
-
-
- -

storage.fileWebp

- -

WEBP image. MIME type: image/webp.

-

- -
-
storage.fileWebp#1081464c = storage.FileType;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

storage.FileType

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/textStrike.html b/data/core.telegram.org/constructor/textStrike.html deleted file mode 100644 index 2842b0d792..0000000000 --- a/data/core.telegram.org/constructor/textStrike.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - textStrike - - - - - - - - - - - - - -
- -
-
-
- -

textStrike

- -

Strikethrough text

-

- -
-
textStrike#9bf8bb95 text:RichText = RichText;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
textRichTextText
-

Type

-

RichText

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/updateBotInlineSend.html b/data/core.telegram.org/constructor/updateBotInlineSend.html deleted file mode 100644 index e2e329f616..0000000000 --- a/data/core.telegram.org/constructor/updateBotInlineSend.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - updateBotInlineSend - - - - - - - - - - - - - -
- -
-
-
- -

updateBotInlineSend

- -

The result of an inline query that was chosen by a user and sent to their chat partner. Please see our documentation on the feedback collecting for details on how to enable these updates for your bot.

-

- -
-
updateBotInlineSend#12f12a07 flags:# user_id:long query:string geo:flags.0?GeoPoint id:string msg_id:flags.1?InputBotInlineMessageID = Update;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
user_idlongThe user that chose the result
querystringThe query that was used to obtain the result
geoflags.0?GeoPointOptional. Sender location, only for bots that require user location
idstringThe unique identifier for the result that was chosen
msg_idflags.1?InputBotInlineMessageIDIdentifier of the sent inline message. Available only if there is an inline keyboard attached to the message. Will be also received in callback queries and can be used to edit the message.
-

Type

-

Update

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/updateBotPrecheckoutQuery.html b/data/core.telegram.org/constructor/updateBotPrecheckoutQuery.html deleted file mode 100644 index f0c092882f..0000000000 --- a/data/core.telegram.org/constructor/updateBotPrecheckoutQuery.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - updateBotPrecheckoutQuery - - - - - - - - - - - - - -
- -
-
-
- -

updateBotPrecheckoutQuery

- -

This object contains information about an incoming pre-checkout query.

-

- -
-
updateBotPrecheckoutQuery#8caa9a96 flags:# query_id:long user_id:long payload:bytes info:flags.0?PaymentRequestedInfo shipping_option_id:flags.1?string currency:string total_amount:long = Update;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
query_idlongUnique query identifier
user_idlongUser who sent the query
payloadbytesBot specified invoice payload
infoflags.0?PaymentRequestedInfoOrder info provided by the user
shipping_option_idflags.1?stringIdentifier of the shipping option chosen by the user
currencystringThree-letter ISO 4217 currency code
total_amountlongTotal amount in the smallest units of the currency (integer, not float/double). For example, for a price of US$ 1.45 pass amount = 145. See the exp parameter in currencies.json, it shows the number of digits past the decimal point for each currency (2 for the majority of currencies).
-

Type

-

Update

-

Related pages

-

Bot Payments API

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/updateChannelParticipant.html b/data/core.telegram.org/constructor/updateChannelParticipant.html deleted file mode 100644 index e89fd91ea2..0000000000 --- a/data/core.telegram.org/constructor/updateChannelParticipant.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - updateChannelParticipant - - - - - - - - - - - - - -
- -
-
-
- -

updateChannelParticipant

- -

A participant has left, joined, was banned or admined in a channel or supergroup.

-

- -
-
updateChannelParticipant#985d3abb flags:# channel_id:long date:int actor_id:long user_id:long prev_participant:flags.0?ChannelParticipant new_participant:flags.1?ChannelParticipant invite:flags.2?ExportedChatInvite qts:int = Update;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
channel_idlongChannel ID
dateintDate of the event
actor_idlongUser that triggered the change (inviter, admin that kicked the user, or the even the user_id itself)
user_idlongUser that was affected by the change
prev_participantflags.0?ChannelParticipantPrevious participant status
new_participantflags.1?ChannelParticipantNew participant status
inviteflags.2?ExportedChatInviteChat invite used to join the channel/supergroup
qtsintNew qts value, see updates » for more info.
-

Type

-

Update

-

Related pages

-

Channels

-

How to handle channels, supergroups, groups, and what's the difference between them.

-

Working with Updates

-

How to subscribe to updates and handle them properly.

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/updateChannelReadMessagesContents.html b/data/core.telegram.org/constructor/updateChannelReadMessagesContents.html deleted file mode 100644 index 0e97f1c82a..0000000000 --- a/data/core.telegram.org/constructor/updateChannelReadMessagesContents.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - updateChannelReadMessagesContents - - - - - - - - - - - - - -
- -
-
-
- -

updateChannelReadMessagesContents

- -

The specified channel/supergroup messages were read

-

- -
-
updateChannelReadMessagesContents#44bdd535 channel_id:long messages:Vector<int> = Update;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
channel_idlongChannel/supergroup ID
messagesVector<int>IDs of messages that were read
-

Type

-

Update

-

Related pages

-

Channels

-

How to handle channels, supergroups, groups, and what's the difference between them.

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/updateDialogPinned.html b/data/core.telegram.org/constructor/updateDialogPinned.html deleted file mode 100644 index fcb4869a82..0000000000 --- a/data/core.telegram.org/constructor/updateDialogPinned.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - updateDialogPinned - - - - - - - - - - - - - -
- -
-
-
- -

updateDialogPinned

- -

A dialog was pinned/unpinned

-

- -
-
updateDialogPinned#6e6fe51c flags:# pinned:flags.0?true folder_id:flags.1?int peer:DialogPeer = Update;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
pinnedflags.0?trueWhether the dialog was pinned
folder_idflags.1?intPeer folder ID, for more info click here
peerDialogPeerThe dialog
-

Type

-

Update

-

Related pages

-

Folders

-

Telegram allows placing chats into folders, based on their type, mute status, or other custom criteria, thanks to folder blacklists and whitelists.

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/updateFavedStickers.html b/data/core.telegram.org/constructor/updateFavedStickers.html deleted file mode 100644 index 2a4c2f0264..0000000000 --- a/data/core.telegram.org/constructor/updateFavedStickers.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - updateFavedStickers - - - - - - - - - - - - - -
- -
-
-
- -

updateFavedStickers

- -

The list of favorited stickers was changed, the client should call messages.getFavedStickers to refetch the new list

-

- -
-
updateFavedStickers#e511996d = Update;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

Update

-

Related pages

-

messages.getFavedStickers

-

Get faved stickers

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/constructor/updateUserTyping.html b/data/core.telegram.org/constructor/updateUserTyping.html deleted file mode 100644 index 3cd3938b97..0000000000 --- a/data/core.telegram.org/constructor/updateUserTyping.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - updateUserTyping - - - - - - - - - - - - - -
- -
-
-
- -

updateUserTyping

- -

The user is preparing a message; typing, recording, uploading, etc. This update is valid for 6 seconds. If no repeated update received after 6 seconds, it should be considered that the user stopped doing whatever he's been doing.

-

- -
-
updateUserTyping#c01e857f user_id:long action:SendMessageAction = Update;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
user_idlongUser id
actionSendMessageActionAction type
Param added in Layer 17.
-

Type

-

Update

-

Related pages

-

Layers

-

Below you will find information on schema changes. For more details on the use of layers, see Invoking API methods.

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/method/account.getAccountTTL b/data/core.telegram.org/method/account.getAccountTTL deleted file mode 100644 index 2e7d313fd6..0000000000 --- a/data/core.telegram.org/method/account.getAccountTTL +++ /dev/null @@ -1,134 +0,0 @@ - - - - - account.getAccountTTL - - - - - - - - - - - - - -
- -
-
-
- -

account.getAccountTTL

- -

Get days to live of account

-

- -
-
accountDaysTTL#b8d0afdf days:int = AccountDaysTTL;
----functions---
-account.getAccountTTL#8fc711d = AccountDaysTTL;

-

Parameters

-

This constructor does not require any parameters.

-

Result

-

AccountDaysTTL

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/method/account.getAuthorizations b/data/core.telegram.org/method/account.getAuthorizations deleted file mode 100644 index 5ad8826a94..0000000000 --- a/data/core.telegram.org/method/account.getAuthorizations +++ /dev/null @@ -1,134 +0,0 @@ - - - - - account.getAuthorizations - - - - - - - - - - - - - -
- -
-
-
- -

account.getAuthorizations

- -

Get logged-in sessions

-

- -
-
account.authorizations#1250abde authorizations:Vector<Authorization> = account.Authorizations;
----functions---
-account.getAuthorizations#e320c158 = account.Authorizations;

-

Parameters

-

This constructor does not require any parameters.

-

Result

-

account.Authorizations

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/method/account.getContactSignUpNotification b/data/core.telegram.org/method/account.getContactSignUpNotification deleted file mode 100644 index 91d0e7d989..0000000000 --- a/data/core.telegram.org/method/account.getContactSignUpNotification +++ /dev/null @@ -1,135 +0,0 @@ - - - - - account.getContactSignUpNotification - - - - - - - - - - - - - -
- -
-
-
- -

account.getContactSignUpNotification

- -

Whether the user will receive notifications when contacts sign up

-

- -
-
boolFalse#bc799737 = Bool;
-boolTrue#997275b5 = Bool;
----functions---
-account.getContactSignUpNotification#9f07c728 = Bool;

-

Parameters

-

This constructor does not require any parameters.

-

Result

-

Bool

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/method/account.updateStatus b/data/core.telegram.org/method/account.updateStatus deleted file mode 100644 index 86ddcb6b2f..0000000000 --- a/data/core.telegram.org/method/account.updateStatus +++ /dev/null @@ -1,155 +0,0 @@ - - - - - account.updateStatus - - - - - - - - - - - - - -
- -
-
-
- -

account.updateStatus

- -

Updates online user status.

-

- -
-
boolFalse#bc799737 = Bool;
-boolTrue#997275b5 = Bool;
----functions---
-account.updateStatus#6628562c offline:Bool = Bool;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
offlineBoolIf (boolTrue) is transmitted, user status will change to (userStatusOffline).
-

Result

-

Bool

-

Related pages

-

boolTrue

-

The constructor can be interpreted as a booleantrue value.

-

userStatusOffline

-

The user's offline status.

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/method/auth.cancelCode b/data/core.telegram.org/method/auth.cancelCode deleted file mode 100644 index fc716bb7f8..0000000000 --- a/data/core.telegram.org/method/auth.cancelCode +++ /dev/null @@ -1,180 +0,0 @@ - - - - - auth.cancelCode - - - - - - - - - - - - - -
- -
-
-
- -

auth.cancelCode

- -

Cancel the login verification code

-

- -
-
boolFalse#bc799737 = Bool;
-boolTrue#997275b5 = Bool;
----functions---
-auth.cancelCode#1f040578 phone_number:string phone_code_hash:string = Bool;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
phone_numberstringPhone number
phone_code_hashstringPhone code hash from auth.sendCode
-

Result

-

Bool

-

Possible errors

- - - - - - - - - - - - - - - - - - - - -
CodeTypeDescription
400PHONE_CODE_EXPIREDThe phone code you provided has expired, this may happen if it was sent to any chat on telegram (if the code is sent through a telegram chat (not the official account) to avoid it append or prepend to the code some chars).
400PHONE_NUMBER_INVALIDThe phone number is invalid.
-

Related pages

-

auth.sendCode

-

Send the verification code for login

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/method/channels.deleteHistory b/data/core.telegram.org/method/channels.deleteHistory deleted file mode 100644 index 2f7ab1b9b6..0000000000 --- a/data/core.telegram.org/method/channels.deleteHistory +++ /dev/null @@ -1,180 +0,0 @@ - - - - - channels.deleteHistory - - - - - - - - - - - - - -
- -
-
-
- -

channels.deleteHistory

- -

Delete the history of a supergroup

-

- -
-
boolFalse#bc799737 = Bool;
-boolTrue#997275b5 = Bool;
----functions---
-channels.deleteHistory#af369d42 channel:InputChannel max_id:int = Bool;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
channelInputChannelSupergroup whose history must be deleted
max_idintID of message up to which the history must be deleted
-

Result

-

Bool

-

Possible errors

- - - - - - - - - - - - - - - - - - - - -
CodeTypeDescription
400CHANNEL_INVALIDThe provided channel is invalid.
400CHANNEL_PRIVATEYou haven't joined this channel/supergroup.
-

Related pages

-

Channels

-

How to handle channels, supergroups, groups, and what's the difference between them.

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/method/channels.editBanned b/data/core.telegram.org/method/channels.editBanned deleted file mode 100644 index 5e482cf4d5..0000000000 --- a/data/core.telegram.org/method/channels.editBanned +++ /dev/null @@ -1,241 +0,0 @@ - - - - - channels.editBanned - - - - - - - - - - - - - -
- -
-
-
- -

channels.editBanned

- -

Ban/unban/kick a user in a supergroup/channel.

-

- -
-
updatesTooLong#e317af7e = Updates;
-updateShortMessage#313bc7f8 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int user_id:long message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long reply_to:flags.3?MessageReplyHeader entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
-updateShortChatMessage#4d6deea5 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int from_id:long chat_id:long message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long reply_to:flags.3?MessageReplyHeader entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
-updateShort#78d4dec1 update:Update date:int = Updates;
-updatesCombined#725b04c3 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq_start:int seq:int = Updates;
-updates#74ae4240 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq:int = Updates;
-updateShortSentMessage#9015e101 flags:# out:flags.1?true id:int pts:int pts_count:int date:int media:flags.9?MessageMedia entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
----functions---
-channels.editBanned#96e6cd81 channel:InputChannel participant:InputPeer banned_rights:ChatBannedRights = Updates;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
channelInputChannelThe supergroup/channel.
participantInputPeerParticipant to ban
banned_rightsChatBannedRightsThe banned rights
-

Result

-

Updates

-

Possible errors

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CodeTypeDescription
400CHANNEL_ADD_INVALIDInternal error.
400CHANNEL_INVALIDThe provided channel is invalid.
400CHANNEL_PRIVATEYou haven't joined this channel/supergroup.
400CHAT_ADMIN_REQUIREDYou must be an admin in this chat to do this.
403CHAT_WRITE_FORBIDDENYou can't write in this chat.
400INPUT_USER_DEACTIVATEDThe specified user was deleted.
400MSG_ID_INVALIDInvalid message ID provided.
400PARTICIPANT_ID_INVALIDThe specified participant ID is invalid.
400PEER_ID_INVALIDThe provided peer id is invalid.
400PINNED_DIALOGS_TOO_MUCHToo many pinned dialogs.
400USER_ADMIN_INVALIDYou're not an admin.
400USER_ID_INVALIDThe provided user ID is invalid.
-

Bots can use this method

-

Related pages

-

Channels

-

How to handle channels, supergroups, groups, and what's the difference between them.

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/method/channels.readMessageContents b/data/core.telegram.org/method/channels.readMessageContents deleted file mode 100644 index ed27f0eaa5..0000000000 --- a/data/core.telegram.org/method/channels.readMessageContents +++ /dev/null @@ -1,185 +0,0 @@ - - - - - channels.readMessageContents - - - - - - - - - - - - - -
- -
-
-
- -

channels.readMessageContents

- -

Mark channel/supergroup message contents as read

-

- -
-
boolFalse#bc799737 = Bool;
-boolTrue#997275b5 = Bool;
----functions---
-channels.readMessageContents#eab5dc38 channel:InputChannel id:Vector<int> = Bool;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
channelInputChannelChannel/supergroup
idVector<int>IDs of messages whose contents should be marked as read
-

Result

-

Bool

-

Possible errors

- - - - - - - - - - - - - - - - - - - - - - - - - -
CodeTypeDescription
400CHANNEL_INVALIDThe provided channel is invalid.
400CHANNEL_PRIVATEYou haven't joined this channel/supergroup.
400MSG_ID_INVALIDInvalid message ID provided.
-

Related pages

-

Channels

-

How to handle channels, supergroups, groups, and what's the difference between them.

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/method/contacts.deleteContacts b/data/core.telegram.org/method/contacts.deleteContacts deleted file mode 100644 index 840231f08c..0000000000 --- a/data/core.telegram.org/method/contacts.deleteContacts +++ /dev/null @@ -1,155 +0,0 @@ - - - - - contacts.deleteContacts - - - - - - - - - - - - - -
- -
-
-
- -

contacts.deleteContacts

- -

Deletes several contacts from the list.

-

- -
-
updatesTooLong#e317af7e = Updates;
-updateShortMessage#313bc7f8 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int user_id:long message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long reply_to:flags.3?MessageReplyHeader entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
-updateShortChatMessage#4d6deea5 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int from_id:long chat_id:long message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long reply_to:flags.3?MessageReplyHeader entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
-updateShort#78d4dec1 update:Update date:int = Updates;
-updatesCombined#725b04c3 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq_start:int seq:int = Updates;
-updates#74ae4240 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq:int = Updates;
-updateShortSentMessage#9015e101 flags:# out:flags.1?true id:int pts:int pts_count:int date:int media:flags.9?MessageMedia entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
----functions---
-contacts.deleteContacts#96a0e00 id:Vector<InputUser> = Updates;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
idVector<InputUser>User ID list
-

Result

-

Bool

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/method/contacts.resetTopPeerRating b/data/core.telegram.org/method/contacts.resetTopPeerRating deleted file mode 100644 index e0036f0cca..0000000000 --- a/data/core.telegram.org/method/contacts.resetTopPeerRating +++ /dev/null @@ -1,175 +0,0 @@ - - - - - contacts.resetTopPeerRating - - - - - - - - - - - - - -
- -
-
-
- -

contacts.resetTopPeerRating

- -

Reset rating of top peer

-

- -
-
boolFalse#bc799737 = Bool;
-boolTrue#997275b5 = Bool;
----functions---
-contacts.resetTopPeerRating#1ae373ac category:TopPeerCategory peer:InputPeer = Bool;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
categoryTopPeerCategoryTop peer category
peerInputPeerPeer whose rating should be reset
-

Result

-

Bool

-

Possible errors

- - - - - - - - - - - - - - - -
CodeTypeDescription
400PEER_ID_INVALIDThe provided peer id is invalid.
-

Related pages

-

Top peer rating

-

If enabled, the rating of top peers indicates the relevance of a frequently used peer in a certain category (frequently messaged users, frequently used bots, inline bots, frequently visited channels and so on).

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/method/folders.deleteFolder b/data/core.telegram.org/method/folders.deleteFolder deleted file mode 100644 index 74cf9d88e5..0000000000 --- a/data/core.telegram.org/method/folders.deleteFolder +++ /dev/null @@ -1,175 +0,0 @@ - - - - - folders.deleteFolder - - - - - - - - - - - - - -
- -
-
-
- -

folders.deleteFolder

- -

Delete a peer folder

-

- -
-
updatesTooLong#e317af7e = Updates;
-updateShortMessage#313bc7f8 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int user_id:long message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long reply_to:flags.3?MessageReplyHeader entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
-updateShortChatMessage#4d6deea5 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int from_id:long chat_id:long message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long reply_to:flags.3?MessageReplyHeader entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
-updateShort#78d4dec1 update:Update date:int = Updates;
-updatesCombined#725b04c3 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq_start:int seq:int = Updates;
-updates#74ae4240 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq:int = Updates;
-updateShortSentMessage#9015e101 flags:# out:flags.1?true id:int pts:int pts_count:int date:int media:flags.9?MessageMedia entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
----functions---
-folders.deleteFolder#1c295881 folder_id:int = Updates;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
folder_idintPeer folder ID, for more info click here
-

Result

-

Updates

-

Possible errors

- - - - - - - - - - - - - - - -
CodeTypeDescription
400FOLDER_ID_EMPTYAn empty folder ID was specified.
-

Related pages

-

Folders

-

Telegram allows placing chats into folders, based on their type, mute status, or other custom criteria, thanks to folder blacklists and whitelists.

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/method/help.getProxyData b/data/core.telegram.org/method/help.getProxyData deleted file mode 100644 index 2e871d69bd..0000000000 --- a/data/core.telegram.org/method/help.getProxyData +++ /dev/null @@ -1,132 +0,0 @@ - - - - - help.getProxyData - - - - - - - - - - - - - -
- -
-
-
- -

help.getProxyData

- -

Get promotion info of the currently-used MTProxy

-

- -
-
 Method schema is available as of layer 113. Switch »

-

Parameters

-

This constructor does not require any parameters.

-

Result

-

help.ProxyData

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/method/messages.getInlineBotResults b/data/core.telegram.org/method/messages.getInlineBotResults deleted file mode 100644 index d46e5dbdbd..0000000000 --- a/data/core.telegram.org/method/messages.getInlineBotResults +++ /dev/null @@ -1,226 +0,0 @@ - - - - - messages.getInlineBotResults - - - - - - - - - - - - - -
- -
-
-
- -

messages.getInlineBotResults

- -

Query an inline bot

-

- -
-
messages.botResults#947ca848 flags:# gallery:flags.0?true query_id:long next_offset:flags.1?string switch_pm:flags.2?InlineBotSwitchPM results:Vector<BotInlineResult> cache_time:int users:Vector<User> = messages.BotResults;
----functions---
-messages.getInlineBotResults#514e999d flags:# bot:InputUser peer:InputPeer geo_point:flags.0?InputGeoPoint query:string offset:string = messages.BotResults;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
botInputUserThe bot to query
peerInputPeerThe currently opened chat
geo_pointflags.0?InputGeoPointThe geolocation, if requested
querystringThe query
offsetstringThe offset within the results, will be passed directly as-is to the bot.
-

Result

-

messages.BotResults

-

Possible errors

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CodeTypeDescription
400BOT_INLINE_DISABLEDThis bot can't be used in inline mode.
400BOT_INVALIDThis is not a valid bot.
400BOT_RESPONSE_TIMEOUTA timeout occurred while fetching data from the bot.
400CHANNEL_INVALIDThe provided channel is invalid.
400CHANNEL_PRIVATEYou haven't joined this channel/supergroup.
400INPUT_USER_DEACTIVATEDThe specified user was deleted.
400MSG_ID_INVALIDInvalid message ID provided.
-503TimeoutTimeout while fetching data.
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/method/messages.getMessageReactionsList b/data/core.telegram.org/method/messages.getMessageReactionsList deleted file mode 100644 index 6261f10b67..0000000000 --- a/data/core.telegram.org/method/messages.getMessageReactionsList +++ /dev/null @@ -1,178 +0,0 @@ - - - - - messages.getMessageReactionsList - - - - - - - - - - - - - -
- -
-
-
- -

messages.getMessageReactionsList

- -

Get full message reaction list

-

- -
-
 Method schema is available as of layer 140. Switch »

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
peerInputPeerPeer
idintMessage ID
reactionflags.0?stringGet only reactions of this type (UTF8 emoji)
offsetflags.1?stringOffset (typically taken from the next_offset field of the returned MessageReactionsList)
limitintMaximum number of results to return, see pagination
-

Result

-

MessageReactionsList

-

Bots can use this method

-

Related pages

-

MessageReactionsList

-

List of message reactions

-

Pagination in the API

-

How to fetch results from large lists of objects.

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/method/messages.getMessagesReactions b/data/core.telegram.org/method/messages.getMessagesReactions deleted file mode 100644 index 7f2608d2ce..0000000000 --- a/data/core.telegram.org/method/messages.getMessagesReactions +++ /dev/null @@ -1,153 +0,0 @@ - - - - - messages.getMessagesReactions - - - - - - - - - - - - - -
- -
-
-
- -

messages.getMessagesReactions

- -

Get message reactions

-

- -
-
 Method schema is available as of layer 140. Switch »

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
peerInputPeerPeer
idVector<int>Message IDs
-

Result

-

Updates

-

Bots can use this method

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/method/messages.searchGifs b/data/core.telegram.org/method/messages.searchGifs deleted file mode 100644 index 9db5526db6..0000000000 --- a/data/core.telegram.org/method/messages.searchGifs +++ /dev/null @@ -1,177 +0,0 @@ - - - - - messages.searchGifs - - - - - - - - - - - - - -
- -
-
-
- -

messages.searchGifs

- -

Search for GIFs

-

- -
-
 Method schema is available as of layer 114. Switch »

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
qstringText query
offsetintOffset for pagination »
-

Result

-

messages.FoundGifs

-

Possible errors

- - - - - - - - - - - - - - - - - - - - -
CodeTypeDescription
400METHOD_INVALIDThe specified method is invalid.
400SEARCH_QUERY_EMPTYThe search query is empty.
-

Related pages

-

Pagination in the API

-

How to fetch results from large lists of objects.

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/method/messages.sendInlineBotResult b/data/core.telegram.org/method/messages.sendInlineBotResult deleted file mode 100644 index 2bda7d4621..0000000000 --- a/data/core.telegram.org/method/messages.sendInlineBotResult +++ /dev/null @@ -1,344 +0,0 @@ - - - - - messages.sendInlineBotResult - - - - - - - - - - - - - -
- -
-
-
- -

messages.sendInlineBotResult

- -

Send a result obtained using messages.getInlineBotResults.

-

- -
-
updatesTooLong#e317af7e = Updates;
-updateShortMessage#313bc7f8 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int user_id:long message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long reply_to:flags.3?MessageReplyHeader entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
-updateShortChatMessage#4d6deea5 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int from_id:long chat_id:long message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long reply_to:flags.3?MessageReplyHeader entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
-updateShort#78d4dec1 update:Update date:int = Updates;
-updatesCombined#725b04c3 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq_start:int seq:int = Updates;
-updates#74ae4240 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq:int = Updates;
-updateShortSentMessage#9015e101 flags:# out:flags.1?true id:int pts:int pts_count:int date:int media:flags.9?MessageMedia entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
----functions---
-messages.sendInlineBotResult#220815b0 flags:# silent:flags.5?true background:flags.6?true clear_draft:flags.7?true hide_via:flags.11?true peer:InputPeer reply_to_msg_id:flags.0?int random_id:long query_id:long id:string schedule_date:flags.10?int = Updates;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
silentflags.5?trueWhether to send the message silently (no notification will be triggered on the other client)
backgroundflags.6?trueWhether to send the message in background
clear_draftflags.7?trueWhether to clear the draft
hide_viaflags.11?trueWhether to hide the via @botname in the resulting message (only for bot usernames encountered in the config)
peerInputPeerDestination
reply_to_msg_idflags.0?intID of the message this message should reply to
random_idlongRandom ID to avoid resending the same query
query_idlongQuery ID from messages.getInlineBotResults
idstringResult ID from messages.getInlineBotResults
schedule_dateflags.10?intScheduled message date for scheduled messages
-

Result

-

Updates

-

Possible errors

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CodeTypeDescription
400CHANNEL_INVALIDThe provided channel is invalid.
400CHANNEL_PRIVATEYou haven't joined this channel/supergroup.
400CHAT_ADMIN_REQUIREDYou must be an admin in this chat to do this.
400CHAT_RESTRICTEDYou can't send messages in this chat, you were restricted.
403CHAT_SEND_GAME_FORBIDDENYou can't send a game to this chat.
403CHAT_SEND_GIFS_FORBIDDENYou can't send gifs in this chat.
403CHAT_SEND_INLINE_FORBIDDENYou can't send inline messages in this group.
403CHAT_SEND_MEDIA_FORBIDDENYou can't send media in this chat.
403CHAT_SEND_STICKERS_FORBIDDENYou can't send stickers in this chat.
403CHAT_WRITE_FORBIDDENYou can't write in this chat.
400INLINE_RESULT_EXPIREDThe inline query expired.
400INPUT_USER_DEACTIVATEDThe specified user was deleted.
400MEDIA_EMPTYThe provided media object is invalid.
400MSG_ID_INVALIDInvalid message ID provided.
400PEER_ID_INVALIDThe provided peer id is invalid.
400QUERY_ID_EMPTYThe query ID is empty.
400RESULT_ID_EMPTYResult ID empty.
400SCHEDULE_DATE_TOO_LATEYou can't schedule a message this far in the future.
400SCHEDULE_TOO_MUCHThere are too many scheduled messages.
420SLOWMODE_WAIT_XSlowmode is enabled in this chat: you must wait for the specified number of seconds before sending another message to the chat.
400USER_BANNED_IN_CHANNELYou're banned from sending messages in supergroups/channels.
400WEBPAGE_CURL_FAILEDFailure while fetching the webpage with cURL.
400WEBPAGE_MEDIA_EMPTYWebpage media empty.
400YOU_BLOCKED_USERYou blocked this user.
-

Related pages

-

Message drafts

-

How to handle message drafts

-

config

-

Current configuration

-

messages.getInlineBotResults

-

Query an inline bot

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/method/messages.sendReaction b/data/core.telegram.org/method/messages.sendReaction deleted file mode 100644 index 74b485600c..0000000000 --- a/data/core.telegram.org/method/messages.sendReaction +++ /dev/null @@ -1,185 +0,0 @@ - - - - - messages.sendReaction - - - - - - - - - - - - - -
- -
-
-
- -

messages.sendReaction

- -

Send reaction to message

-

- -
-
 Method schema is available as of layer 140. Switch »

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
peerInputPeerPeer
msg_idintMessage ID to react to
reactionflags.0?stringReaction (a UTF8 emoji)
-

Result

-

Updates

-

Possible errors

- - - - - - - - - - - - - - - - - - - - -
CodeTypeDescription
400MESSAGE_ID_INVALIDThe provided message id is invalid.
400REACTION_EMPTYEmpty reaction provided.
-

Bots can use this method

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/method/messages.updateDialogFiltersOrder b/data/core.telegram.org/method/messages.updateDialogFiltersOrder deleted file mode 100644 index 0b1f0f47c4..0000000000 --- a/data/core.telegram.org/method/messages.updateDialogFiltersOrder +++ /dev/null @@ -1,153 +0,0 @@ - - - - - messages.updateDialogFiltersOrder - - - - - - - - - - - - - -
- -
-
-
- -

messages.updateDialogFiltersOrder

- -

Reorder folders

-

- -
-
boolFalse#bc799737 = Bool;
-boolTrue#997275b5 = Bool;
----functions---
-messages.updateDialogFiltersOrder#c563c1e4 order:Vector<int> = Bool;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
orderVector<int>New folder order
-

Result

-

Bool

-

Related pages

-

Folders

-

Telegram allows placing chats into folders, based on their type, mute status, or other custom criteria, thanks to folder blacklists and whitelists.

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/method/messages.uploadMedia b/data/core.telegram.org/method/messages.uploadMedia deleted file mode 100644 index a7fbdb2fa8..0000000000 --- a/data/core.telegram.org/method/messages.uploadMedia +++ /dev/null @@ -1,264 +0,0 @@ - - - - - messages.uploadMedia - - - - - - - - - - - - - -
- -
-
-
- -

messages.uploadMedia

- -

Upload a file and associate it to a chat (without actually sending it to the chat)

-

- -
-
messageMediaEmpty#3ded6320 = MessageMedia;
-messageMediaPhoto#695150d7 flags:# photo:flags.0?Photo ttl_seconds:flags.2?int = MessageMedia;
-messageMediaGeo#56e0d474 geo:GeoPoint = MessageMedia;
-messageMediaContact#70322949 phone_number:string first_name:string last_name:string vcard:string user_id:long = MessageMedia;
-messageMediaUnsupported#9f84f49e = MessageMedia;
-messageMediaDocument#9cb070d7 flags:# document:flags.0?Document ttl_seconds:flags.2?int = MessageMedia;
-messageMediaWebPage#a32dd600 webpage:WebPage = MessageMedia;
-messageMediaVenue#2ec0533f geo:GeoPoint title:string address:string provider:string venue_id:string venue_type:string = MessageMedia;
-messageMediaGame#fdb19008 game:Game = MessageMedia;
-messageMediaInvoice#84551347 flags:# shipping_address_requested:flags.1?true test:flags.3?true title:string description:string photo:flags.0?WebDocument receipt_msg_id:flags.2?int currency:string total_amount:long start_param:string = MessageMedia;
-messageMediaGeoLive#b940c666 flags:# geo:GeoPoint heading:flags.0?int period:int proximity_notification_radius:flags.1?int = MessageMedia;
-messageMediaPoll#4bd6e798 poll:Poll results:PollResults = MessageMedia;
-messageMediaDice#3f7ee58b value:int emoticon:string = MessageMedia;
----functions---
-messages.uploadMedia#519bc2b1 peer:InputPeer media:InputMedia = MessageMedia;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
peerInputPeerThe chat, can be an inputPeerEmpty for bots
mediaInputMediaFile uploaded in chunks as described in files »
-

Result

-

MessageMedia

-

Possible errors

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CodeTypeDescription
400BOT_MISSINGThis method can only be run by a bot.
400CHANNEL_PRIVATEYou haven't joined this channel/supergroup.
400CHAT_ADMIN_REQUIREDYou must be an admin in this chat to do this.
400CHAT_RESTRICTEDYou can't send messages in this chat, you were restricted.
403CHAT_WRITE_FORBIDDENYou can't write in this chat.
400FILE_PARTS_INVALIDThe number of file parts is invalid.
400IMAGE_PROCESS_FAILEDFailure while processing image.
400INPUT_USER_DEACTIVATEDThe specified user was deleted.
400MEDIA_INVALIDMedia invalid.
400MSG_ID_INVALIDInvalid message ID provided.
400PEER_ID_INVALIDThe provided peer id is invalid.
400PHOTO_EXT_INVALIDThe extension of the photo is invalid.
400PHOTO_INVALID_DIMENSIONSThe photo dimensions are invalid.
400PHOTO_SAVE_FILE_INVALIDInternal issues, try again later.
400USER_BANNED_IN_CHANNELYou're banned from sending messages in supergroups/channels.
400WEBPAGE_CURL_FAILEDFailure while fetching the webpage with cURL.
-

Bots can use this method

-

Related pages

-

inputPeerEmpty

-

An empty constructor, no user or chat is defined.

-

Uploading and Downloading Files

-

How to transfer large data batches correctly.

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/method/updates.getState b/data/core.telegram.org/method/updates.getState deleted file mode 100644 index 10749bcb5e..0000000000 --- a/data/core.telegram.org/method/updates.getState +++ /dev/null @@ -1,135 +0,0 @@ - - - - - updates.getState - - - - - - - - - - - - - -
- -
-
-
- -

updates.getState

- -

Returns a current state of updates.

-

- -
-
updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State;
----functions---
-updates.getState#edd4882a = updates.State;

-

Parameters

-

This constructor does not require any parameters.

-

Result

-

updates.State

-

Bots can use this method

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/method/upload.getCdnFileHashes b/data/core.telegram.org/method/upload.getCdnFileHashes deleted file mode 100644 index ec6185f1de..0000000000 --- a/data/core.telegram.org/method/upload.getCdnFileHashes +++ /dev/null @@ -1,178 +0,0 @@ - - - - - upload.getCdnFileHashes - - - - - - - - - - - - - -
- -
-
-
- -

upload.getCdnFileHashes

- -

Get SHA256 hashes for verifying downloaded CDN files

-

- -
-
---functions---
-upload.getCdnFileHashes#4da54231 file_token:bytes offset:int = Vector<FileHash>;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
file_tokenbytesFile
offsetintOffset from which to start getting hashes
-

Result

-

Vector<FileHash>

-

Possible errors

- - - - - - - - - - - - - - - - - - - - -
CodeTypeDescription
400CDN_METHOD_INVALIDYou can't call this method in a CDN DC.
400RSA_DECRYPT_FAILEDInternal RSA decryption failed.
-

Bots can use this method

-

Related pages

-

Encrypted CDNs for Speed and Security

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/methods.html b/data/core.telegram.org/methods.html deleted file mode 100644 index 10a6578256..0000000000 --- a/data/core.telegram.org/methods.html +++ /dev/null @@ -1,2305 +0,0 @@ - - - - - Methods - - - - - - - - - - - - - -
- -
-
-
- -

Methods

- -

Accepting the Terms of Service

- - - - - - - - - - - - - - - - - -
NameDescription
help.getTermsOfServiceUpdateLook for updates of telegram's terms of service
help.acceptTermsOfServiceAccept the new terms of service
-

Dealing with spam and ToS violations

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
account.reportPeerReport a peer for violation of telegram's Terms of Service
account.reportProfilePhotoReport a profile photo of a dialog
channels.reportSpamReports some messages from a user in a supergroup as spam; requires administrator rights in the supergroup
messages.reportReport a message in a chat for violation of telegram's Terms of Service
messages.reportSpamReport a new incoming chat for spam, if the peer settings of the chat allow us to do that
messages.reportEncryptedSpamReport a secret chat for spam
-

Fetching configuration

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
help.getAppChangelogGet changelog of current app.
Typically, an updates constructor will be returned, containing one or more updateServiceNotification updates with app-specific changelogs.
help.getAppConfigGet app-specific configuration, see client configuration for more info on the result.
help.getAppUpdateReturns information on update availability for the current application.
help.getConfigReturns current configuration, including data center configuration.
help.getInviteTextReturns localized text of a text message with an invitation.
help.getNearestDcReturns info on data centre nearest to the user.
help.getSupportReturns the support user for the 'ask a question' feature.
help.getSupportNameGet localized name of the telegram support user
help.getCountriesListGet name, ISO code, localized name and phone codes/patterns of all available countries
help.dismissSuggestionDismiss a suggestion, see here for more info ».
-

Login via QR code

- - - - - - - - - - - - - - - - - - - - - -
NameDescription
auth.exportLoginTokenGenerate a login token, for login via QR code.
The generated login token should be encoded using base64url, then shown as a tg://login?token=base64encodedtoken URL in the QR code.

For more info, see login via QR code.
auth.acceptLoginTokenAccept QR code login token, logging in the app that generated it.

Returns info about the new session.

For more info, see login via QR code.
auth.importLoginTokenLogin using a redirected login token, generated in case of DC mismatch during QR code login.

For more info, see login via QR code.
-

Miscellaneous

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
help.saveAppLogSaves logs of application on the server.
initConnectionInitialize connection
invokeAfterMsgInvokes a query after successfull completion of one of the previous queries.
invokeAfterMsgsInvokes a query after a successfull completion of previous queries
invokeWithLayerInvoke the specified query using the specified API layer
invokeWithoutUpdatesInvoke a request without subscribing the used connection for updates (this is enabled by default for file queries).
-

Registration/Authorization

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
auth.bindTempAuthKeyBinds a temporary authorization key temp_auth_key_id to the permanent authorization key perm_auth_key_id. Each permanent key may only be bound to one temporary key at a time, binding a new temporary key overwrites the previous one.

For more information, see Perfect Forward Secrecy.
auth.cancelCodeCancel the login verification code
auth.checkPasswordTry logging to an account protected by a 2FA password.
account.resetPasswordInitiate a 2FA password reset: can only be used if the user is already logged-in, see here for more info »
auth.checkRecoveryPasswordCheck if the 2FA recovery code sent using auth.requestPasswordRecovery is valid, before passing it to auth.recoverPassword.
auth.dropTempAuthKeysDelete all temporary authorization keys except for the ones specified
auth.exportAuthorizationReturns data for copying authorization to another data-centre.
auth.importAuthorizationLogs in a user using a key transmitted from his native data-centre.
auth.importBotAuthorizationLogin as a bot
auth.logOutLogs out the user.
auth.recoverPasswordReset the 2FA password using the recovery code sent using auth.requestPasswordRecovery.
auth.requestPasswordRecoveryRequest recovery code of a 2FA password, only for accounts with a recovery email configured.
auth.resendCodeResend the login code via another medium, the phone code type is determined by the return value of the previous auth.sendCode/auth.resendCode: see login for more info.
auth.resetAuthorizationsTerminates all user's authorized sessions except for the current one.

After calling this method it is necessary to reregister the current device using the method account.registerDevice
auth.sendCodeSend the verification code for login
auth.signInSigns in a user with a validated phone number.
auth.signUpRegisters a validated phone number in the system.
-

Working with GDPR export

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
account.initTakeoutSessionInitialize account takeout session
account.finishTakeoutSessionFinish account takeout session
messages.getSplitRangesGet message ranges for saving the user's chat history
channels.getLeftChannelsGet a list of channels/supergroups we left
invokeWithMessagesRangeInvoke with the given message range
invokeWithTakeoutInvoke a method within a takeout session
-

Working with GIFs (actually MPEG4 GIFs)

- - - - - - - - - - - - - - - - - - - - - -
NameDescription
messages.getSavedGifsGet saved GIFs
messages.saveGifAdd GIF to saved gifs list
messages.searchGifsSearch for GIFs
-

Working with Public Service Announcement and MTProxy channels

- - - - - - - - - - - - - - - - - -
NameDescription
help.hidePromoDataHide MTProxy/Public Service Announcement information
help.getPromoDataGet MTProxy/Public Service Announcement information
-

Working with TSF (internal use only)

- - - - - - - - - - - - - - - - - -
NameDescription
help.editUserInfoInternal use
help.getUserInfoInternal use
-

Working with 2FA login

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
account.confirmPasswordEmailVerify an email to use as 2FA recovery method.
account.resendPasswordEmailResend the code to verify an email to use as 2FA recovery method.
account.cancelPasswordEmailCancel the code that was sent to verify an email to use as 2FA recovery method.
account.getPasswordObtain configuration for two-factor authorization with password
account.getPasswordSettingsGet private info associated to the password info (recovery email, telegram passport info & so on)
account.updatePasswordSettingsSet a new 2FA password
account.declinePasswordResetAbort a pending 2FA password reset, see here for more info »
-

Working with Seamless Telegram Login

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
messages.requestUrlAuthGet more info about a Seamless Telegram Login authorization request, for more info click here »
messages.acceptUrlAuthUse this to accept a Seamless Telegram Login authorization request, for more info click here »
account.getWebAuthorizationsGet web login widget authorizations
account.resetWebAuthorizationLog out an active web telegram login session
account.resetWebAuthorizationsReset all active web telegram login sessions
-

Working with VoIP calls

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
phone.acceptCallAccept incoming call
phone.confirmCallComplete phone call E2E encryption key exchange »
phone.discardCallRefuse or end running call
phone.getCallConfigGet phone call configuration to be passed to libtgvoip's shared config
phone.receivedCallOptional: notify the server that the user is currently busy in a call: this will automatically refuse all incoming phone calls until the current phone call is ended.
phone.requestCallStart a telegram phone call
phone.saveCallDebugSend phone call debug data to server
phone.sendSignalingDataSend VoIP signaling data
phone.setCallRatingRate a call
messages.deletePhoneCallHistoryDelete the entire phone call history.
-

Working with channels/supergroups/geogroups

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
channels.createChannelCreate a supergroup/channel.
channels.getInactiveChannelsGet inactive channels and supergroups
channels.deleteChannelDelete a channel/supergroup
channels.deleteHistoryDelete the history of a supergroup
channels.deleteMessagesDelete messages in a channel/supergroup
channels.deleteUserHistoryDelete all messages sent by a certain user in a supergroup
channels.editAdminModify the admin rights of a user in a supergroup/channel.
channels.editBannedBan/unban/kick a user in a supergroup/channel.
channels.editCreatorTransfer channel ownership
channels.editLocationEdit location of geogroup
channels.editPhotoChange the photo of a channel/supergroup
channels.editTitleEdit the name of a channel/supergroup
channels.exportMessageLinkGet link and embed info of a message in a channel/supergroup
channels.getAdminLogGet the admin log of a channel/supergroup
channels.getAdminedPublicChannelsGet channels/supergroups/geogroups we're admin in. Usually called when the user exceeds the limit for owned public channels/supergroups/geogroups, and the user is given the choice to remove one of his channels/supergroups/geogroups.
channels.getChannelsGet info about channels/supergroups
channels.getFullChannelGet full info about a channel
channels.getGroupsForDiscussionGet all groups that can be used as discussion groups.

Returned legacy group chats must be first upgraded to supergroups before they can be set as a discussion group.
To set a returned supergroup as a discussion group, access to its old messages must be enabled using channels.togglePreHistoryHidden, first.
channels.getMessagesGet channel/supergroup messages
channels.getParticipantGet info about a channel/supergroup participant
channels.getParticipantsGet the participants of a supergroup/channel
channels.inviteToChannelInvite users to a channel/supergroup
channels.joinChannelJoin a channel/supergroup
channels.leaveChannelLeave a channel/supergroup
channels.readHistoryMark channel/supergroup history as read
channels.readMessageContentsMark channel/supergroup message contents as read
channels.setDiscussionGroupAssociate a group to a channel as discussion group for that channel
channels.setStickersAssociate a stickerset to the supergroup
channels.togglePreHistoryHiddenHide/unhide message history for new channel/supergroup users
channels.toggleSignaturesEnable/disable message signatures in channels
channels.toggleSlowModeToggle supergroup slow mode: if enabled, users will only be able to send one message every seconds seconds
-

Working with chats/supergroups/channels

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
messages.getMessageReadParticipantsGet which users read a specific message: only available for groups and supergroups with less than chat_read_mark_size_threshold members, read receipts will be stored for chat_read_mark_expire_period seconds after the message was sent, see client configuration for more info ».
messages.addChatUserAdds a user to a chat and sends a service message on it.
messages.checkChatInviteCheck the validity of a chat invite link and get basic info about it
messages.createChatCreates a new chat.
messages.deleteChatUserDeletes a user from a chat and sends a service message on it.
messages.editChatAboutEdit the description of a group/supergroup/channel.
messages.editChatAdminMake a user admin in a legacy group.
messages.editChatDefaultBannedRightsEdit the default banned rights of a channel/supergroup/group.
messages.editChatPhotoChanges chat photo and sends a service message on it
messages.editChatTitleChanages chat name and sends a service message on it.
messages.exportChatInviteExport an invite link for a chat
messages.getAllChatsGet all chats, channels and supergroups
messages.getChatsReturns chat basic info on their IDs.
messages.getAdminsWithInvitesGet info about chat invites generated by admins.
messages.deleteExportedChatInviteDelete a chat invite
messages.getChatInviteImportersGet info about the users that joined the chat using a specific chat invite
messages.deleteRevokedExportedChatInvitesDelete all revoked chat invites
messages.deleteChatDelete a chat
messages.getCommonChatsGet chats in common with a user
messages.getFullChatReturns full chat info according to its ID.
messages.importChatInviteImport a chat invite and join a private chat/supergroup/channel
messages.getExportedChatInviteGet info about a chat invite
messages.editExportedChatInviteEdit an exported chat invite
messages.getExportedChatInvitesGet info about the chat invites of a specific chat
messages.migrateChatTurn a legacy group into a supergroup
channels.convertToGigagroupConvert a supergroup to a gigagroup, when requested by channel suggestions.
-

Working with deep links

- - - - - - - - - - - - - - - - - - - - - -
NameDescription
messages.startBotStart a conversation with a bot using a deep linking parameter
help.getDeepLinkInfoGet info about a t.me link
help.getRecentMeUrlsGet recently used t.me links
-

Working with files

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
help.getCdnConfigGet configuration for CDN file downloads.
upload.getCdnFileDownload a CDN file.
upload.getCdnFileHashesGet SHA256 hashes for verifying downloaded CDN files
upload.reuploadCdnFileRequest a reupload of a certain file to a CDN DC.
upload.getFileReturns content of a whole file or its part.
upload.getFileHashesGet SHA256 hashes for verifying downloaded files
upload.getWebFileReturns content of an HTTP file or a part, by proxying the request through telegram.
upload.saveBigFilePartSaves a part of a large file (over 10Mb in size) to be later passed to one of the methods.
upload.saveFilePartSaves a part of file for futher sending to one of the methods.
messages.uploadEncryptedFileUpload encrypted file and associate it to a secret chat
messages.uploadMediaUpload a file and associate it to a chat (without actually sending it to the chat)
messages.getDocumentByHashGet a document by its SHA256 hash, mainly used for gifs
-

Working with instant view pages

- - - - - - - - - - - - - - - - - -
NameDescription
messages.getWebPageGet instant view page
messages.getWebPagePreviewGet preview of webpage
-

Working with secret chats

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
messages.setEncryptedTypingSend typing event by the current user to a secret chat.
messages.readEncryptedHistoryMarks message history within a secret chat as read.
messages.acceptEncryptionConfirms creation of a secret chat
messages.discardEncryptionCancels a request for creation and/or delete info on secret chat.
messages.requestEncryptionSends a request to start a secret chat to the user.
messages.sendEncryptedSends a text message to a secret chat.
messages.sendEncryptedFileSends a message with a file attachment to a secret chat
messages.sendEncryptedServiceSends a service message to a secret chat.
messages.getDhConfigReturns configuration parameters for Diffie-Hellman key generation. Can also return a random sequence of bytes of required length.
messages.receivedQueueConfirms receipt of messages in a secret chat by client, cancels push notifications.
-

Working with telegram passport

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
account.sendVerifyEmailCodeSend the verification email code for telegram passport.
account.verifyEmailVerify an email address for telegram passport.
account.sendVerifyPhoneCodeSend the verification phone code for telegram passport.
account.verifyPhoneVerify a phone number for telegram passport.
account.acceptAuthorizationSends a Telegram Passport authorization form, effectively sharing data with the service
account.getAuthorizationFormReturns a Telegram Passport authorization form for sharing data with a service
account.getAuthorizationsGet logged-in sessions
account.deleteSecureValueDelete stored Telegram Passport documents, for more info see the passport docs »
account.getAllSecureValuesGet all saved Telegram Passport documents, for more info see the passport docs »
account.getSecureValueGet saved Telegram Passport document, for more info see the passport docs »
account.saveSecureValueSecurely save Telegram Passport document, for more info see the passport docs »
help.getPassportConfigGet passport configuration
users.setSecureValueErrorsNotify the user that the sent passport data contains some errors The user will not be able to re-submit their Passport data to you until the errors are fixed (the contents of the field for which you returned the error must change).

Use this if the data submitted by the user doesn't satisfy the standards your service requires for any reason. For example, if a birthday date seems invalid, a submitted document is blurry, a scan shows evidence of tampering, etc. Supply some details in the error message to make sure the user knows how to correct the issues.
-

Working with updates

- - - - - - - - - - - - - - - - - - - - - -
NameDescription
updates.getChannelDifferenceReturns the difference between the current state of updates of a certain channel and transmitted.
updates.getDifferenceGet new updates.
updates.getStateReturns a current state of updates.
-

Working with bot inline queries and callback buttons

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
messages.getInlineBotResultsQuery an inline bot
messages.setInlineBotResultsAnswer an inline query, for bots only
messages.sendInlineBotResultSend a result obtained using messages.getInlineBotResults.
messages.getBotCallbackAnswerPress an inline callback button and get a callback answer from the bot
messages.setBotCallbackAnswerSet the callback answer to a user button press (bots only)
messages.editInlineBotMessageEdit an inline bot message
-

Working with bots

- - - - - - - - - - - - - - - - - - - - - -
NameDescription
bots.resetBotCommandsClear bot commands for the specified bot scope and language code
bots.getBotCommandsObtain a list of bot commands for the specified bot scope and language code
bots.setBotCommandsSet bot command list
-

Working with bots (internal bot API use)

- - - - - - - - - - - - - - - - - - - - - -
NameDescription
bots.answerWebhookJSONQueryAnswers a custom query; for bots only
bots.sendCustomRequestSends a custom request; for bots only
help.setBotUpdatesStatusInforms the server about the number of pending bot updates if they haven't been processed for a long time; for bots only
-

Working with cloud themes

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
account.updateThemeUpdate theme
account.uploadThemeUpload theme
account.getThemesGet installed themes
account.createThemeCreate a theme
account.installThemeInstall a theme
account.saveThemeSave a theme
account.getThemeGet theme information
account.getChatThemesGet all available chat themes
messages.setChatThemeChange the chat theme of a certain chat
-

Working with contacts and top peers

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
account.getContactSignUpNotificationWhether the user will receive notifications when contacts sign up
account.setContactSignUpNotificationToggle contact sign up notifications
contacts.acceptContactIf the peer settings of a new user allow us to add him as contact, add that user as contact
contacts.addContactAdd an existing telegram user as contact.

Use contacts.importContacts to add contacts by phone number, without knowing their Telegram ID.
contacts.blockAdds the user to the blacklist.
contacts.deleteByPhonesDelete contacts by phone number
contacts.deleteContactsDeletes several contacts from the list.
contacts.getBlockedReturns the list of blocked users.
contacts.getContactIDsGet contact by telegram IDs
contacts.getContactsReturns the current user's contact list.
contacts.getLocatedGet contacts near you
contacts.getSavedGet all contacts
contacts.getStatusesReturns the list of contact statuses.
contacts.getTopPeersGet most used peers
contacts.importContactsImports contacts: saves a full list on the server, adds already registered contacts to the contact list, returns added contacts and their info.

Use contacts.addContact to add Telegram contacts without actually using their phone number.
contacts.resetSavedDelete saved contacts
contacts.resetTopPeerRatingReset rating of top peer
contacts.searchReturns users found by username substring.
contacts.toggleTopPeersEnable/disable top peers
contacts.unblockDeletes the user from the blacklist.
-

Working with credit cards

- - - - - - - - - - - - - -
NameDescription
payments.getBankCardDataGet info about a credit card
-

Working with dialogs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
messages.getDialogsReturns the current user dialog list.
messages.getPeerDialogsGet dialog info of specified peers
messages.getPinnedDialogsGet pinned dialogs
messages.toggleDialogPinPin/unpin a dialog
messages.reorderPinnedDialogsReorder pinned dialogs
messages.getDialogUnreadMarksGet dialogs manually marked as unread
messages.markDialogUnreadManually mark dialog as unread
messages.getPeerSettingsGet peer settings
messages.hidePeerSettingsBarShould be called after the user hides the report spam/add as contact bar of a new chat, effectively prevents the user from executing the actions specified in the peer's settings.
messages.getOnlinesGet count of online users in a chat
messages.sendScreenshotNotificationNotify the other user in a private chat that a screenshot of the chat was taken
messages.setTypingSends a current user typing event (see SendMessageAction for all event types) to a conversation partner or group.
messages.setHistoryTTLSet maximum Time-To-Live of all messages in the specified chat
-

Working with drafts

- - - - - - - - - - - - - - - - - - - - - -
NameDescription
messages.clearAllDraftsClear all drafts.
messages.getAllDraftsSave get all message drafts.
messages.saveDraftSave a message draft associated to a chat.
-

Working with emoji keywords

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
messages.getEmojiKeywordsGet localized emoji keywords
messages.getEmojiKeywordsDifferenceGet changed emoji keywords
messages.getEmojiKeywordsLanguagesGet info about an emoji keyword localization
messages.getEmojiURLReturns an HTTP URL which can be used to automatically log in into translation platform and suggest new emoji replacements. The URL will be valid for 30 seconds after generation
-

Working with folders

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
messages.updateDialogFiltersOrderReorder folders
messages.getDialogFiltersGet folders
messages.getSuggestedDialogFiltersGet suggested folders
messages.updateDialogFilterUpdate folder
folders.deleteFolderDelete a peer folder
folders.editPeerFoldersEdit peers in peer folder
-

Working with games

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
messages.getGameHighScoresGet highscores of a game
messages.getInlineGameHighScoresGet highscores of a game sent using an inline bot
messages.setGameScoreUse this method to set the score of the specified user in a game sent as a normal message (bots only).
messages.setInlineGameScoreUse this method to set the score of the specified user in a game sent as an inline message (bots only).
-

Working with group calls & live streaming

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
phone.exportGroupCallInviteGet an invite link for a group call or livestream
phone.getGroupCallJoinAsGet a list of peers that can be used to join a group call, presenting yourself as a specific user/channel.
phone.editGroupCallParticipantEdit information about a given group call participant

Note: flags.N?Bool parameters can have three possible values:

- If the TL flag is not set, the previous value will not be changed.
- If the TL flag is set and contains a boolTrue, the previous value will be overwritten to true.
- If the TL flag is set and contains a boolFalse, the previous value will be overwritten to false.
phone.toggleGroupCallRecordStart or stop recording a group call: the recorded audio and video streams will be automatically sent to Saved messages (the chat with ourselves).
phone.editGroupCallTitleEdit the title of a group call or livestream
phone.getGroupParticipantsGet group call participants
phone.checkGroupCallCheck whether the group call Server Forwarding Unit is currently receiving the streams with the specified WebRTC source IDs
phone.createGroupCallCreate a group call or livestream
phone.toggleGroupCallStartSubscriptionSubscribe or unsubscribe to a scheduled group call
phone.leaveGroupCallLeave a group call
phone.toggleGroupCallSettingsChange group call settings
phone.inviteToGroupCallInvite a set of users to a group call.
phone.getGroupCallGet info about a group call
phone.joinGroupCallJoin a group call
phone.leaveGroupCallPresentationStop screen sharing in a group call
phone.discardGroupCallTerminate a group call
phone.joinGroupCallPresentationStart screen sharing in a call
phone.startScheduledGroupCallStart a scheduled group call.
phone.saveDefaultGroupCallJoinAsSet the default peer that will be used to join a group call in a specific dialog.
-

Working with imported chats

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
messages.uploadImportedMediaUpload a media file associated with an imported chat, click here for more info ».
messages.startHistoryImportComplete the history import process, importing all messages into the chat.
To be called only after initializing the import with messages.initHistoryImport and uploading all files using messages.uploadImportedMedia.
messages.checkHistoryImportPeerCheck whether chat history exported from another chat app can be imported into a specific Telegram chat, click here for more info ».

If the check succeeds, and no RPC errors are returned, a messages.CheckedHistoryImportPeer constructor will be returned, with a confirmation text to be shown to the user, before actually initializing the import.
messages.checkHistoryImportObtains information about a chat export file, generated by a foreign chat app, click here for more info about imported chats ».
messages.initHistoryImportImport chat history from a foreign chat app into a specific Telegram chat, click here for more info about imported chats ».
-

Working with localization packs

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
langpack.getDifferenceGet new strings in languagepack
langpack.getLangPackGet localization pack strings
langpack.getLanguageGet information about a language in a localization pack
langpack.getLanguagesGet information about all languages in a localization pack
langpack.getStringsGet strings from a language pack
-

Working with media autodownload settings

- - - - - - - - - - - - - - - - - -
NameDescription
account.getAutoDownloadSettingsGet media autodownload settings
account.saveAutoDownloadSettingsChange media autodownload settings
-

Working with message threads

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
messages.getRepliesGet messages in a reply thread
contacts.blockFromRepliesStop getting notifications about thread replies of a certain user in @replies
messages.getDiscussionMessageGet discussion message from the associated discussion group of a channel to show it on top of the comment section, without actually joining the group
messages.readDiscussionMark a thread as read
-

Working with message reactions

- - - - - - - - - - - - - - - - - - - - - -
NameDescription
messages.getMessagesReactionsGet message reactions
messages.sendReactionSend reaction to message
messages.getMessageReactionsListGet full message reaction list
-

Working with messages

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
messages.deleteHistoryDeletes communication history.
messages.deleteMessagesDeletes messages by their identifiers.
messages.editMessageEdit message
messages.forwardMessagesForwards messages by their IDs.
messages.getHistoryGets back the conversation history with one interlocutor / within a chat
messages.getMessageEditDataFind out if a media message's caption can be edited
messages.getMessagesReturns the list of messages by their IDs.
messages.getMessagesViewsGet and increase the view counter of a message sent or forwarded from a channel
messages.getRecentLocationsGet live location history of a certain user
messages.getSearchCountersGet the number of results that would be found by a messages.search call with the same parameters
messages.getUnreadMentionsGet unread messages where we were mentioned
messages.readHistoryMarks message history as read.
messages.readMentionsMark mentions as read
messages.readMessageContentsNotifies the sender about the recipient having listened a voice message or watched a video.
messages.receivedMessagesConfirms receipt of messages by a client, cancels PUSH-notification sending.
messages.searchGets back found messages
messages.searchGlobalSearch for messages and peers globally
messages.sendMediaSend a media
messages.sendMessageSends a message to a chat
messages.sendMultiMediaSend an album or grouped media
messages.updatePinnedMessagePin a message
messages.unpinAllMessagesUnpin all pinned messages
-

Working with notification settings

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
account.registerDeviceRegister device to receive PUSH notifications
account.unregisterDeviceDeletes a device by its token, stops sending PUSH-notifications to it.
account.updateDeviceLockedWhen client-side passcode lock feature is enabled, will not show message texts in incoming PUSH notifications.
account.getNotifyExceptionsReturns list of chats with non-default notification settings
account.getNotifySettingsGets current notification settings for a given user/group, from all users/all groups.
account.updateNotifySettingsEdits notification settings from a given user/group, from all users/all groups.
account.resetNotifySettingsResets all notification settings from users and groups.
-

Working with other users

- - - - - - - - - - - - - - - - - -
NameDescription
users.getFullUserReturns extended user info by ID.
users.getUsersReturns basic user info according to their identifiers.
-

Working with payments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
payments.getSavedInfoGet saved payment information
payments.clearSavedInfoClear saved payment information
payments.getPaymentFormGet a payment form
payments.validateRequestedInfoSubmit requested order information for validation
messages.setBotShippingResultsIf you sent an invoice requesting a shipping address and the parameter is_flexible was specified, the bot will receive an updateBotShippingQuery update. Use this method to reply to shipping queries.
account.getTmpPasswordGet temporary payment password
payments.sendPaymentFormSend compiled payment form
messages.setBotPrecheckoutResultsOnce the user has confirmed their payment and shipping details, the bot receives an updateBotPrecheckoutQuery update.
Use this method to respond to such pre-checkout queries.
Note: Telegram must receive an answer within 10 seconds after the pre-checkout query was sent.
payments.getPaymentReceiptGet payment receipt
-

Working with polls

- - - - - - - - - - - - - - - - - - - - - -
NameDescription
messages.getPollResultsGet poll results
messages.getPollVotesGet poll results for non-anonymous polls
messages.sendVoteVote in a poll
-

Working with scheduled messages

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
messages.sendScheduledMessagesSend scheduled messages right away
messages.getScheduledHistoryGet scheduled messages
messages.deleteScheduledMessagesDelete scheduled messages
messages.getScheduledMessagesGet scheduled messages
-

Working with sensitive content (NSFW)

- - - - - - - - - - - - - - - - - -
NameDescription
account.getContentSettingsGet sensitive content settings
account.setContentSettingsSet sensitive content settings (for viewing or hiding NSFW content)
-

Working with sponsored messages

- - - - - - - - - - - - - - - - - -
NameDescription
channels.getSponsoredMessagesGet a list of sponsored messages
channels.viewSponsoredMessageMark a specific sponsored message as read
-

Working with sponsored proxies

- - - - - - - - - - - - - -
NameDescription
help.getProxyDataGet promotion info of the currently-used MTProxy
-

Working with statistics

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
stats.loadAsyncGraphLoad channel statistics graph asynchronously
stats.getBroadcastStatsGet channel statistics
stats.getMessagePublicForwardsObtains a list of messages, indicating to which other public channels was a channel message forwarded.
Will return a list of messages with peer_id equal to the public channel to which this message was forwarded.
stats.getMegagroupStatsGet supergroup statistics
stats.getMessageStatsGet message statistics
-

Working with stickers

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
messages.getOldFeaturedStickersMethod for fetching previously featured stickers
messages.toggleStickerSetsApply changes to multiple stickersets
stickers.suggestShortNameSuggests a short name for a given stickerpack name
stickers.checkShortNameCheck whether the given short name is available
stickers.setStickerSetThumbSet stickerset thumbnail
stickers.addStickerToSetAdd a sticker to a stickerset, bots only. The sticker set must have been created by the bot.
stickers.changeStickerPositionChanges the absolute position of a sticker in the set to which it belongs; for bots only. The sticker set must have been created by the bot
stickers.createStickerSetCreate a stickerset, bots only.
stickers.removeStickerFromSetRemove a sticker from the set where it belongs, bots only. The sticker set must have been created by the bot.
messages.clearRecentStickersClear recent stickers
messages.faveStickerMark a sticker as favorite
messages.getAllStickersGet all installed stickers
messages.getArchivedStickersGet all archived stickers
messages.getAttachedStickersGet stickers attached to a photo or video
messages.getFavedStickersGet faved stickers
messages.getFeaturedStickersGet featured stickers
messages.getMaskStickersGet installed mask stickers
messages.getRecentStickersGet recent stickers
messages.getStickerSetGet info about a stickerset
messages.getStickersGet stickers by emoji
messages.saveRecentStickerAdd/remove sticker from recent stickers list
messages.installStickerSetInstall a stickerset
messages.readFeaturedStickersMark new featured stickers as read
messages.reorderStickerSetsReorder installed stickersets
messages.searchStickerSetsSearch for stickersets
messages.uninstallStickerSetUninstall a stickerset
-

Working with the user's account

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
account.changePhoneChange the phone number of the current account
account.confirmPhoneConfirm a phone number to cancel account deletion, for more info click here »
account.deleteAccountDelete the user's account from the telegram servers. Can be used, for example, to delete the account of a user that provided the login code, but forgot the 2FA password and no recovery method is configured.
account.getAccountTTLGet days to live of account
account.getPrivacyGet privacy settings of current account
account.resetAuthorizationLog out an active authorized session by its hash
account.sendChangePhoneCodeVerify a new phone number to associate to the current account
account.sendConfirmPhoneCodeSend confirmation code to cancel account deletion, for more info click here »
account.setAccountTTLSet account self-destruction period
account.setPrivacyChange privacy settings of current account
account.setGlobalPrivacySettingsSet global privacy settings
account.getGlobalPrivacySettingsGet global privacy settings
account.updateProfileUpdates user profile.
account.updateStatusUpdates online user status.
-

Working with user profile pictures

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
photos.deletePhotosDeletes profile photos.
photos.getUserPhotosReturns the list of user photos.
photos.updateProfilePhotoInstalls a previously uploaded photo as a profile photo.
photos.uploadProfilePhotoUpdates current user profile photo.
-

Working with usernames

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
channels.checkUsernameCheck if a username is free and can be assigned to a channel/supergroup
channels.updateUsernameChange the username of a supergroup/channel
account.updateUsernameChanges username for the current user.
account.checkUsernameValidates a username and checks availability.
contacts.resolveUsernameResolve a @username to get peer info
-

Working with wallpapers

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescription
account.getMultiWallPapersGet info about multiple wallpapers
account.getWallPaperGet info about a certain wallpaper
account.getWallPapersReturns a list of available wallpapers.
account.installWallPaperInstall wallpaper
account.resetWallPapersDelete installed wallpapers
account.saveWallPaperInstall/uninstall wallpaper
account.uploadWallPaperCreate and upload a new wallpaper
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/mtproto/TL-tl.html b/data/core.telegram.org/mtproto/TL-tl.html deleted file mode 100644 index 1ba2046471..0000000000 --- a/data/core.telegram.org/mtproto/TL-tl.html +++ /dev/null @@ -1,308 +0,0 @@ - - - - - TL schema for serialization of TL schemas - - - - - - - - - - - - - -
- -
-
-
- -

TL schema for serialization of TL schemas

- -

If necessary, a TL schema can be serialized in binary form. Here, this serialization format is defined by a TL schema (usually stored in the file tl.tl). This can be useful, for example, to make it possible to write a parser one time for converting a TL schema from text form (stored in the file something.tl) to binary form (stored in the file something.tlo). All other programs (for example, auto-generators of TL-(de)serializers for various programming languages) only need to know how to read .tlo files, which only requires generating an automatic deserializer according to the schema presented below.

-

First, a fragment of the file common.tl with certain required built-in types:

-
/////
-//
-// Common Types (source file common.tl, only necessary definitions included)
-//
-/////
-
-// Built-in types
-int ? = Int;
-long ? = Long;
-double ? = Double;
-string ? = String;
-
-// Boolean emulation
-boolFalse = Bool;
-boolTrue = Bool;
-
-// Vector
-vector {t:Type} # [t] = Vector t;
-tuple {t:Type} {n:#} [t] = Tuple t n;
-vectorTotal {t:Type} total_count:int vector:%(Vector t) = VectorTotal t;
-
-Empty False;
-true = True;
-

Next, properly, comes tl.tl itself. Note that the declaration for a fairly complex data type required only twenty lines in TL. This demonstrates the expressiveness and compactness of the TL language.

-
/////
-//
-// Serialized binary TL-schema in TL format, source file tl.tl
-//
-/////
-tls.schema_v2 version:int date:int types_num:# types:types_num*[tls.Type] 
-
-    constructor_num:# constructors:constructor_num*[tls.Combinator] 
-    functions_num:# functions:functions_num*[tls.Combinator] = tls.Schema;
-tls.type name:int id:string constructors_num:int flags:int arity:int params_type:long = tls.Type;
-
-tls.combinator name:int id:string type_name:int left:tls.CombinatorLeft right:tls.CombinatorRight = tls.Combinator;
-tls.combinatorLeftBuiltin = tls.CombinatorLeft;
-tls.combinatorLeft args_num:# args:args_num*[tls.Arg] = tls.CombinatorLeft;
-tls.combinatorRight value:tls.TypeExpr = tls.CombinatorRight;
-
-tls.arg id:string flags:# var_num:flags.1?int exist_var_num:flags.2?int exist_var_bit:flags.2?int type:tls.TypeExpr = tls.Arg;
-
-tls.exprType _:tls.TypeExpr = tls.Expr;
-
-tls.exprNat _:tls.NatExpr = tls.Expr;
-tls.natConst value:int = tls.NatExpr;
-
-tls.natVar dif:int var_num:int = tls.NatExpr;
-tls.typeVar var_num:int flags:int = tls.TypeExpr;
-
-tls.array multiplicity:tls.NatExpr args_num:# args:args_num*[tls.Arg] = tls.TypeExpr;
-tls.typeExpr name:int flags:int children_num:# children:children_num*[tls.Expr] = tls.TypeExpr;
-

Remarks

-

Schema serialization (version 2) always begins with the index number of the tls.schema_v2 constructor for tls.Schema. -Because the CRC32 of the string

-
tls.schema_v2 version:int date:int types_num:# types:types_num*[ tls.Type ] constructor_num:# constructors:constructor_num*[ tls.Combinator ] functions_num:# functions:functions_num*[ tls.Combinator ] = tls.Schema
-

is 0x3a2f9be2, this constant is in fact the magic number for tlo files in the current version’s format. -If the format is extended in the future (for example, if TL’s additional features are supported), then a tls.schema_v3 constructor with a different number will appear.

-

Example

-

If one adds declarations for the used built-in types (like int ? = Int;) from the file common.tl before tl.tl and serialize the resulting schema, the following binary data is obtained (tl.tlo):

-
-

0000: 3a2f9be2 00000000 51fec698 00000015 12eb4386 70659eff 00002301 00000000
-0020: 00000000 00000000 00000000 00000000 12eb4386 250be282 6f6f4204 0000006c
-0040: 00000002 02000010 00000000 00000000 00000000 12eb4386 2210c154 756f4406
-0060: 00656c62 00000001 02000000 00000000 00000000 00000000 12eb4386 00000000
-0080: 6c614605 00006573 00000000 00000401 00000000 00000000 00000000 12eb4386
-00a0: a8509bda 746e4903 00000001 02000001 00000000 00000000 00000000 12eb4386
-00c0: 22076cba 6e6f4c04 00000067 00000001 02000001 00000000 00000000 00000000
-00e0: 12eb4386 b5286e24 72745306 00676e69 00000001 02000001 00000000 00000000
-0100: 00000000 12eb4386 3fedd339 75725404 00000065 00000001 02000000 00000000
-0120: 00000000 00000000 12eb4386 9770768a 70755405 0000656c 00000001 02000000
-0140: 00000002 00000002 00000000 12eb4386 2cecf817 70795404 00000065 00000000
-0160: 00000000 00000000 00000000 00000000 12eb4386 1cb5c415 63655606 00726f74
-0180: 00000001 02000008 00000001 00000000 00000000 12eb4386 10133f47 6365560b
-01a0: 54726f74 6c61746f 00000001 02000000 00000001 00000000 00000000 12eb4386
-01c0: 29dfe61b 736c7407 6772412e 00000001 02000000 00000000 00000000 00000000
-01e0: 12eb4386 5c0a1ed5 736c740e 6d6f432e 616e6962 00726f74 00000001 02000000
-0200: 00000000 00000000 00000000 12eb4386 8133d9ba 736c7412 6d6f432e 616e6962
-0220: 4c726f74 00746665 00000002 02000010 00000000 00000000 00000000 12eb4386
-0240: 2c064372 736c7413 6d6f432e 616e6962 52726f74 74686769 00000001 02000000
-0260: 00000000 00000000 00000000 12eb4386 307d41a0 736c7408 7078452e 00000072
-0280: 00000002 02000010 00000000 00000000 00000000 12eb4386 c2635441 736c740b
-02a0: 74614e2e 72707845 00000002 02000010 00000000 00000000 00000000 12eb4386
-02c0: 3a2f9be2 736c740a 6863532e 00616d65 00000001 02000000 00000000 00000000
-02e0: 00000000 12eb4386 12eb4386 736c7408 7079542e 00000065 00000001 02000000
-0300: 00000000 00000000 00000000 12eb4386 193fd378 736c740c 7079542e 70784565
-0320: 00000072 00000003 02000010 00000000 00000000 00000000 00000018 5c0a1ed5
-0340: bc799737 6f6f6209 6c61466c 00006573 250be282 4c12c6d9 00000000 2c064372
-0360: c1863d08 250be282 00000000 00000000 5c0a1ed5 997275b5 6f6f6208 7572546c
-0380: 00000065 250be282 4c12c6d9 00000000 2c064372 c1863d08 250be282 00000000
-03a0: 00000000 5c0a1ed5 2210c154 756f6406 00656c62 2210c154 cd211f63 2c064372
-03c0: c1863d08 2210c154 00000000 00000000 5c0a1ed5 a8509bda 746e6903 a8509bda
-03e0: cd211f63 2c064372 c1863d08 a8509bda 00000000 00000000 5c0a1ed5 22076cba
-0400: 6e6f6c04 00000067 22076cba cd211f63 2c064372 c1863d08 22076cba 00000000
-0420: 00000000 5c0a1ed5 b5286e24 72747306 00676e69 b5286e24 cd211f63 2c064372
-0440: c1863d08 b5286e24 00000000 00000000 5c0a1ed5 3fedd339 75727404 00000065
-0460: 3fedd339 4c12c6d9 00000000 2c064372 c1863d08 3fedd339 00000000 00000000
-0480: 5c0a1ed5 9770768a 70757405 0000656c 9770768a 4c12c6d9 00000003 29dfe61b
-04a0: 00007401 00020005 00000000 c1863d08 2cecf817 00000000 00000000 29dfe61b
-04c0: 00006e01 00020005 00000001 c1863d08 70659eff 00000000 00000000 29dfe61b
-04e0: 00000000 00000000 d9fb20de 4e8a14f0 00000000 00000001 00000001 29dfe61b
-0500: 00000000 00000000 0142ceae 00000000 00000000 2c064372 c1863d08 9770768a
-0520: 00000000 00000002 ecc9da78 0142ceae 00000000 00000000 dcb49bd8 4e8a14f0
-0540: 00000000 00000001 5c0a1ed5 1cb5c415 63657606 00726f74 1cb5c415 4c12c6d9
-0560: 00000003 29dfe61b 00007401 00020005 00000000 c1863d08 2cecf817 00000000
-0580: 00000000 29dfe61b 00000000 00000004 00000001 c1863d08 70659eff 00000000
-05a0: 00000000 29dfe61b 00000000 00000000 d9fb20de 4e8a14f0 00000000 00000001
-05c0: 00000001 29dfe61b 00000000 00000000 0142ceae 00000000 00000000 2c064372
-05e0: c1863d08 1cb5c415 00000000 00000001 ecc9da78 0142ceae 00000000 00000000
-0600: 5c0a1ed5 10133f47 6365760b 54726f74 6c61746f 10133f47 4c12c6d9 00000003
-0620: 29dfe61b 00007401 00020005 00000000 c1863d08 2cecf817 00000000 00000000
-0640: 29dfe61b 746f740b 635f6c61 746e756f 00000000 c1863d08 a8509bda 00000001
-0660: 00000000 29dfe61b 63657606 00726f74 00000000 c1863d08 1cb5c415 00000001
-0680: 00000001 ecc9da78 0142ceae 00000000 00000000 2c064372 c1863d08 10133f47
-06a0: 00000000 00000001 ecc9da78 0142ceae 00000000 00000000 5c0a1ed5 29dfe61b
-06c0: 736c7407 6772612e 29dfe61b 4c12c6d9 00000006 29dfe61b 00646902 00000000
-06e0: c1863d08 b5286e24 00000001 00000000 29dfe61b 616c6605 00007367 00000004
-0700: 00000000 c1863d08 70659eff 00000000 00000000 29dfe61b 72617607 6d756e5f
-0720: 00000002 00000000 00000001 c1863d08 a8509bda 00000001 00000000 29dfe61b
-0740: 6978650d 765f7473 6e5f7261 00006d75 00000002 00000000 00000002 c1863d08
-0760: a8509bda 00000001 00000000 29dfe61b 6978650d 765f7473 625f7261 00007469
-0780: 00000002 00000000 00000002 c1863d08 a8509bda 00000001 00000000 29dfe61b
-07a0: 70797404 00000065 00000000 c1863d08 193fd378 00000000 00000000 2c064372
-07c0: c1863d08 29dfe61b 00000000 00000000 5c0a1ed5 5c0a1ed5 736c740e 6d6f632e
-07e0: 616e6962 00726f74 5c0a1ed5 4c12c6d9 00000005 29dfe61b 6d616e04 00000065
-0800: 00000000 c1863d08 a8509bda 00000001 00000000 29dfe61b 00646902 00000000
-0820: c1863d08 b5286e24 00000001 00000000 29dfe61b 70797409 616e5f65 0000656d
-0840: 00000000 c1863d08 a8509bda 00000001 00000000 29dfe61b 66656c04 00000074
-0860: 00000000 c1863d08 8133d9ba 00000000 00000000 29dfe61b 67697205 00007468
-0880: 00000000 c1863d08 2c064372 00000000 00000000 2c064372 c1863d08 5c0a1ed5
-08a0: 00000000 00000000 5c0a1ed5 cd211f63 736c7419 6d6f632e 616e6962 4c726f74
-08c0: 42746665 746c6975 00006e69 8133d9ba 4c12c6d9 00000000 2c064372 c1863d08
-08e0: 8133d9ba 00000000 00000000 5c0a1ed5 4c12c6d9 736c7412 6d6f632e 616e6962
-0900: 4c726f74 00746665 8133d9ba 4c12c6d9 00000002 29dfe61b 67726108 756e5f73
-0920: 0000006d 00000004 00000000 c1863d08 70659eff 00000000 00000000 29dfe61b
-0940: 67726104 00000073 00000000 d9fb20de 4e8a14f0 00000000 00000000 00000001
-0960: 29dfe61b 00000000 00000000 c1863d08 29dfe61b 00000000 00000000 2c064372
-0980: c1863d08 8133d9ba 00000000 00000000 5c0a1ed5 2c064372 736c7413 6d6f632e
-09a0: 616e6962 52726f74 74686769 2c064372 4c12c6d9 00000001 29dfe61b 6c617605
-09c0: 00006575 00000000 c1863d08 193fd378 00000000 00000000 2c064372 c1863d08
-09e0: 2c064372 00000000 00000000 5c0a1ed5 ecc9da78 736c740c 7078652e 70795472
-0a00: 00000065 307d41a0 4c12c6d9 00000001 29dfe61b 00000000 00000000 c1863d08
-0a20: 193fd378 00000000 00000000 2c064372 c1863d08 307d41a0 00000000 00000000
-0a40: 5c0a1ed5 dcb49bd8 736c740b 7078652e 74614e72 307d41a0 4c12c6d9 00000001
-0a60: 29dfe61b 00000000 00000000 c1863d08 c2635441 00000000 00000000 2c064372
-0a80: c1863d08 307d41a0 00000000 00000000 5c0a1ed5 8ce940b1 736c740c 74616e2e
-0aa0: 736e6f43 00000074 c2635441 4c12c6d9 00000001 29dfe61b 6c617605 00006575
-0ac0: 00000000 c1863d08 a8509bda 00000001 00000000 2c064372 c1863d08 c2635441
-0ae0: 00000000 00000000 5c0a1ed5 4e8a14f0 736c740a 74616e2e 00726156 c2635441
-0b00: 4c12c6d9 00000002 29dfe61b 66696403 00000000 c1863d08 a8509bda 00000001
-0b20: 00000000 29dfe61b 72617607 6d756e5f 00000000 c1863d08 a8509bda 00000001
-0b40: 00000000 2c064372 c1863d08 c2635441 00000000 00000000 5c0a1ed5 3a2f9be2
-0b60: 736c740d 6863732e 5f616d65 00003276 3a2f9be2 4c12c6d9 00000008 29dfe61b
-0b80: 72657607 6e6f6973 00000000 c1863d08 a8509bda 00000001 00000000 29dfe61b
-0ba0: 74616404 00000065 00000000 c1863d08 a8509bda 00000001 00000000 29dfe61b
-0bc0: 70797409 6e5f7365 00006d75 00000004 00000000 c1863d08 70659eff 00000000
-0be0: 00000000 29dfe61b 70797405 00007365 00000000 d9fb20de 4e8a14f0 00000000
-0c00: 00000000 00000001 29dfe61b 00000000 00000000 c1863d08 12eb4386 00000000
-0c20: 00000000 29dfe61b 6e6f630f 75727473 726f7463 6d756e5f 00000004 00000001
-0c40: c1863d08 70659eff 00000000 00000000 29dfe61b 6e6f630c 75727473 726f7463
-0c60: 00000073 00000000 d9fb20de 4e8a14f0 00000000 00000001 00000001 29dfe61b
-0c80: 00000000 00000000 c1863d08 5c0a1ed5 00000000 00000000 29dfe61b 6e75660d
-0ca0: 6f697463 6e5f736e 00006d75 00000004 00000002 c1863d08 70659eff 00000000
-0cc0: 00000000 29dfe61b 6e756609 6f697463 0000736e 00000000 d9fb20de 4e8a14f0
-0ce0: 00000000 00000002 00000001 29dfe61b 00000000 00000000 c1863d08 5c0a1ed5
-0d00: 00000000 00000000 2c064372 c1863d08 3a2f9be2 00000000 00000000 5c0a1ed5
-0d20: 12eb4386 736c7408 7079742e 00000065 12eb4386 4c12c6d9 00000006 29dfe61b
-0d40: 6d616e04 00000065 00000000 c1863d08 a8509bda 00000001 00000000 29dfe61b
-0d60: 00646902 00000000 c1863d08 b5286e24 00000001 00000000 29dfe61b 6e6f6310
-0d80: 75727473 726f7463 756e5f73 0000006d 00000000 c1863d08 a8509bda 00000001
-0da0: 00000000 29dfe61b 616c6605 00007367 00000000 c1863d08 a8509bda 00000001
-0dc0: 00000000 29dfe61b 69726105 00007974 00000000 c1863d08 a8509bda 00000001
-0de0: 00000000 29dfe61b 7261700b 5f736d61 65707974 00000000 c1863d08 22076cba
-0e00: 00000001 00000000 2c064372 c1863d08 12eb4386 00000000 00000000 5c0a1ed5
-0e20: 0142ceae 736c740b 7079742e 72615665 193fd378 4c12c6d9 00000002 29dfe61b
-0e40: 72617607 6d756e5f 00000000 c1863d08 a8509bda 00000001 00000000 29dfe61b
-0e60: 616c6605 00007367 00000000 c1863d08 a8509bda 00000001 00000000 2c064372
-0e80: c1863d08 193fd378 00000000 00000000 5c0a1ed5 d9fb20de 736c7409 7272612e
-0ea0: 00007961 193fd378 4c12c6d9 00000003 29dfe61b 6c756d0c 6c706974 74696369
-0ec0: 00000079 00000000 c1863d08 c2635441 00000000 00000000 29dfe61b 67726108
-0ee0: 756e5f73 0000006d 00000004 00000000 c1863d08 70659eff 00000000 00000000
-0f00: 29dfe61b 67726104 00000073 00000000 d9fb20de 4e8a14f0 00000000 00000000
-0f20: 00000001 29dfe61b 00000000 00000000 c1863d08 29dfe61b 00000000 00000000
-0f40: 2c064372 c1863d08 193fd378 00000000 00000000 5c0a1ed5 c1863d08 736c740c
-0f60: 7079742e 70784565 00000072 193fd378 4c12c6d9 00000004 29dfe61b 6d616e04
-0f80: 00000065 00000000 c1863d08 a8509bda 00000001 00000000 29dfe61b 616c6605
-0fa0: 00007367 00000000 c1863d08 a8509bda 00000001 00000000 29dfe61b 6968630c
-0fc0: 6572646c 756e5f6e 0000006d 00000004 00000000 c1863d08 70659eff 00000000
-0fe0: 00000000 29dfe61b 69686308 6572646c 0000006e 00000000 d9fb20de 4e8a14f0
-1000: 00000000 00000000 00000001 29dfe61b 00000000 00000000 c1863d08 307d41a0
-1020: 00000000 00000000 2c064372 c1863d08 193fd378 00000000 00000000 00000000

-
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/mtproto/TL-types.html b/data/core.telegram.org/mtproto/TL-types.html deleted file mode 100644 index dd7893bde8..0000000000 --- a/data/core.telegram.org/mtproto/TL-types.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - Type serialization - - - - - - - - - - - - - -
- -
-
-
- -

Type serialization

- -

See Polymorphism in TL and TL Language.

-

It remains to describe how types, e.g. values of type Type, are transmitted (serialized). In general, there is nothing unexpected going on here: we have type constructors of various arities (for example, List is an arity-1 constructor, but IntList is a 0-arity constructor); and if we know that a 32-bit “name” is assigned to each type constructor, there are no further questions -- values of type Type are serialized exactly like values of any other recursive type with a defined set of constructors of differing arity.

-

How can a 32-bit “name” be assigned to a type (a type constructor, to be more exact) such as List or IntList? -It is proposed to use the sum of the names of all of its constructors, plus the CRC32 of the string with the designation of the type's name and all of its parameters such as “IntList = Type” or “List X:Type = Type”. This way, the List constructor’s “name” is the sum of the CRC32s of the three strings "List X:Type = Type", "cons X:Type hd:X tl:List X = List X", and "nil X:Type = List X". -For “bare” types (which, formally speaking, are subtypes of the corresponding “boxed” type), the situation is somewhat more complicated; the logical negation of the corresponding constructor’s name is used. For built-in bareand boxed types (for example, int and Int), a pseudo-declaration is used (for example, int ? = Int").

-
    -
  • This description is somewhat outdated and may be updated in the future. Specifically, how to treat the ! modifier has not been explained.*
  • -
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/mtproto/service_messages_about_messages.html b/data/core.telegram.org/mtproto/service_messages_about_messages.html deleted file mode 100644 index 7c3881bc6e..0000000000 --- a/data/core.telegram.org/mtproto/service_messages_about_messages.html +++ /dev/null @@ -1,185 +0,0 @@ - - - - - Service Messages about Messages - - - - - - - - - - - - - -
- -
-
-
- -

Service Messages about Messages

- -

Acknowledgment of Receipt

-

Receipt of virtually all messages (with the exception of some purely service ones as well as the plain-text messages used in the protocol for creating an authorization key) must be acknowledged. -This requires the use of the following service message (not requiring an acknowledgment):

-
msgs_ack#62d6b459 msg_ids:Vector<long> = MsgsAck;
-

A server usually acknowledges the receipt of a message from a client (normally, an RPC query) using an RPC response. If a response is a long time coming, a server may first send a receipt acknowledgment, and somewhat later, the RPC response itself.

-

A client normally acknowledges the receipt of a message from a server (usually, an RPC response) by adding an acknowledgment to the next RPC query if it is not transmitted too late (if it is generated, say, 60-120 seconds following the receipt of a message from the server). However, if for a long period of time there is no reason to send messages to the server or if there is a large number of unacknowledged messages from the server (say, over 16), the client transmits a stand-alone acknowledgment.

-

Max 8192 IDs are allowed per constructor.

-

Notice of Ignored Error Message

-

In certain cases, a server may notify a client that its incoming message was ignored for whatever reason. Note that such a notification cannot be generated unless a message is correctly decoded by the server.

-
bad_msg_notification#a7eff811 bad_msg_id:long bad_msg_seqno:int error_code:int = BadMsgNotification;
-bad_server_salt#edab447b bad_msg_id:long bad_msg_seqno:int error_code:int new_server_salt:long = BadMsgNotification;
-

Here, error_code can also take on the following values:

-
    -
  • 16: msg_id too low (most likely, client time is wrong; it would be worthwhile to synchronize it using msg_id notifications and re-send the original message with the “correct” msg_id or wrap it in a container with a new msg_id if the original message had waited too long on the client to be transmitted)
  • -
  • 17: msg_id too high (similar to the previous case, the client time has to be synchronized, and the message re-sent with the correct msg_id)
  • -
  • 18: incorrect two lower order msg_id bits (the server expects client message msg_id to be divisible by 4)
  • -
  • 19: container msg_id is the same as msg_id of a previously received message (this must never happen)
  • -
  • 20: message too old, and it cannot be verified whether the server has received a message with this msg_id or not
  • -
  • 32: msg_seqno too low (the server has already received a message with a lower msg_id but with either a higher or an equal and odd seqno)
  • -
  • 33: msg_seqno too high (similarly, there is a message with a higher msg_id but with either a lower or an equal and odd seqno)
  • -
  • 34: an even msg_seqno expected (irrelevant message), but odd received
  • -
  • 35: odd msg_seqno expected (relevant message), but even received
  • -
  • 48: incorrect server salt (in this case, the bad_server_salt response is received with the correct salt, and the message is to be re-sent with it)
  • -
  • 64: invalid container.
  • -
-

The intention is that error_code values are grouped (error_code >> 4): for example, the codes 0x40 - 0x4f correspond to errors in container decomposition.

-

Notifications of an ignored message do not require acknowledgment (i.e., are irrelevant).

-

Important: if server_salt has changed on the server or if client time is incorrect, any query will result in a notification in the above format. The client must check that it has, in fact, recently sent a message with the specified msg_id, and if that is the case, update its time correction value (the difference between the client’s and the server’s clocks) and the server salt based on msg_id and the server_salt notification, so as to use these to (re)send future messages. In the meantime, the original message (the one that caused the error message to be returned) must also be re-sent with a better msg_id and/or server_salt.

-

In addition, the client can update the server_salt value used to send messages to the server, based on the values of RPC responses or containers carrying an RPC response, provided that this RPC response is actually a match for the query sent recently. (If there is doubt, it is best not to update since there is risk of a replay attack).

-

Request for Message Status Information

-

If either party has not received information on the status of its outgoing messages for a while, it may explicitly request it from the other party:

-
msgs_state_req#da69fb52 msg_ids:Vector long = MsgsStateReq;
-

Max 8192 IDs are allowed per constructor.

-

The response to the query contains the following information:

-

Informational Message regarding Status of Messages

-
msgs_state_info#04deb57d req_msg_id:long info:string = MsgsStateInfo;
-

Here, info is a string that contains exactly one byte of message status for each message from the incoming msg_ids list:

-
    -
  • 1 = nothing is known about the message (msg_id too low, the other party may have forgotten it)
  • -
  • 2 = message not received (msg_id falls within the range of stored identifiers; however, the other party has certainly not received a message like that)
  • -
  • 3 = message not received (msg_id too high; however, the other party has certainly not received it yet)
  • -
  • 4 = message received (note that this response is also at the same time a receipt acknowledgment)
  • -
  • +8 = message already acknowledged
  • -
  • +16 = message not requiring acknowledgment
  • -
  • +32 = RPC query contained in message being processed or processing already complete
  • -
  • +64 = content-related response to message already generated
  • -
  • +128 = other party knows for a fact that message is already received
  • -
-

This response does not require an acknowledgment. It is an acknowledgment of the relevant msgs_state_req, in and of itself.

-

Note that if it turns out suddenly that the other party is missing a message that appears to have been sent to it, the message must not be re-sent on its own with the same msg_id. Instead, it can be either wrapped in a container, or the status of the message can be checked using msgs_state_req and if the message wasn't received, then it must be re-sent with a new msg_id.

-

Voluntary Communication of Status of Messages

-

Either party may voluntarily inform the other party of the status of the messages transmitted by the other party.

-
msgs_all_info#8cc0d131 msg_ids:Vector long info:string = MsgsAllInfo
-

All message codes known to this party are enumerated, with the exception of those for which the +128 and the +16 flags are set. However, if the +32 flag is set but not +64, then the message status will still be communicated.

-

This message does not require an acknowledgment.

-

Extended Voluntary Communication of Status of One Message

-

Normally used by the server to respond to the receipt of a duplicate msg_id, especially if a response to the message has already been generated and the response is large. If the response is small, the server may re-send the answer itself instead. This message can also be used as a notification instead of resending a large message.

-
msg_detailed_info#276d3ec6 msg_id:long answer_msg_id:long bytes:int status:int = MsgDetailedInfo;
-msg_new_detailed_info#809db6df answer_msg_id:long bytes:int status:int = MsgDetailedInfo;
-

The second version is used to notify of messages that were created on the server not in response to an RPC query (such as notifications of new messages) and were transmitted to the client some time ago, but not acknowledged.

-

Currently, status is always zero. This may change in future.

-

This message does not require an acknowledgment.

-

Explicit Request to Re-Send Messages

-
msg_resend_req#7d861a08 msg_ids:Vector long = MsgResendReq;
-

The remote party immediately responds by re-sending the requested messages, normally using the same connection that was used to transmit the query. If at least one message with requested msg_id does not exist or has already been forgotten, or has been sent by the requesting party (known from parity), MsgsStateInfo is returned for all messages requested as if the MsgResendReq query had been a MsgsStateReq query as well.
-Max 8192 IDs are allowed per constructor.

-

Explicit Request to Re-Send Answers

-
msg_resend_ans_req#8610baeb msg_ids:Vector long = MsgResendReq;
-

The remote party immediately responds by re-sending answers to the requested messages, normally using the same connection that was used to transmit the query. MsgsStateInfo is returned for all messages requested as if the MsgResendReq query had been a MsgsStateReq query as well.

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/passport.html b/data/core.telegram.org/passport.html deleted file mode 100644 index 87d5f5a954..0000000000 --- a/data/core.telegram.org/passport.html +++ /dev/null @@ -1,690 +0,0 @@ - - - - - Telegram Passport Manual - - - - - - - - - - - - - -
- -
-
-
-
-

Telegram Passport Manual

- -
- -

Telegram Passport is a unified authorization method for services that require personal identification. Users can upload their documents once, then instantly share their data with services that require real-world ID (finance, ICOs, etc.). Telegram doesn't have access to the users' personal information thanks to end-to-end encryption.

-

Overview

-

From the perspective of a service that requires real-world ID, the process looks like this:

-
    -
  • A user presses "Log in with Telegram" on your website or in your app.
  • -
  • You request the data you need.
  • -
  • The user accepts your privacy policy and agrees to share their data.
  • -
  • The user's Telegram app downloads and decrypts the data you requested from the end-to-end encrypted storage on Telegram.
  • -
  • If some of the data you requested is missing, the user can add it to their Telegram Passport at this point.
  • -
  • The user's app encrypts the data with your public key and sends it to you.
  • -
  • You decrypt the data, check it for errors and re-request any missing or invalid information.
  • -
  • You sign the user up for your service. Tada!
  • -
-

Check out this example to see Telegram Passport in action.

-
-

To learn more about Telegram Passport from the perspective of a user, please see this blog post and the technical MTProto documentation. -See this page if you're interested in encryption algorithms used on Telegram's side.

-
-

Recent changes

-

August 25, 2018

-

Telegram Passport 1.1 (blog post)

-
    -
  • Added support for requesting several documents of one type. See the new objects PassportScope, PassportScopeElement, PassportScopeElementOneOfSeveral and PassportScopeElementOne.
  • -
  • Added support for middle names.
  • -
  • Added support for requesting certified English translations for documents (see Fields; new field translation also added to the SecureValue object). Note: Please only request translations after you have received a valid document that requires one.
  • -
  • Added support for requesting names in the language of the user's country of residence (if other than English). New fields first_name_native, last_name_native and middle_name_native added to the PersonalDetails object.
  • -
  • Replaced the payload parameter with the new parameter nonce, which serves the same function, to make the purpose more obvious (see Request Parameters and the Credentials object).
  • -
  • Updated the example page to support the new functionality.
  • -
-

Setting Up Telegram Passport

-

To integrate Telegram Passport into your login or verification flow, you need a working Telegram bot (see this page for information on how to get one).

-

To request data from Telegram Passport users, your bot will need to generate a pair of encryption keys.

-

Generating a private key

-

First, use a console to generate a private key:

-
openssl genrsa 2048 > private.key
-

WARNING: Keep your private key SECRET!

-

Generating your public key

-

Then use the console to print the corresponding public key:

-
openssl rsa -in private.key -pubout
-

Use the /setpublickey command with @BotFather to connect this public key with your bot.

-

Privacy Policy

-

Add a link to your Privacy Policy by using the /setprivacypolicy command. Users will see this link when offered to authorize you to access their data.

-

Requesting Information

-

SDK

-

To request information stored in a Telegram Passport, use one of these SDKs:

- -

Request Parameters

-

Use the following parameters to request information with the SDK:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParametersTypeRequired
bot_idIntegerYes
scopePassportScopeYes
public_keyStringYes
nonceStringYes
-

PassportScope

-

This object represents the data to be requested.

- - - - - - - - - - - - - - - - - - -
FieldTypeDescription
dataArray of PassportScopeElementList of requested elements, each type may be used only once in the entire array of PassportScopeElement objects
vIntegerScope version, must be 1
-

PassportScopeElement

-

This object represents a requested element, should be one of:

- -

PassportScopeElementOneOfSeveral

-

This object represents several elements one of which must be provided.

- - - - - - - - - - - - - - - - - - - - - - - -
FieldTypeDescription
one_ofArray of PassportScopeElementOneList of elements one of which must be provided; must contain either several of “passport”, “driver_license”, “identity_card”, “internal_passport” or several of “utility_bill”, “bank_statement”, “rental_agreement”, “passport_registration”, “temporary_registration”
selfieBooleanOptional. Use this parameter if you want to request a selfie with the document from this list that the user chooses to upload.
translationBooleanOptional. Use this parameter if you want to request a translation of the document from this list that the user chooses to upload. Note: We suggest to only request translations after you have received a valid document that requires one.
-

PassportScopeElementOne

-

This object represents one particular element that must be provided. If no options are needed, String can be used instead of this object to specify the type of the element.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FieldTypeDescription
typeStringElement type. One of "personal_details", "passport", "driver_license", "identity_card", "internal_passport", "address", "utility_bill", "bank_statement", "rental_agreement", "passport_registration", "temporary_registration", "phone_number", "email"
selfieBooleanOptional. Use this parameter if you want to request a selfie with the document as well. Available for "passport", "driver_license", "identity_card" and "internal_passport"
translationBooleanOptional. Use this parameter if you want to request a translation of the document as well. Available for "passport", "driver_license", "identity_card", "internal_passport", "utility_bill", "bank_statement", "rental_agreement", "passport_registration" and "temporary_registration". Note: We suggest to only request translations after you have received a valid document that requires one.
native_namesBooleanOptional. Use this parameter to request the first, last and middle name of the user in the language of the user's country of residence. Available for "personal_details"
-

You can also use the special type "id_document" as an alias for one of "passport", "driver_license", "identity_card" and the special type "address_document" as an alias for one of "utility_bill", "bank_statement", "rental_agreement". -So {"type":"id_document",selfie:true} is equal to {"one_of":["passport","driver_license","identity_card"],selfie:true}.

-

Fields

-

Your bot can request personal details, one or several types of identity document, residential address, one or several types of proof of address document, a phone number, or an email address. You can also request optional selfies with the document and certified English translations of the document. -This is just a list of data types that can be requested, and the encrypted objects that will contain such data.

-
-

Note: We suggest to only request English translations after you have received a valid document that requires one.

-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameKeyTypeDescription
personal_detailsdataPersonalDetailsPersonal Details
passportdataIdDocumentDataPassport
front_sidePassportFile
selfieOptional. PassportFile
translationOptional. Array of PassportFile
internal_passportdataIdDocumentDataInternal Passport
front_sidePassportFile
selfieOptional. PassportFile
translationOptional. Array of PassportFile
driver_licensedataIdDocumentDataDriver License
front_sidePassportFile
reverse_sidePassportFile
selfieOptional. PassportFile
translationOptional. Array of PassportFile
identity_carddataIdDocumentDataIdentity Card
front_sidePassportFile
reverse_sidePassportFile
selfieOptional. PassportFile
translationOptional. Array of PassportFile
addressdataResidentialAddressAddress
utility_billfilesArray of PassportFileUtility Bill
translationOptional. Array of PassportFile
bank_statementfilesArray of PassportFileBank Statement
translationOptional. Array of PassportFile
rental_agreementfilesArray of PassportFileRental Agreement
translationOptional. Array of PassportFile
passport_registrationfilesArray of PassportFileRegistration Page in the Internal Passport
translationOptional. Array of PassportFile
temporary_registrationfilesArray of PassportFileTemporary Registration
translationOptional. Array of PassportFile
phone_numberStringPhone number
emailStringEmail
-

PersonalDetails

-

This object represents personal details.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FieldTypeDescription
first_nameStringFirst Name
last_nameStringLast Name
middle_nameStringOptional. Middle Name
birth_dateStringDate of birth in DD.MM.YYYY format
genderStringGender, male or female
country_codeStringCitizenship (ISO 3166-1 alpha-2 country code)
residence_country_codeStringCountry of residence (ISO 3166-1 alpha-2 country code)
first_name_nativeStringFirst Name in the language of the user's country of residence
last_name_nativeStringLast Name in the language of the user's country of residence
middle_name_nativeStringOptional. Middle Name in the language of the user's country of residence
-

ResidentialAddress

-

This object represents a residential address.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FieldTypeDescription
street_line1StringFirst line for the address
street_line2StringOptional. Second line for the address
cityStringCity
stateStringOptional. State
country_codeStringISO 3166-1 alpha-2 country code
post_codeStringAddress post code
-

IdDocumentData

-

This object represents the data of an identity document.

- - - - - - - - - - - - - - - - - - -
FieldTypeDescription
document_noStringDocument number
expiry_dateStringOptional. Date of expiry, in DD.MM.YYYY format
-

PassportFile

-

This object represents a PassportFile related to a document. The file is up to 10MB in size and in the .jpg format.

-

Receiving information

-

When the user confirms your request by pressing the 'Authorize' button, the Bot API sends an Update with the field passport_data to the bot that contains encrypted Telegram Passport data.

-
-

Note that all base64-encoded fields should be decoded before use.

-
-

Decrypting data

-

To decrypt the received data, first, decrypt the credentials contained in EncryptedCredentials.

-
    -
  1. -

    Decrypt the credentials secret ( secret field in EncryptedCredentials) using your private key (set OAEP padding option, e.g. OPENSSL_PKCS1_OAEP_PADDING in PHP)

    -
  2. -
  3. -

    Use this secret and the credentials hash ( hash field in EncryptedCredentials) to calculate credentials_key and credentials_iv as described below:

    -
     credentials_secret_hash = SHA512( credentials_secret + credentials_hash )
    - credentials_key = slice( credentials_secret_hash, 0, 32 )
    - credentials_iv = slice( credentials_secret_hash, 32, 16 )
    -
  4. -
  5. -

    Decrypt the credentials data ( data field in EncryptedCredentials) by AES256-CBC using these credentials_key and credentials_iv. IMPORTANT: At this step, make sure that the credentials hash is equal to SHA256( credentials_data )

    -
  6. -
  7. -

    Credentials data is padded with 32 to 255 random padding bytes to make its length divisible by 16 bytes. The first byte contains the length of this padding (including this byte). Remove the padding to get the data.

    -
  8. -
-
-

Note that all hashes represent as raw binary data, not hexits

-
-

Credentials

-

Credentials is a JSON-serialized object.

- - - - - - - - - - - - - - - - - - -
FieldTypeDescription
secure_dataSecureDataCredentials for encrypted data
nonceStringBot-specified nonce
-

IMPORTANT: Make sure that the nonce is the same as was passed in the request.

-

SecureData

-

This object represents the credentials required to decrypt encrypted data. All fields are optional and depend on fields that were requested.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FieldTypeDescription
personal_detailsSecureValueOptional. Credentials for encrypted personal details
passportSecureValueOptional. Credentials for encrypted passport
internal_passportSecureValueOptional. Credentials for encrypted internal passport
driver_licenseSecureValueOptional. Credentials for encrypted driver license
identity_cardSecureValueOptional. Credentials for encrypted ID card
addressSecureValueOptional. Credentials for encrypted residential address
utility_billSecureValueOptional. Credentials for encrypted utility bill
bank_statementSecureValueOptional. Credentials for encrypted bank statement
rental_agreementSecureValueOptional. Credentials for encrypted rental agreement
passport_registrationSecureValueOptional. Credentials for encrypted registration from internal passport
temporary_registrationSecureValueOptional. Credentials for encrypted temporary registration
-

SecureValue

-

This object represents the credentials required to decrypt encrypted values. All fields are optional and depend on the type of fields that were requested.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FieldTypeDescription
dataDataCredentialsOptional. Credentials for encrypted Telegram Passport data. Available for "personal_details", "passport", "driver_license", "identity_card", "internal_passport" and "address" types.
front_sideFileCredentialsOptional. Credentials for an encrypted document's front side. Available for "passport", "driver_license", "identity_card" and "internal_passport".
reverse_sideFileCredentialsOptional. Credentials for an encrypted document's reverse side. Available for "driver_license" and "identity_card".
selfieFileCredentialsOptional. Credentials for an encrypted selfie of the user with a document. Available for "passport", "driver_license", "identity_card" and "internal_passport".
translationArray of FileCredentialsOptional. Credentials for an encrypted translation of the document. Available for "passport", "driver_license", "identity_card", "internal_passport", "utility_bill", "bank_statement", "rental_agreement", "passport_registration" and "temporary_registration".
filesArray of FileCredentialsOptional. Credentials for encrypted files. Available for "utility_bill", "bank_statement", "rental_agreement", "passport_registration" and "temporary_registration" types.
-

DataCredentials

-

These credentials can be used to decrypt encrypted data from the data field in EncryptedPassportElement.

- - - - - - - - - - - - - - - - - - -
FieldTypeDescription
data_hashStringChecksum of encrypted data
secretStringSecret of encrypted data
-
    -
  1. -

    To decrypt data, use the corresponding secret and data_hash from DataCredentials as described below:

    -
     data_secret_hash = SHA512( data_secret + data_hash )
    - data_key = slice( data_secret_hash, 0, 32 )
    - data_iv = slice( data_secret_hash, 32, 16 )
    -
  2. -
  3. -

    Use AES256-CBC with this data_key and data_iv to decrypt the data (the data field in EncryptedPassportElement). IMPORTANT: At this step, make sure that data_hash from the credentials is equal to SHA256( data ).

    -
  4. -
  5. -

    The data is padded with 32 to 255 random padding bytes to make its length divisible by 16 bytes. The first byte contains the length of the padding (including this byte). Remove padding to get the data.

    -
  6. -
  7. -

    The data is a JSON-serialized object of one of the following types: PersonalDetails, IdDocumentData, ResidentialAddress, depending on type.

    -
  8. -
-

FileCredentials

-

These credentials can be used to decrypt encrypted files from the front_side, reverse_side, selfie, files and translation fields in EncryptedPassportElement.

- - - - - - - - - - - - - - - - - - -
FieldTypeDescription
file_hashStringChecksum of encrypted file
secretStringSecret of encrypted file
-
    -
  1. -

    To decrypt the file, use the corresponding secret and file_hash from FileCredentials as described below:

    -
     file_secret_hash = SHA512( file_secret + file_hash )
    - file_key = slice( file_secret_hash, 0, 32 )
    - file_iv = slice( file_secret_hash, 32, 16 )
    -
  2. -
  3. -

    Download the encrypted file using the getFile method.

    -
  4. -
  5. -

    Use AES256-CBC with this file_key and file_iv to decrypt the content of the file. IMPORTANT: At this step, make sure that file_hash from the credentials is equal to SHA256( file_content ).

    -
  6. -
  7. -

    The content of the file is padded with 32 to 255 random padding bytes to make its length divisible by 16 bytes. The first byte contains the length of the padding (including that byte). Remove padding to get the file content.

    -
  8. -
-

Fixing errors

-

If the data you received contains errors, the bot can use the setPassportDataErrors method to inform the user and request information again. The user will not be able to resend the data, until all errors are fixed.

- -
- -
-
- -
- - - - - - - - diff --git a/data/core.telegram.org/passport/sdk-android.html b/data/core.telegram.org/passport/sdk-android.html deleted file mode 100644 index db4b7d1ebd..0000000000 --- a/data/core.telegram.org/passport/sdk-android.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - Android SDK - - - - - - - - - - - - - -
- -
-
-
- -

Android SDK

- -
- -

The Android SDK helps you easily integrate Telegram Passport requests into your Android-based apps. Check out our GitHub repository to see samples using this SDK.

-

Installation

-

Installing from Maven

-

Telegram Passport SDK is available from the Maven repository. -Add this line to the dependencies section in your build.gradle:

-
compile 'org.telegram:passport:1.1'
-

and sync your project.

-

Adding as a module

-

Download the library, unzip it and copy the library project to the root of your project directory (the one with settings.gradle and gradle.properties). Then, make the following changes to your Gradle scripts.

-

In settings.gradle, add ':telegrampassport' to includes:

-
include ':app', ':telegrampassport'
-

In the build.gradle file for your app, add this line to the dependencies section:

-
compile ':telegrampassport'
-

and sync your project.

-

Usage

-

Adding the button

-

The SDK provides the "Log in with Telegram" button which we recommend using for a consistent user experience across different apps. You can either add it from your Java code:

-
TelegramLoginButton telegramButton;
-// ...
-telegramButton=new TelegramLoginButton(this);
-// Optionally you can change the roundness of the button corners
-// to better fit your design.
-telegramButton.setCornerRoundness(1f);
-viewGroupOfSomeSort.addView(telegramButton, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
-

Or from XML:

-
 <org.telegram.passport.TelegramLoginButton
-             android:layout_width="wrap_content"
-             android:layout_height="wrap_content"
-             app:cornerRoundness="0.5"/>
-

Requesting authorization

-

The button doesn't do anything by itself; you need to set an OnClickListener on it to start the authorization flow (replace the comments with actual parameters):

-
private static final int TG_PASSPORT_RESULT=352; // this can be any integer less than 0xFFFF
-// ...
-telegramButton.setOnClickListener(new View.OnClickListener(){
-@Override
-public void onClick(View view){
-    TelegramPassport.AuthRequest req=new TelegramPassport.AuthRequest();
-    req.botID=/* your bot ID here */;
-    req.publicKey=/* your bot public key here */;
-    req.nonce=/* a unique nonce to pass to the bot server */;
-    // Request either a passport or an ID card with selfie, a driver license, personal details with
-    // name as it appears in the documents, address with any address document, and a phone number.
-    // You could also pass a raw JSON object here if that's what works better for you
-    // (for example, if you already get it from your server in the correct format).
-    req.scope=new PassportScope(
-        new PassportScopeElementOneOfSeveral(PassportScope.PASSPORT, PassportScope.IDENTITY_CARD).withSelfie(),
-        new PassportScopeElementOne(PassportScope.PERSONAL_DETAILS).withNativeNames(),
-        PassportScope.DRIVER_LICENSE,
-        PassportScope.ADDRESS,
-        PassportScope.ADDRESS_DOCUMENT,
-        PassportScope.PHONE_NUMBER
-    );
-    TelegramPassport.request(MyActivity.this, req, TG_PASSPORT_RESULT);
-}});
-

If you need more control over the process, the TelegramPassport class contains several more methods:

-
    -
  • getAuthIntent(AuthParams) returns an Intent for you to use in startActivityForResult if you need to do that in some special way. Be sure to check that an app is present that can handle this intent before starting it by using PackageManager or intent.resolveActivity.
  • -
  • showAppInstallAlert(Activity) shows an alert that the user needs to install Telegram in order to continue. This is intended to be used together with the previous method for the cases when the app isn't installed.
  • -
-

Handling the result

-

The result is delivered via the onActivityResult method in your activity with the request code you passed to TelegramPassport.request. Currently, the only meaningful parameter is resultCode, which is RESULT_OK if the authorization was successful and RESULT_CANCELED otherwise.

- -
- -
-
- -
- - - - - - - - diff --git a/data/core.telegram.org/passport/sdk-ios-mac.html b/data/core.telegram.org/passport/sdk-ios-mac.html deleted file mode 100644 index 0f86b24d56..0000000000 --- a/data/core.telegram.org/passport/sdk-ios-mac.html +++ /dev/null @@ -1,246 +0,0 @@ - - - - - iOS & macOS SDK - - - - - - - - - - - - - -
- -
-
-
- -

iOS & macOS SDK

- -
- -

TGPassportKit helps you easily integrate Telegram Passport requests into your iOS & macOS apps. Check out our GitHub repository to see samples using this SDK.

-

Installation

-

Installing using Cocoapods

-

To install TGPassportKit via Cocoapods add the following to your Podfile:

-
target 'MyApp' do
-  pod 'TGPassportKit' 
-end
-

then run pod install in your project root directory.

-

Installing using Carthage

-

Add the following line to your Cartfile:

-
github "telegrammessenger/TGPassportKit"
-

then run carthage update, and you will get the latest version of TGPassportKit in your Carthage folder.

-

Project Setup

-

Configure Your Info.plist

-

Configure your Info.plist by right-clicking it in Project Navigator, choosing Open As > Source Code and adding this snippet: -Replace {bot_id} with your value

-
<key>CFBundleURLTypes</key>
-<array>
-  <dict>
-  <key>CFBundleURLSchemes</key>
-  <array>
-    <string>tgbot{bot_id}</string>
-  </array>
-  </dict>
-</array>
-<key>LSApplicationQueriesSchemes</key>
-<array>
-  <string>tg</string>
-</array>
-

Connect AppDelegate methods

-

Add this code to your UIApplicationDelegate implementation

-
#import <TGPassportKit/TGPAppDelegate.h>
-
-- (BOOL)application:(UIApplication *)application
-            openURL:(NSURL *)url
-            options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
-    BOOL handledByPassportKit = [[TGPAppDelegate sharedDelegate] application:application
-                                                                     openURL:url
-                                                                     options:options];
-
-    return YES;
-}
-

If you support iOS 9 and below, also add this method:

-
- (BOOL)application:(UIApplication *)application 
-            openURL:(NSURL *)url 
-  sourceApplication:(nullable NSString *)sourceApplication 
-         annotation:(id)annotation {
-    BOOL handledByPassportKit = [[TGPAppDelegate sharedDelegate] application:application
-                                                                     openURL:url
-                                                           sourceApplication:sourceApplication
-                                                                  annotation:annotation];
-
-    return YES;
-}
-

Usage

-

Add Telegram Passport Button

-

To add the Telegram Passport button, add the following code to your view controller: -Replace {bot_id}, {bot_public_key} and {request_nonce} with your values

-
#import <TGPassportKit/TGPButton.h>
-
-@interface ViewController <TGPButtonDelegate>
-
-@end
-
-@implementation ViewController
-
-- (void)viewDidLoad {
-  [super viewDidLoad];
-
-  TGPButton *button = [[TGPButton alloc] init];
-  button.botConfig = [[TGPBotConfig alloc] initWithBotId:{bot_id} 
-                                               publicKey:@"{bot_public_key}"];
-  button.scope = [[TGPScope alloc] initWithJSONString:@"{\"data\":[\"id_document\",\"address_document\",\"phone_number\"],\"v\":1}"];
-// You can also construct a scope using provided data type classes like this: 
-// button.scope = [[TGPScope alloc] initWithTypes:@[[[TGPPersonalDetails alloc] init], [[TGPIdentityDocument alloc] initWithType:TGPIdentityDocumentTypePassport selfie:true translation:true]]];
-  button.nonce = @"{request_nonce}";
-  button.delegate = self;
-  [self.view addSubview:button];
-}
-
-- (void)passportButton:(TGPButton *)passportButton 
- didCompleteWithResult:(TGPRequestResult)result 
-                 error:(NSError *)error {
-    switch (result) {
-        case TGPRequestResultSucceed:
-            NSLog(@"Succeed");
-            break;
-
-        case TGPRequestResultCancelled:
-            NSLog(@"Cancelled");
-            break;
-
-        default:
-            NSLog(@"Failed");
-            break;
-    }
-}
-
-@end
-

...or Implement Your Own Behavior

-

If you want to design a custom UI and behavior, you can invoke a Passport request like this: -Replace {bot_id}, {bot_public_key} and {request_nonce} with your values

-
#import <TGPassportKit/TGPRequest.h>
-
-- (void)performPassportRequest 
-{
-    TGPBotConfig *botConfig = [[TGPBotConfig alloc] initWithBotId:{bot_id} 
-                                                        publicKey:@"{bot_public_key}"];
-    TGPRequest *request = [[TGPRequest alloc] initWithBotConfig:botConfig];
-    [request performWithScope:[[TGPScope alloc] initWithJSONString:@"{\"data\":[\"id_document\",\"phone_number\"],\"v\":1}"] 
-                      payload:@"{request_nonce}" 
-            completionHandler:^(TGPRequestResult result, NSError * _Nullable error) {
-        switch (result) {
-            case TGPRequestResultSucceed:
-                NSLog(@"Succeed");
-                break;
-
-            case TGPRequestResultCancelled:
-                NSLog(@"Cancelled");
-                break;
-
-            default:
-                NSLog(@"Failed");
-                break;
-        }
-    }];
-}
- -
- -
-
- -
- - - - - - - - diff --git a/data/core.telegram.org/passport/sdk-javascript.html b/data/core.telegram.org/passport/sdk-javascript.html deleted file mode 100644 index 408458fee7..0000000000 --- a/data/core.telegram.org/passport/sdk-javascript.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - Javascript SDK - - - - - - - - - - - - - -
- -
-
-
- -

Javascript SDK

- -
- -

The Javascript SDK helps you easily integrate Telegram Passport requests into your website. Check out our GitHub repository to see samples using this SDK.

-

Installation

-

Download and include the Javascript SDK in the head section of your page:

-
<script src="telegram-passport.js"></script>
-

Usage

-

Simply call Telegram.Passport.createAuthButton to create the default Telegram Passport button:

-
<div id="telegram_passport_auth"></div>
-<script>
-  Telegram.Passport.createAuthButton('telegram_passport_auth', {
-    bot_id:       123456, // place id of your bot here
-    scope:        {data: [{type: 'id_document', selfie: true}, 'address_document', 'phone_number', 'email'], v: 1},
-    public_key:   '-----BEGIN PUBLIC KEY----- ...', // place public key of your bot here
-    nonce:        'ab2df83746a87d2f3bd6...', // place nonce here
-    callback_url: 'https://example.com/callback/' // place callback url here
-  });
-</script>
-
-

Note that if you use a Content-Security-Policy (CSP) header with the frame-src/child-src directive you should allow tg: source to prevent errors in some browsers (e.g. Firefox)

-
-

createAuthButton

- - - - - - - - - - - - - - - - - - - - - - - -
ParametersTypeRequired
elementString or DOMNodeYes
auth_paramsAuthParameters or FunctionYes
optionsAuthButtonOptionsOptional
-

AuthParameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FieldTypeDescription
bot_idIntegerUnique identifier for the bot
scopePassportScopeA JSON-serialized object describing the data you want to request
public_keyStringPublic key of your bot
nonceStringBot-specified nonce
callback_urlStringOptional. URL to which the user will be redirected.
-

AuthButtonOptions

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FieldTypeDescription
textStringOptional. Text on the button. Defaults to "Log In With Telegram".
radiusIntegerOptional. Radius of the button and tooltip in px. Defaults to 23.
tooltip_textStringOptional. Text on the tooltip. Defaults to "Please install Telegram to use this option.".
tooltip_positionStringOptional. Tooltip position. One of "top", "bottom", "left", "right". Defaults to "bottom".
tooltip_forceBooleanOptional. Always show a tooltip. Defaults to false.
-

You can also create your custom button. Do not forget about the tooltip. You should add an onclick listener to the button which calls the Telegram.Passport.auth(auth_params, tooltip_toggle); method:

-
<button id="telegram_passport_auth">Log In With Telegram</button>
-<script>
-  var auth_button = document.getElementById('telegram_passport_auth');
-  var auth_params = {
-    bot_id:        XXXXXX, // place id of your bot here
-    scope:         {data: [{type: 'id_document', selfie: true}, 'address_document', 'phone_number', 'email'], v: 1},
-    public_key:    '-----BEGIN PUBLIC KEY----- ...', // place public key of your bot here
-    nonce:         'ab2df83746a87d2f3bd6...', // place nonce here
-    callback_url:  'https://example.com/callback/' // place callback url here
-  };
-  auth_button.addEventListener('click', function() {
-    Telegram.Passport.auth(auth_params, function(show) {
-      if (show) {
-        // some code to show tooltip
-      } else {
-        // some code to hide tooltip
-      }
-    });
-  }, false);
-</script>
-

Receiving information

-

When the user confirms your request by pressing the 'Authorize' button, it will be redirected to the URL specified in the callback_url with the parameter tg_passport=success and the Bot API will send the bot an Update with the field passport_data which contains encrypted Telegram Passport data.

-

If the user cancels your request, it will be redirected to the URL specified in the callback_url with the parameter tg_passport=cancel.

-

If an error occurs during the request, the user will be redirected to the URL specified in the callback_url with the parameter tg_passport=error. The parameter error will contain one of the following values: BOT_INVALID, PUBLIC_KEY_REQUIRED, PUBLIC_KEY_INVALID, SCOPE_EMPTY, NONCE_EMPTY.

- -
- -
-
- -
- - - - - - - - diff --git a/data/core.telegram.org/reproducible-builds.html b/data/core.telegram.org/reproducible-builds.html deleted file mode 100644 index e49478749d..0000000000 --- a/data/core.telegram.org/reproducible-builds.html +++ /dev/null @@ -1,488 +0,0 @@ - - - - - Reproducible Builds for iOS and Android - - - - - - - - - - - - - -
- -
-
-
-
-

Reproducible Builds for iOS and Android

- -

This page contains instructions for verifying that Telegram's open source code is exactly the same as the code that is used to build the apps that are available in the App Store, Google Play and directly on the Telegram website.

-

Warning: Telegram supports reproducible builds as of version 5.13. Bear in mind that, at this stage, the verification process should be considered experimental. We will be updating our apps and these instructions to make this process as straightforward as possible.

- -
-

Please read the relevant notes and troubleshooting section carefully.

-
-
-
- Dude in a jacket inspecting the hologram of a mechanical dog to verify it's built according to the blueprints provided. -
- -

Reproducible Builds for Android

-

Step 1. Install Docker

-

Docker can be obtained here. Once the installation is complete, log into your Docker account > Preferences > Advanced and configure the amount of resources Docker may use:

-
- -

Docker Performance

-
- -

We recommend using the maximum amount allowed by your system's hardware, in order to speed up the build time.

-

Step 2. Confirm which version you have installed on your Android device

-

You can find the version/build number at the bottom of the Settings page. Note that Telegram supports reproducible builds starting with version 5.13.

-
- -

App Version

-
- -

The commit tag to checkout source code for the example above will be release-5.13.0_1821.

-
-

Please make sure that you're using the correct version and build number of the version you want to check (and not the one from this example 😈).

-
-

The part after the version number will help you know in which folder to look for the correct APK when you've finished building the app (Step 4):

-
    -
  • “Direct” after version number means that the APK will be inside the “afat/standalone” folder.
  • -
  • “Universal” after version number means that the APK will be inside the “afat/release” folder.
  • -
  • If you have Android Version 6.0 or greater, your APK folder will have the “_SDK23” suffix.
  • -
  • “arm64-v8a” - folder name will start with “arm64”.
  • -
  • “armeabi-v7” - folder name will start with “armv7”.
  • -
  • “x86” - folder name will start with “x86”.
  • -
  • “x86_64” - folder name will start with “x64”.
  • -
-
- -

APK Folders

-
- - -

Step 3. Obtain the source code

-

Open Terminal, run the commands:
git clone https://github.com/DrKLO/Telegram.git $HOME/telegram-android
cd $HOME/telegram-android
git checkout release-{VERSION AND BUILD NUMBER FROM STEP 2}

-

For our example, the command would be:
git checkout release-5.13.0_1821

-
- -
- -

Step 4. Build the app

-

Open Terminal, run the commands:
cd $HOME/telegram-android
docker build -t telegram-build .

-
- -
- -

docker run --rm -v "$PWD":/home/source telegram-build

-
- -
- -

These commands will produce 9 different APKs for different target SDK versions and CPU ABIs.

-

These APKs can be found in:
$HOME/telegram-android/TMessagesProj/build/outputs/apk/

-

Use the folder name from Step 2 to find the correct folder that holds the same APK as installed on your device. For example, for non-universal Android 9.0 arm64-v8a, the path to your APK will be:
$HOME/telegram-android/TMessagesProj/build/outputs/apk/arm64_SDK23/release/app.apk
Copy this APK to the root source directory by running this command in Terminal:
cp $HOME/telegram-android/TMessagesProj/build/outputs/apk/arm64_SDK23/release/app.apk $HOME/telegram-android/telegram_built.apk

-
- -
- -

Step 5. The Telegram APK installed on your device

-

You will need adb for this step.

-
- -

ADB

-
- -
-

If you downloaded your APK directly from Telegram's website, use the package name org.telegram.messenger.web in this step. To verify the Google Play APK, use org.telegram.messenger.

-
-

Connect your device to the computer, open Terminal, run the commands:
adb shell pm path org.telegram.messenger

-
- -
- -

The output will look something like this:
package:/data/app/org.telegram.messenger-_zOSURFEx2GpHM8UDF_PVg==/base.apk
By using this information, pull the APK from your device to $HOME/telegram-android using command:
adb pull /data/app/org.telegram.messenger-_zOSURFEx2GpHM8UDF_PVg==/base.apk $HOME/telegram-android/telegram_store.apk

-

Step 6. Compare the APKs

-

Open Terminal, run the commands:
cd $HOME/telegram-android
python apkdiff.py telegram_store.apk telegram_built.apk
If the APKs are the same, you will see
APKs are the same!

-
- -
-Tada! - -Otherwise, something went wrong. -
- -
- -

If your APKs don't match, please make sure that you chose the correct code version and the right SDK.

-

Check out the Troubleshooting section first in case you run into trouble.

-
-

Reproducible Builds for iOS

-

The verification process for iOS builds is, unfortunately, a lot more complex than for Android. The two main issues with Apple's current policies and infrastructure are as follows:

-
    -
  1. Apple insists on using FairPlay encryption to “protect” even free apps from “app pirates” which makes obtaining the executable code of apps impossible without a jailbroken device. To solve this issue, Apple would simply need to allow submitting unencryptable binaries to the App Store. This would not affect security since the code would still be signed – and would enable anyone to check the integrity of apps supporting reproducible builds without endangering the integrity and security of their devices.

    -
  2. -
  3. Building your own reproducible binaries is difficult because macOS doesn't support containers like Docker. If Apple followed in the footsteps of Linux (and even Microsoft!) and added container support, it would eliminate the need for steps 1-3 in the guide below.

    -
  4. -
-
-

As things stand now, you'll need a jailbroken device, at least 1,5 hours and approximately 90GB of free space to properly set up a virtual machine for the verification process.

-
-

To provide a stable and easily reproducible environment, Telegram iOS builds are compiled on a virtual machine. Parallels is used to verify the builds.

-

Step 1. Install the Parallels virtual machine

-

Parallels can be obtained here, it features a fully-functional trial version.

-

Step 2. Install the latest version of macOS Big Sur

-

To download an image that can be installed on the virtual machine, open the App Store, search for “Catalina” and click “View”.

-
- -

Search for macOS Catalina on App Store > View

-
- -
- -

macOS Catalina > Get -

-
- -

This will open a system pop-up offering to download the OS:

-
- -
-Choose “Download” and wait for the download to finish. - -> If you were not using the latest version of the OS, your system may start updating instead. Please finish updating to download macOS Catalina. - -When done, open Parallels and choose macOS Catalina: - -
- -

Select 'Install Windows or another OS' > Continue

-
- -
- -

Select a file... > Applications (All files) > Install macOS Сatalina

-
- -

Before starting the installation, configure the virtual machine:

-
- -

Checkbox 'Customize settings before installation'

-
- -

Change the name of the virtual machine to macos11_Xcode12_5_1

-
- -

Name VM as macos10_15_Xcode12_2

-
- -

Hardware > Processors: 2-4
Memory > 4GB may suffice but 8GB is recommended

-
- -

At least 2 CPUs + 4 (8 recommended) GB Memory.

-
- -

You will get something like this:

-
- -

Click Continue

-
- -

Parallels may request access to your microphone and camera, this is not required – just press Close.

-
- -

Install macOS > Continue

-
- -

Your Apple ID is also not required, you can choose Set Up Later.

-
- -

Skip Apple ID with 'Set Up Later'

-
- -

Use “telegram” for both the account name and password.

-
-

Do not ever use the password “telegram” for anything else, it's cursed.

-
-
- -

Create a computer account with 'telegram' set both as account name and password

-
- -

Now install Parallels tools from the menu bar:

-
- - -

Install Parallels Tools using menu bar > Parallels icon > Actions > Install (Reinstall) Parallels Tools...

-
- -

After the system restarts, log in.
Open Terminal and run:
sudo visudo
Enter the password “telegram”

-
- -
- -

Find this line at the end of the file:
%admin ALL=(ALL) ALL
Press “i” on your keyboard, add “NOPASSWD:”
%admin ALL=(ALL) NOPASSWD: ALL
Press Escape.
Type in “:wq”
Press Enter

-
- -

Press i to edit the highlighted string.

- -

Enter :wq > press Enter.

-
- -

In the terminal, run:
sudo systemsetup -setcomputersleep Never

-
- -

sudo systemsetup -setcomputersleep Never > press Enter.

-
- -

Step 3. Install SSH keys on the virtual machine

-

In the virtual machine, open System Settings > Sharing and enable Remote Login.

-
- -
- -

In the virtual machine, open Terminal and run:
mkdir -p .ssh; nano .ssh/authorized_keys

-
- -
- -

In your main OS, open Terminal and run:
if [ ! -e ~/.ssh/id_rsa.pub ]; then ssh-keygen -t rsa -b 4096; fi && cat ~/.ssh/id_rsa.pub | pbcopy

-
- -
- -

If you see the line “Enter file in which to save the key (/Users/…/.ssh/id_rsa):”, press Enter
In the virtual machine, press CMD+V
Then Ctrl+O, Ctrl+X

-
- -
- -

Step 4. Install Xcode version 12.5.1

-

In the virtual machine, open Safari and go to https://developer.apple.com
Sign in to your Account:

-
- -

developer.apple.com > Account > sign in with your Apple ID

-
- -

Go to Downloads > More
Enter Xcode in the search field and find the version 12.5.1

-
- -

Downloads > More > Xcode 12.5.1

-
- -

Once the installation is complete, open the file Xcode 12.5.1.xip. The system will unarchive the app into the same folder. Move it to the Applications folder using Finder.

-
- -

Unarchive Xcode > drag the app to Applications folder

-
- -
- -
- -

On the virtual machine, run this command from the terminal:
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

-
- -
- -

Shut down the virtual machine.

-
- -

Shut down the virtual machine

-
- -

Step 4.1

-

Download the certificates at https://github.com/TelegramMessenger/Telegram-iOS/tree/master/build-system/fake-codesigning/certs/distribution and install them into the virtual machine.

-

Launch Keychain Access and double-click the installed certificate. Under “Trust”, change “When using this certificate” to “Always Trust”.

-

Step 5. Obtaining the source code

-

git clone --recursive https://github.com/TelegramMessenger/telegram-ios.git $HOME/telegram-ios
cd $HOME/telegram-ios
git checkout release-${VERSION_NUMBER}

-

E.g., git checkout release-7.3. Please note that you need to check out the whole git history as the build version depends on the number of commits in the repository.

-
- -
- -

Step 6. Downloading Bazel 3.7.0 to $HOME/bazel/bazel

-

mkdir -p $HOME/bazel && cd $HOME/bazel
curl -O -L https://github.com/bazelbuild/bazel/releases/download/3.7.0/bazel-3.7.0-darwin-x86_64
mv bazel-3.7.0-darwin-x86_64 bazel

-

Check that you have downloaded the correct version:
chmod +x bazel
./bazel --version

-

Step 7. Building the app

-

Open Terminal, run the commands:
cd $HOME/telegram-ios -BAZEL="$HOME/bazel/bazel" sh buildbox/build-telegram.sh verify

-
- -
- -

If the environment has been set up correctly, this will start the building process. Note that this step can easily take 30-40 minutes. The average build time on a MacBook Pro (i9 6 core) is 35 minutes.

-
- - -
- -

Once the process is complete the resulting IPA file can be found in build/artifacts/Telegram.ipa
All the following steps will be made via Terminal on your main system.

-

Step 8. Downloading a decrypted version of the app from the App Store

-

This step requires a jailbroken device equipped with tools for decrypting apps. We‘d love to make this process more simple but that’s what you get for using Apple tech.

-

Step 9. Comparing the AppStore build and the version built in the virtual machine

-

Install the necessary tools:
if ! type brew > /dev/null; - then /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"; fi && brew install python3

-
- -
- -

Run
python3 tools/ipadiff.py build/artifacts/Telegram.ipa PATH-TO-THE-IPA-FILE-FROM-STEP-9

-
    -
  1. cd telegram-ios > Enter
  2. -
  3. python3 tools/ipadiff.py build/artifacts/Telegram.ipa /path/ > Enter
  4. -
-
- -
- -

In case of a successful comparison, you will get a text along these lines:

-
IPAs are equal, except for the files that can't currently be checked:
-    Excluded files that couldn't be checked due to being encrypted:
-        PlugIns/SiriIntents.appex/SiriIntents
-        PlugIns/Widget.appex/Widget
-        PlugIns/NotificationContent.appex/NotificationContent
-        PlugIns/NotificationService.appex/NotificationService
-        PlugIns/Share.appex/Share
-    IPAs contain Watch directory with a Watch app which can't be checked currently.
-    IPAs contain .car (Asset Catalog) files that are compiled by the App Store and can't currently be checked:
-
-        Frameworks/TelegramUI.framework/Assets.car
-        Assets.car
-    IPAs contain .nib (compiled Interface Builder) files that are compiled by the App Store and can't currently be checked:
-        Base.lproj/LaunchScreen.nib
-
- -
- -

In case of any mismatches, you'll get a detailed report.

-
- -
- -

iOS: Notes

-
    -
  1. You will get a warning if the archive created in Step 7 contains encrypted files. If all these files are in the PlugIns subfolder, they represent various system extensions (e.g. external sharing, Siri, 3D touch). Decrypting such files using existing ways of receiving app archives via Jailbreak is non-trivial (but we're working on resolving this issue). If you do manage to decrypt them, e.g. on iOS 8, they will be matched.

    -
  2. -
  3. You will be notified if the archive includes an Apple Watch app. The watch app will soon no longer be included in the archive.

    -
  4. -
  5. Files with the .car extension are app resource archives (images, sounds) which were compiled and processed specifically for the target device. The App Store processes them in non-trivial ways, we're planning on getting rid of them in future versions.

    -
  6. -
  7. The LaunchScreen.nib file is an empty file containing a description of the interface which is displayed by the system before the app is launched. It is processed by the App Store in a non-trivial way but doesn't contain any code and therefore may be ignored.

    -
  8. -
-
-

Troubleshooting

-

If you encounter any issues with obtaining the code, building and comparing the apps, please contact us at @botsupport and include the hashtag #reproducibleBuilds with your message describing the problem.

-

Troubleshooting: Android

-
    -
  1. Make sure that you checkout the correct version of the code.

    -
  2. -
  3. Make sure that you build the app using the right SDK.

    -
  4. -
  5. If the gradle version used in the Dockerfile is not available anymore and building of the Docker image fails, wait for a Dockerfile update or update manually to lastest available version.

    -
  6. -
-

-

We will update this section with information on overcoming other common issues.

-
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/tdlib.html b/data/core.telegram.org/tdlib.html deleted file mode 100644 index be7bd08034..0000000000 --- a/data/core.telegram.org/tdlib.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - Telegram Database Library - - - - - - - - - - - - - -
- -
-
-
-
-

Telegram Database Library

- -
- -
- -

TDLib (Telegram Database Library) is a cross-platform, fully functional Telegram client. We designed it to help third-party developers create their own custom apps using the Telegram platform.

-
-

Read about TDLib on the Telegram blog »

-
-

TDLib Advantages

-
    -
  • Cross-platform. TDLib can be used on Android, iOS, Windows, macOS, Linux, WebAssembly, FreeBSD, Windows Phone, watchOS, tvOS, Tizen, Cygwin. It should also work on other *nix systems with or without minimal effort.
  • -
  • Multilanguage. TDLib can be easily used with any programming language that is able to execute C functions. Additionally it already has native bindings to Java (using JNI) and C# (using C++/CLI).
  • -
  • Easy to use. TDLib takes care of all network implementation details, encryption and local data storage.
  • -
  • High-performance. In the Telegram Bot API, each TDLib instance handles more than 24,000 active bots simultaneously.
  • -
  • Well-documented. All TDLib API methods and public interfaces are fully documented.
  • -
  • Consistent. TDLib guarantees that all updates will be delivered in the right order.
  • -
  • Reliable. TDLib remains stable on slow and unreliable Internet connections.
  • -
  • Secure: All local data is encrypted using a user-provided encryption key.
  • -
  • Fully-asynchronous. Requests to TDLib don't block each other or anything else, responses will be sent when they are available.
  • -
-
-

Getting started with TDLib »

-
-

Resources

-

TDLib is fully open source, all code is available on GitHub.

-

See also:

- -
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/tdlib/notification-api.html b/data/core.telegram.org/tdlib/notification-api.html deleted file mode 100644 index 9cb34cadc5..0000000000 --- a/data/core.telegram.org/tdlib/notification-api.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - Notification API - - - - - - - - - - - - - -
- -
-
-
-
-

Notification API

- -

This article describes the TDLib Notification API introduced in TDLib 1.4.0.

-

Notification API overview

-

TDLib takes care of everything that is related to handling notifications (as usually, except for how exactly the notifications will be shown to the user). TDLib controls when notifications are shown to the user, when they are edited and removed, guarantees consistency of notifications with the database state and persistence of active notifications between client restarts.

-

All notifications shown to the user are combined into notification groups. For example, notifications about ordinary messages from the one chat belong to one notification group. This grouping is done automatically by TDLib based on message content and the user's notification settings. Currently, there are 4 different notification group types:

-
    -
  • Messages notification groups contain notifications with ordinary unread messages from a chat.
  • -
  • Mentions notification groups contain notifications with unread mentions of the current user, replies to their messages, and notifications about pinned messages in a chat.
  • -
  • SecretChat notification groups contain a single notification about creating a new secret chat.
  • -
  • Calls notification groups contain notifications about received calls in a chat.
  • -
-

TDLib ensures that the number of notification groups shown to the user any given moment is limited by the value of the notification_group_count_max option and that the number of active notifications, shown to the user in a notification group at any given time, is limited by the value of the notification_group_size_max option. Whenever the number of notification groups with active notifications exceeds notification_group_count_max, TDLib sends an update hiding all notifications from the oldest group. If subsequently all notifications are hidden in some other group, that first group can be silently brought back by an update from TDLib. Similarly, whenever the number of active notifications in a group exceeds notification_group_size_max, TDLib sends an update hiding the oldest notifications in the group. If subsequently some newer notifications are removed from the group, older notifications can be silently brought back by an update from TDLib.

-

To enable the TDLib Notificaition API you need to set option notification_group_count_max to a positive value, to disable the Notification API you can change the option value back to 0 or set the option value to empty.

-

Every notification group has a unique ID, which is a persistent small integer number, assigned consequently from 1. The client should not assume that the group‘s type and other fields are fixed, because TDLib may reuse the notification group ID whenever it’s known that the group will never be used again in the future. Every notification belongs to a notification group and has a globally unique ID, which is a persistent small integer number, assigned consequently from 1. Notification IDs are never reused and can be used together with their notification group ID to uniquely identify a notification. Within a notification group, notifications must be shown in the order defined by their IDs. If notification grouping isn't available in your operating system, the existence of notification groups can be safely ignored and notifications can be handled separately just by their unique ID.

-

Currently, there are 4 different kinds of notifications:

-
    -
  • NewMessage notifications contain the full information about a new incoming message received from the server. They may be located in Messages and Mentions notification groups.
  • -
  • NewPushMessage notifications contain information about a new incoming message received in a push notification. They contain only partial data about the message and will be replaced by NewMessage notifications as soon as the client downloads the necessary data. They may be located in Messages and Mentions notification groups.
  • -
  • NewSecretChat notifications inform about creating a new secret chat. Only one will be located in each SecretChat notification group. The group may be reused as soon as the notification is removed.
  • -
  • NewCall notifications contain information about a new incoming call. They are located in a Calls notification group. The group may be reused as soon as the notifications are removed.
  • -
-

Messages from new push message notifications will not be shown in the chat message list, but their message identifiers are known and they can be replied to and used in ViewMessages calls anyway.

-

Handling Notification API updates

-

Notification API introduced 4 new updates from TDLib, namely updateActiveNotifications, updateNotificationGroup, updateNotification and updateHavePendingNotifications.

-

If Notification API is enabled, the client receives an updateActiveNotifications update on startup, containing all notifications that are to be shown to the user. The client needs to synchronize the list of notifications that is shown to the user with the list received in updateActiveNotifications and save information about all active notifications in memory, because subsequent updates will contain only changes to the list of active notifications.

-

Whenever a notification is added to a group or is removed from a group, TDLib sends an updateNotificationGroup update to the client. Aside from the list of added notifications and list of identifiers of removed notifications, the update contains full information about the new type of the notification group, the identifier of the chat to which all notifications in the group now belong, the identifier of the chat the notification settings of which must be used to show the notification, a flag determining whether the notification must be shown with or without sound and the new total count of unread notifications in the group. Be aware that the total count of unread notifications in a group can be higher than the number of active notifications. Also note that some old notifications can be added through updateNotificationGroup when newer notifications are removed, so the client must ensure the correct notification order based on notification identifiers. Whenever possible, updateNotificationGroup updates for a group are combined into a single update, so the client can apply the changes together. TDLib also controls the delay before notifications are shown to the user in order to give them a chance to read the messages from a different device before the notification is shown, therefore the updates should be processed on the client side immediately without any additional delays.

-

Whenever an active notification is changed, TDLib sends an updateNotification update to the client. The update contains new content of the notification. The client should be ready to handle the change of notification type, for example, from NewPushMessage to NewMessage.

-

Whenever there are some received but delayed notifications or there can be some yet unreceived notifications because of unavailable network connection to the Telegram servers, TDLib informs the client about that via updateHavePendingNotifications update. Client is supposed to keep the application running in order to receive all delayed notifications. If there is no possibility to keep the application running, the client can close the TDLib instance in order to immediately receive all delayed notification updates.

-

TDLib tries to ensure that whenever a notification about a pinned message is sent, the pinned message is already available locally in the memory, so the client can use a new request getMessageLocally to get the pinned message. Also, updateNotification will be sent whenever pinned message is changed, despite that the notification itself wasn't changed.

-

Customizing the Notification API

-

The client controls the maximum number of active notification groups by using the option notification_group_count_max. This option's value defaults to 0, i.e. there are no active notification groups and the Notification API is effectively disabled. Any integer value between 0 and 25 can be used as the value of the option. Values above 25 are not allowed because most operating systems will not show so many notification groups anyway.

-

The client also controls the maximum number of active notifications in a group by using the option notification_group_size_max. This option's value defaults to 10 and can be set to any integer value between 1 and 25. Values above 25 are not allowed, because most operating systems will not show so many notifications in a group anyway.

-

The user may choose to show pinned messages or mentions among ordinary messages in the Messages notification group instead of the Mentions notification group and choose to not apply notification settings from the sender's private chat to them. This can be done on a per chat basis or for the whole chats notification scope via the new options disable_pinned_message_notifications and disable_mention_notifications which were added to chatNotificationSettings and scopeNotificationSettings classes.

-

Handling push notifications

-

In order to support multiple accounts in one app, the method registerDevice now returns a globally unique identifier of the push notification subscription. This identifier can be used to match a push notification with the corresponding account and process the notification only by the account for which the notification was sent.

-

Whenever a push notification is received, the client needs to call the synchronous method getPushReceiverId with the payload of the push notification. The method will return a globally unique identifier of the push notification subscription (aka push receiver ID), which can be used to find the TDLib instance which needs to be launched and used to process the push notification. If the method returns 0 as a push receiver ID, then the push notification should be processed by all clients (this usually happens when there is only one client).

-

To process a notification, the method processPushNotification needs to be called in the TDLib instance (or instances) found by push receiver ID. This method can be called before authorization and its execution will be automatically postponed until TDLib initialization. The method returns the result only after all updates caused by the push notification have been sent and the TDLib instance can be safely closed. If the method returns an error with the code 406, then the push notification is known to be unsupported and connection to the server is required to fetch new data. If any other error is returned, an error occurred while processing the push notification, i.e. the notification payload has failed to decrypt or parse. In that case, connection to the server isn't required, but there can be new notifications there. After a successful response from processPushNotification the TDLib instance can be immediately closed in order to reduce battery usage. Alternatively, the client can wait for an updateHavePendingNotifications update telling that there are no more delayed or unreceived notifications.

-

Android and iOS clients can opt-in to receive end-to-end encrypted push notifications via a Firebase Cloud Messaging or Apple Push Notification service VoIP notifications while subscribing to push notifications through registerDevice method. In case of Firebase Cloud Messaging, if end-to-end encrypted push notifications are disabled, push notifications are sent without content, so there no notifications of the type NewPushMessage will be created, the client will always need to connect to Telegram servers to download new messages whenever a push notification is received.

-

Examples of push notification payloads, which are accepted by TDLib:

-
{
-  "date": 1234567890,
-  "data": {
-    "custom": {
-      "msg_id": "1234567",
-      "from_id": "12345678",
-      "mtpeer": {
-        "ah": "-1234567",
-        "ph": {
-          "volume_id": "987654321",
-          "local_id": "98765",
-          "secret": "998877665544332211",
-          "file_reference": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
-          "dc_id": 6,
-          "_": "fileLocation"
-        }
-      }
-    },
-    "badge": "239",
-    "loc_key": "MESSAGE_TEXT",
-    "loc_args": [
-      "First name Last name",
-      "qwerty"
-    ],
-    "line1": "First name Last name",
-    "line2": "qwerty",
-    "random_id": 728931540,
-    "text": "First name Last name: qwerty",
-    "system": "Windows 10.0.20573.1"
-  }
-}
-{
-  "google.sent_time": 1234567890123,
-  "p": "jdTXkJnEMUTK6R82AB-55bLA3U_RB-2K-CLDz7mWp7ckjMIfnCoHEcm710SkN"
-}
-{
-  "date": 1234567890,
-  "loc_key": "CHAT_MESSAGE_TEXT",
-  "loc_args": [
-    "First name Last name",
-    "Chat title",
-    "qwerty"
-  ],
-  "custom": {
-    "msg_id": "1234567",
-    "channel_id": "56781234",
-    "chat_from_id": "12345678",
-    "mention": "1"
-  },
-  "badge": "239"
-}
-

Users removing active notifications

-

There are two methods for removing notifications from the list of active notifications when they are hidden by the user. If the user removes a single notification, it can be removed by calling the method removeNotification. If the user dismisses the whole notification group, this can be achieved using the method removeNotificationGroup. Removed notifications will never return to the list of active notifications, but can be still counted in the total count of unread notifications of the group.

-
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/tdlib/options.html b/data/core.telegram.org/tdlib/options.html deleted file mode 100644 index 1d86d224cf..0000000000 --- a/data/core.telegram.org/tdlib/options.html +++ /dev/null @@ -1,465 +0,0 @@ - - - - - TDLib options - - - - - - - - - - - - - -
- -
-
-
- -

TDLib options

- -

TDLib has many options that affect the behavior of the library. Each option has a name and a value. Value may be of one of the following types:

- - - - - - - - - - - - - - - - - - - - - - - -
Type of valueDefault valueValue range
Integer064-bit integer
BooleanfalseTrue or false
StringAny Unicode string
-

List of options supported by TDLib

-

Options not mentioned in this list may be safely ignored.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeWritableDescription
always_parse_markdownBooleanYesIf true, text entities will be automatically parsed in all inputMessageText objects
archive_and_mute_new_chats_from_unknown_usersBooleanYesIf true, new chats from non-contacts will be automatically archived and muted. The option can be set only if the option “can_archive_and_mute_new_chats_from_unknown_users” is true. getOption needs to be called explicitly to fetch the latest value of the option, changed from another device
disable_contact_registered_notificationsBooleanYesIf true, notifications about the user's contacts who have joined Telegram will be disabled. User will still receive the corresponding message in the private chat. getOption needs to be called explicitly to fetch the latest value of the option, changed from another device
disable_persistent_network_statisticsBooleanYesIf true, persistent network statistics will be disabled, which significantly reduces disk usage
disable_sent_scheduled_message_notificationsBooleanYesIf true, notifications about outgoing scheduled messages that were sent will be disabled
disable_time_adjustment_protectionBooleanYesIf true, protection from external time adjustment will be disabled, which significantly reduces disk usage
disable_top_chatsBooleanYesIf true, support for top chats and statistics collection is disabled
ignore_background_updatesBooleanYesIf true, allows to skip all updates received while the TDLib instance was not running. The option does nothing if the database or secret chats are used
ignore_default_disable_notificationBooleanYesIf true, the disable_notification value specified in the request will be always used instead of the default value
ignore_inline_thumbnailsBooleanYesIf true, prevents file thumbnails sent by the server along with messages from being saved on the disk
ignore_platform_restrictionsBooleanYesIf true, chat and message restrictions specific to the currently used operating system will be ignored
ignore_sensitive_content_restrictionsBooleanYesIf true, sensitive content will be shown on all user devices. getOption needs to be called explicitly to fetch the latest value of the option, changed from another device
is_location_visibleBooleanYesIf true, other users will be allowed to see the current user's location
language_pack_database_pathStringYesPath to a database for storing language pack strings, so that this database can be shared between different accounts. By default, language pack strings are stored only in memory. Changes of value of this option will be applied only after TDLib restart, so it should be set before call to setTdlibParameters.
language_pack_idStringYesIdentifier of the currently used language pack from the current localization target
localization_targetStringYesName for the current localization target (currently supported: “android”, “android_x”, “ios”, “macos” and “tdesktop”)
message_unload_delayIntegerYesThe maximum time messages are stored in memory before they are unloaded, 60-86400; in seconds. Defaults to 60 for users and 1800 for bots
notification_group_count_maxIntegerYesMaximum number of notification groups to be shown simultaneously, 0-25
notification_group_size_maxIntegerYesMaximum number of simultaneously shown notifications in a group, 1-25. Defaults to 10
onlineBooleanYesOnline status of the current user
prefer_ipv6BooleanYesIf true, IPv6 addresses will be preferred over IPv4 addresses
use_pfsBooleanYesIf true, Perfect Forward Secrecy will be enabled for interaction with the Telegram servers for cloud chats
use_quick_ackBooleanYesIf true, quick acknowledgement will be enabled for outgoing messages
use_storage_optimizerBooleanYesIf true, the background storage optimizer will be enabled
animated_emoji_sticker_set_nameStringNoName of a sticker set with animated emojis
animation_search_bot_usernameStringNoUsername of a bot which can be used in inline mode for animations search
authorization_dateIntegerNoPoint in time (Unix timestamp) when authorization was received
basic_group_size_maxIntegerNoMaximum number of members in a basic group
call_connect_timeout_msIntegerNoMaximum time to wait for call connection creation to be passed to libtgvoip
call_packet_timeout_msIntegerNoMaximum time to wait for call packet delivery to be passed to libtgvoip
can_archive_and_mute_new_chats_from_unknown_usersBooleanNoIf true, the option “archive_and_mute_new_chats_from_unknown_users” can be changed
can_ignore_sensitive_content_restrictionsBooleanNoIf true, the option “ignore_sensitive_content_restrictions” can be changed
enabled_proxy_idIntegerNoIdentifier of the enabled proxy
expect_blockingBooleanNoIf true, access to Telegram is likely blocked for the user
favorite_stickers_limitIntegerNoMaximum number of favorite stickers
forwarded_message_count_maxIntegerNoMaximum number of forwarded messages per one request
group_anonymous_bot_user_idIntegerNoIdentifier of the bot which is shown as the sender of anonymous messages in groups when viewed from an outdated client
message_caption_length_maxIntegerNoMaximum length of a message caption
message_text_length_maxIntegerNoMaximum length of a message text
my_idIntegerNoIdentifier of the current user
pinned_archived_chat_count_maxIntegerNoMaximum number of pinned cloud chats in the Archive chat list. The same amount of secret chats can be pinned locally
pinned_chat_count_maxIntegerNoMaximum number of pinned cloud chats in the Main chat list. The same amount of secret chats can be pinned locally
photo_search_bot_usernameStringNoUsername of a bot which can be used in inline mode for photos search
replies_bot_chat_idIntegerNoIdentifier of the @replies bot
suggested_language_pack_idStringNoIdentifier of the language pack, suggested for the user by the server
supergroup_size_maxIntegerNoMaximum number of members in a supergroup
t_me_urlStringNoCurrent value of t.me URL, i.e. https://t.me/
telegram_service_notifications_chat_idIntegerNoIdentifier of the Telegram Service Notifications chat
test_modeBooleanNoIf true, the test environment is being used instead of the production environment
unix_timeIntegerNoAn estimation of the current Unix timestamp. The option will not be updated automatically unless the difference between the previous estimation and the locally available monotonic clocks changes significantly
venue_search_bot_usernameStringNoUsername of a bot which can be used in inline mode for venues search
versionStringNoTDLib version. This options is guaranteed to come before all other updates since TDLib 1.4.0
-

Additionally any option beginning with 'x' or 'X' is writeable and can be safely used by the application to persistently store some small amount of data.

-
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/ChannelAdminLogEventsFilter.html b/data/core.telegram.org/type/ChannelAdminLogEventsFilter.html deleted file mode 100644 index cafc03a752..0000000000 --- a/data/core.telegram.org/type/ChannelAdminLogEventsFilter.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - ChannelAdminLogEventsFilter - - - - - - - - - - - - - -
- -
-
-
- -

ChannelAdminLogEventsFilter

- -

Filter for fetching events in the channel admin log

-

- -
-
channelAdminLogEventsFilter#ea107ae4 flags:# join:flags.0?true leave:flags.1?true invite:flags.2?true ban:flags.3?true unban:flags.4?true kick:flags.5?true unkick:flags.6?true promote:flags.7?true demote:flags.8?true info:flags.9?true settings:flags.10?true pinned:flags.11?true edit:flags.12?true delete:flags.13?true group_call:flags.14?true invites:flags.15?true = ChannelAdminLogEventsFilter;

-

Constructors

- - - - - - - - - - - - - -
ConstructorDescription
channelAdminLogEventsFilterFilter only certain admin log events
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/ChatInvite.html b/data/core.telegram.org/type/ChatInvite.html deleted file mode 100644 index 9bf2f14790..0000000000 --- a/data/core.telegram.org/type/ChatInvite.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - ChatInvite - - - - - - - - - - - - - -
- -
-
-
- -

ChatInvite

- -

Chat invite

-

- -
-
chatInviteAlready#5a686d7c chat:Chat = ChatInvite;
-chatInvite#dfc2f58e flags:# channel:flags.0?true broadcast:flags.1?true public:flags.2?true megagroup:flags.3?true title:string photo:Photo participants_count:int participants:flags.4?Vector<User> = ChatInvite;
-chatInvitePeek#61695cb0 chat:Chat expires:int = ChatInvite;
-
----functions---
-
-messages.checkChatInvite#3eadb1bb hash:string = ChatInvite;

-

Constructors

- - - - - - - - - - - - - - - - - - - - - -
ConstructorDescription
chatInviteAlreadyThe user has already joined this chat
chatInviteChat invite info
chatInvitePeekA chat invitation that also allows peeking into the group to read messages without joining it.
-

Methods

- - - - - - - - - - - - - -
MethodDescription
messages.checkChatInviteCheck the validity of a chat invite link and get basic info about it
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/ChatParticipant.html b/data/core.telegram.org/type/ChatParticipant.html deleted file mode 100644 index beb96d2420..0000000000 --- a/data/core.telegram.org/type/ChatParticipant.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - ChatParticipant - - - - - - - - - - - - - -
- -
-
-
- -

ChatParticipant

- -

Details of a group member.

-

- -
-
chatParticipant#c02d4007 user_id:long inviter_id:long date:int = ChatParticipant;
-chatParticipantCreator#e46bcee4 user_id:long = ChatParticipant;
-chatParticipantAdmin#a0933f5b user_id:long inviter_id:long date:int = ChatParticipant;

-

Constructors

- - - - - - - - - - - - - - - - - - - - - -
ConstructorDescription
chatParticipantGroup member.
chatParticipantCreatorRepresents the creator of the group
chatParticipantAdminChat admin
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/DecryptedMessageLayer.html b/data/core.telegram.org/type/DecryptedMessageLayer.html deleted file mode 100644 index 8d96c0b751..0000000000 --- a/data/core.telegram.org/type/DecryptedMessageLayer.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - DecryptedMessageLayer - - - - - - - - - - - - - -
- -
-
-
- -

DecryptedMessageLayer

- -

Object describes encrypted message content in relation to the required layer.

-

- -
-
===17===
-decryptedMessageLayer#1be31789 random_bytes:bytes layer:int in_seq_no:int out_seq_no:int message:DecryptedMessage = DecryptedMessageLayer;

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/DecryptedMessageMedia.html b/data/core.telegram.org/type/DecryptedMessageMedia.html deleted file mode 100644 index e371378e24..0000000000 --- a/data/core.telegram.org/type/DecryptedMessageMedia.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - DecryptedMessageMedia - - - - - - - - - - - - - -
- -
-
-
- -

DecryptedMessageMedia

- -

Object describes media contents of an encrypted message.

-

- -
-
===8===
-decryptedMessageMediaEmpty#89f5c4a = DecryptedMessageMedia;
-decryptedMessageMediaPhoto#32798a8c thumb:bytes thumb_w:int thumb_h:int w:int h:int size:int key:bytes iv:bytes = DecryptedMessageMedia;
-decryptedMessageMediaVideo#4cee6ef3 thumb:bytes thumb_w:int thumb_h:int duration:int w:int h:int size:int key:bytes iv:bytes = DecryptedMessageMedia;
-decryptedMessageMediaGeoPoint#35480a59 lat:double long:double = DecryptedMessageMedia;
-decryptedMessageMediaContact#588a0a97 phone_number:string first_name:string last_name:string user_id:int = DecryptedMessageMedia;
-decryptedMessageMediaDocument#b095434b thumb:bytes thumb_w:int thumb_h:int file_name:string mime_type:string size:int key:bytes iv:bytes = DecryptedMessageMedia;
-decryptedMessageMediaAudio#6080758f duration:int size:int key:bytes iv:bytes = DecryptedMessageMedia;
-
-===17===
-decryptedMessageMediaVideo#524a415d thumb:bytes thumb_w:int thumb_h:int duration:int mime_type:string w:int h:int size:int key:bytes iv:bytes = DecryptedMessageMedia;
-decryptedMessageMediaAudio#57e0a9cb duration:int mime_type:string size:int key:bytes iv:bytes = DecryptedMessageMedia;
-
-===23===
-decryptedMessageMediaExternalDocument#fa95b0dd id:long access_hash:long date:int mime_type:string size:int thumb:PhotoSize dc_id:int attributes:Vector<DocumentAttribute> = DecryptedMessageMedia;
-
-===45===
-decryptedMessageMediaPhoto#f1fa8d78 thumb:bytes thumb_w:int thumb_h:int w:int h:int size:int key:bytes iv:bytes caption:string = DecryptedMessageMedia;
-decryptedMessageMediaVideo#970c8c0e thumb:bytes thumb_w:int thumb_h:int duration:int mime_type:string w:int h:int size:int key:bytes iv:bytes caption:string = DecryptedMessageMedia;
-decryptedMessageMediaDocument#7afe8ae2 thumb:bytes thumb_w:int thumb_h:int mime_type:string size:int key:bytes iv:bytes attributes:Vector<DocumentAttribute> caption:string = DecryptedMessageMedia;
-decryptedMessageMediaVenue#8a0df56f lat:double long:double title:string address:string provider:string venue_id:string = DecryptedMessageMedia;
-decryptedMessageMediaWebPage#e50511d8 url:string = DecryptedMessageMedia;

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/ImportedContact.html b/data/core.telegram.org/type/ImportedContact.html deleted file mode 100644 index 5dd9e0f99d..0000000000 --- a/data/core.telegram.org/type/ImportedContact.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - ImportedContact - - - - - - - - - - - - - -
- -
-
-
- -

ImportedContact

- -

Object contains info on a successfully imported contact.

-

- -
-
importedContact#c13e3c50 user_id:long client_id:long = ImportedContact;

-

Constructors

- - - - - - - - - - - - - -
ConstructorDescription
importedContactSuccessfully imported contact.
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/InputAppEvent.html b/data/core.telegram.org/type/InputAppEvent.html deleted file mode 100644 index 4e9ff31e1a..0000000000 --- a/data/core.telegram.org/type/InputAppEvent.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - InputAppEvent - - - - - - - - - - - - - -
- -
-
-
- -

InputAppEvent

- -

Object contains info about an event that occured in the application.

-

- -
-
inputAppEvent#1d1b1245 time:double type:string peer:long data:JSONValue = InputAppEvent;

-

Constructors

- - - - - - - - - - - - - -
ConstructorDescription
inputAppEventEvent that occured in the application.
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/InputDialogPeer.html b/data/core.telegram.org/type/InputDialogPeer.html deleted file mode 100644 index b27b2e4803..0000000000 --- a/data/core.telegram.org/type/InputDialogPeer.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - InputDialogPeer - - - - - - - - - - - - - -
- -
-
-
- -

InputDialogPeer

- -

Peer, or all peers in a certain folder

-

- -
-
inputDialogPeer#fcaafeb7 peer:InputPeer = InputDialogPeer;
-inputDialogPeerFolder#64600527 folder_id:int = InputDialogPeer;

-

Constructors

- - - - - - - - - - - - - - - - - -
ConstructorDescription
inputDialogPeerA peer
inputDialogPeerFolderAll peers in a folder
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/InputGeoPoint.html b/data/core.telegram.org/type/InputGeoPoint.html deleted file mode 100644 index 368bf7427d..0000000000 --- a/data/core.telegram.org/type/InputGeoPoint.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - InputGeoPoint - - - - - - - - - - - - - -
- -
-
-
- -

InputGeoPoint

- -

Defines a GeoPoint.

-

- -
-
inputGeoPointEmpty#e4c123d6 = InputGeoPoint;
-inputGeoPoint#48222faf flags:# lat:double long:double accuracy_radius:flags.0?int = InputGeoPoint;

-

Constructors

- - - - - - - - - - - - - - - - - -
ConstructorDescription
inputGeoPointEmptyEmpty GeoPoint constructor.
inputGeoPointDefines a GeoPoint by its coordinates.
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/InputPaymentCredentials.html b/data/core.telegram.org/type/InputPaymentCredentials.html deleted file mode 100644 index 0b072fee37..0000000000 --- a/data/core.telegram.org/type/InputPaymentCredentials.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - InputPaymentCredentials - - - - - - - - - - - - - -
- -
-
-
- -

InputPaymentCredentials

- -

Payment credentials

-

- -
-
inputPaymentCredentialsSaved#c10eb2cf id:string tmp_password:bytes = InputPaymentCredentials;
-inputPaymentCredentials#3417d728 flags:# save:flags.0?true data:DataJSON = InputPaymentCredentials;
-inputPaymentCredentialsApplePay#aa1c39f payment_data:DataJSON = InputPaymentCredentials;
-inputPaymentCredentialsGooglePay#8ac32801 payment_token:DataJSON = InputPaymentCredentials;

-

Constructors

- - - - - - - - - - - - - - - - - - - - - - - - - -
ConstructorDescription
inputPaymentCredentialsSavedSaved payment credentials
inputPaymentCredentialsPayment credentials
inputPaymentCredentialsApplePayApple pay payment credentials
inputPaymentCredentialsGooglePayGoogle Pay payment credentials
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/MessageReactionsList.html b/data/core.telegram.org/type/MessageReactionsList.html deleted file mode 100644 index 4386cea811..0000000000 --- a/data/core.telegram.org/type/MessageReactionsList.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - MessageReactionsList - - - - - - - - - - - - - -
- -
-
-
- -

MessageReactionsList

- -

List of message reactions

-

- -
-

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/Null.html b/data/core.telegram.org/type/Null.html deleted file mode 100644 index 558bfa07de..0000000000 --- a/data/core.telegram.org/type/Null.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - Null - - - - - - - - - - - - - -
- -
-
-
- -

Null

- -

Object corresponds to an arbitrary empty object.

-

- -
-
null#56730bcc = Null;

-

Constructors

- - - - - - - - - - - - - -
ConstructorDescription
nullCorresponds to an arbitrary empty object.
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/PaymentRequestedInfo.html b/data/core.telegram.org/type/PaymentRequestedInfo.html deleted file mode 100644 index 126751d8ec..0000000000 --- a/data/core.telegram.org/type/PaymentRequestedInfo.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - PaymentRequestedInfo - - - - - - - - - - - - - -
- -
-
-
- -

PaymentRequestedInfo

- -

Requested payment info

-

- -
-
paymentRequestedInfo#909c3f94 flags:# name:flags.0?string phone:flags.1?string email:flags.2?string shipping_address:flags.3?PostAddress = PaymentRequestedInfo;

-

Constructors

- - - - - - - - - - - - - -
ConstructorDescription
paymentRequestedInfoOrder info provided by the user
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/PhoneCallDiscardReason.html b/data/core.telegram.org/type/PhoneCallDiscardReason.html deleted file mode 100644 index b9ab5adc07..0000000000 --- a/data/core.telegram.org/type/PhoneCallDiscardReason.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - PhoneCallDiscardReason - - - - - - - - - - - - - -
- -
-
-
- -

PhoneCallDiscardReason

- -

Why was the phone call discarded?

-

- -
-
phoneCallDiscardReasonMissed#85e42301 = PhoneCallDiscardReason;
-phoneCallDiscardReasonDisconnect#e095c1a0 = PhoneCallDiscardReason;
-phoneCallDiscardReasonHangup#57adc690 = PhoneCallDiscardReason;
-phoneCallDiscardReasonBusy#faf7e8c9 = PhoneCallDiscardReason;

-

Constructors

- - - - - - - - - - - - - - - - - - - - - - - - - -
ConstructorDescription
phoneCallDiscardReasonMissedThe phone call was missed
phoneCallDiscardReasonDisconnectThe phone call was disconnected
phoneCallDiscardReasonHangupThe phone call was ended normally
phoneCallDiscardReasonBusyThe phone call was discared because the user is busy in another call
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/SecureData.html b/data/core.telegram.org/type/SecureData.html deleted file mode 100644 index 32f36c44ef..0000000000 --- a/data/core.telegram.org/type/SecureData.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - SecureData - - - - - - - - - - - - - -
- -
-
-
- -

SecureData

- -

Secure passport data, for more info see the passport docs »

-

- -
-
secureData#8aeabec3 data:bytes data_hash:bytes secret:bytes = SecureData;

-

Constructors

- - - - - - - - - - - - - -
ConstructorDescription
secureDataSecure data
-

Related pages

-

Telegram Passport Manual

-

Telegram Passport Encryption Details

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/StatsGroupTopInviter.html b/data/core.telegram.org/type/StatsGroupTopInviter.html deleted file mode 100644 index 288129e3f7..0000000000 --- a/data/core.telegram.org/type/StatsGroupTopInviter.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - StatsGroupTopInviter - - - - - - - - - - - - - -
- -
-
-
- -

StatsGroupTopInviter

- -

Most active inviter in a supergroup

-

- -
-
statsGroupTopInviter#535f779d user_id:long invitations:int = StatsGroupTopInviter;

-

Constructors

- - - - - - - - - - - - - -
ConstructorDescription
statsGroupTopInviterInformation about an active supergroup inviter
-

Related pages

-

Channels

-

How to handle channels, supergroups, groups, and what's the difference between them.

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/TopPeer.html b/data/core.telegram.org/type/TopPeer.html deleted file mode 100644 index 65e2f3388c..0000000000 --- a/data/core.telegram.org/type/TopPeer.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - TopPeer - - - - - - - - - - - - - -
- -
-
-
- -

TopPeer

- -

Top peer

-

- -
-
topPeer#edcdc05b peer:Peer rating:double = TopPeer;

-

Constructors

- - - - - - - - - - - - - -
ConstructorDescription
topPeerTop peer
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/account.SentEmailCode b/data/core.telegram.org/type/account.SentEmailCode deleted file mode 100644 index 32ce12879a..0000000000 --- a/data/core.telegram.org/type/account.SentEmailCode +++ /dev/null @@ -1,162 +0,0 @@ - - - - - account.SentEmailCode - - - - - - - - - - - - - -
- -
-
-
- -

account.SentEmailCode

- -

The email code that was sent

-

- -
-
account.sentEmailCode#811f854f email_pattern:string length:int = account.SentEmailCode;
-
----functions---
-
-account.sendVerifyEmailCode#7011509f email:string = account.SentEmailCode;

-

Constructors

- - - - - - - - - - - - - -
ConstructorDescription
account.sentEmailCodeThe sent email code
-

Methods

- - - - - - - - - - - - - -
MethodDescription
account.sendVerifyEmailCodeSend the verification email code for telegram passport.
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/help.ProxyData b/data/core.telegram.org/type/help.ProxyData deleted file mode 100644 index 9e2f5e37f0..0000000000 --- a/data/core.telegram.org/type/help.ProxyData +++ /dev/null @@ -1,130 +0,0 @@ - - - - - Help.ProxyData - - - - - - - - - - - - - -
- -
-
-
- -

Help.ProxyData

- -

Info about an MTProxy

-

- -
-

-

Related pages

-

MTProto transports

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/messages.FeaturedStickers b/data/core.telegram.org/type/messages.FeaturedStickers deleted file mode 100644 index 5d8a73aea4..0000000000 --- a/data/core.telegram.org/type/messages.FeaturedStickers +++ /dev/null @@ -1,172 +0,0 @@ - - - - - Messages.FeaturedStickers - - - - - - - - - - - - - -
- -
-
-
- -

Messages.FeaturedStickers

- -

Featured stickers

-

- -
-
messages.featuredStickersNotModified#c6dc0c66 count:int = messages.FeaturedStickers;
-messages.featuredStickers#84c02310 hash:long count:int sets:Vector<StickerSetCovered> unread:Vector<long> = messages.FeaturedStickers;
-
----functions---
-
-messages.getFeaturedStickers#64780b14 hash:long = messages.FeaturedStickers;
-messages.getOldFeaturedStickers#7ed094a1 offset:int limit:int hash:long = messages.FeaturedStickers;

-

Constructors

- - - - - - - - - - - - - - - - - -
ConstructorDescription
messages.featuredStickersNotModifiedFeatured stickers haven't changed
messages.featuredStickersFeatured stickersets
-

Methods

- - - - - - - - - - - - - - - - - -
MethodDescription
messages.getFeaturedStickersGet featured stickers
messages.getOldFeaturedStickersOld method for fetching featured sticker
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/messages.FoundGifs b/data/core.telegram.org/type/messages.FoundGifs deleted file mode 100644 index 64573bd3cd..0000000000 --- a/data/core.telegram.org/type/messages.FoundGifs +++ /dev/null @@ -1,128 +0,0 @@ - - - - - Messages.FoundGifs - - - - - - - - - - - - - -
- -
-
-
- -

Messages.FoundGifs

- -

Found GIFs

-

- -
-

- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/messages.Stickers b/data/core.telegram.org/type/messages.Stickers deleted file mode 100644 index 496c6014a3..0000000000 --- a/data/core.telegram.org/type/messages.Stickers +++ /dev/null @@ -1,167 +0,0 @@ - - - - - Messages.Stickers - - - - - - - - - - - - - -
- -
-
-
- -

Messages.Stickers

- -

Stickers

-

- -
-
messages.stickersNotModified#f1749a22 = messages.Stickers;
-messages.stickers#30a6ec7e hash:long stickers:Vector<Document> = messages.Stickers;
-
----functions---
-
-messages.getStickers#d5a5d3a1 emoticon:string hash:long = messages.Stickers;

-

Constructors

- - - - - - - - - - - - - - - - - -
ConstructorDescription
messages.stickersNotModifiedNo new stickers were found for the given query
messages.stickersFound stickers
-

Methods

- - - - - - - - - - - - - -
MethodDescription
messages.getStickersGet stickers by emoji
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/updates.State b/data/core.telegram.org/type/updates.State deleted file mode 100644 index 39fc0ef692..0000000000 --- a/data/core.telegram.org/type/updates.State +++ /dev/null @@ -1,162 +0,0 @@ - - - - - updates.State - - - - - - - - - - - - - -
- -
-
-
- -

updates.State

- -

Object contains info on state for further updates.

-

- -
-
updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State;
-
----functions---
-
-updates.getState#edd4882a = updates.State;

-

Constructors

- - - - - - - - - - - - - -
ConstructorDescription
updates.stateUpdates state.
-

Methods

- - - - - - - - - - - - - -
MethodDescription
updates.getStateReturns a current state of updates.
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/type/upload.CdnFile b/data/core.telegram.org/type/upload.CdnFile deleted file mode 100644 index dfce17d15c..0000000000 --- a/data/core.telegram.org/type/upload.CdnFile +++ /dev/null @@ -1,167 +0,0 @@ - - - - - upload.CdnFile - - - - - - - - - - - - - -
- -
-
-
- -

upload.CdnFile

- -

Represents the download status of a CDN file

-

- -
-
upload.cdnFileReuploadNeeded#eea8e46e request_token:bytes = upload.CdnFile;
-upload.cdnFile#a99fca4f bytes:bytes = upload.CdnFile;
-
----functions---
-
-upload.getCdnFile#2000bcc3 file_token:bytes offset:int limit:int = upload.CdnFile;

-

Constructors

- - - - - - - - - - - - - - - - - -
ConstructorDescription
upload.cdnFileReuploadNeededThe file was cleared from the temporary RAM cache of the CDN and has to be reuploaded.
upload.cdnFileRepresent a chunk of a CDN file.
-

Methods

- - - - - - - - - - - - - -
MethodDescription
upload.getCdnFileDownload a CDN file.
- -
- -
-
- -
- - - - - - diff --git a/data/core.telegram.org/widgets/login.html b/data/core.telegram.org/widgets/login.html deleted file mode 100644 index fa7cf0f088..0000000000 --- a/data/core.telegram.org/widgets/login.html +++ /dev/null @@ -1,404 +0,0 @@ - - - - - Telegram Login Widget - - - - - - - - - - - - - - -
- -
-
-
- -

Telegram Login Widget

- -
-

The Telegram login widget is a simple way to authorize users on your website.
Check out this post for a general overview of the widget.

-
-

Setting up a bot

-

To use the login widget, you'll need a Telegram bot.

-

We strongly recommend that the profile picture of the bot you use for authorization corresponds with your website‘s logo, and that the bot’s name reflects that connection.

-

Users will see this message when they log into your website:

-
- -
- -

It is more likely that users will log in if your bot has a name and logo they expect to see.

-

Linking your domain to the bot

-

Once you have chosen a bot, send the /setdomain command to @Botfather to link your website's domain to the bot. Then configure your widget below and embed the code on your website.

-

Widget configuration

-

-
- -
-
-
- -
- -
- - -
- Log in below to load your bots with linked domains -
-
- -
- -
- - - -
-
- -
-
- -
- -
- - -
-
- -
- -
- - -
-
- -
- -
- -
-
- -
- -
- -
-
- -
-
-
-
-
-

-

Receiving authorization data

-

After a successful authorization, the widget can return data in two ways:

-
    -
  • by redirecting the user to the URL specified in the data-auth-url attribute with the following parameters: id, first_name, last_name, username, photo_url, auth_date and hash;
  • -
  • by calling the callback function data-onauth with the JSON-object containing id, first_name, last_name, username, photo_url, auth_date and hash fields.
  • -
-

Checking authorization

-

You can verify the authentication and the integrity of the data received by comparing the received hash parameter with the hexadecimal representation of the HMAC-SHA-256 signature of the data-check-string with the SHA256 hash of the bot's token used as a secret key.

-

Data-check-string is a concatenation of all received fields, sorted in alphabetical order, in the format key=<value> with a line feed character ('\n', 0x0A) used as separator – e.g., 'auth_date=<auth_date>\nfirst_name=<first_name>\nid=<id>\nusername=<username>'.

-

The full check might look like:

-
data_check_string = ...
-secret_key = SHA256(<bot_token>)
-if (hex(HMAC_SHA256(data_check_string, secret_key)) == hash) {
-  // data is from Telegram
-}
-

To prevent the use of outdated data, you can additionally check the auth_date field, which contains a Unix timestamp when the authentication was received.

-

Sample implementation

-

You can find sample PHP code for checking authorization and receiving data about a logged in user on this page.

-
- -
- -
-
- -
- - - - - - - - - diff --git a/data/corefork.telegram.org/api/auth.html b/data/corefork.telegram.org/api/auth.html deleted file mode 100644 index 7be50dd352..0000000000 --- a/data/corefork.telegram.org/api/auth.html +++ /dev/null @@ -1,202 +0,0 @@ - - - - - User Authorization - - - - - - - - - - - - - -
- -
-
-
- -

User Authorization

- -
- -

Authorization is associated with a client’s encryption key identifier: auth_key_id. No additional parameters need to be passed into methods following authorization.

-

To log in as a bot, follow these instructions ».

-

Sending a verification code

-

Example implementations: telegram for android, tdlib.

-

To show a nicely formatted and validated phone number field, the help.countriesList constructor can be obtained using the help.getCountriesList method.
The help.countriesList config is then used as described here ».

-

Authorization requires that a text message containing an authorization code first be sent to the user’s phone.
This may be done using the auth.sendCode method.
The system will automatically choose how to send the authorization code; there are four possible ways the code can arrive:

-
    -
  • Telegram code
  • -
  • SMS code
  • -
  • Phone call: a synthesized voice will tell the user which verification code to input
  • -
  • Flash phone call: the code will be sent via a flash phone call, that will be closed immediately.
    In the last case, the phone code will then be the phone number itself, just make sure that the phone number matches the specified pattern (see auth.sentCodeTypeFlashCall).
  • -
-

The auth.sendCode method also has parameters for enabling/disabling use of flash calls, and allows passing an SMS token that will be included in the sent SMS.
For example, the latter is required in newer versions of android, to use the android SMS receiver APIs.

-

The returned auth.SentCode object will contain multiple parameters:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
flags#Flags, see TL conditional fields
typeauth.SentCodeTypePhone code type
phone_code_hashstringPhone code hash, to be stored and later re-used with auth.signIn
next_typeflags.1?auth.CodeTypePhone code type that will be sent next, if the phone code is not received within timeout seconds: to send it use auth.resendCode
timeoutflags.2?intTimeout for reception of the phone code
-

If the message takes too long (timeout seconds) to arrive at the phone, the auth.resendCode method may be invoked to resend a code of type next_type.
If the same happens again, you can use auth.resendCode with the next_type returned by the previous call to auth.resendCode.
To cancel the verification code use auth.cancelCode.

-

Sign in/sign up

-

When user enters verification code, the auth.signIn method must be used to validate it and possibly sign user in.

-

If the code was entered correctly, but the method returns auth.authorizationSignUpRequired, it means that account with this phone number doesn't exist yet: user needs to provide basic information, accept terms of service and then the new user registration method (auth.signUp) must be invoked.

-

2FA

-

When trying to sign in using auth.signIn, an error 400 SESSION_PASSWORD_NEEDED may be returned, if the user has two-factor authentication enabled.
In this case, instructions for SRP 2FA authentication must be followed.

-

To set up two-factor authorization on an already authorized account, follow the SRP 2FA authentication docs.

-

Test Accounts

-

Each phone number is limited to only a certain amount of logins per day (e.g. 5, but this is subject to change) after which the API will return a FLOOD error until the next day. This might not be enough for testing the implementation of User Authorization flows in client applications.

-

There are several reserved phone number prefixes for testing that your application handles redirects between DCs, sign up, sign in and 2FA flows correctly. These numbers are only available on Test DCs (their IP addresses for TCP transport are availble in API development tools panel after api_id was obtained, URI format for HTTPS/Websocket transport).

-

If you wish to emulate an application of a user associated with DC number X, it is sufficient to specify the phone number as 99966XYYYY, where YYYY are random numbers, when registering the user. A user like this would always get XXXXXX as the login confirmation code (the DC number, repeated six times). Note that the value of X must be in the range of 1-3 because there are only 3 Test DCs. When the flood limit is reached for any particular test number, just choose another number (changing the YYYY random part).

-

Do not store any important or private information in the messages of such test accounts; anyone can make use of the simplified authorization mechanism – and we periodically wipe all information stored there.

-

Proceed with User Authorization flows in Production DCs only after you make sure everything works correctly on Test DCs first to avoid reaching flood limits.

-
-

To help you with working on production DCs, logins with the same phone number with which the api_id was registered have more generous flood limits.

-
-

We are authorized

-

As a result of authorization, the client key, auth_key_id, becomes associated with the user, and each subsequent API call with this key will be executed with that user’s identity. The authorization method itself returns the relevant user. It is best to immediately store the User ID locally in a binding with the key.

-

Only a small portion of the API methods are available to unauthorized users:

- -

Other methods will result in an error: 401 UNAUTHORIZED.

-
- -
- -
-
- -
- - - - - - - - diff --git a/data/corefork.telegram.org/api/end-to-end/video-calls.html b/data/corefork.telegram.org/api/end-to-end/video-calls.html deleted file mode 100644 index de59589e03..0000000000 --- a/data/corefork.telegram.org/api/end-to-end/video-calls.html +++ /dev/null @@ -1,215 +0,0 @@ - - - - - End-to-End Encrypted Voice and Video Calls - - - - - - - - - - - - - -
- -
-
-
- -

End-to-End Encrypted Voice and Video Calls

- -

This article describes the end-to-end encryption used for Telegram voice and video calls.

-
Related Articles
-

- -
-

Establishing Calls

-

Before a call is ready, some preliminary actions have to be performed. The calling party needs to contact the party to be called and check whether it is ready to accept the call. Besides that, the parties have to negotiate the protocols to be used, learn the IP addresses of each other or of the Telegram relay servers to be used (so-called reflectors), and generate a one-time encryption key for this voice call with the aid of Diffie--Hellman key exchange. All of this is accomplished in parallel with the aid of several Telegram API methods and related notifications. This document covers details related to key generation, encryption and security.

-

Key Generation

-

The Diffie-Hellman key exchange, as well as the whole protocol used to create a new voice call, is quite similar to the one used for Secret Chats. We recommend studying the linked article before proceeding.

-

However, we have introduced some important changes to facilitate the key verification process. Below is the entire exchange between the two communicating parties, the Caller (A) and the Callee (B), through the Telegram servers (S).

-
    -
  • A executes messages.getDhConfig to find out the 2048-bit Diffie-Hellman prime p and generator g. The client is expected to check whether p is a safe prime and perform all the security checks necessary for secret chats.
  • -
  • A chooses a random value of a, 1 < a < p-1, and computes g_a:=power(g,a) mod p (a 256-byte number) and g_a_hash:=SHA256(g_a) (32 bytes long).
  • -
  • A invokes (sends to server S) phone.requestCall, which has the field g_a_hash:bytes, among others. For this call, this field is to be filled with g_a_hash, not g_a itself.
  • -
  • The Server S performs privacy checks and sends an updatePhoneCall update with a phoneCallRequested constructor to all of B's active devices. This update, apart from the identity of A and other relevant parameters, contains the g_a_hash field, filled with the value obtained from A.
  • -
  • B accepts the call on one of their devices, stores the received value of g_a_hash for this instance of the voice call creation protocol, chooses a random value of b, 1 < b < p-1, computes g_b:=power(g,b) mod p, performs all the required security checks, and invokes the phone.acceptCall method, which has a g_b:bytes field (among others), to be filled with the value of g_b itself (not its hash).
  • -
  • The Server S sends an updatePhoneCall with the phoneCallDiscarded constructor to all other devices B has authorized, to prevent accepting the same call on any of the other devices. From this point on, the server S works only with that of B's devices which has invoked phone.acceptCall first.
  • -
  • The Server S sends to A an updatePhoneCall update with phoneCallAccepted constructor, containing the value of g_b received from B.
  • -
  • A performs all the usual security checks on g_b and a, computes the Diffie--Hellman key key:=power(g_b,a) mod p and its fingerprint key_fingerprint:long, equal to the lower 64 bits of SHA1(key), the same as with secret chats. Then A invokes the phone.confirmCall method, containing g_a:bytes and key_fingerprint:long.
  • -
  • The Server S sends to B an updatePhoneCall update with the phoneCall constructor, containing the value of g_a in g_a_or_b:bytes field, and key_fingerprint:long
  • -
  • At this point B receives the value of g_a. It checks that SHA256(g_a) is indeed equal to the previously received value of g_a_hash, performs all the usual Diffie-Hellman security checks, and computes the key key:=power(g_a,b) mod p and its fingerprint, equal to the lower 64 bits of SHA1(key). Then it checks that this fingerprint equals the value of key_fingerprint:long received from the other side, as an implementation sanity check.
  • -
-

At this point, the Diffie--Hellman key exchange is complete, and both parties have a 256-byte shared secret key key which is used to encrypt all further exchanges between A and B.

-

It is of paramount importance to accept each update only once for each instance of the key generation protocol, discarding any duplicates or alternative versions of already received and processed messages (updates).

-

Encryption

-
-

This document describes encryption in voice and video calls as implemented in Telegram apps with versions 7.0 and above. See this document for details on encryption used in voice calls in app versions released before August 14, 2020.

-
-

The Telegram Voice and Video Call Library uses an optimized version of MTProto 2.0 to send and receive packets, consisting of one or more end-to-end encrypted messages of various types (ice candidates list, video formats, remote video status, audio stream data, video stream data, message ack or empty).

-

This document describes only the encryption process, leaving out encoding and network-dependent parts.

-

The library starts working with:

-
    -
  • An encryption key key shared between the parties, as generated above.
  • -
  • Information whether the call is outgoing or incoming.
  • -
  • Two data transfer channels: signaling, offered by the Telegram API, and transport based on WebRTC.
  • -
-

Both data transfer channels are unreliable (messages may get lost), but signaling is slower and more reliable.

-

Encrypting Call Data

-

The body of a packet (decrypted_body) consists of several messages and their respective seq numbers concatenated together.

-
    -
  • decrypted_body = message_seq1 + message_body1 + message_seq2 + message_body2
  • -
-

Each decrypted_body is unique because no two seq numbers of the first message can be the same. If only old messages need to be re-sent, an empty message with new unique seq is added to the packet first.

-

The encryption key key is used to compute a 128-bit msg_key and then a 256-bit aes_key and a 128-bit aes_iv:

-
    -
  • msg_key_large = SHA256 (substr(key, 88+x, 32) + decrypted_body);
  • -
  • msg_key = substr (msg_key_large, 8, 16);
  • -
  • sha256_a = SHA256 (msg_key + substr (key, x, 36));
  • -
  • sha256_b = SHA256 (substr (key, 40+x, 36) + msg_key);
  • -
  • aes_key = substr (sha256_a, 0, 8) + substr (sha256_b, 8, 16) + substr (sha256_a, 24, 8);
  • -
  • aes_iv = substr (sha256_b, 0, 4) + substr (sha256_a, 8, 8) + substr (sha256_b, 24, 4);
  • -
-

x depends on whether the call is outgoing or incoming and on the connection type:

-
    -
  • x = 0 for outgoing + transport
  • -
  • x = 8 for incoming + transport
  • -
  • x = 128 for outgoing + signaling
  • -
  • x = 136 for incoming + signaling
  • -
-

This allows apps to decide which packet types will be sent to which connections and work in these connections independently (with each having its own seq counter).

-

The resulting aes_key and aes_iv are used to encrypt decrypted_body:

-
    -
  • encrypted_body = AES_CTR (decrypted_body, aes_key, aes_iv)
  • -
-

The packet that gets sent consists of msg_key and encrypted_body:

-
    -
  • packet_bytes = msg_key + encrypted_body
  • -
-

When received, the packet gets decrypted using key and msg_key, after which msg_key is checked against the relevant SHA256 substring. If the check fails, the packet must be discarded.

-

Protecting Against Replay Attacks

-

Each of the peers maintains its own 32-bit monotonically increasing counter for outgoing messages, seq, starting with 1. This seq counter is prepended to each sent message and increased by 1 for each new message. No two seq numbers of the first message in a packet can be the same. If only old messages need to be re-sent, an empty message with a new unique seq is added to the packet first. When the seq counter reaches 2^30, the call must be aborted. Each peer stores seq values of all the messages it has received (and processed) which are larger than max_received_seq - 64, where max_received_seq is the largest seq number received so far.

-

If a packet is received, the first message of which has a seq that is smaller or equal to max_received_seq - 64 or its seq had already been received, the message is discarded. Otherwise, the seq values of all incoming messages are memorized and max_received_seq is adjusted. This guarantees that no two packets will be processed twice.

-

Key Verification

-

To verify the key, and ensure that no MITM attack is taking place, both parties concatenate the secret key key with the value g_a of the Caller ( A ), compute SHA256 and use it to generate a sequence of emoticons. More precisely, the SHA256 hash is split into four 64-bit integers; each of them is divided by the total number of emoticons used (currently 333), and the remainder is used to select specific emoticons. The specifics of the protocol guarantee that comparing four emoticons out of a set of 333 is sufficient to prevent eavesdropping (MiTM attack on DH) with a probability of 0.9999999999.

-

This is because instead of the standard Diffie-Hellman key exchange which requires only two messages between the parties:

-
    -
  • A->B : (generates a and) sends g_a := g^a
  • -
  • B->A : (generates b and true key (g_a)^b, then) sends g_b := g^b
  • -
  • A : computes key (g_b)^a
  • -
-

we use a three-message modification thereof that works well when both parties are online (which also happens to be a requirement for voice calls):

-
    -
  • A->B : (generates a and) sends g_a_hash := hash(g^a)
  • -
  • B->A : (stores g_a_hash, generates b and) sends g_b := g^b
  • -
  • A->B : (computes key (g_b)^a, then) sends g_a := g^a
  • -
  • B : checks hash(g_a) == g_a_hash, then computes key (g_a)^b
  • -
-

The idea here is that A commits to a specific value of a (and of g_a) without disclosing it to B. B has to choose its value of b and g_b without knowing the true value of g_a, so that it cannot try different values of b to force the final key (g_a)^b to have any specific properties (such as fixed lower 32 bits of SHA256(key)). At this point, B commits to a specific value of g_b without knowing g_a. Then A has to send its value g_a; it cannot change it even though it knows g_b now, because the other party B would accept only a value of g_a that has a hash specified in the very first message of the exchange.

-

If some impostor is pretending to be either A or B and tries to perform a Man-in-the-Middle Attack on this Diffie--Hellman key exchange, the above still holds. Party A will generate a shared key with B -- or whoever pretends to be B -- without having a second chance to change its exponent a depending on the value g_b received from the other side; and the impostor will not have a chance to adapt his value of b depending on g_a, because it has to commit to a value of g_b before learning g_a. The same is valid for the key generation between the impostor and the party B.

-

The use of hash commitment in the DH exchange constrains the attacker to only one guess to generate the correct visualization in their attack, which means that using just over 33 bits of entropy represented by four emoji in the visualization is enough to make a successful attack highly improbable.

-
-

For a slightly more user-friendly explanation of the above see: How are calls authenticated?

-
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/api/end-to-end/voice-calls.html b/data/corefork.telegram.org/api/end-to-end/voice-calls.html deleted file mode 100644 index 66a413077e..0000000000 --- a/data/corefork.telegram.org/api/end-to-end/voice-calls.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - End-to-End Encrypted Voice Calls - - - - - - - - - - - - - -
- -
-
-
- -

End-to-End Encrypted Voice Calls

- -
-

This document describes encryption in voice calls as implemented in Telegram apps with versions < 7.0. See this document for details on encryption used in voice and video calls in app versions released on August 14, 2020 and later.

-
-
Related articles
-

- -

Establishing voice calls

-

Before a voice call is ready, some preliminary actions have to be performed. The calling party needs to contact the party to be called and check whether it is ready to accept the call. Besides that, the parties have to negotiate the protocols to be used, learn the IP addresses of each other or of the Telegram relay servers to be used (so-called reflectors), and generate a one-time encryption key for this voice call with the aid of Diffie--Hellman key exchange. All of this is accomplished in parallel with the aid of several Telegram API methods and related notifications. This document details the generation of the encryption key. Other negotiations will be eventually documented elsewhere.

-

Key Generation

-

The Diffie-Hellman key exchange, as well as the whole protocol used to create a new voice call, is quite similar to the one used for Secret Chats. We recommend studying the linked article before proceeding.

-

However, we have introduced some important changes to facilitate the key verification process. Below is the entire exchange between the two communicating parties, the Caller (A) and the Callee (B), through the Telegram servers (S).

-
    -
  • A executes messages.getDhConfig to find out the 2048-bit Diffie-Hellman prime p and generator g. The client is expected to check whether p is a safe prime and perform all the security checks necessary for secret chats.
  • -
  • A chooses a random value of a, 1 < a < p-1, and computes g_a:=power(g,a) mod p (a 256-byte number) and g_a_hash:=SHA256(g_a) (32 bytes long).
  • -
  • A invokes (sends to server S) phone.requestCall, which has the field g_a_hash:bytes, among others. For this call, this field is to be filled with g_a_hash, not g_a itself.
  • -
  • The Server S performs privacy checks and sends an updatePhoneCall update with a phoneCallRequested constructor to all of B's active devices. This update, apart from the identity of A and other relevant parameters, contains the g_a_hash field, filled with the value obtained from A.
  • -
  • B accepts the call on one of their devices, stores the received value of g_a_hash for this instance of the voice call creation protocol, chooses a random value of b, 1 < b < p-1, computes g_b:=power(g,b) mod p, performs all the required security checks, and invokes the phone.acceptCall method, which has a g_b:bytes field (among others), to be filled with the value of g_b itself (not its hash).
  • -
  • The Server S sends an updatePhoneCall with the phoneCallDiscarded constructor to all other devices B has authorized, to prevent accepting the same call on any of the other devices. From this point on, the server S works only with that of B's devices which has invoked phone.acceptCall first.
  • -
  • The Server S sends to A an updatePhoneCall update with phoneCallAccepted constructor, containing the value of g_b received from B.
  • -
  • A performs all the usual security checks on g_b and a, computes the Diffie--Hellman key key:=power(g_b,a) mod p and its fingerprint key_fingerprint:long, equal to the lower 64 bits of SHA1(key), the same as with secret chats. Then A invokes the phone.confirmCall method, containing g_a:bytes and key_fingerprint:long.
  • -
  • The Server S sends to B an updatePhoneCall update with the phoneCall constructor, containing the value of g_a in g_a_or_b:bytes field, and key_fingerprint:long
  • -
  • At this point B receives the value of g_a. It checks that SHA256(g_a) is indeed equal to the previously received value of g_a_hash, performs all the usual Diffie-Hellman security checks, and computes the key key:=power(g_a,b) mod p and its fingerprint, equal to the lower 64 bits of SHA1(key). Then it checks that this fingerprint equals the value of key_fingerprint:long received from the other side, as an implementation sanity check.
  • -
-

At this point, the Diffie--Hellman key exchange is complete, and both parties have a 256-byte shared secret key key which is used to encrypt all further exchanges between A and B.

-

It is of paramount importance to accept each update only once for each instance of the key generation protocol, discarding any duplicates or alternative versions of already received and processed messages (updates).

-

Encryption of voice data

-

Both parties A (the Caller) and B (the Callee) transform the voice information into a sequence of small chunks or packets, not more than 1 kilobyte each. This information is to be encrypted using the shared key key generated during the initial exchange, and sent to the other party, either directly (P2P) or through Telegram's relay servers (so-called reflectors). This document describes only the encryption process for each chunk, leaving out voice encoding and the network-dependent parts.

-

Encapsulation of low-level voice data

-

The low-level data chunk raw_data:string, obtained from voice encoder, is first encapsulated into one of the two constructors for the DecryptedDataBlock type, similar to DecryptedMessage used in secret chats:

-
decryptedDataBlock#dbf948c1 random_id:long random_bytes:string flags:# voice_call_id:flags.2?int128 in_seq_no:flags.4?int out_seq_no:flags.4?int recent_received_mask:flags.5?int proto:flags.3?int extra:flags.1?string raw_data:flags.0?string = DecryptedDataBlock;
-simpleDataBlock#cc0d0e76 random_id:long random_bytes:string raw_data:string = DecryptedDataBlock;
-

Here out_seq_no is the chunk's sequence number among all sent by this party (starting from one), in_seq_no -- the highest known out_seq_no from the received packets. The parameter recent_received_mask is a 32-bit mask, used to track delivery of the last 32 packets sent by the other party. The bit i is set if a packet with out_seq_no equal to in_seq_no-i has been received.

-

The higher 8 bits in flags are reserved for use by the lower-level protocol (the one which generates and interprets raw_data), and will never be used for future extensions of decryptedDataBlock.

-

The parameters voice_call_id and proto are mandatory until the other side confirms reception of at least one packet by sending a packet with a non-zero in_seq_no. After that, they become optional, and the simpleDataBlock constructor can be used if the lower level protocol wants to.

-

The parameter voice_call_id is computed from the key key and equals the lower 128 bits of its SHA-256.

-

The random_bytes string should contain at least 7 bytes of random data. The field random_id also contains 8 random bytes, which can be used as a unique packet identifier if necessary.

-

MTProto encryption

-

Once the data is encapsulated in DecryptedDataBlock, it is TL-serialized and encrypted with MTProto, using key instead of auth_key; the parameter x is to be set to 0 for messages from A to B, and to 8 for messages in the opposite direction. Encrypted data are prepended by the 128-bit msg_key (usual for MTProto); before that, either the 128-bit voice_call_id (if P2P is used) or the peer_tag (if reflectors are used) is prepended. The resulting data packet is sent by UDP either directly to the other party (if P2P is possible) or to the Telegram relay servers (reflectors).

-

Key Verification

-

To verify the key, both parties concatenate the secret key key with the value g_a of the Caller ( A ), compute SHA256 and use it to generate a sequence of emoticons. More precisely, the SHA256 hash is split into four 64-bit integers; each of them is divided by the total number of emoticons used (currently 333), and the remainder is used to select specific emoticons. The specifics of the protocol guarantee that comparing four emoticons out of a set of 333 is sufficient to prevent eavesdropping (MiTM attack on DH) with a probability of 0.9999999999.

-

This is because instead of the standard Diffie-Hellman key exchange which requires only two messages between the parties:

-
    -
  • A->B : (generates a and) sends g_a := g^a
  • -
  • B->A : (generates b and true key (g_a)^b, then) sends g_b := g^b
  • -
  • A : computes key (g_b)^a
  • -
-

we use a three-message modification thereof that works well when both parties are online (which also happens to be a requirement for voice calls):

-
    -
  • A->B : (generates a and) sends g_a_hash := hash(g^a)
  • -
  • B->A : (stores g_a_hash, generates b and) sends g_b := g^b
  • -
  • A->B : (computes key (g_b)^a, then) sends g_a := g^a
  • -
  • B : checks hash(g_a) == g_a_hash, then computes key (g_a)^b
  • -
-

The idea here is that A commits to a specific value of a (and of g_a) without disclosing it to B. B has to choose its value of b and g_b without knowing the true value of g_a, so that it cannot try different values of b to force the final key (g_a)^b to have any specific properties (such as fixed lower 32 bits of SHA256(key)). At this point, B commits to a specific value of g_b without knowing g_a. Then A has to send its value g_a; it cannot change it even though it knows g_b now, because the other party B would accept only a value of g_a that has a hash specified in the very first message of the exchange.

-

If some impostor is pretending to be either A or B and tries to perform a Man-in-the-Middle Attack on this Diffie--Hellman key exchange, the above still holds. Party A will generate a shared key with B -- or whoever pretends to be B -- without having a second chance to change its exponent a depending on the value g_b received from the other side; and the impostor will not have a chance to adapt his value of b depending on g_a, because it has to commit to a value of g_b before learning g_a. The same is valid for the key generation between the impostor and the party B.

-

The use of hash commitment in the DH exchange constrains the attacker to only one guess to generate the correct visualization in their attack, which means that using just over 33 bits of entropy represented by four emoji in the visualization is enough to make a successful attack highly improbable.

-
-

For a slightly more user-friendly explanation of the above see: How are calls authenticated?

-
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/api/geochats.html b/data/corefork.telegram.org/api/geochats.html deleted file mode 100644 index 947f5bb5a2..0000000000 --- a/data/corefork.telegram.org/api/geochats.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - Nope - - - - - - - - - - - - - -
- -
-
-
- -

Nope

- -

Deprecated old docs. This was definitely not the droid you were looking for.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/api/mentions.html b/data/corefork.telegram.org/api/mentions.html deleted file mode 100644 index cd39834926..0000000000 --- a/data/corefork.telegram.org/api/mentions.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - Mentions - - - - - - - - - - - - - -
- -
-
-
- -

Mentions

- -
- -

Telegram allows mentioning other users in case of urgent duckling matters, and quickly navigating to those mentions in order to read them as swiftly as possible.

-
messageEntityMention#fa04579d offset:int length:int = MessageEntity;
-messageEntityMentionName#dc7b1140 offset:int length:int user_id:long = MessageEntity;
-inputMessageEntityMentionName#208e68c9 offset:int length:int user_id:InputUser = MessageEntity;
-
-message#85d6cbe2 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true from_scheduled:flags.18?true legacy:flags.19?true edit_hide:flags.21?true pinned:flags.24?true id:int from_id:flags.8?Peer peer_id:Peer fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long reply_to:flags.3?MessageReplyHeader date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector<MessageEntity> views:flags.10?int forwards:flags.10?int replies:flags.23?MessageReplies edit_date:flags.15?int post_author:flags.16?string grouped_id:flags.17?long restriction_reason:flags.22?Vector<RestrictionReason> ttl_period:flags.25?int = Message;
-
-channelParticipantsMentions#e04b5ceb flags:# q:flags.0?string top_msg_id:flags.1?int = ChannelParticipantsFilter;
-
----functions---
-
-messages.sendMessage#520c3870 flags:# no_webpage:flags.1?true silent:flags.5?true background:flags.6?true clear_draft:flags.7?true peer:InputPeer reply_to_msg_id:flags.0?int message:string random_id:long reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector<MessageEntity> schedule_date:flags.10?int = Updates;
-
-channels.getParticipants#77ced9d0 channel:InputChannel filter:ChannelParticipantsFilter offset:int limit:int hash:long = channels.ChannelParticipants;
-

Mentions are implemented as message entities, passed to the messages.sendMessage method:

- -

Incoming messages mentioning to the current user will have the mentioned flag set, and will contain one or more messageEntityMention and messageEntityMentionName constructors.

-

Graphical clients can show a list of mentionable users when the user starts entering an @ in the text bar; for this purpose, the channelParticipantsMentions filter can be used in channels.getParticipants.
-This filter can be enhanced by providing an additional query string q (anything the user enters after @); it will also return non-participant users, in case of channel users commenting in post comment sections.

-

Dialog mentions

-
dialog#2c171f72 flags:# pinned:flags.2?true unread_mark:flags.3?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage folder_id:flags.4?int = Dialog;
-
----functions---
-
-messages.getUnreadMentions#46578472 peer:InputPeer offset_id:int add_offset:int limit:int max_id:int min_id:int = messages.Messages;
-messages.readMentions#f0189d3 peer:InputPeer = messages.AffectedHistory;
-

Graphical clients are supposed to show a blue mention indicator next to the message counter of chats in the dialog list.
-The dialog constructor contains an unread_mentions_count field to isolate chats with unread mentions; the actual mention counter should be shown inside of the chat itself, above an @ button that can be used, by clicking multiple times, to navigate back (using messages.getUnreadMentions) through the mention history.

-

When the last unread mention is read, or when long-clicking on the @ button, all mentions for a chat should marked as read using messages.readMentions.

- -
- -
-
- -
- - - - - - - - diff --git a/data/corefork.telegram.org/api/poll.html b/data/corefork.telegram.org/api/poll.html deleted file mode 100644 index 8dd53c98bd..0000000000 --- a/data/corefork.telegram.org/api/poll.html +++ /dev/null @@ -1,199 +0,0 @@ - - - - - Poll - - - - - - - - - - - - - -
- -
-
-
- -

Poll

- -
- -

Telegram allows sending polls and quizes, that can be voted on by thousands, if not milions of users in chats and channels.

-

Sending a poll

-
pollAnswer#6ca9c2e9 text:string option:bytes = PollAnswer;
-
-poll#86e18161 id:long flags:# closed:flags.0?true public_voters:flags.1?true multiple_choice:flags.2?true quiz:flags.3?true question:string answers:Vector<PollAnswer> close_period:flags.4?int close_date:flags.5?int = Poll;
-
-inputMediaPoll#f94e5f1 flags:# poll:Poll correct_answers:flags.0?Vector<bytes> solution:flags.1?string solution_entities:flags.1?Vector<MessageEntity> = InputMedia;
-
----functions---
-
-messages.sendMedia#3491eba9 flags:# silent:flags.5?true background:flags.6?true clear_draft:flags.7?true peer:InputPeer reply_to_msg_id:flags.0?int media:InputMedia message:string random_id:long reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector<MessageEntity> schedule_date:flags.10?int = Updates;
-

To send a poll in a chat, call messages.sendMedia, providing an inputMediaPoll:

-
    -
  • -

    poll is the actual poll constructor, containing:

    -
      -
    • question - The poll title, aka the poll's title
    • -
    • answers - A vector of possible answers (2-10), each with a visible title text , and a unique option identifier (1-100 bytes)
    • -
    • closed - Whether the poll is closed
    • -
    • public_voters - Whether cast votes are publicly visible to all users (non-anonymous poll)
    • -
    • multiple_choice - Whether multiple options can be chosen as answer
    • -
    • quiz - Whether this is a quiz with correct answer IDs specified in inputMediaPoll.correct_answers
    • -
    • close_period - Amount of time in seconds the poll will be active after creation, 5-600. Can't be used together with close_date .
    • -
    • close_date - Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 600 seconds in the future; can't be used together with close_period .
      -These last two parameters are exactly the same, except that one uses absolute, the other relative unixtime.
    • -
    -
  • -
  • -

    correct_answers - For quizes, option ID of the only correct answer

    -
  • -
  • -

    solution - Text that is shown when a user chooses an incorrect answer or taps on the lamp icon in a quiz-style poll, 0-200 characters with at most 2 line feeds

    -
  • -
  • -

    solution_entities - Styled text message entities for the solution explanation

    -
  • -
-

In order to prematurely close the poll, preventing further votes, use messages.editMessage, setting the poll.closed flag to true.

-

Voting in polls

-
pollAnswerVoters#3b6ddad2 flags:# chosen:flags.0?true correct:flags.1?true option:bytes voters:int = PollAnswerVoters;
-
-pollResults#dcb82ea3 flags:# min:flags.0?true results:flags.1?Vector<PollAnswerVoters> total_voters:flags.2?int recent_voters:flags.3?Vector<long> solution:flags.4?string solution_entities:flags.4?Vector<MessageEntity> = PollResults;
-
-poll#86e18161 id:long flags:# closed:flags.0?true public_voters:flags.1?true multiple_choice:flags.2?true quiz:flags.3?true question:string answers:Vector<PollAnswer> close_period:flags.4?int close_date:flags.5?int = Poll;
-
-messageMediaPoll#4bd6e798 poll:Poll results:PollResults = MessageMedia;
-
-updateMessagePoll#aca1657b flags:# poll_id:long poll:flags.0?Poll results:PollResults = Update;
-
----functions---
-
-messages.sendVote#10ea6184 peer:InputPeer msg_id:int options:Vector<bytes> = Updates;
-

When receiving a message with a messageMediaPoll, users can vote in it using messages.sendVote, specifying the chosen option identifiers.

-

The method will return an updateMessagePoll, containing an updated pollResults constructor, with the chosen flag set on the options we chose, and the correct flag set on the correct answers.

-

Getting poll votes

-
pollAnswerVoters#3b6ddad2 flags:# chosen:flags.0?true correct:flags.1?true option:bytes voters:int = PollAnswerVoters;
-
-pollResults#dcb82ea3 flags:# min:flags.0?true results:flags.1?Vector<PollAnswerVoters> total_voters:flags.2?int recent_voters:flags.3?Vector<long> solution:flags.4?string solution_entities:flags.4?Vector<MessageEntity> = PollResults;
-
-updateMessagePoll#aca1657b flags:# poll_id:long poll:flags.0?Poll results:PollResults = Update;
-
----functions---
-
-messages.getPollResults#73bb643b peer:InputPeer msg_id:int = Updates;
-

Regularly, if new users have voted in polls available to the user, they will receive an updateMessagePoll, with updated pollResults.

-

The same constructor can also be fetched manually using messages.getPollResults.

-

Getting poll voters in non-anonymous polls

-
messageUserVote#34d247b4 user_id:long option:bytes date:int = MessageUserVote;
-messageUserVoteInputOption#3ca5b0ec user_id:long date:int = MessageUserVote;
-messageUserVoteMultiple#8a65e557 user_id:long options:Vector<bytes> date:int = MessageUserVote;
-
-messages.votesList#823f649 flags:# count:int votes:Vector<MessageUserVote> users:Vector<User> next_offset:flags.0?string = messages.VotesList; 
-
-updateMessagePollVote#106395c9 poll_id:long user_id:long options:Vector<bytes> qts:int = Update;
-
----functions---
-
-messages.getPollVotes#b86e380e flags:# peer:InputPeer id:int option:flags.0?bytes offset:flags.1?string limit:int = messages.VotesList; 
-

messages.getPollVotes can be used to get poll results for non-anonymous polls, to see how each user voted for a poll option.
-Bots will also receive an updateMessagePollVote every time a user their answer in a non-anonymous poll. Bots receive new votes only in polls that were sent by the bot itself.

- -
- -
-
- -
- - - - - - - - diff --git a/data/corefork.telegram.org/cdn.html b/data/corefork.telegram.org/cdn.html deleted file mode 100644 index 5b38dd3f3b..0000000000 --- a/data/corefork.telegram.org/cdn.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - Encrypted CDNs for Speed and Security - - - - - - - - - - - - - -
- -
-
-
-
-

Encrypted CDNs for Speed and Security

- -

Following the launch of version 4.2 of the official apps, Telegram client apps may be required to download popular files that were published in public channels with more than 100,000 members from secondary Content Delivery Network data centers. These CDN DCs are located in regions with significant Telegram traffic where we wouldn't want to place Telegram servers for various reasons.

-

The CDN DCs are not a part of the Telegram cloud and should be considered enemy territory. For this reason, each file that is to be sent to these CDN DCs is encrypted with a unique key using AES-256-CTR encryption. The CDN can't access the data it stores because these keys are only accessible to the main MTProto server and to the authorized client.

-
-

See also: More about CDNs and governments in the Advanced FAQ

-
-

How this works

-

When a file from a public channel with ~100,000 members becomes popular in a particular region, the Telegram server may encrypt this file with a unique AES-256-CTR key and send it to a relevant CDN DC for storage.

-

When a file is stored in a CDN DC close to the end user, the download speed will be much higher because the data needs to travel smaller distances and will likely avoid many bottlenecks that exist between regions.

-

This is secure because CDN DCs are treated the same way as internet providers / random third parties:

-
    -
  • CDN DCs don‘t have the keys to decrypt files that are stored there, so they can’t access the data even if a DC becomes compromised.
  • -
  • Encrypted files fragments are protected from tampering by their SHA-256 hash which is checked on the client upon receipt.
  • -
  • No private data is stored in or passed to the CDN DCs.
  • -
  • The server only allows media from public channels with more than 100,000 subscribers to be cached in CDN DCs (this includes media forwarded from those channels and viral media that originated from other large public channels).
  • -
-
- -
- -

CDNs are very limited when it comes to communication: the master data center only uploads encrypted files for storage and will accept no data from the CDN. The client apps only download encrypted files and accept no other updates. The client apps obtain the keys necessary to decrypt the file from the main Telegram server and verify the integrity of the file by its hash, which means that the CDN may only supply the correct file – anything different will be immediately discarded by the client.

-

CDN DCs do not store files on hard disks – only in memory. When a CDN server runs out of memory, a simple LRU algorithm is used to replace the least popular files with new ones.

-

How CDN DCs are different from the master DCs

-
    -
  • CDNs may not be trusted.
  • -
  • Client developers can use help.getCdnConfig to obtain a list of public RSA keys for CDN DCs, which are different from public RSA keys of the master DCs.
  • -
  • CDNs support only the following methods: upload.getCdnFile, initConnection, invokeWithLayer.
  • -
  • When working with CDNs, client developers must remember that auth_key may be deleted at any given moment (resulting in a -404 error, in which case a new key must be generated).
  • -
  • Client apps must not accept updates from CDN DCs (apps should only accept updates from their main connection to the master DC).
  • -
  • Clients must not allow the CDN DCs to substitute replies to queries sent to other DCs.
  • -
  • Clients must not send private user info that is passed in initConnection to the CDNs.
  • -
-

Getting files from a CDN

-

The API may return the upload.fileCdnRedirect constructor after an upload.getFile query. In this case, the client must request the required file from a CDN DC. The dc_id in the response is the id of the new CDN. The IP address for the connection will be available in help.getConfig, same as with the master DCs. The corresponding dcOption will have the flag cdn:flags.3?true.

-

Once a successful connection to the CDN-dc_id is established, the client must generate an auth_key (after confirming that the public RSA MTProto key of the CDN DC matches one from the list returned in help.getCdnConfig). Then the client must perform an upload.getCdnFile for each offset. For files of an unknown size it is necessary to repeat the query until an empty reply is returned.

-

upload.getCdnFile may return the upload.cdnFileReuploadNeeded constructor. In this case, the client needs to send an upload.reuploadCdnFile request to the DC that got the original upload.getFile request. Once upload.reuploadCdnFile is successfull, the app needs to request the file from the CDN DC again.

-

The main DC for a file is the DC where its main copy is stored (not to be confused with the main DC of the user) – either userProfilePhoto.dc_id, chatPhoto.dc_id, photo.dc_id, or document.dc_id.

-

Decrypting files

-

In upload.fileCdnRedirect, the server sends a decryption key and IV for the file (the fields encryption_key:bytes and encryption_iv:bytes respectively).

-

Having received a portion of encrypted data from the CDN DC inside upload.cdnFile, the client must decrypt this data using AES-256-CTR. For IV, it should use the value of encryption_iv, modified in the following manner: for each offset replace the last 4 bytes of the encryption_iv with offset / 16 in big-endian. This allows to effectively decrypt a file and to use random access to a file's content (e.g., for streaming).

-

Verifying files

-

In order to confirm that the CDN DC passed an untampered file, clients must verify hashes for each downloaded part. upload.fileCdnRedirect, upload.reuploadCdnFile and upload.getCdnFileHashes contain FileHash constructors. Each of these constructors contains the SHA-256 hash of a part of the file that starts with offset and takes limit bytes.

-

Before saving each portion of the data received from the CDN DC into the file, the client must confirm that its hash matches the hash that was received from the master DC. If missing a hash for any file part, client developers must use the upload.getCdnFileHashes method to obtain the missing hash.

-

Schema

-
fileHash#6242c773 offset:int limit:int hash:bytes = FileHash;
-
-upload.fileCdnRedirect#f18cda44 dc_id:int file_token:bytes encryption_key:bytes encryption_iv:bytes file_hashes:Vector<FileHash> = upload.File;
-
-upload.cdnFileReuploadNeeded#eea8e46e request_token:bytes = upload.CdnFile;
-upload.cdnFile#a99fca4f bytes:bytes = upload.CdnFile;
-
-
-dcOption#18b7a10d flags:# ipv6:flags.0?true media_only:flags.1?true tcpo_only:flags.2?true cdn:flags.3?true static:flags.4?true id:int ip_address:string port:int secret:flags.10?bytes = DcOption;
-
-cdnPublicKey#c982eaba dc_id:int public_key:string = CdnPublicKey;
-
-
-cdnConfig#5725e40a public_keys:Vector<CdnPublicKey> = CdnConfig;
-
----functions---
-
-// CDN DC
-upload.getCdnFile#2000bcc3 file_token:bytes offset:int limit:int = upload.CdnFile;
-
-// Master DC
-upload.reuploadCdnFile#9b2754a8 file_token:bytes request_token:bytes = Vector<FileHash>;
-upload.getCdnFileHashes#4da54231 file_token:bytes offset:int = Vector<FileHash>;
-
-help.getCdnConfig#52029342 = CdnConfig;
-

Restrictions on upload.getFile and upload.getCdnFile parameters

-
    -
  • offset must be divisible by 4096 bytes
  • -
  • limit must be divisible by 4096 bytes
  • -
  • 1048576 (1MB) must be divisible by limit
  • -
  • offset / (1024 * 1024) == (offset + limit - 1) / (1024 * 1024)
    (file parts that are being downloaded must always be inside the same megabyte-sized fragment)
  • -
-

Possible errors and their meanings

- - - - - - - - - - - - - - - - - - -
upload.getCdnFileFILE_TOKEN_INVALIDThe CDN DC did not accept the file_token (e.g., the token has expired). Continue downloading the file from the master DC using upload.getFile.
upload.reuploadCdnFileFILE_TOKEN_INVALIDThe master DC did not accept the file_token (e.g., the token has expired). Continue downloading the file from the master DC using upload.getFile.
upload.reuploadCdnFileREQUEST_TOKEN_INVALIDThe master DC did not accept the request_token from the CDN DC. Continue downloading the file from the master DC using upload.getFile.
-
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/account.password b/data/corefork.telegram.org/constructor/account.password deleted file mode 100644 index bad5a10a1b..0000000000 --- a/data/corefork.telegram.org/constructor/account.password +++ /dev/null @@ -1,213 +0,0 @@ - - - - - account.password - - - - - - - - - - - - - -
- -
-
-
- -

account.password

- -

Configuration for two-factor authorization

-

- -
-
account.password#185b184f flags:# has_recovery:flags.0?true has_secure_values:flags.1?true has_password:flags.2?true current_algo:flags.2?PasswordKdfAlgo srp_B:flags.2?bytes srp_id:flags.2?long hint:flags.3?string email_unconfirmed_pattern:flags.4?string new_algo:PasswordKdfAlgo new_secure_algo:SecurePasswordKdfAlgo secure_random:bytes pending_reset_date:flags.5?int = account.Password;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
has_recoveryflags.0?trueWhether the user has a recovery method configured
has_secure_valuesflags.1?trueWhether telegram passport is enabled
has_passwordflags.2?trueWhether the user has a password
current_algoflags.2?PasswordKdfAlgoThe KDF algorithm for SRP two-factor authentication of the current password
srp_Bflags.2?bytesSrp B param for SRP authorization
srp_idflags.2?longSrp ID param for SRP authorization
hintflags.3?stringText hint for the password
email_unconfirmed_patternflags.4?stringA password recovery email with the specified pattern is still awaiting verification
new_algoPasswordKdfAlgoThe KDF algorithm for SRP two-factor authentication to use when creating new passwords
new_secure_algoSecurePasswordKdfAlgoThe KDF algorithm for telegram passport
secure_randombytesSecure random string
pending_reset_dateflags.5?intThe 2FA password will be automatically removed at this date, unless the user cancels the operation
-

Type

-

account.Password

-

Related pages

-

Telegram Passport Manual

-

Two-factor authentication

-

How to login to a user's account if they have enabled 2FA, how to change password.

-

Pattern matching

-

Some methods require the client to verify if the data obtained from an external source matches a certain pattern.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/accountDaysTTL.html b/data/corefork.telegram.org/constructor/accountDaysTTL.html deleted file mode 100644 index ac4e1994e7..0000000000 --- a/data/corefork.telegram.org/constructor/accountDaysTTL.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - accountDaysTTL - - - - - - - - - - - - - -
- -
-
-
- -

accountDaysTTL

- -

Time to live in days of the current account

-

- -
-
accountDaysTTL#b8d0afdf days:int = AccountDaysTTL;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
daysintThis account will self-destruct in the specified number of days
-

Type

-

AccountDaysTTL

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/auth.authorization b/data/corefork.telegram.org/constructor/auth.authorization deleted file mode 100644 index 6f9e5333ec..0000000000 --- a/data/corefork.telegram.org/constructor/auth.authorization +++ /dev/null @@ -1,159 +0,0 @@ - - - - - auth.authorization - - - - - - - - - - - - - -
- -
-
-
- -

auth.authorization

- -

Contains user authorization info.

-

- -
-
auth.authorization#cd050916 flags:# tmp_sessions:flags.0?int user:User = auth.Authorization;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
tmp_sessionsflags.0?intTemporary passport sessions
userUserInfo on authorized user
-

Type

-

auth.Authorization

-

Related pages

-

Telegram Passport Manual

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/botCommandScopeChats.html b/data/corefork.telegram.org/constructor/botCommandScopeChats.html deleted file mode 100644 index d6278e1b62..0000000000 --- a/data/corefork.telegram.org/constructor/botCommandScopeChats.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - botCommandScopeChats - - - - - - - - - - - - - -
- -
-
-
- -

botCommandScopeChats

- -

The specified bot commands will be valid in all groups and supergroups.

-

- -
-
botCommandScopeChats#6fe1a881 = BotCommandScope;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

BotCommandScope

-

Related pages

-

Channels

-

How to handle channels, supergroups, groups, and what's the difference between them.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/botCommandScopeDefault.html b/data/corefork.telegram.org/constructor/botCommandScopeDefault.html deleted file mode 100644 index 7cbddaeef3..0000000000 --- a/data/corefork.telegram.org/constructor/botCommandScopeDefault.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - botCommandScopeDefault - - - - - - - - - - - - - -
- -
-
-
- -

botCommandScopeDefault

- -

The commands will be valid in all dialogs

-

- -
-
botCommandScopeDefault#2f6cb2ab = BotCommandScope;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

BotCommandScope

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/botInlineMessageMediaContact.html b/data/corefork.telegram.org/constructor/botInlineMessageMediaContact.html deleted file mode 100644 index c6c8d2df8c..0000000000 --- a/data/corefork.telegram.org/constructor/botInlineMessageMediaContact.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - botInlineMessageMediaContact - - - - - - - - - - - - - -
- -
-
-
- -

botInlineMessageMediaContact

- -

Send a contact

-

- -
-
botInlineMessageMediaContact#18d1cdc2 flags:# phone_number:string first_name:string last_name:string vcard:string reply_markup:flags.2?ReplyMarkup = BotInlineMessage;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
phone_numberstringPhone number
first_namestringFirst name
last_namestringLast name
vcardstringVCard info
reply_markupflags.2?ReplyMarkupInline keyboard
-

Type

-

BotInlineMessage

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/cdnPublicKey.html b/data/corefork.telegram.org/constructor/cdnPublicKey.html deleted file mode 100644 index 6051cdba04..0000000000 --- a/data/corefork.telegram.org/constructor/cdnPublicKey.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - cdnPublicKey - - - - - - - - - - - - - -
- -
-
-
- -

cdnPublicKey

- -

Public key to use only during handshakes to CDN DCs.

-

- -
-
cdnPublicKey#c982eaba dc_id:int public_key:string = CdnPublicKey;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
dc_idintCDN DC ID
public_keystringRSA public key
-

Type

-

CdnPublicKey

-

Related pages

-

Encrypted CDNs for Speed and Security

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/channelAdminLogEventActionChangeTitle.html b/data/corefork.telegram.org/constructor/channelAdminLogEventActionChangeTitle.html deleted file mode 100644 index 092267e2de..0000000000 --- a/data/corefork.telegram.org/constructor/channelAdminLogEventActionChangeTitle.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - channelAdminLogEventActionChangeTitle - - - - - - - - - - - - - -
- -
-
-
- -

channelAdminLogEventActionChangeTitle

- -

Channel/supergroup title was changed

-

- -
-
channelAdminLogEventActionChangeTitle#e6dfb825 prev_value:string new_value:string = ChannelAdminLogEventAction;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
prev_valuestringPrevious title
new_valuestringNew title
-

Type

-

ChannelAdminLogEventAction

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/channelAdminLogEventsFilter.html b/data/corefork.telegram.org/constructor/channelAdminLogEventsFilter.html deleted file mode 100644 index da43eefd2d..0000000000 --- a/data/corefork.telegram.org/constructor/channelAdminLogEventsFilter.html +++ /dev/null @@ -1,266 +0,0 @@ - - - - - channelAdminLogEventsFilter - - - - - - - - - - - - - -
- -
-
-
- -

channelAdminLogEventsFilter

- -

Filter only certain admin log events

-

- -
-
channelAdminLogEventsFilter#ea107ae4 flags:# join:flags.0?true leave:flags.1?true invite:flags.2?true ban:flags.3?true unban:flags.4?true kick:flags.5?true unkick:flags.6?true promote:flags.7?true demote:flags.8?true info:flags.9?true settings:flags.10?true pinned:flags.11?true edit:flags.12?true delete:flags.13?true group_call:flags.14?true invites:flags.15?true = ChannelAdminLogEventsFilter;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
joinflags.0?trueJoin events
leaveflags.1?trueLeave events
inviteflags.2?trueInvite events
banflags.3?trueBan events
unbanflags.4?trueUnban events
kickflags.5?trueKick events
unkickflags.6?trueUnkick events
promoteflags.7?trueAdmin promotion events
demoteflags.8?trueAdmin demotion events
infoflags.9?trueInfo change events (when about, linked chat, location, photo, stickerset, title or username data of a channel gets modified)
settingsflags.10?trueSettings change events (invites, hidden prehistory, signatures, default banned rights)
pinnedflags.11?trueMessage pin events
editflags.12?trueMessage edit events
deleteflags.13?trueMessage deletion events
group_callflags.14?trueGroup call events
invitesflags.15?trueInvite events
-

Type

-

ChannelAdminLogEventsFilter

-

Related pages

-

channelAdminLogEventActionParticipantJoin

-

A user has joined the group (in the case of big groups, info of the user that has joined isn't shown)

-

channelAdminLogEventActionParticipantLeave

-

A user left the channel/supergroup (in the case of big groups, info of the user that has joined isn't shown)

-

channelAdminLogEventActionParticipantInvite

-

A user was invited to the group

-

channelAdminLogEventActionParticipantToggleBan

-

The banned rights of a user were changed

-

channelAdminLogEventActionParticipantToggleAdmin

-

The admin rights of a user were changed

-

channelAdminLogEventActionChangeAbout

-

The description was changed

-

channelAdminLogEventActionChangeLinkedChat

-

The linked chat was changed

-

channelAdminLogEventActionChangeLocation

-

The geogroup location was changed

-

channelAdminLogEventActionChangePhoto

-

The channel/supergroup's picture was changed

-

channelAdminLogEventActionChangeStickerSet

-

The supergroup's stickerset was changed

-

channelAdminLogEventActionChangeTitle

-

Channel/supergroup title was changed

-

channelAdminLogEventActionChangeUsername

-

Channel/supergroup username was changed

-

channelAdminLogEventActionToggleInvites

-

Invites were enabled/disabled

-

channelAdminLogEventActionTogglePreHistoryHidden

-

The hidden prehistory setting was changed

-

channelAdminLogEventActionToggleSignatures

-

Channel signatures were enabled/disabled

-

channelAdminLogEventActionDefaultBannedRights

-

The default banned rights were modified

-

channelAdminLogEventActionUpdatePinned

-

A message was pinned

-

channelAdminLogEventActionEditMessage

-

A message was edited

-

channelAdminLogEventActionDeleteMessage

-

A message was deleted

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/channelLocation.html b/data/corefork.telegram.org/constructor/channelLocation.html deleted file mode 100644 index 323796e126..0000000000 --- a/data/corefork.telegram.org/constructor/channelLocation.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - channelLocation - - - - - - - - - - - - - -
- -
-
-
- -

channelLocation

- -

Geographical location of supergroup (geogroups)

-

- -
-
channelLocation#209b82db geo_point:GeoPoint address:string = ChannelLocation;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
geo_pointGeoPointGeographical location of supergrup
addressstringTextual description of the address
-

Type

-

ChannelLocation

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/channelMessagesFilter.html b/data/corefork.telegram.org/constructor/channelMessagesFilter.html deleted file mode 100644 index e179da60fd..0000000000 --- a/data/corefork.telegram.org/constructor/channelMessagesFilter.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - channelMessagesFilter - - - - - - - - - - - - - -
- -
-
-
- -

channelMessagesFilter

- -

Filter for getting only certain types of channel messages

-

- -
-
channelMessagesFilter#cd77d957 flags:# exclude_new_messages:flags.1?true ranges:Vector<MessageRange> = ChannelMessagesFilter;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
exclude_new_messagesflags.1?trueWhether to exclude new messages from the search
rangesVector<MessageRange>A range of messages to fetch
-

Type

-

ChannelMessagesFilter

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/channelParticipantsKicked.html b/data/corefork.telegram.org/constructor/channelParticipantsKicked.html deleted file mode 100644 index 99ab0c3482..0000000000 --- a/data/corefork.telegram.org/constructor/channelParticipantsKicked.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - channelParticipantsKicked - - - - - - - - - - - - - -
- -
-
-
- -

channelParticipantsKicked

- -

Fetch only kicked participants

-

- -
-
channelParticipantsKicked#a3b54985 q:string = ChannelParticipantsFilter;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
qstringOptional filter for searching kicked participants by name (otherwise empty)
-

Type

-

ChannelParticipantsFilter

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/chatAdminRights.html b/data/corefork.telegram.org/constructor/chatAdminRights.html deleted file mode 100644 index 0d508a2800..0000000000 --- a/data/corefork.telegram.org/constructor/chatAdminRights.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - chatAdminRights - - - - - - - - - - - - - -
- -
-
-
- -

chatAdminRights

- -

Represents the rights of an admin in a channel/supergroup.

-

- -
-
chatAdminRights#5fb224d5 flags:# change_info:flags.0?true post_messages:flags.1?true edit_messages:flags.2?true delete_messages:flags.3?true ban_users:flags.4?true invite_users:flags.5?true pin_messages:flags.7?true add_admins:flags.9?true anonymous:flags.10?true manage_call:flags.11?true other:flags.12?true = ChatAdminRights;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
change_infoflags.0?trueIf set, allows the admin to modify the description of the channel/supergroup
post_messagesflags.1?trueIf set, allows the admin to post messages in the channel
edit_messagesflags.2?trueIf set, allows the admin to also edit messages from other admins in the channel
delete_messagesflags.3?trueIf set, allows the admin to also delete messages from other admins in the channel
ban_usersflags.4?trueIf set, allows the admin to ban users from the channel/supergroup
invite_usersflags.5?trueIf set, allows the admin to invite users in the channel/supergroup
pin_messagesflags.7?trueIf set, allows the admin to pin messages in the channel/supergroup
add_adminsflags.9?trueIf set, allows the admin to add other admins with the same (or more limited) permissions in the channel/supergroup
anonymousflags.10?trueWhether this admin is anonymous
manage_callflags.11?trueIf set, allows the admin to change group call/livestream settings
otherflags.12?trueSet this flag if none of the other flags are set, but you stil want the user to be an admin.
-

Type

-

ChatAdminRights

-

Related pages

-

Channels

-

How to handle channels, supergroups, groups, and what's the difference between them.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/chatParticipant.html b/data/corefork.telegram.org/constructor/chatParticipant.html deleted file mode 100644 index d69bc04ec6..0000000000 --- a/data/corefork.telegram.org/constructor/chatParticipant.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - chatParticipant - - - - - - - - - - - - - -
- -
-
-
- -

chatParticipant

- -

Group member.

-

- -
-
chatParticipant#c02d4007 user_id:long inviter_id:long date:int = ChatParticipant;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
user_idlongMember user ID
inviter_idlongID of the user that added the member to the group
dateintDate added to the group
-

Type

-

ChatParticipant

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/decryptedMessageActionFlushHistory.html b/data/corefork.telegram.org/constructor/decryptedMessageActionFlushHistory.html deleted file mode 100644 index 56d23b1e5d..0000000000 --- a/data/corefork.telegram.org/constructor/decryptedMessageActionFlushHistory.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - decryptedMessageActionFlushHistory - - - - - - - - - - - - - -
- -
-
-
- -

decryptedMessageActionFlushHistory

- -

The entire message history has been deleted.

-

- -
-
===8===
-decryptedMessageActionFlushHistory#6719e45c = DecryptedMessageAction;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

DecryptedMessageAction

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/documentAttributeFilename.html b/data/corefork.telegram.org/constructor/documentAttributeFilename.html deleted file mode 100644 index 106a23c0b3..0000000000 --- a/data/corefork.telegram.org/constructor/documentAttributeFilename.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - documentAttributeFilename - - - - - - - - - - - - - -
- -
-
-
- -

documentAttributeFilename

- -

A simple document with a file name

-

- -
-
documentAttributeFilename#15590068 file_name:string = DocumentAttribute;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
file_namestringThe file name
-

Type

-

DocumentAttribute

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/help.userInfo b/data/corefork.telegram.org/constructor/help.userInfo deleted file mode 100644 index 36482836dd..0000000000 --- a/data/corefork.telegram.org/constructor/help.userInfo +++ /dev/null @@ -1,165 +0,0 @@ - - - - - help.userInfo - - - - - - - - - - - - - -
- -
-
-
- -

help.userInfo

- -

Internal use

-

- -
-
help.userInfo#1eb3758 message:string entities:Vector<MessageEntity> author:string date:int = help.UserInfo;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
messagestringInfo
entitiesVector<MessageEntity>Message entities for styled text
authorstringAuthor
dateintDate
-

Type

-

help.UserInfo

-

Related pages

-

Styled text with message entities

-

How to create styled text with message entities

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/highScore.html b/data/corefork.telegram.org/constructor/highScore.html deleted file mode 100644 index 82684771f0..0000000000 --- a/data/corefork.telegram.org/constructor/highScore.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - highScore - - - - - - - - - - - - - -
- -
-
-
- -

highScore

- -

Game highscore

-

- -
-
highScore#73a379eb pos:int user_id:long score:int = HighScore;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
posintPosition in highscore list
user_idlongUser ID
scoreintScore
-

Type

-

HighScore

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/inputEncryptedFileEmpty.html b/data/corefork.telegram.org/constructor/inputEncryptedFileEmpty.html deleted file mode 100644 index feb1cfe69d..0000000000 --- a/data/corefork.telegram.org/constructor/inputEncryptedFileEmpty.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - inputEncryptedFileEmpty - - - - - - - - - - - - - -
- -
-
-
- -

inputEncryptedFileEmpty

- -

Empty constructor.

-

- -
-
inputEncryptedFileEmpty#1837c364 = InputEncryptedFile;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

InputEncryptedFile

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/inputEncryptedFileUploaded.html b/data/corefork.telegram.org/constructor/inputEncryptedFileUploaded.html deleted file mode 100644 index 8b52288b79..0000000000 --- a/data/corefork.telegram.org/constructor/inputEncryptedFileUploaded.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - inputEncryptedFileUploaded - - - - - - - - - - - - - -
- -
-
-
- -

inputEncryptedFileUploaded

- -

Sets new encrypted file saved by parts using upload.saveFilePart method.

-

- -
-
inputEncryptedFileUploaded#64bd0306 id:long parts:int md5_checksum:string key_fingerprint:int = InputEncryptedFile;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
idlongRandom file ID created by clien
partsintNumber of saved parts
md5_checksumstringIn case md5-HASH of the (already encrypted) file was transmitted, file content will be checked prior to use
key_fingerprintint32-bit fingerprint of the key used to encrypt a file
-

Type

-

InputEncryptedFile

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/inputMediaDocumentExternal.html b/data/corefork.telegram.org/constructor/inputMediaDocumentExternal.html deleted file mode 100644 index 96a5c969f3..0000000000 --- a/data/corefork.telegram.org/constructor/inputMediaDocumentExternal.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - inputMediaDocumentExternal - - - - - - - - - - - - - -
- -
-
-
- -

inputMediaDocumentExternal

- -

Document that will be downloaded by the telegram servers

-

- -
-
inputMediaDocumentExternal#fb52dc99 flags:# url:string ttl_seconds:flags.0?int = InputMedia;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
urlstringURL of the document
ttl_secondsflags.0?intSelf-destruct time to live of document
-

Type

-

InputMedia

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/inputMessagesFilterPhotos.html b/data/corefork.telegram.org/constructor/inputMessagesFilterPhotos.html deleted file mode 100644 index b9134e4fcd..0000000000 --- a/data/corefork.telegram.org/constructor/inputMessagesFilterPhotos.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - inputMessagesFilterPhotos - - - - - - - - - - - - - -
- -
-
-
- -

inputMessagesFilterPhotos

- -

Filter for messages containing photos.

-

- -
-
inputMessagesFilterPhotos#9609a51c = MessagesFilter;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

MessagesFilter

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/inputPaymentCredentialsApplePay.html b/data/corefork.telegram.org/constructor/inputPaymentCredentialsApplePay.html deleted file mode 100644 index 28ef0982b6..0000000000 --- a/data/corefork.telegram.org/constructor/inputPaymentCredentialsApplePay.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - inputPaymentCredentialsApplePay - - - - - - - - - - - - - -
- -
-
-
- -

inputPaymentCredentialsApplePay

- -

Apple pay payment credentials

-

- -
-
inputPaymentCredentialsApplePay#aa1c39f payment_data:DataJSON = InputPaymentCredentials;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
payment_dataDataJSONPayment data
-

Type

-

InputPaymentCredentials

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/inputPeerNotifySettings.html b/data/corefork.telegram.org/constructor/inputPeerNotifySettings.html deleted file mode 100644 index 1a62e352db..0000000000 --- a/data/corefork.telegram.org/constructor/inputPeerNotifySettings.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - inputPeerNotifySettings - - - - - - - - - - - - - -
- -
-
-
- -

inputPeerNotifySettings

- -

Notification settings.

-

- -
-
inputPeerNotifySettings#9c3d198e flags:# show_previews:flags.0?Bool silent:flags.1?Bool mute_until:flags.2?int sound:flags.3?string = InputPeerNotifySettings;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
show_previewsflags.0?BoolIf the text of the message shall be displayed in notification
silentflags.1?BoolPeer was muted?
mute_untilflags.2?intDate until which all notifications shall be switched off
soundflags.3?stringName of an audio file for notification
-

Type

-

InputPeerNotifySettings

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/inputPrivacyKeyPhoneP2P.html b/data/corefork.telegram.org/constructor/inputPrivacyKeyPhoneP2P.html deleted file mode 100644 index aff723d318..0000000000 --- a/data/corefork.telegram.org/constructor/inputPrivacyKeyPhoneP2P.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - inputPrivacyKeyPhoneP2P - - - - - - - - - - - - - -
- -
-
-
- -

inputPrivacyKeyPhoneP2P

- -

Whether the user allows P2P communication during VoIP calls

-

- -
-
inputPrivacyKeyPhoneP2P#db9e70d2 = InputPrivacyKey;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

InputPrivacyKey

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/inputPrivacyKeyProfilePhoto.html b/data/corefork.telegram.org/constructor/inputPrivacyKeyProfilePhoto.html deleted file mode 100644 index b23d641c14..0000000000 --- a/data/corefork.telegram.org/constructor/inputPrivacyKeyProfilePhoto.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - inputPrivacyKeyProfilePhoto - - - - - - - - - - - - - -
- -
-
-
- -

inputPrivacyKeyProfilePhoto

- -

Whether people will be able to see the user's profile picture

-

- -
-
inputPrivacyKeyProfilePhoto#5719bacc = InputPrivacyKey;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

InputPrivacyKey

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/inputReportReasonOther.html b/data/corefork.telegram.org/constructor/inputReportReasonOther.html deleted file mode 100644 index a9f56de494..0000000000 --- a/data/corefork.telegram.org/constructor/inputReportReasonOther.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - inputReportReasonOther - - - - - - - - - - - - - -
- -
-
-
- -

inputReportReasonOther

- -

Other

-

- -
-
inputReportReasonOther#c1e4a2b1 = ReportReason;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

ReportReason

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/inputSecureFileLocation.html b/data/corefork.telegram.org/constructor/inputSecureFileLocation.html deleted file mode 100644 index fb0af5db7b..0000000000 --- a/data/corefork.telegram.org/constructor/inputSecureFileLocation.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - inputSecureFileLocation - - - - - - - - - - - - - -
- -
-
-
- -

inputSecureFileLocation

- -

Location of encrypted telegram passport file.

-

- -
-
inputSecureFileLocation#cbc7ee28 id:long access_hash:long = InputFileLocation;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
idlongFile ID, id parameter value from secureFile
access_hashlongChecksum, access_hash parameter value from secureFile
-

Type

-

InputFileLocation

-

Related pages

-

secureFile

-

Secure passport file, for more info see the passport docs »

-

Telegram Passport Manual

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/inputStickerSetItem.html b/data/corefork.telegram.org/constructor/inputStickerSetItem.html deleted file mode 100644 index 82062b4a22..0000000000 --- a/data/corefork.telegram.org/constructor/inputStickerSetItem.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - inputStickerSetItem - - - - - - - - - - - - - -
- -
-
-
- -

inputStickerSetItem

- -

Sticker in a stickerset

-

- -
-
inputStickerSetItem#ffa0a496 flags:# document:InputDocument emoji:string mask_coords:flags.0?MaskCoords = InputStickerSetItem;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
documentInputDocumentThe sticker
emojistringAssociated emoji
mask_coordsflags.0?MaskCoordsCoordinates for mask sticker
-

Type

-

InputStickerSetItem

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/inputStickerSetShortName.html b/data/corefork.telegram.org/constructor/inputStickerSetShortName.html deleted file mode 100644 index d5224bca42..0000000000 --- a/data/corefork.telegram.org/constructor/inputStickerSetShortName.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - inputStickerSetShortName - - - - - - - - - - - - - -
- -
-
-
- -

inputStickerSetShortName

- -

Stickerset by short name, from tg://addstickers?set=short_name

-

- -
-
inputStickerSetShortName#861cc8a0 short_name:string = InputStickerSet;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
short_namestringFrom tg://addstickers?set=short_name
-

Type

-

InputStickerSet

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/inputUserEmpty.html b/data/corefork.telegram.org/constructor/inputUserEmpty.html deleted file mode 100644 index 7b140e44df..0000000000 --- a/data/corefork.telegram.org/constructor/inputUserEmpty.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - inputUserEmpty - - - - - - - - - - - - - -
- -
-
-
- -

inputUserEmpty

- -

Empty constructor, does not define a user.

-

- -
-
inputUserEmpty#b98886cf = InputUser;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

InputUser

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/keyboardButtonCallback.html b/data/corefork.telegram.org/constructor/keyboardButtonCallback.html deleted file mode 100644 index eb25b4949c..0000000000 --- a/data/corefork.telegram.org/constructor/keyboardButtonCallback.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - keyboardButtonCallback - - - - - - - - - - - - - -
- -
-
-
- -

keyboardButtonCallback

- -

Callback button

-

- -
-
keyboardButtonCallback#35bbdb6b flags:# requires_password:flags.0?true text:string data:bytes = KeyboardButton;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
requires_passwordflags.0?trueWhether the user should verify his identity by entering his 2FA SRP parameters to the messages.getBotCallbackAnswer method. NOTE: telegram and the bot WILL NOT have access to the plaintext password, thanks to SRP. This button is mainly used by the official @botfather bot, for verifying the user's identity before transferring ownership of a bot to another user.
textstringButton text
databytesCallback data
-

Type

-

KeyboardButton

-

Related pages

-

Two-factor authentication

-

How to login to a user's account if they have enabled 2FA, how to change password.

-

messages.getBotCallbackAnswer

-

Press an inline callback button and get a callback answer from the bot

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/langPackStringDeleted.html b/data/corefork.telegram.org/constructor/langPackStringDeleted.html deleted file mode 100644 index 430a662a83..0000000000 --- a/data/corefork.telegram.org/constructor/langPackStringDeleted.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - langPackStringDeleted - - - - - - - - - - - - - -
- -
-
-
- -

langPackStringDeleted

- -

Deleted localization string

-

- -
-
langPackStringDeleted#2979eeb2 key:string = LangPackString;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
keystringLocalization key
-

Type

-

LangPackString

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/messageActionChatEditTitle.html b/data/corefork.telegram.org/constructor/messageActionChatEditTitle.html deleted file mode 100644 index 26a1b068dc..0000000000 --- a/data/corefork.telegram.org/constructor/messageActionChatEditTitle.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - messageActionChatEditTitle - - - - - - - - - - - - - -
- -
-
-
- -

messageActionChatEditTitle

- -

Group name changed.

-

- -
-
messageActionChatEditTitle#b5a1ce5a title:string = MessageAction;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
titlestringNew group name
-

Type

-

MessageAction

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/messageActionChatMigrateTo.html b/data/corefork.telegram.org/constructor/messageActionChatMigrateTo.html deleted file mode 100644 index aa9865a41e..0000000000 --- a/data/corefork.telegram.org/constructor/messageActionChatMigrateTo.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - messageActionChatMigrateTo - - - - - - - - - - - - - -
- -
-
-
- -

messageActionChatMigrateTo

- -

Indicates the chat was migrated to the specified supergroup

-

- -
-
messageActionChatMigrateTo#e1037f92 channel_id:long = MessageAction;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
channel_idlongThe supergroup it was migrated to
-

Type

-

MessageAction

-

Related pages

-

Channels

-

How to handle channels, supergroups, groups, and what's the difference between them.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/messageActionGameScore.html b/data/corefork.telegram.org/constructor/messageActionGameScore.html deleted file mode 100644 index 945b2d8166..0000000000 --- a/data/corefork.telegram.org/constructor/messageActionGameScore.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - messageActionGameScore - - - - - - - - - - - - - -
- -
-
-
- -

messageActionGameScore

- -

Someone scored in a game

-

- -
-
messageActionGameScore#92a72876 game_id:long score:int = MessageAction;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
game_idlongGame ID
scoreintScore
-

Type

-

MessageAction

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/messageActionPaymentSentMe.html b/data/corefork.telegram.org/constructor/messageActionPaymentSentMe.html deleted file mode 100644 index 2e74df0123..0000000000 --- a/data/corefork.telegram.org/constructor/messageActionPaymentSentMe.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - messageActionPaymentSentMe - - - - - - - - - - - - - -
- -
-
-
- -

messageActionPaymentSentMe

- -

A user just sent a payment to me (a bot)

-

- -
-
messageActionPaymentSentMe#8f31b327 flags:# currency:string total_amount:long payload:bytes info:flags.0?PaymentRequestedInfo shipping_option_id:flags.1?string charge:PaymentCharge = MessageAction;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
currencystringThree-letter ISO 4217 currency code
total_amountlongPrice of the product in the smallest units of the currency (integer, not float/double). For example, for a price of US$ 1.45 pass amount = 145. See the exp parameter in currencies.json, it shows the number of digits past the decimal point for each currency (2 for the majority of currencies).
payloadbytesBot specified invoice payload
infoflags.0?PaymentRequestedInfoOrder info provided by the user
shipping_option_idflags.1?stringIdentifier of the shipping option chosen by the user
chargePaymentChargeProvider payment identifier
-

Type

-

MessageAction

-

Related pages

-

Bot Payments API

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/messageEntityItalic.html b/data/corefork.telegram.org/constructor/messageEntityItalic.html deleted file mode 100644 index 42a76db60a..0000000000 --- a/data/corefork.telegram.org/constructor/messageEntityItalic.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - messageEntityItalic - - - - - - - - - - - - - -
- -
-
-
- -

messageEntityItalic

- -

Message entity representing italic text.

-

- -
-
messageEntityItalic#826f8b60 offset:int length:int = MessageEntity;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
offsetintOffset of message entity within message (in UTF-8 codepoints)
lengthintLength of message entity within message (in UTF-8 codepoints)
-

Type

-

MessageEntity

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/messageMediaGeoLive.html b/data/corefork.telegram.org/constructor/messageMediaGeoLive.html deleted file mode 100644 index 124b5776c7..0000000000 --- a/data/corefork.telegram.org/constructor/messageMediaGeoLive.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - messageMediaGeoLive - - - - - - - - - - - - - -
- -
-
-
- -

messageMediaGeoLive

- -

Indicates a live geolocation

-

- -
-
messageMediaGeoLive#b940c666 flags:# geo:GeoPoint heading:flags.0?int period:int proximity_notification_radius:flags.1?int = MessageMedia;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
geoGeoPointGeolocation
headingflags.0?intFor live locations, a direction in which the location moves, in degrees; 1-360
periodintValidity period of provided geolocation
proximity_notification_radiusflags.1?intFor live locations, a maximum distance to another chat member for proximity alerts, in meters (0-100000).
-

Type

-

MessageMedia

-

Related pages

-

Live geolocation

-

Telegram allows sending the live geolocation of a user in a chat, optionally setting a proximity alert.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/messageViews.html b/data/corefork.telegram.org/constructor/messageViews.html deleted file mode 100644 index 32e8b0bb84..0000000000 --- a/data/corefork.telegram.org/constructor/messageViews.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - messageViews - - - - - - - - - - - - - -
- -
-
-
- -

messageViews

- -

View, forward counter + info about replies of a specific message

-

- -
-
messageViews#455b853d flags:# views:flags.0?int forwards:flags.1?int replies:flags.2?MessageReplies = MessageViews;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
viewsflags.0?intViewcount of message
forwardsflags.1?intForward count of message
repliesflags.2?MessageRepliesReply and thread information of message
-

Type

-

MessageViews

-

Related pages

-

Threads

-

Telegram allows commenting on a channel post or on a generic supergroup message, thanks to message threads.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/messages.chatInviteImporters b/data/corefork.telegram.org/constructor/messages.chatInviteImporters deleted file mode 100644 index 605caba9c3..0000000000 --- a/data/corefork.telegram.org/constructor/messages.chatInviteImporters +++ /dev/null @@ -1,157 +0,0 @@ - - - - - messages.chatInviteImporters - - - - - - - - - - - - - -
- -
-
-
- -

messages.chatInviteImporters

- -

Info about the users that joined the chat using a specific chat invite

-

- -
-
messages.chatInviteImporters#81b6b00a count:int importers:Vector<ChatInviteImporter> users:Vector<User> = messages.ChatInviteImporters;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
countintNumber of users that joined
importersVector<ChatInviteImporter>The users that joined
usersVector<User>The users that joined
-

Type

-

messages.ChatInviteImporters

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/messages.discussionMessage b/data/corefork.telegram.org/constructor/messages.discussionMessage deleted file mode 100644 index 6465b5b3b3..0000000000 --- a/data/corefork.telegram.org/constructor/messages.discussionMessage +++ /dev/null @@ -1,185 +0,0 @@ - - - - - messages.discussionMessage - - - - - - - - - - - - - -
- -
-
-
- -

messages.discussionMessage

- -

Information about a message thread

-

- -
-
messages.discussionMessage#a6341782 flags:# messages:Vector<Message> max_id:flags.0?int read_inbox_max_id:flags.1?int read_outbox_max_id:flags.2?int unread_count:int chats:Vector<Chat> users:Vector<User> = messages.DiscussionMessage;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
messagesVector<Message>Discussion messages
max_idflags.0?intMessage ID of latest reply in this thread
read_inbox_max_idflags.1?intMessage ID of latest read incoming message in this thread
read_outbox_max_idflags.2?intMessage ID of latest read outgoing message in this thread
unread_countintNumber of unread messages
chatsVector<Chat>Chats mentioned in constructor
usersVector<User>Users mentioned in constructor
-

Type

-

messages.DiscussionMessage

-

Related pages

-

Threads

-

Telegram allows commenting on a channel post or on a generic supergroup message, thanks to message threads.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/messages.favedStickersNotModified b/data/corefork.telegram.org/constructor/messages.favedStickersNotModified deleted file mode 100644 index 581669dcab..0000000000 --- a/data/corefork.telegram.org/constructor/messages.favedStickersNotModified +++ /dev/null @@ -1,132 +0,0 @@ - - - - - messages.favedStickersNotModified - - - - - - - - - - - - - -
- -
-
-
- -

messages.favedStickersNotModified

- -

No new favorited stickers were found

-

- -
-
messages.favedStickersNotModified#9e8fa6d3 = messages.FavedStickers;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

messages.FavedStickers

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/messages.messageViews b/data/corefork.telegram.org/constructor/messages.messageViews deleted file mode 100644 index 8b6f41d51b..0000000000 --- a/data/corefork.telegram.org/constructor/messages.messageViews +++ /dev/null @@ -1,157 +0,0 @@ - - - - - messages.messageViews - - - - - - - - - - - - - -
- -
-
-
- -

messages.messageViews

- -

View, forward counter + info about replies

-

- -
-
messages.messageViews#b6c4f543 views:Vector<MessageViews> chats:Vector<Chat> users:Vector<User> = messages.MessageViews;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
viewsVector<MessageViews>View, forward counter + info about replies
chatsVector<Chat>Chats mentioned in constructor
usersVector<User>Users mentioned in constructor
-

Type

-

messages.MessageViews

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/messages.messagesSlice b/data/corefork.telegram.org/constructor/messages.messagesSlice deleted file mode 100644 index e29bb146f1..0000000000 --- a/data/corefork.telegram.org/constructor/messages.messagesSlice +++ /dev/null @@ -1,185 +0,0 @@ - - - - - messages.messagesSlice - - - - - - - - - - - - - -
- -
-
-
- -

messages.messagesSlice

- -

Incomplete list of messages and auxiliary data.

-

- -
-
messages.messagesSlice#3a54685e flags:# inexact:flags.1?true count:int next_rate:flags.0?int offset_id_offset:flags.2?int messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.Messages;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
inexactflags.1?trueIf set, indicates that the results may be inexact
countintTotal number of messages in the list
next_rateflags.0?intRate to use in the offset_rate parameter in the next call to messages.searchGlobal
offset_id_offsetflags.2?intIndicates the absolute position of messages[0] within the total result set with count count.
This is useful, for example, if the result was fetched using offset_id, and we need to display a progress/total counter (like photo 134 of 200, for all media in a chat, we could simply use photo ${offset_id_offset} of ${count}.
messagesVector<Message>List of messages
chatsVector<Chat>List of chats mentioned in messages
usersVector<User>List of users mentioned in messages and chats
-

Type

-

messages.Messages

-

Related pages

-

messages.searchGlobal

-

Search for messages and peers globally

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/messages.sponsoredMessages b/data/corefork.telegram.org/constructor/messages.sponsoredMessages deleted file mode 100644 index 2cf4c057e2..0000000000 --- a/data/corefork.telegram.org/constructor/messages.sponsoredMessages +++ /dev/null @@ -1,157 +0,0 @@ - - - - - messages.sponsoredMessages - - - - - - - - - - - - - -
- -
-
-
- -

messages.sponsoredMessages

- -

A set of sponsored messages associated to a channel

-

- -
-
messages.sponsoredMessages#65a4c7d5 messages:Vector<SponsoredMessage> chats:Vector<Chat> users:Vector<User> = messages.SponsoredMessages;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
messagesVector<SponsoredMessage>Sponsored messages
chatsVector<Chat>Chats mentioned in the sponsored messages
usersVector<User>Users mentioned in the sponsored messages
-

Type

-

messages.SponsoredMessages

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/pageBlockUnsupported.html b/data/corefork.telegram.org/constructor/pageBlockUnsupported.html deleted file mode 100644 index 5109e1e11d..0000000000 --- a/data/corefork.telegram.org/constructor/pageBlockUnsupported.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - pageBlockUnsupported - - - - - - - - - - - - - -
- -
-
-
- -

pageBlockUnsupported

- -

Unsupported IV element

-

- -
-
pageBlockUnsupported#13567e8a = PageBlock;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

PageBlock

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow.html b/data/corefork.telegram.org/constructor/passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow.html deleted file mode 100644 index 0a9a333aaf..0000000000 --- a/data/corefork.telegram.org/constructor/passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow - - - - - - - - - - - - - -
- -
-
-
- -

passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow

- -

This key derivation algorithm defines that SRP 2FA login must be used

-

- -
-
passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow#3a912d4a salt1:bytes salt2:bytes g:int p:bytes = PasswordKdfAlgo;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
salt1bytesOne of two salts used by the derivation function (see SRP 2FA login)
salt2bytesOne of two salts used by the derivation function (see SRP 2FA login)
gintBase (see SRP 2FA login)
pbytes2048-bit modulus (see SRP 2FA login)
-

Type

-

PasswordKdfAlgo

-

Related pages

-

Two-factor authentication

-

How to login to a user's account if they have enabled 2FA, how to change password.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/sponsoredMessage.html b/data/corefork.telegram.org/constructor/sponsoredMessage.html deleted file mode 100644 index f530a5261a..0000000000 --- a/data/corefork.telegram.org/constructor/sponsoredMessage.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - sponsoredMessage - - - - - - - - - - - - - -
- -
-
-
- -

sponsoredMessage

- -

A sponsored message

-

- -
-
sponsoredMessage#2a3c381f flags:# random_id:bytes from_id:Peer start_param:flags.0?string message:string entities:flags.1?Vector<MessageEntity> = SponsoredMessage;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
random_idbytesMessage ID
from_idPeerID of the sender of the message
start_paramflags.0?stringParameter for the bot start message if the sponsored chat is a chat with a bot.
messagestringSponsored message
entitiesflags.1?Vector<MessageEntity>Message entities for styled text
-

Type

-

SponsoredMessage

-

Related pages

-

Styled text with message entities

-

How to create styled text with message entities

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/textEmpty.html b/data/corefork.telegram.org/constructor/textEmpty.html deleted file mode 100644 index aae07bee32..0000000000 --- a/data/corefork.telegram.org/constructor/textEmpty.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - textEmpty - - - - - - - - - - - - - -
- -
-
-
- -

textEmpty

- -

Empty rich text element

-

- -
-
textEmpty#dc3d824f = RichText;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

RichText

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/textFixed.html b/data/corefork.telegram.org/constructor/textFixed.html deleted file mode 100644 index 56cad91460..0000000000 --- a/data/corefork.telegram.org/constructor/textFixed.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - textFixed - - - - - - - - - - - - - -
- -
-
-
- -

textFixed

- -

fixed-width rich text

-

- -
-
textFixed#6c3f19b9 text:RichText = RichText;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
textRichTextText
-

Type

-

RichText

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/textSuperscript.html b/data/corefork.telegram.org/constructor/textSuperscript.html deleted file mode 100644 index 26c30d52ff..0000000000 --- a/data/corefork.telegram.org/constructor/textSuperscript.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - textSuperscript - - - - - - - - - - - - - -
- -
-
-
- -

textSuperscript

- -

Superscript text

-

- -
-
textSuperscript#c7fb5e01 text:RichText = RichText;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
textRichTextText
-

Type

-

RichText

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/topPeerCategoryBotsPM.html b/data/corefork.telegram.org/constructor/topPeerCategoryBotsPM.html deleted file mode 100644 index 6ec6f8ad57..0000000000 --- a/data/corefork.telegram.org/constructor/topPeerCategoryBotsPM.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - topPeerCategoryBotsPM - - - - - - - - - - - - - -
- -
-
-
- -

topPeerCategoryBotsPM

- -

Most used bots

-

- -
-
topPeerCategoryBotsPM#ab661b5b = TopPeerCategory;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

TopPeerCategory

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/updateBotPrecheckoutQuery.html b/data/corefork.telegram.org/constructor/updateBotPrecheckoutQuery.html deleted file mode 100644 index cf4b8ccf77..0000000000 --- a/data/corefork.telegram.org/constructor/updateBotPrecheckoutQuery.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - updateBotPrecheckoutQuery - - - - - - - - - - - - - -
- -
-
-
- -

updateBotPrecheckoutQuery

- -

This object contains information about an incoming pre-checkout query.

-

- -
-
updateBotPrecheckoutQuery#8caa9a96 flags:# query_id:long user_id:long payload:bytes info:flags.0?PaymentRequestedInfo shipping_option_id:flags.1?string currency:string total_amount:long = Update;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
query_idlongUnique query identifier
user_idlongUser who sent the query
payloadbytesBot specified invoice payload
infoflags.0?PaymentRequestedInfoOrder info provided by the user
shipping_option_idflags.1?stringIdentifier of the shipping option chosen by the user
currencystringThree-letter ISO 4217 currency code
total_amountlongTotal amount in the smallest units of the currency (integer, not float/double). For example, for a price of US$ 1.45 pass amount = 145. See the exp parameter in currencies.json, it shows the number of digits past the decimal point for each currency (2 for the majority of currencies).
-

Type

-

Update

-

Related pages

-

Bot Payments API

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/updateChannelTooLong.html b/data/corefork.telegram.org/constructor/updateChannelTooLong.html deleted file mode 100644 index 6ce4cd981f..0000000000 --- a/data/corefork.telegram.org/constructor/updateChannelTooLong.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - updateChannelTooLong - - - - - - - - - - - - - -
- -
-
-
- -

updateChannelTooLong

- -

There are new updates in the specified channel, the client must fetch them.
-If the difference is too long or if the channel isn't currently in the states, start fetching from the specified pts.

-

- -
-
updateChannelTooLong#108d941f flags:# channel_id:long pts:flags.0?int = Update;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
channel_idlongThe channel
ptsflags.0?intThe PTS.
-

Type

-

Update

-

Related pages

-

Working with Updates

-

How to subscribe to updates and handle them properly.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/updateDialogFilter.html b/data/corefork.telegram.org/constructor/updateDialogFilter.html deleted file mode 100644 index f8adc3e988..0000000000 --- a/data/corefork.telegram.org/constructor/updateDialogFilter.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - updateDialogFilter - - - - - - - - - - - - - -
- -
-
-
- -

updateDialogFilter

- -

A new folder was added

-

- -
-
updateDialogFilter#26ffde7d flags:# id:int filter:flags.0?DialogFilter = Update;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
idintFolder ID
filterflags.0?DialogFilterFolder info
-

Type

-

Update

-

Related pages

-

Folders

-

Telegram allows placing chats into folders, based on their type, mute status, or other custom criteria, thanks to folder blacklists and whitelists.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/updateLangPackTooLong.html b/data/corefork.telegram.org/constructor/updateLangPackTooLong.html deleted file mode 100644 index a03ed47ff0..0000000000 --- a/data/corefork.telegram.org/constructor/updateLangPackTooLong.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - updateLangPackTooLong - - - - - - - - - - - - - -
- -
-
-
- -

updateLangPackTooLong

- -

A language pack has changed, the client should manually fetch the changed strings using langpack.getDifference

-

- -
-
updateLangPackTooLong#46560264 lang_code:string = Update;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
lang_codestringLanguage code
-

Type

-

Update

-

Related pages

-

langpack.getDifference

-

Get new strings in languagepack

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/updateNewScheduledMessage.html b/data/corefork.telegram.org/constructor/updateNewScheduledMessage.html deleted file mode 100644 index a95e6367e6..0000000000 --- a/data/corefork.telegram.org/constructor/updateNewScheduledMessage.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - updateNewScheduledMessage - - - - - - - - - - - - - -
- -
-
-
- -

updateNewScheduledMessage

- -

A message was added to the schedule queue of a chat

-

- -
-
updateNewScheduledMessage#39a51dfb message:Message = Update;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
messageMessageMessage
-

Type

-

Update

-

Related pages

-

Scheduled messages

-

Telegram allows scheduling messages

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/updatePtsChanged.html b/data/corefork.telegram.org/constructor/updatePtsChanged.html deleted file mode 100644 index 4be6443c9d..0000000000 --- a/data/corefork.telegram.org/constructor/updatePtsChanged.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - updatePtsChanged - - - - - - - - - - - - - -
- -
-
-
- -

updatePtsChanged

- -

Common message box sequence PTS has changed, state has to be refetched using updates.getState

-

- -
-
updatePtsChanged#3354678f = Update;

-

Parameters

-

This constructor does not require any parameters.

-

Type

-

Update

-

Related pages

-

Working with Updates

-

How to subscribe to updates and handle them properly.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/updates.channelDifferenceTooLong b/data/corefork.telegram.org/constructor/updates.channelDifferenceTooLong deleted file mode 100644 index b43c49a7bd..0000000000 --- a/data/corefork.telegram.org/constructor/updates.channelDifferenceTooLong +++ /dev/null @@ -1,190 +0,0 @@ - - - - - updates.channelDifferenceTooLong - - - - - - - - - - - - - -
- -
-
-
- -

updates.channelDifferenceTooLong

- -

The provided pts + limit < remote pts. Simply, there are too many updates to be fetched (more than limit), the client has to resolve the update gap in one of the following ways:

-
    -
  1. Delete all known messages in the chat, begin from scratch by refetching all messages manually with getHistory. It is easy to implement, but suddenly disappearing messages looks awful for the user.
  2. -
  3. Save all messages loaded in the memory until application restart, but delete all messages from database. Messages left in the memory must be lazily updated using calls to getHistory. It looks much smoothly for the user, they will need to redownload messages only after client restart. Unsynchronized messages left in the memory shouldn't be saved to database, results of getHistory and getMessages must be used to update state of deleted and edited messages left in the memory.
  4. -
  5. Save all messages loaded in the memory and stored in the database without saving that some messages form continuous ranges. Messages in the database will be excluded from results of getChatHistory and searchChatMessages after application restart and will be available only through getMessage. Every message should still be checked using getHistory. It has more disadvantages over 2) than advantages.
  6. -
  7. Save all messages with saving all data about continuous message ranges. Messages from the database may be used as results of getChatHistory and (if implemented continuous ranges support for searching shared media) searchChatMessages. The messages should still be lazily checked using getHistory, but they are still available offline. It is the best way for gaps support, but it is pretty hard to implement correctly. It should be also noted that some messages like live location messages shouldn't be deleted.
  8. -
-

- -
-
updates.channelDifferenceTooLong#a4bcc6fe flags:# final:flags.0?true timeout:flags.1?int dialog:Dialog messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = updates.ChannelDifference;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
finalflags.0?trueWhether there are more updates that must be fetched (always false)
timeoutflags.1?intClients are supposed to refetch the channel difference after timeout seconds have elapsed
dialogDialogDialog containing the latest PTS that can be used to reset the channel state
messagesVector<Message>The latest messages
chatsVector<Chat>Chats from messages
usersVector<User>Users from messages
-

Type

-

updates.ChannelDifference

-

Related pages

-

Working with Updates

-

How to subscribe to updates and handle them properly.

-

messages.getHistory

-

Gets back the conversation history with one interlocutor / within a chat

-

messages.getMessages

-

Returns the list of messages by their IDs.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/user.html b/data/corefork.telegram.org/constructor/user.html deleted file mode 100644 index 5f80a2bb10..0000000000 --- a/data/corefork.telegram.org/constructor/user.html +++ /dev/null @@ -1,287 +0,0 @@ - - - - - user - - - - - - - - - - - - - -
- -
-
-
- -

user

- -

Indicates info about a certain user

-

- -
-
user#3ff6ecb0 flags:# self:flags.10?true contact:flags.11?true mutual_contact:flags.12?true deleted:flags.13?true bot:flags.14?true bot_chat_history:flags.15?true bot_nochats:flags.16?true verified:flags.17?true restricted:flags.18?true min:flags.20?true bot_inline_geo:flags.21?true support:flags.23?true scam:flags.24?true apply_min_photo:flags.25?true fake:flags.26?true id:long access_hash:flags.0?long first_name:flags.1?string last_name:flags.2?string username:flags.3?string phone:flags.4?string photo:flags.5?UserProfilePhoto status:flags.6?UserStatus bot_info_version:flags.14?int restriction_reason:flags.18?Vector<RestrictionReason> bot_inline_placeholder:flags.19?string lang_code:flags.22?string = User;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
selfflags.10?trueWhether this user indicates the currently logged in user
contactflags.11?trueWhether this user is a contact
mutual_contactflags.12?trueWhether this user is a mutual contact
deletedflags.13?trueWhether the account of this user was deleted
botflags.14?trueIs this user a bot?
bot_chat_historyflags.15?trueCan the bot see all messages in groups?
bot_nochatsflags.16?trueCan the bot be added to groups?
verifiedflags.17?trueWhether this user is verified
restrictedflags.18?trueAccess to this user must be restricted for the reason specified in restriction_reason
minflags.20?trueSee min
bot_inline_geoflags.21?trueWhether the bot can request our geolocation in inline mode
supportflags.23?trueWhether this is an official support user
scamflags.24?trueThis may be a scam user
apply_min_photoflags.25?trueIf set, the profile picture for this user should be refetched
fakeflags.26?trueIf set, this user was reported by many users as a fake or scam user: be careful when interacting with them.
idlongID of the user
access_hashflags.0?longAccess hash of the user
first_nameflags.1?stringFirst name
last_nameflags.2?stringLast name
usernameflags.3?stringUsername
phoneflags.4?stringPhone number
photoflags.5?UserProfilePhotoProfile picture of user
statusflags.6?UserStatusOnline status of user
bot_info_versionflags.14?intVersion of the bot_info field in userFull, incremented every time it changes
restriction_reasonflags.18?Vector<RestrictionReason>Contains the reason why access to this user must be restricted.
bot_inline_placeholderflags.19?stringInline placeholder for this inline bot
lang_codeflags.22?stringLanguage code of the user
-

Type

-

User

-

Related pages

-

Min constructors

-

In some situations user and channel constructors have reduced set of fields present (although id is always there) and min flag set.

-

userFull

-

Extended user info

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/constructor/userProfilePhoto.html b/data/corefork.telegram.org/constructor/userProfilePhoto.html deleted file mode 100644 index c6ecc19a30..0000000000 --- a/data/corefork.telegram.org/constructor/userProfilePhoto.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - userProfilePhoto - - - - - - - - - - - - - -
- -
-
-
- -

userProfilePhoto

- -

User profile photo.

-

- -
-
userProfilePhoto#82d1f706 flags:# has_video:flags.0?true photo_id:long stripped_thumb:flags.1?bytes dc_id:int = UserProfilePhoto;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
has_videoflags.0?trueWhether an animated profile picture is available for this user
photo_idlongIdentifier of the respective photo
Parameter added in Layer 2
stripped_thumbflags.1?bytesStripped thumbnail
dc_idintDC ID where the photo is stored
-

Type

-

UserProfilePhoto

-

Related pages

-

Uploading and Downloading Files

-

How to transfer large data batches correctly.

-

Layers

-

Below you will find information on schema changes. For more details on the use of layers, see Invoking API methods.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/account.finishTakeoutSession b/data/corefork.telegram.org/method/account.finishTakeoutSession deleted file mode 100644 index 1855035ced..0000000000 --- a/data/corefork.telegram.org/method/account.finishTakeoutSession +++ /dev/null @@ -1,172 +0,0 @@ - - - - - account.finishTakeoutSession - - - - - - - - - - - - - -
- -
-
-
- -

account.finishTakeoutSession

- -

Finish account takeout session

-

- -
-
boolFalse#bc799737 = Bool;
-boolTrue#997275b5 = Bool;
----functions---
-account.finishTakeoutSession#1d2652ee flags:# success:flags.0?true = Bool;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
successflags.0?trueData exported successfully
-

Result

-

Bool

-

Possible errors

- - - - - - - - - - - - - - - -
CodeTypeDescription
403TAKEOUT_REQUIREDA takeout session has to be initialized, first.
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/account.getPrivacy b/data/corefork.telegram.org/method/account.getPrivacy deleted file mode 100644 index 3c29a7bfe0..0000000000 --- a/data/corefork.telegram.org/method/account.getPrivacy +++ /dev/null @@ -1,166 +0,0 @@ - - - - - account.getPrivacy - - - - - - - - - - - - - -
- -
-
-
- -

account.getPrivacy

- -

Get privacy settings of current account

-

- -
-
account.privacyRules#50a04e45 rules:Vector<PrivacyRule> chats:Vector<Chat> users:Vector<User> = account.PrivacyRules;
----functions---
-account.getPrivacy#dadbc950 key:InputPrivacyKey = account.PrivacyRules;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
keyInputPrivacyKeyPeer category whose privacy settings should be fetched
-

Result

-

account.PrivacyRules

-

Possible errors

- - - - - - - - - - - - - - - -
CodeTypeDescription
400PRIVACY_KEY_INVALIDThe privacy key is invalid.
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/account.resendPasswordEmail b/data/corefork.telegram.org/method/account.resendPasswordEmail deleted file mode 100644 index dee86a556d..0000000000 --- a/data/corefork.telegram.org/method/account.resendPasswordEmail +++ /dev/null @@ -1,138 +0,0 @@ - - - - - account.resendPasswordEmail - - - - - - - - - - - - - -
- -
-
-
- -

account.resendPasswordEmail

- -

Resend the code to verify an email to use as 2FA recovery method.

-

- -
-
boolFalse#bc799737 = Bool;
-boolTrue#997275b5 = Bool;
----functions---
-account.resendPasswordEmail#7a7f2a15 = Bool;

-

Parameters

-

This constructor does not require any parameters.

-

Result

-

Bool

-

Related pages

-

Two-factor authentication

-

How to login to a user's account if they have enabled 2FA, how to change password.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/account.resetNotifySettings b/data/corefork.telegram.org/method/account.resetNotifySettings deleted file mode 100644 index aecb07e767..0000000000 --- a/data/corefork.telegram.org/method/account.resetNotifySettings +++ /dev/null @@ -1,135 +0,0 @@ - - - - - account.resetNotifySettings - - - - - - - - - - - - - -
- -
-
-
- -

account.resetNotifySettings

- -

Resets all notification settings from users and groups.

-

- -
-
boolFalse#bc799737 = Bool;
-boolTrue#997275b5 = Bool;
----functions---
-account.resetNotifySettings#db7e1747 = Bool;

-

Parameters

-

This constructor does not require any parameters.

-

Result

-

Bool

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/account.updatePasswordSettings b/data/corefork.telegram.org/method/account.updatePasswordSettings deleted file mode 100644 index 66a64af274..0000000000 --- a/data/corefork.telegram.org/method/account.updatePasswordSettings +++ /dev/null @@ -1,207 +0,0 @@ - - - - - account.updatePasswordSettings - - - - - - - - - - - - - -
- -
-
-
- -

account.updatePasswordSettings

- -

Set a new 2FA password

-

- -
-
boolFalse#bc799737 = Bool;
-boolTrue#997275b5 = Bool;
----functions---
-account.updatePasswordSettings#a59b102f password:InputCheckPasswordSRP new_settings:account.PasswordInputSettings = Bool;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
passwordInputCheckPasswordSRPThe old password (see SRP)
new_settingsaccount.PasswordInputSettingsThe new password (see SRP)
-

Result

-

Bool

-

Possible errors

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CodeTypeDescription
400EMAIL_UNCONFIRMEDEmail unconfirmed.
400EMAIL_UNCONFIRMED_XThe provided email isn't confirmed, X is the length of the verification code that was just sent to the email: use account.verifyEmail to enter the received verification code and enable the recovery email.
400NEW_SALT_INVALIDThe new salt is invalid.
400NEW_SETTINGS_INVALIDThe new password settings are invalid.
400PASSWORD_HASH_INVALIDThe old password hash is invalid.
400SRP_ID_INVALIDInvalid SRP ID provided.
400SRP_PASSWORD_CHANGEDPassword has changed.
-

Related pages

-

Two-factor authentication

-

How to login to a user's account if they have enabled 2FA, how to change password.

-

account.verifyEmail

-

Verify an email address for telegram passport.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/account.updateUsername b/data/corefork.telegram.org/method/account.updateUsername deleted file mode 100644 index 169a97bed2..0000000000 --- a/data/corefork.telegram.org/method/account.updateUsername +++ /dev/null @@ -1,182 +0,0 @@ - - - - - account.updateUsername - - - - - - - - - - - - - -
- -
-
-
- -

account.updateUsername

- -

Changes username for the current user.

-

- -
-
userEmpty#d3bc4b7a id:long = User;
-user#3ff6ecb0 flags:# self:flags.10?true contact:flags.11?true mutual_contact:flags.12?true deleted:flags.13?true bot:flags.14?true bot_chat_history:flags.15?true bot_nochats:flags.16?true verified:flags.17?true restricted:flags.18?true min:flags.20?true bot_inline_geo:flags.21?true support:flags.23?true scam:flags.24?true apply_min_photo:flags.25?true fake:flags.26?true id:long access_hash:flags.0?long first_name:flags.1?string last_name:flags.2?string username:flags.3?string phone:flags.4?string photo:flags.5?UserProfilePhoto status:flags.6?UserStatus bot_info_version:flags.14?int restriction_reason:flags.18?Vector<RestrictionReason> bot_inline_placeholder:flags.19?string lang_code:flags.22?string = User;
----functions---
-account.updateUsername#3e0bdd7c username:string = User;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
usernamestringusername or empty string if username is to be removed
Accepted characters: a-z (case-insensitive), 0-9 and underscores.
Length: 5-32 characters.
-

Result

-

Returns updated information on the user in a User type object.

-

Possible errors

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CodeTypeDescription
401AUTH_KEY_PERM_EMPTYThe temporary auth key must be binded to the permanent auth key to use these methods.
400USERNAME_INVALIDUnacceptable username.
400USERNAME_NOT_MODIFIEDUsername is not different from the current username.
400USERNAME_OCCUPIEDUsername is taken.
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/auth.checkPassword b/data/corefork.telegram.org/method/auth.checkPassword deleted file mode 100644 index 48c5e04ab5..0000000000 --- a/data/corefork.telegram.org/method/auth.checkPassword +++ /dev/null @@ -1,180 +0,0 @@ - - - - - auth.checkPassword - - - - - - - - - - - - - -
- -
-
-
- -

auth.checkPassword

- -

Try logging to an account protected by a 2FA password.

-

- -
-
auth.authorization#cd050916 flags:# tmp_sessions:flags.0?int user:User = auth.Authorization;
-auth.authorizationSignUpRequired#44747e9a flags:# terms_of_service:flags.0?help.TermsOfService = auth.Authorization;
----functions---
-auth.checkPassword#d18b4d16 password:InputCheckPasswordSRP = auth.Authorization;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
passwordInputCheckPasswordSRPThe account's password (see SRP)
-

Result

-

auth.Authorization

-

Possible errors

- - - - - - - - - - - - - - - - - - - - - - - - - -
CodeTypeDescription
400PASSWORD_HASH_INVALIDThe provided password isn't valid.
400SRP_ID_INVALIDInvalid SRP ID provided.
400SRP_PASSWORD_CHANGEDPassword has changed.
-

Related pages

-

Two-factor authentication

-

How to login to a user's account if they have enabled 2FA, how to change password.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/auth.checkPhone b/data/corefork.telegram.org/method/auth.checkPhone deleted file mode 100644 index 1fedb983d3..0000000000 --- a/data/corefork.telegram.org/method/auth.checkPhone +++ /dev/null @@ -1,176 +0,0 @@ - - - - - auth.checkPhone - - - - - - - - - - - - - -
- -
-
-
- -

auth.checkPhone

- -

Returns information on whether the passed phone number was registered.

-

- -
-
 Method schema is available as of layer 78. Switch »

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
phone_numberstringPhone number in the international format
-

Result

-

The method returns an auth.CheckedPhone type object with information on whether an account with such a phone number has already been registered, as well as whether invitations were sent to this number (using the auth.sendInvites method).

-

Query example

-
(auth.checkPhone "79123413132")
-=
-(auth.checkedPhone
-  phone_registered:(boolFalse)
-  phone_invited:(boolFalse)
-)
-

Possible errors

- - - - - - - - - - - - - - - - - - - - -
CodeTypeDescription
400PHONE_NUMBER_BANNEDThe provided phone number is banned from telegram
400PHONE_NUMBER_INVALIDInvalid phone number
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/auth.checkRecoveryPassword b/data/corefork.telegram.org/method/auth.checkRecoveryPassword deleted file mode 100644 index 0f8a240292..0000000000 --- a/data/corefork.telegram.org/method/auth.checkRecoveryPassword +++ /dev/null @@ -1,174 +0,0 @@ - - - - - auth.checkRecoveryPassword - - - - - - - - - - - - - -
- -
-
-
- -

auth.checkRecoveryPassword

- -

Check if the 2FA recovery code sent using auth.requestPasswordRecovery is valid, before passing it to auth.recoverPassword.

-

- -
-
boolFalse#bc799737 = Bool;
-boolTrue#997275b5 = Bool;
----functions---
-auth.checkRecoveryPassword#d36bf79 code:string = Bool;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
codestringCode received via email
-

Result

-

Bool

-

Possible errors

- - - - - - - - - - - - - - - -
CodeTypeDescription
400PASSWORD_RECOVERY_EXPIREDThe recovery code has expired.
-

Related pages

-

Two-factor authentication

-

How to login to a user's account if they have enabled 2FA, how to change password.

-

auth.requestPasswordRecovery

-

Request recovery code of a 2FA password, only for accounts with a recovery email configured.

-

auth.recoverPassword

-

Reset the 2FA password using the recovery code sent using auth.requestPasswordRecovery.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/auth.sendInvites b/data/corefork.telegram.org/method/auth.sendInvites deleted file mode 100644 index e46a084050..0000000000 --- a/data/corefork.telegram.org/method/auth.sendInvites +++ /dev/null @@ -1,157 +0,0 @@ - - - - - auth.sendInvites - - - - - - - - - - - - - -
- -
-
-
- -

auth.sendInvites

- -

Saves information that the current user sent SMS-messages with invitations to its unregistered contacts.

-

{schema}

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
phone_numbersVector<string>List of phone numbers of message recipients in the international format
messagestringMessage text
-

Result

-

Bool

-

Possible errors

- - - - - - - - - - - - - - - -
CodeTypeDescription
400MESSAGE_EMPTYThe provided message is empty
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/auth.signUp b/data/corefork.telegram.org/method/auth.signUp deleted file mode 100644 index 33b9f85536..0000000000 --- a/data/corefork.telegram.org/method/auth.signUp +++ /dev/null @@ -1,236 +0,0 @@ - - - - - auth.signUp - - - - - - - - - - - - - -
- -
-
-
- -

auth.signUp

- -

Registers a validated phone number in the system.

-

- -
-
auth.authorization#cd050916 flags:# tmp_sessions:flags.0?int user:User = auth.Authorization;
-auth.authorizationSignUpRequired#44747e9a flags:# terms_of_service:flags.0?help.TermsOfService = auth.Authorization;
----functions---
-auth.signUp#80eee427 phone_number:string phone_code_hash:string first_name:string last_name:string = auth.Authorization;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
phone_numberstringPhone number in the international format
phone_code_hashstringSMS-message ID
first_namestringNew user first name
last_namestringNew user last name
-

Result

-

Returns an auth.Authorization object with information about the new authorization.

-

Possible errors

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CodeTypeDescription
400FIRSTNAME_INVALIDInvalid first name.
400LASTNAME_INVALIDInvalid last name.
400PHONE_CODE_EMPTYphone_code from a SMS is empty.
400PHONE_CODE_EXPIREDSMS expired.
400PHONE_CODE_INVALIDInvalid SMS code was sent.
400PHONE_NUMBER_FLOODYou asked for the code too many times.
400PHONE_NUMBER_INVALIDInvalid phone number.
400PHONE_NUMBER_OCCUPIEDThe phone number is already in use.
-

Query example

-
(auth.signUp "79991234567" "2dc02d2cda9e615c84" "44444" "John" "Doe")
-=
-(auth.authorization
-  expires:1403938438
-  user:(userSelf
-    id:603177
-    first_name:"John"
-    last_name:"Doe"
-    phone:"79991234567"
-    photo:(userProfilePhotoEmpty)
-    status:(userStatusEmpty)
-    inactive:(boolTrue)
-  )
-)
-
-1b067634 3939370b 33323139 37363534 63643212 32643230 39616463 35313665 00343863 34343405 00003434 686f4a04 0000006e 656f4403 c18027ca
-=
-f6b673a4 53ae6686 720535ec 00093429 686f4a04 0000006e 656f4403 3939370b 33323139 37363534 4f11bae1 09d05049 997275b5 d8487410
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/contacts.getContactIDs b/data/corefork.telegram.org/method/contacts.getContactIDs deleted file mode 100644 index ec6e9eca35..0000000000 --- a/data/corefork.telegram.org/method/contacts.getContactIDs +++ /dev/null @@ -1,151 +0,0 @@ - - - - - contacts.getContactIDs - - - - - - - - - - - - - -
- -
-
-
- -

contacts.getContactIDs

- -

Get contact by telegram IDs

-

- -
-
---functions---
-contacts.getContactIDs#7adc669d hash:long = Vector<int>;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
hashlongHash for pagination, for more info click here
-

Result

-

Vector<int>

-

Related pages

-

Pagination in the API

-

How to fetch results from large lists of objects.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/folders.editPeerFolders b/data/corefork.telegram.org/method/folders.editPeerFolders deleted file mode 100644 index 79912be4c9..0000000000 --- a/data/corefork.telegram.org/method/folders.editPeerFolders +++ /dev/null @@ -1,175 +0,0 @@ - - - - - folders.editPeerFolders - - - - - - - - - - - - - -
- -
-
-
- -

folders.editPeerFolders

- -

Edit peers in peer folder

-

- -
-
updatesTooLong#e317af7e = Updates;
-updateShortMessage#313bc7f8 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int user_id:long message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long reply_to:flags.3?MessageReplyHeader entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
-updateShortChatMessage#4d6deea5 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int from_id:long chat_id:long message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long reply_to:flags.3?MessageReplyHeader entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
-updateShort#78d4dec1 update:Update date:int = Updates;
-updatesCombined#725b04c3 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq_start:int seq:int = Updates;
-updates#74ae4240 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq:int = Updates;
-updateShortSentMessage#9015e101 flags:# out:flags.1?true id:int pts:int pts_count:int date:int media:flags.9?MessageMedia entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
----functions---
-folders.editPeerFolders#6847d0ab folder_peers:Vector<InputFolderPeer> = Updates;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
folder_peersVector<InputFolderPeer>New peer list
-

Result

-

Updates

-

Possible errors

- - - - - - - - - - - - - - - -
CodeTypeDescription
400FOLDER_ID_INVALIDInvalid folder ID.
-

Related pages

-

Folders

-

Telegram allows placing chats into folders, based on their type, mute status, or other custom criteria, thanks to folder blacklists and whitelists.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/help.getAppConfig b/data/corefork.telegram.org/method/help.getAppConfig deleted file mode 100644 index bf92c7b274..0000000000 --- a/data/corefork.telegram.org/method/help.getAppConfig +++ /dev/null @@ -1,142 +0,0 @@ - - - - - help.getAppConfig - - - - - - - - - - - - - -
- -
-
-
- -

help.getAppConfig

- -

Get app-specific configuration, see client configuration for more info on the result.

-

- -
-
jsonNull#3f6d7b68 = JSONValue;
-jsonBool#c7345e6a value:Bool = JSONValue;
-jsonNumber#2be0dfa4 value:double = JSONValue;
-jsonString#b71e767a value:string = JSONValue;
-jsonArray#f7444763 value:Vector<JSONValue> = JSONValue;
-jsonObject#99c1d49d value:Vector<JSONObjectValue> = JSONValue;
----functions---
-help.getAppConfig#98914110 = JSONValue;

-

Parameters

-

This constructor does not require any parameters.

-

Result

-

JSONValue, see client configuration for more info on the result

-

Related pages

-

Client configuration

-

The MTProto API has multiple configuration parameters that can be fetched with the appropriate methods.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/help.setBotUpdatesStatus b/data/corefork.telegram.org/method/help.setBotUpdatesStatus deleted file mode 100644 index 3aea86cecb..0000000000 --- a/data/corefork.telegram.org/method/help.setBotUpdatesStatus +++ /dev/null @@ -1,156 +0,0 @@ - - - - - help.setBotUpdatesStatus - - - - - - - - - - - - - -
- -
-
-
- -

help.setBotUpdatesStatus

- -

Informs the server about the number of pending bot updates if they haven't been processed for a long time; for bots only

-

- -
-
boolFalse#bc799737 = Bool;
-boolTrue#997275b5 = Bool;
----functions---
-help.setBotUpdatesStatus#ec22cfcd pending_updates_count:int message:string = Bool;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
pending_updates_countintNumber of pending updates
messagestringError message, if present
-

Result

-

Bool

-

Bots can use this method

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/langpack.getLangPack b/data/corefork.telegram.org/method/langpack.getLangPack deleted file mode 100644 index 7a4d3f562e..0000000000 --- a/data/corefork.telegram.org/method/langpack.getLangPack +++ /dev/null @@ -1,171 +0,0 @@ - - - - - langpack.getLangPack - - - - - - - - - - - - - -
- -
-
-
- -

langpack.getLangPack

- -

Get localization pack strings

-

- -
-
langPackDifference#f385c1f6 lang_code:string from_version:int version:int strings:Vector<LangPackString> = LangPackDifference;
----functions---
-langpack.getLangPack#f2f2330a lang_pack:string lang_code:string = LangPackDifference;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
lang_packstringLanguage pack name
lang_codestringLanguage code
-

Result

-

LangPackDifference

-

Possible errors

- - - - - - - - - - - - - - - -
CodeTypeDescription
400LANG_PACK_INVALIDThe provided language pack is invalid.
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/messages.deleteHistory b/data/corefork.telegram.org/method/messages.deleteHistory deleted file mode 100644 index 6909114f0d..0000000000 --- a/data/corefork.telegram.org/method/messages.deleteHistory +++ /dev/null @@ -1,206 +0,0 @@ - - - - - messages.deleteHistory - - - - - - - - - - - - - -
- -
-
-
- -

messages.deleteHistory

- -

Deletes communication history.

-

- -
-
messages.affectedHistory#b45c69d1 pts:int pts_count:int offset:int = messages.AffectedHistory;
----functions---
-messages.deleteHistory#1c015b09 flags:# just_clear:flags.0?true revoke:flags.1?true peer:InputPeer max_id:int = messages.AffectedHistory;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
just_clearflags.0?trueJust clear history for the current user, without actually removing messages for every chat user
revokeflags.1?trueWhether to delete the message history for all chat participants
peerInputPeerUser or chat, communication history of which will be deleted
max_idintMaximum ID of message to delete
-

Result

-

messages.AffectedHistory

-

Possible errors

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CodeTypeDescription
400CHANNEL_PRIVATEYou haven't joined this channel/supergroup.
400CHAT_ID_INVALIDThe provided chat id is invalid.
400MESSAGE_ID_INVALIDThe provided message id is invalid.
400MSG_ID_INVALIDInvalid message ID provided.
400PEER_ID_INVALIDThe provided peer id is invalid.
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/messages.exportChatInvite b/data/corefork.telegram.org/method/messages.exportChatInvite deleted file mode 100644 index 48fa2e2495..0000000000 --- a/data/corefork.telegram.org/method/messages.exportChatInvite +++ /dev/null @@ -1,217 +0,0 @@ - - - - - messages.exportChatInvite - - - - - - - - - - - - - -
- -
-
-
- -

messages.exportChatInvite

- -

Export an invite link for a chat

-

- -
-
chatInviteExported#b18105e8 flags:# revoked:flags.0?true permanent:flags.5?true link:string admin_id:long date:int start_date:flags.4?int expire_date:flags.1?int usage_limit:flags.2?int usage:flags.3?int = ExportedChatInvite;
----functions---
-messages.exportChatInvite#14b9bcd7 flags:# legacy_revoke_permanent:flags.2?true peer:InputPeer expire_date:flags.0?int usage_limit:flags.1?int = ExportedChatInvite;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
legacy_revoke_permanentflags.2?trueLegacy flag, reproducing legacy behavior of this method: if set, revokes all previous links before creating a new one. Kept for bot API BC, should not be used by modern clients.
peerInputPeerChat
expire_dateflags.0?intExpiration date
usage_limitflags.1?intMaximum number of users that can join using this link
-

Result

-

ExportedChatInvite

-

Possible errors

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CodeTypeDescription
400CHANNEL_PRIVATEYou haven't joined this channel/supergroup.
400CHAT_ADMIN_REQUIREDYou must be an admin in this chat to do this.
400CHAT_ID_INVALIDThe provided chat id is invalid.
403CHAT_WRITE_FORBIDDENYou can't write in this chat.
400EXPIRE_DATE_INVALIDThe specified expiration date is invalid.
400PEER_ID_INVALIDThe provided peer id is invalid.
400USAGE_LIMIT_INVALIDThe specified usage limit is invalid.
-

Bots can use this method

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/messages.getDhConfig b/data/corefork.telegram.org/method/messages.getDhConfig deleted file mode 100644 index 5f222aab74..0000000000 --- a/data/corefork.telegram.org/method/messages.getDhConfig +++ /dev/null @@ -1,175 +0,0 @@ - - - - - messages.getDhConfig - - - - - - - - - - - - - -
- -
-
-
- -

messages.getDhConfig

- -

Returns configuration parameters for Diffie-Hellman key generation. Can also return a random sequence of bytes of required length.

-

- -
-
messages.dhConfigNotModified#c0e24635 random:bytes = messages.DhConfig;
-messages.dhConfig#2c221edd g:int p:bytes version:int random:bytes = messages.DhConfig;
----functions---
-messages.getDhConfig#26cf8950 version:int random_length:int = messages.DhConfig;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
versionintValue of the version parameter from messages.dhConfig, avialable at the client
random_lengthintLength of the required random sequence
-

Result

-

messages.DhConfig

-

Possible errors

- - - - - - - - - - - - - - - -
CodeTypeDescription
400RANDOM_LENGTH_INVALIDRandom length invalid.
-

Related pages

-

messages.dhConfig

-

New set of configuring parameters.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/messages.getStickers b/data/corefork.telegram.org/method/messages.getStickers deleted file mode 100644 index 68000e2383..0000000000 --- a/data/corefork.telegram.org/method/messages.getStickers +++ /dev/null @@ -1,175 +0,0 @@ - - - - - messages.getStickers - - - - - - - - - - - - - -
- -
-
-
- -

messages.getStickers

- -

Get stickers by emoji

-

- -
-
messages.stickersNotModified#f1749a22 = messages.Stickers;
-messages.stickers#30a6ec7e hash:long stickers:Vector<Document> = messages.Stickers;
----functions---
-messages.getStickers#d5a5d3a1 emoticon:string hash:long = messages.Stickers;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
emoticonstringThe emoji
hashlongHash for pagination, for more info click here
-

Result

-

messages.Stickers

-

Possible errors

- - - - - - - - - - - - - - - -
CodeTypeDescription
400EMOTICON_EMPTYThe emoji is empty.
-

Related pages

-

Pagination in the API

-

How to fetch results from large lists of objects.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/messages.hidePeerSettingsBar b/data/corefork.telegram.org/method/messages.hidePeerSettingsBar deleted file mode 100644 index c468d20006..0000000000 --- a/data/corefork.telegram.org/method/messages.hidePeerSettingsBar +++ /dev/null @@ -1,153 +0,0 @@ - - - - - messages.hidePeerSettingsBar - - - - - - - - - - - - - -
- -
-
-
- -

messages.hidePeerSettingsBar

- -

Should be called after the user hides the report spam/add as contact bar of a new chat, effectively prevents the user from executing the actions specified in the peer's settings.

-

- -
-
boolFalse#bc799737 = Bool;
-boolTrue#997275b5 = Bool;
----functions---
-messages.hidePeerSettingsBar#4facb138 peer:InputPeer = Bool;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
peerInputPeerPeer
-

Result

-

Bool

-

Related pages

-

peerSettings

-

Peer settings

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/messages.reorderStickerSets b/data/corefork.telegram.org/method/messages.reorderStickerSets deleted file mode 100644 index 597ec367e6..0000000000 --- a/data/corefork.telegram.org/method/messages.reorderStickerSets +++ /dev/null @@ -1,160 +0,0 @@ - - - - - messages.reorderStickerSets - - - - - - - - - - - - - -
- -
-
-
- -

messages.reorderStickerSets

- -

Reorder installed stickersets

-

- -
-
boolFalse#bc799737 = Bool;
-boolTrue#997275b5 = Bool;
----functions---
-messages.reorderStickerSets#78337739 flags:# masks:flags.0?true order:Vector<long> = Bool;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
masksflags.0?trueReorder mask stickersets
orderVector<long>New stickerset order by stickerset IDs
-

Result

-

Bool

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/messages.requestEncryption b/data/corefork.telegram.org/method/messages.requestEncryption deleted file mode 100644 index d56c380bd9..0000000000 --- a/data/corefork.telegram.org/method/messages.requestEncryption +++ /dev/null @@ -1,185 +0,0 @@ - - - - - messages.requestEncryption - - - - - - - - - - - - - -
- -
-
-
- -

messages.requestEncryption

- -

Sends a request to start a secret chat to the user.

-

- -
-
encryptedChatEmpty#ab7ec0a0 id:int = EncryptedChat;
-encryptedChatWaiting#66b25953 id:int access_hash:long date:int admin_id:long participant_id:long = EncryptedChat;
-encryptedChatRequested#48f1d94c flags:# folder_id:flags.0?int id:int access_hash:long date:int admin_id:long participant_id:long g_a:bytes = EncryptedChat;
-encryptedChat#61f0d4c7 id:int access_hash:long date:int admin_id:long participant_id:long g_a_or_b:bytes key_fingerprint:long = EncryptedChat;
-encryptedChatDiscarded#1e1c7c45 flags:# history_deleted:flags.0?true id:int = EncryptedChat;
----functions---
-messages.requestEncryption#f64daf43 user_id:InputUser random_id:int g_a:bytes = EncryptedChat;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
user_idInputUserUser ID
random_idintUnique client request ID required to prevent resending. This also doubles as the chat ID.
g_abytesA = g ^ a mod p, see Wikipedia
-

Result

-

EncryptedChat

-

Possible errors

- - - - - - - - - - - - - - - - - - - - -
CodeTypeDescription
400DH_G_A_INVALIDg_a invalid.
400USER_ID_INVALIDThe provided user ID is invalid.
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/messages.sendVote b/data/corefork.telegram.org/method/messages.sendVote deleted file mode 100644 index 0875d49309..0000000000 --- a/data/corefork.telegram.org/method/messages.sendVote +++ /dev/null @@ -1,220 +0,0 @@ - - - - - messages.sendVote - - - - - - - - - - - - - -
- -
-
-
- -

messages.sendVote

- -

Vote in a poll

-

- -
-
updatesTooLong#e317af7e = Updates;
-updateShortMessage#313bc7f8 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int user_id:long message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long reply_to:flags.3?MessageReplyHeader entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
-updateShortChatMessage#4d6deea5 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int from_id:long chat_id:long message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long reply_to:flags.3?MessageReplyHeader entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
-updateShort#78d4dec1 update:Update date:int = Updates;
-updatesCombined#725b04c3 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq_start:int seq:int = Updates;
-updates#74ae4240 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq:int = Updates;
-updateShortSentMessage#9015e101 flags:# out:flags.1?true id:int pts:int pts_count:int date:int media:flags.9?MessageMedia entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
----functions---
-messages.sendVote#10ea6184 peer:InputPeer msg_id:int options:Vector<bytes> = Updates;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
peerInputPeerThe chat where the poll was sent
msg_idintThe message ID of the poll
optionsVector<bytes>The options that were chosen
-

Result

-

Updates

-

Possible errors

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CodeTypeDescription
400CHANNEL_INVALIDThe provided channel is invalid.
400CHANNEL_PRIVATEYou haven't joined this channel/supergroup.
400MESSAGE_ID_INVALIDThe provided message id is invalid.
400MESSAGE_POLL_CLOSEDPoll closed.
400OPTIONS_TOO_MUCHToo many options provided.
400OPTION_INVALIDInvalid option selected.
400PEER_ID_INVALIDThe provided peer id is invalid.
400REVOTE_NOT_ALLOWEDYou cannot change your vote.
-

Related pages

-

poll

-

Poll

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/messages.setInlineGameScore b/data/corefork.telegram.org/method/messages.setInlineGameScore deleted file mode 100644 index 1c55b57cd3..0000000000 --- a/data/corefork.telegram.org/method/messages.setInlineGameScore +++ /dev/null @@ -1,198 +0,0 @@ - - - - - messages.setInlineGameScore - - - - - - - - - - - - - -
- -
-
-
- -

messages.setInlineGameScore

- -

Use this method to set the score of the specified user in a game sent as an inline message (bots only).

-

- -
-
boolFalse#bc799737 = Bool;
-boolTrue#997275b5 = Bool;
----functions---
-messages.setInlineGameScore#15ad9f64 flags:# edit_message:flags.0?true force:flags.1?true id:InputBotInlineMessageID user_id:InputUser score:int = Bool;

-

Parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
flags#Flags, see TL conditional fields
edit_messageflags.0?trueSet this flag if the game message should be automatically edited to include the current scoreboard
forceflags.1?trueSet this flag if the high score is allowed to decrease. This can be useful when fixing mistakes or banning cheaters
idInputBotInlineMessageIDID of the inline message
user_idInputUserUser identifier
scoreintNew score
-

Result

-

Bool

-

Possible errors

- - - - - - - - - - - - - - - - - - - - -
CodeTypeDescription
400MESSAGE_ID_INVALIDThe provided message id is invalid.
400USER_BOT_REQUIREDThis method can only be called by a bot.
-

Bots can use this method

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/phone.leaveGroupCall b/data/corefork.telegram.org/method/phone.leaveGroupCall deleted file mode 100644 index 5bf0103b2c..0000000000 --- a/data/corefork.telegram.org/method/phone.leaveGroupCall +++ /dev/null @@ -1,160 +0,0 @@ - - - - - phone.leaveGroupCall - - - - - - - - - - - - - -
- -
-
-
- -

phone.leaveGroupCall

- -

Leave a group call

-

- -
-
updatesTooLong#e317af7e = Updates;
-updateShortMessage#313bc7f8 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int user_id:long message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long reply_to:flags.3?MessageReplyHeader entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
-updateShortChatMessage#4d6deea5 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int from_id:long chat_id:long message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long reply_to:flags.3?MessageReplyHeader entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
-updateShort#78d4dec1 update:Update date:int = Updates;
-updatesCombined#725b04c3 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq_start:int seq:int = Updates;
-updates#74ae4240 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq:int = Updates;
-updateShortSentMessage#9015e101 flags:# out:flags.1?true id:int pts:int pts_count:int date:int media:flags.9?MessageMedia entities:flags.7?Vector<MessageEntity> ttl_period:flags.25?int = Updates;
----functions---
-phone.leaveGroupCall#500377f9 call:InputGroupCall source:int = Updates;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
callInputGroupCallThe group call
sourceintYour source ID
-

Result

-

Updates

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/phone.receivedCall b/data/corefork.telegram.org/method/phone.receivedCall deleted file mode 100644 index 067a651b85..0000000000 --- a/data/corefork.telegram.org/method/phone.receivedCall +++ /dev/null @@ -1,172 +0,0 @@ - - - - - phone.receivedCall - - - - - - - - - - - - - -
- -
-
-
- -

phone.receivedCall

- -

Optional: notify the server that the user is currently busy in a call: this will automatically refuse all incoming phone calls until the current phone call is ended.

-

- -
-
boolFalse#bc799737 = Bool;
-boolTrue#997275b5 = Bool;
----functions---
-phone.receivedCall#17d54f61 peer:InputPhoneCall = Bool;

-

Parameters

- - - - - - - - - - - - - - - -
NameTypeDescription
peerInputPhoneCallThe phone call we're currently in
-

Result

-

Bool

-

Possible errors

- - - - - - - - - - - - - - - - - - - - -
CodeTypeDescription
400CALL_ALREADY_DECLINEDThe call was already declined.
400CALL_PEER_INVALIDThe provided call peer object is invalid.
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/phone.saveDefaultGroupCallJoinAs b/data/corefork.telegram.org/method/phone.saveDefaultGroupCallJoinAs deleted file mode 100644 index 58b2783be7..0000000000 --- a/data/corefork.telegram.org/method/phone.saveDefaultGroupCallJoinAs +++ /dev/null @@ -1,155 +0,0 @@ - - - - - phone.saveDefaultGroupCallJoinAs - - - - - - - - - - - - - -
- -
-
-
- -

phone.saveDefaultGroupCallJoinAs

- -

Set the default peer that will be used to join a group call in a specific dialog.

-

- -
-
boolFalse#bc799737 = Bool;
-boolTrue#997275b5 = Bool;
----functions---
-phone.saveDefaultGroupCallJoinAs#575e1f8c peer:InputPeer join_as:InputPeer = Bool;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
peerInputPeerThe dialog
join_asInputPeerThe default peer that will be used to join group calls in this dialog, presenting yourself as a specific user/channel.
-

Result

-

Bool

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/method/users.setSecureValueErrors b/data/corefork.telegram.org/method/users.setSecureValueErrors deleted file mode 100644 index 7f19780805..0000000000 --- a/data/corefork.telegram.org/method/users.setSecureValueErrors +++ /dev/null @@ -1,176 +0,0 @@ - - - - - users.setSecureValueErrors - - - - - - - - - - - - - -
- -
-
-
- -

users.setSecureValueErrors

- -

Notify the user that the sent passport data contains some errors The user will not be able to re-submit their Passport data to you until the errors are fixed (the contents of the field for which you returned the error must change).

-

Use this if the data submitted by the user doesn't satisfy the standards your service requires for any reason. For example, if a birthday date seems invalid, a submitted document is blurry, a scan shows evidence of tampering, etc. Supply some details in the error message to make sure the user knows how to correct the issues.

-

- -
-
boolFalse#bc799737 = Bool;
-boolTrue#997275b5 = Bool;
----functions---
-users.setSecureValueErrors#90c894b5 id:InputUser errors:Vector<SecureValueError> = Bool;

-

Parameters

- - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
idInputUserThe user
errorsVector<SecureValueError>Errors
-

Result

-

Bool

-

Possible errors

- - - - - - - - - - - - - - - -
CodeTypeDescription
400USER_ID_INVALIDThe provided user ID is invalid.
-

Bots can use this method

-

Related pages

-

Telegram Passport Manual

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/mtproto_v1.html b/data/corefork.telegram.org/mtproto_v1.html deleted file mode 100644 index 985b27cde5..0000000000 --- a/data/corefork.telegram.org/mtproto_v1.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - - MTProto Mobile Protocol v.1.0 (DEPRECATED) - - - - - - - - - - - - - -
- -
-
-
-
-

MTProto Mobile Protocol v.1.0 (DEPRECATED)

- -
-

This document describes MTProto v1.0, its status is DEPRECATED.
For information on encryption used in up-to-date Telegram clients, kindly see this document.

-
-

Related articles

-

-
-

This page deals with the basic layer of MTProto encryption used for Cloud chats (server-client encryption). See also:

- -

General Description

-

The protocol is designed for access to a server API from applications running on mobile devices. It must be emphasized that a web browser is not such an application.

-

The protocol is subdivided into three virtually independent components:

-
    -
  • High-level component (API query language): defines the method whereby API queries and responses are converted to binary messages.
  • -
  • Cryptographic (authorization) layer: defines the method by which messages are encrypted prior to being transmitted through the transport protocol.
  • -
  • Transport component: defines the method for the client and the server to transmit messages over some other existing network protocol (such as, http, https, tcp, udp).
  • -
- - -
-

Got questions about this setup? — Check out the Advanced FAQ!

-
-
Note 1
-

Each plaintext message to be encrypted in MTProto always contains the following data to be checked upon decryption in order to make the system robust against known problems with the components:

-
    -
  • server salt (64-Bit)
  • -
  • session id
  • -
  • message sequence number
  • -
  • message length
  • -
  • time
  • -
-
Note 2
-

See additional comments on our use of IGE, SHA-1 and message authentication.

-
Note 3
-

Telegram's End-to-end encrypted Secret Chats are using an additional layer of encryption on top of the described above. See Secret Chats, End-to-End encryption for details.

-

Brief Component Summary

-

High-Level Component (RPC Query Language/API)

-

From the standpoint of the high-level component, the client and the server exchange messages inside a session. The session is attached to the client device (the application, to be more exact) rather than a specific http/https/tcp connection. In addition, each session is attached to a user key ID by which authorization is actually accomplished.

-

Several connections to a server may be open; messages may be sent in either direction through any of the connections (a response to a query is not necessarily returned through the same connection that carried the original query, although most often, that is the case; however, in no case can a message be returned through a connection belonging to a different session). When the UDP protocol is used, a response might be returned by a different IP address than the one to which the query had been sent.

-

There are several types of messages:

-
    -
  • RPC calls (client to server): calls to API methods
  • -
  • RPC responses (server to client): results of RPC calls
  • -
  • Message received acknowledgment (or rather, notification of status of a set of messages)
  • -
  • Message status query
  • -
  • Multipart message or container (a container that holds several messages; needed to send several RPC calls at once over an HTTP connection, for example; also, a container may support gzip).
  • -
-

From the standpoint of lower level protocols, a message is a binary data stream aligned along a 4 or 16-byte boundary. The first several fields in the message are fixed and are used by the cryptographic/authorization system.

-

Each message, either individual or inside a container, consists of a message identifier (64 bits, see below), a message sequence number within a session (32 bits), the length (of the message body in bytes; 32 bits), and a body (any size which is a multiple of 4 bytes). In addition, when a container or a single message is sent, an internal header is added at the top (see below), then the entire message is encrypted, and an external header is placed at the top of the message (a 64-bit key identifier and a 128-bit message key).

-

A message body normally consists of a 32-bit message type followed by type-dependent parameters. In particular, each RPC function has a corresponding message type. For more detail, see Binary Data Serialization, Mobile Protocol: Service Messages.

-

All numbers are written as little endian. However, very large numbers (2048-bit) used in RSA and DH are written in the big endian format because that is what the OpenSSL library does.

-

Authorization and Encryption

-

Prior to a message (or a multipart message) being transmitted over a network using a transport protocol, it is encrypted in a certain way, and an external header is added at the top of the message which is: a 64-bit key identifier (that uniquely identifies an authorization key for the server as well as the user) and a 128-bit message key. A user key together with the message key defines an actual 256-bit key which is what encrypts the message using AES-256 encryption. Note that the initial part of the message to be encrypted contains variable data (session, message ID, sequence number, server salt) that obviously influences the message key (and thus the AES key and iv). The message key is defined as the 128 lower-order bits of the SHA1 of the message body (including session, message ID, etc.). Multipart messages are encrypted as a single message.

-

For a technical specification, see Mobile Protocol: Detailed Description
The first thing a client application must do is create an authorization key which is normally generated when it is first run and almost never changes.

-

The protocol’s principal drawback is that an intruder passively intercepting messages and then somehow appropriating the authorization key (for example, by stealing a device) will be able to decrypt all the intercepted messages post factum. This probably is not too much of a problem (by stealing a device, one could also gain access to all the information cached on the device without decrypting anything); however, the following steps could be taken to overcome this weakness:

-
    -
  • Session keys generated using the Diffie-Hellman protocol and used in conjunction with the authorization and the message keys to select AES parameters. To create these, the first thing a client must do after creating a new session is send a special RPC query to the server (“generate session key”) to which the server will respond, whereupon all subsequent messages within the session are encrypted using the session key as well.
  • -
  • Protecting the key stored on the client device with a (text) password; this password is never stored in memory and is entered by a user when starting the application or more frequently (depending on application settings).
  • -
  • Data stored (cached) on the user device can also be protected by encryption using an authorization key which, in turn, is to be password-protected. Then, a password will be required to gain access even to those data.
  • -
-

Time Synchronization

-

If client time diverges widely from server time, a server may start ignoring client messages, or vice versa, because of an invalid message identifier (which is closely related to creation time). Under these circumstances, the server will send the client a special message containing the correct time and a certain 128-bit salt (either explicitly provided by the client in a special RPC synchronization request or equal to the key of the latest message received from the client during the current session). This message could be the first one in a container that includes other messages (if the time discrepancy is significant but does not as yet result in the client’s messages being ignored).

-

Having received such a message or a container holding it, the client first performs a time synchronization (in effect, simply storing the difference between the server’s time and its own to be able to compute the “correct” time in the future) and then verifies that the message identifiers for correctness.

-

Where a correction has been neglected, the client will have to generate a new session to assure the monotonicity of message identifiers.

-

Transport

-

Enables the delivery of encrypted containers together with the external header (hereinafter, Payload) from client to server and back. There are three types of transport:

-
    -
  • HTTP
  • -
  • TCP
  • -
  • UDP
  • -
-

We shall examine the first two types.

-

HTTP Transport

-

Implemented over HTTP/1.1 (with keepalive) running over the traditional TCP Port 80. HTTPS is not used; the above encryption method is used instead.

-

An HTTP connection is attached to a session (or rather, to session + key identifier) specified in the most recent user query received; normally, the session is the same in all queries, but crafty HTTP proxies may corrupt that. A server may not return a message into an HTTP connection unless it belongs to the same session, and unless it is the server’s turn (an HTTP request had been received from the client to which a response has not been sent yet).

-

The overall arrangement is as follows. The client opens one or more keepalive HTTP connections to the server. If one or more messages need to be sent, they are made into a payload which is followed by a POST request to the URL/api to which the payload is transmitted as data. In addition, Content-Length, Keepalive, and Host are valid HTTP headers.

-

Having received the query, the server may either wait a little while (if the query requires a response following a short timeout) or immediately return a dummy response (only acknowledging the receipt of the container). In any case, the response may contain any number of messages. The server may at the same time send out any other messages it might be holding for the session.

-

In addition, there exists a special long poll RPC query (valid for HTTP connections only) which transmits maximum timeout T. If the server has messages for the session, they are returned immediately; otherwise, a wait state is entered until such time as the server has a message for the client or T seconds have elapsed. If no events occur in the span of T seconds, a dummy response is returned (special message).

-

If a server needs to send a message to a client, it checks for an HTTP connection that belongs to the required session and is in the “answering an HTTP request” state (including long poll) whereupon the message is added to the response container for the connection and sent to the user. In a typical case, there is some additional wait time (50 milliseconds) against the eventuality that the server will soon have more messages for the session.

-

If no suitable HTTP connection is available, the messages are placed in the current session’s send queue. However, they find their way there anyway until receipt is explicitly or indirectly confirmed by the client. For the HTTP protocol, sending the next query into the same HTTP connection is regarded as an implicit acknowledgment (not any more, the HTTP protocol also requires that explicit acknowledgments be sent); in other cases, the client must return an explicit acknowledgment within a reasonable time (it can be added to a container for the following request).

-

Important: if the acknowledgment fails to arrive on time, the message can be resent (possibly, in a different container). The parties must autonomously be ready for this and must store the identifiers of the most recent messages received (and ignore such duplicates rather than repeat actions). In order not to have the identifiers stored forever, there exist special garbage collection messages that take advantage of message identifier monotonicity.

-

If the send queue overflows or if messages stay in the queue for over 10 minutes, the server forgets them (or sends them to swap, no genius required). This may happen even faster, if the server is running out of buffer space (for example, because of serious network issues resulting in a large number of connections becoming severed).

-

TCP Transport

-

This is very similar to the HTTP transport. May also be implemented over Port 80 (to penetrate all firewalls) and even use the same server IP addresses. In this situation, the server understands whether HTTP or TCP protocol must be used for the connection, based on the first four incoming bytes (for HTTP, it is POST).

-

When a TCP connection is created, it is assigned to the session (and the authorization key) transmitted in the first user message, and subsequently used exclusively for this session (multiplexing arrangements are not allowed).

-

If a payload (packet) needs to be transmitted from server to client or from client to server, it is encapsulated as follows: 4 length bytes are added at the front (to include the length, the sequence number, and CRC32; always divisible by 4) and 4 bytes with the packet sequence number within this TCP connection (the first packet sent is numbered 0, the next one 1, etc.), and 4 CRC32 bytes at the end (length, sequence number, and payload together).

-

There is an abridged version of the same protocol: if the client sends 0xef as the first byte (important: only prior to the very first data packet), then packet length is encoded by a single byte (0x01..0x7e = data length divided by 4; or 0x7f followed by 3 length bytes (little endian) divided by 4) followed by the data themselves (sequence number and CRC32 not added). In this case, server responses look the same (the server does not send 0xefas the first byte).

-

In case 4-byte data alignment is needed, an intermediate version of the original protocol may be used: if the client sends 0xeeeeeeee as the first int (four bytes), then packet length is encoded always by four bytes as in the original version, but the sequence number and CRC32 are omitted, thus decreasing total packet size by 8 bytes.

-

The full, the intermediate and the abridged versions of the protocol have support for quick acknowledgment. In this case, the client sets the highest-order length bit in the query packet, and the server responds with a special 4 bytes as a separate packet. They are the 32 higher-order SHA1 bits of the encrypted portion of the packet with the most significant bit set to make clear that this is not the length of a regular server response packet; if the abridged version is used, bswap is applied to these four bytes.

-

There are no implicit acknowledgments for the TCP transport: all messages must be acknowledged explicitly. Most frequently, acknowledgments are placed in a container with the next query or response if it is transmitted in short order. For example, this is almost always the case for client messages containing RPC queries: the acknowledgment normally arrives with the RPC response.

-

In the event of an error, the server may send a packet whose payload consists of 4 bytes as the error code. For example, Error Code 403 corresponds to situations where the corresponding HTTP error would have been returned by the HTTP protocol.

-
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/type/CdnPublicKey.html b/data/corefork.telegram.org/type/CdnPublicKey.html deleted file mode 100644 index f6f2083ade..0000000000 --- a/data/corefork.telegram.org/type/CdnPublicKey.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - - CdnPublicKey - - - - - - - - - - - - - -
- -
-
-
- -

CdnPublicKey

- -

Public key to use only during handshakes to CDN DCs.

-

- -
-
cdnPublicKey#c982eaba dc_id:int public_key:string = CdnPublicKey;

-

Constructors

- - - - - - - - - - - - - -
ConstructorDescription
cdnPublicKeyPublic key to use only during handshakes to CDN DCs.
-

Related pages

-

Encrypted CDNs for Speed and Security

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/type/Contact.html b/data/corefork.telegram.org/type/Contact.html deleted file mode 100644 index 73a64d84a6..0000000000 --- a/data/corefork.telegram.org/type/Contact.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - Contact - - - - - - - - - - - - - -
- -
-
-
- -

Contact

- -

A contact of the current user.

-

- -
-
contact#145ade0b user_id:long mutual:Bool = Contact;

-

Constructors

- - - - - - - - - - - - - -
ConstructorDescription
contactA contact of the current user that is registered in the system.
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/type/DecryptedDataBlock.html b/data/corefork.telegram.org/type/DecryptedDataBlock.html deleted file mode 100644 index 527db51035..0000000000 --- a/data/corefork.telegram.org/type/DecryptedDataBlock.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - DecryptedDataBlock - - - - - - - - - - - - - -
- -
-
-
- -

DecryptedDataBlock

- -

VoIP decrypted data block

-

- -
-
Type schema is not available in the selected layer.

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/type/DecryptedMessage.html b/data/corefork.telegram.org/type/DecryptedMessage.html deleted file mode 100644 index d4976ec1a8..0000000000 --- a/data/corefork.telegram.org/type/DecryptedMessage.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - DecryptedMessage - - - - - - - - - - - - - -
- -
-
-
- -

DecryptedMessage

- -

Object describes the contents of an encrypted message.

-

- -
-
===8===
-decryptedMessage#1f814f1f random_id:long random_bytes:bytes message:string media:DecryptedMessageMedia = DecryptedMessage;
-decryptedMessageService#aa48327d random_id:long random_bytes:bytes action:DecryptedMessageAction = DecryptedMessage;
-
-===17===
-decryptedMessage#204d3878 random_id:long ttl:int message:string media:DecryptedMessageMedia = DecryptedMessage;
-decryptedMessageService#73164160 random_id:long action:DecryptedMessageAction = DecryptedMessage;
-
-===45===
-decryptedMessage#36b091de flags:# random_id:long ttl:int message:string media:flags.9?DecryptedMessageMedia entities:flags.7?Vector<MessageEntity> via_bot_name:flags.11?string reply_to_random_id:flags.3?long = DecryptedMessage;
-
-===73===
-decryptedMessage#91cc4674 flags:# no_webpage:flags.1?true silent:flags.5?true random_id:long ttl:int message:string media:flags.9?DecryptedMessageMedia entities:flags.7?Vector<MessageEntity> via_bot_name:flags.11?string reply_to_random_id:flags.3?long grouped_id:flags.17?long = DecryptedMessage;

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/type/EncryptedChat.html b/data/corefork.telegram.org/type/EncryptedChat.html deleted file mode 100644 index b6b2dd6834..0000000000 --- a/data/corefork.telegram.org/type/EncryptedChat.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - - EncryptedChat - - - - - - - - - - - - - -
- -
-
-
- -

EncryptedChat

- -

Object contains info on an encrypted chat.

-

- -
-
encryptedChatEmpty#ab7ec0a0 id:int = EncryptedChat;
-encryptedChatWaiting#66b25953 id:int access_hash:long date:int admin_id:long participant_id:long = EncryptedChat;
-encryptedChatRequested#48f1d94c flags:# folder_id:flags.0?int id:int access_hash:long date:int admin_id:long participant_id:long g_a:bytes = EncryptedChat;
-encryptedChat#61f0d4c7 id:int access_hash:long date:int admin_id:long participant_id:long g_a_or_b:bytes key_fingerprint:long = EncryptedChat;
-encryptedChatDiscarded#1e1c7c45 flags:# history_deleted:flags.0?true id:int = EncryptedChat;
-
----functions---
-
-messages.requestEncryption#f64daf43 user_id:InputUser random_id:int g_a:bytes = EncryptedChat;
-messages.acceptEncryption#3dbc0415 peer:InputEncryptedChat g_b:bytes key_fingerprint:long = EncryptedChat;

-

Constructors

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ConstructorDescription
encryptedChatEmptyEmpty constructor.
encryptedChatWaitingChat waiting for approval of second participant.
encryptedChatRequestedRequest to create an encrypted chat.
encryptedChatEncrypted chat
encryptedChatDiscardedDiscarded or deleted chat.
-

Methods

- - - - - - - - - - - - - - - - - -
MethodDescription
messages.requestEncryptionSends a request to start a secret chat to the user.
messages.acceptEncryptionConfirms creation of a secret chat
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/type/Folder.html b/data/corefork.telegram.org/type/Folder.html deleted file mode 100644 index 6901557e8c..0000000000 --- a/data/corefork.telegram.org/type/Folder.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - Folder - - - - - - - - - - - - - -
- -
-
-
- -

Folder

- -

A folder

-

- -
-
folder#ff544e65 flags:# autofill_new_broadcasts:flags.0?true autofill_public_groups:flags.1?true autofill_new_correspondents:flags.2?true id:int title:string photo:flags.3?ChatPhoto = Folder;

-

Constructors

- - - - - - - - - - - - - -
ConstructorDescription
folderFolder
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/type/GlobalPrivacySettings.html b/data/corefork.telegram.org/type/GlobalPrivacySettings.html deleted file mode 100644 index bd909aad38..0000000000 --- a/data/corefork.telegram.org/type/GlobalPrivacySettings.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - GlobalPrivacySettings - - - - - - - - - - - - - -
- -
-
-
- -

GlobalPrivacySettings

- -

Global privacy settings

-

- -
-
globalPrivacySettings#bea2f424 flags:# archive_and_mute_new_noncontact_peers:flags.0?Bool = GlobalPrivacySettings;
-
----functions---
-
-account.getGlobalPrivacySettings#eb2b4cf6 = GlobalPrivacySettings;
-account.setGlobalPrivacySettings#1edaaac2 settings:GlobalPrivacySettings = GlobalPrivacySettings;

-

Constructors

- - - - - - - - - - - - - -
ConstructorDescription
globalPrivacySettingsGlobal privacy settings
-

Methods

- - - - - - - - - - - - - - - - - -
MethodDescription
account.getGlobalPrivacySettingsSet global privacy settings
account.setGlobalPrivacySettingsSet global privacy settings
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/type/GroupCallParticipant.html b/data/corefork.telegram.org/type/GroupCallParticipant.html deleted file mode 100644 index 582f83cc98..0000000000 --- a/data/corefork.telegram.org/type/GroupCallParticipant.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - GroupCallParticipant - - - - - - - - - - - - - -
- -
-
-
- -

GroupCallParticipant

- -

Info about a group call participant

-

- -
-
groupCallParticipant#eba636fe flags:# muted:flags.0?true left:flags.1?true can_self_unmute:flags.2?true just_joined:flags.4?true versioned:flags.5?true min:flags.8?true muted_by_you:flags.9?true volume_by_admin:flags.10?true self:flags.12?true video_joined:flags.15?true peer:Peer date:int active_date:flags.3?int source:int volume:flags.7?int about:flags.11?string raise_hand_rating:flags.13?long video:flags.6?GroupCallParticipantVideo presentation:flags.14?GroupCallParticipantVideo = GroupCallParticipant;

-

Constructors

- - - - - - - - - - - - - -
ConstructorDescription
groupCallParticipantInfo about a group call participant
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/type/InputGame.html b/data/corefork.telegram.org/type/InputGame.html deleted file mode 100644 index b795a0eb9d..0000000000 --- a/data/corefork.telegram.org/type/InputGame.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - InputGame - - - - - - - - - - - - - -
- -
-
-
- -

InputGame

- -

A game to send

-

- -
-
inputGameID#32c3e77 id:long access_hash:long = InputGame;
-inputGameShortName#c331e80a bot_id:InputUser short_name:string = InputGame;

-

Constructors

- - - - - - - - - - - - - - - - - -
ConstructorDescription
inputGameIDIndicates an already sent game
inputGameShortNameGame by short name
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/type/InputPaymentCredentials.html b/data/corefork.telegram.org/type/InputPaymentCredentials.html deleted file mode 100644 index 82564c35cc..0000000000 --- a/data/corefork.telegram.org/type/InputPaymentCredentials.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - InputPaymentCredentials - - - - - - - - - - - - - -
- -
-
-
- -

InputPaymentCredentials

- -

Payment credentials

-

- -
-
inputPaymentCredentialsSaved#c10eb2cf id:string tmp_password:bytes = InputPaymentCredentials;
-inputPaymentCredentials#3417d728 flags:# save:flags.0?true data:DataJSON = InputPaymentCredentials;
-inputPaymentCredentialsApplePay#aa1c39f payment_data:DataJSON = InputPaymentCredentials;
-inputPaymentCredentialsGooglePay#8ac32801 payment_token:DataJSON = InputPaymentCredentials;

-

Constructors

- - - - - - - - - - - - - - - - - - - - - - - - - -
ConstructorDescription
inputPaymentCredentialsSavedSaved payment credentials
inputPaymentCredentialsPayment credentials
inputPaymentCredentialsApplePayApple pay payment credentials
inputPaymentCredentialsGooglePayGoogle Pay payment credentials
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/type/MessageReplyHeader.html b/data/corefork.telegram.org/type/MessageReplyHeader.html deleted file mode 100644 index 80180843a3..0000000000 --- a/data/corefork.telegram.org/type/MessageReplyHeader.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - MessageReplyHeader - - - - - - - - - - - - - -
- -
-
-
- -

MessageReplyHeader

- -

Reply information

-

- -
-
messageReplyHeader#a6d57763 flags:# reply_to_msg_id:int reply_to_peer_id:flags.0?Peer reply_to_top_id:flags.1?int = MessageReplyHeader;

-

Constructors

- - - - - - - - - - - - - -
ConstructorDescription
messageReplyHeaderMessage thread information
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/type/PeerSettings.html b/data/corefork.telegram.org/type/PeerSettings.html deleted file mode 100644 index 4892b15b70..0000000000 --- a/data/corefork.telegram.org/type/PeerSettings.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - PeerSettings - - - - - - - - - - - - - -
- -
-
-
- -

PeerSettings

- -

Peer settings

-

- -
-
peerSettings#733f2961 flags:# report_spam:flags.0?true add_contact:flags.1?true block_contact:flags.2?true share_contact:flags.3?true need_contacts_exception:flags.4?true report_geo:flags.5?true autoarchived:flags.7?true invite_members:flags.8?true geo_distance:flags.6?int = PeerSettings;
-
----functions---
-
-messages.getPeerSettings#3672e09c peer:InputPeer = PeerSettings;

-

Constructors

- - - - - - - - - - - - - -
ConstructorDescription
peerSettingsPeer settings
-

Methods

- - - - - - - - - - - - - -
MethodDescription
messages.getPeerSettingsGet peer settings
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/type/SecurePlainData.html b/data/corefork.telegram.org/type/SecurePlainData.html deleted file mode 100644 index 44489e1bb2..0000000000 --- a/data/corefork.telegram.org/type/SecurePlainData.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - SecurePlainData - - - - - - - - - - - - - -
- -
-
-
- -

SecurePlainData

- -

Plaintext verified passport data.

-

- -
-
securePlainPhone#7d6099dd phone:string = SecurePlainData;
-securePlainEmail#21ec5a5f email:string = SecurePlainData;

-

Constructors

- - - - - - - - - - - - - - - - - -
ConstructorDescription
securePlainPhonePhone number to use in telegram passport: it must be verified, first ».
securePlainEmailEmail address to use in telegram passport: it must be verified, first ».
-

Related pages

-

Telegram Passport Encryption Details

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/type/UserProfilePhoto.html b/data/corefork.telegram.org/type/UserProfilePhoto.html deleted file mode 100644 index 070b8f0aef..0000000000 --- a/data/corefork.telegram.org/type/UserProfilePhoto.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - UserProfilePhoto - - - - - - - - - - - - - -
- -
-
-
- -

UserProfilePhoto

- -

Object contains info on the user's profile photo.

-

- -
-
userProfilePhotoEmpty#4f11bae1 = UserProfilePhoto;
-userProfilePhoto#82d1f706 flags:# has_video:flags.0?true photo_id:long stripped_thumb:flags.1?bytes dc_id:int = UserProfilePhoto;

-

Constructors

- - - - - - - - - - - - - - - - - -
ConstructorDescription
userProfilePhotoEmptyProfile photo has not been set, or was hidden.
userProfilePhotoUser profile photo.
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/type/account.ResetPasswordResult b/data/corefork.telegram.org/type/account.ResetPasswordResult deleted file mode 100644 index f6e0855015..0000000000 --- a/data/corefork.telegram.org/type/account.ResetPasswordResult +++ /dev/null @@ -1,175 +0,0 @@ - - - - - account.ResetPasswordResult - - - - - - - - - - - - - -
- -
-
-
- -

account.ResetPasswordResult

- -

Result of an account.resetPassword request.

-

- -
-
account.resetPasswordFailedWait#e3779861 retry_date:int = account.ResetPasswordResult;
-account.resetPasswordRequestedWait#e9effc7d until_date:int = account.ResetPasswordResult;
-account.resetPasswordOk#e926d63e = account.ResetPasswordResult;
-
----functions---
-
-account.resetPassword#9308ce1b = account.ResetPasswordResult;

-

Constructors

- - - - - - - - - - - - - - - - - - - - - -
ConstructorDescription
account.resetPasswordFailedWaitYou requested a password reset too many times, please wait until the specified date before retrying the reset.
account.resetPasswordRequestedWaitYou already requested a password reset, please wait until the specified date before retrying the reset.
account.resetPasswordOkThe 2FA password was reset successfully.
-

Methods

- - - - - - - - - - - - - -
MethodDescription
account.resetPasswordInitiate a 2FA password reset
-

Related pages

-

account.resetPassword

-

Initiate a 2FA password reset: can only be used if the user is already logged-in, see here for more info »

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/type/auth.CheckedPhone b/data/corefork.telegram.org/type/auth.CheckedPhone deleted file mode 100644 index c19a5f1c05..0000000000 --- a/data/corefork.telegram.org/type/auth.CheckedPhone +++ /dev/null @@ -1,128 +0,0 @@ - - - - - Auth.CheckedPhone - - - - - - - - - - - - - -
- -
-
-
- -

Auth.CheckedPhone

- -

Checked phone

-

- -
-

- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/type/help.CountriesList b/data/corefork.telegram.org/type/help.CountriesList deleted file mode 100644 index f6f88de05a..0000000000 --- a/data/corefork.telegram.org/type/help.CountriesList +++ /dev/null @@ -1,167 +0,0 @@ - - - - - help.CountriesList - - - - - - - - - - - - - -
- -
-
-
- -

help.CountriesList

- -

Name, ISO code, localized name and phone codes/patterns of all available countries

-

- -
-
help.countriesListNotModified#93cc1f32 = help.CountriesList;
-help.countriesList#87d0759e countries:Vector<help.Country> hash:int = help.CountriesList;
-
----functions---
-
-help.getCountriesList#735787a8 lang_code:string hash:int = help.CountriesList;

-

Constructors

- - - - - - - - - - - - - - - - - -
ConstructorDescription
help.countriesListNotModifiedThe country list has not changed
help.countriesListName, ISO code, localized name and phone codes/patterns of all available countries
-

Methods

- - - - - - - - - - - - - -
MethodDescription
help.getCountriesListGet name, ISO code, localized name and phone codes/patterns of all available countries
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/type/help.CountryCode b/data/corefork.telegram.org/type/help.CountryCode deleted file mode 100644 index b1e161a87c..0000000000 --- a/data/corefork.telegram.org/type/help.CountryCode +++ /dev/null @@ -1,143 +0,0 @@ - - - - - help.CountryCode - - - - - - - - - - - - - -
- -
-
-
- -

help.CountryCode

- -

Country code and phone number pattern of a specific country

-

- -
-
help.countryCode#4203c5ef flags:# country_code:string prefixes:flags.0?Vector<string> patterns:flags.1?Vector<string> = help.CountryCode;

-

Constructors

- - - - - - - - - - - - - -
ConstructorDescription
help.countryCodeCountry code and phone number pattern of a specific country
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/type/help.UserInfo b/data/corefork.telegram.org/type/help.UserInfo deleted file mode 100644 index 3d9c76bad2..0000000000 --- a/data/corefork.telegram.org/type/help.UserInfo +++ /dev/null @@ -1,172 +0,0 @@ - - - - - Help.UserInfo - - - - - - - - - - - - - -
- -
-
-
- -

Help.UserInfo

- -

User info

-

- -
-
help.userInfoEmpty#f3ae2eed = help.UserInfo;
-help.userInfo#1eb3758 message:string entities:Vector<MessageEntity> author:string date:int = help.UserInfo;
-
----functions---
-
-help.getUserInfo#38a08d3 user_id:InputUser = help.UserInfo;
-help.editUserInfo#66b91b70 user_id:InputUser message:string entities:Vector<MessageEntity> = help.UserInfo;

-

Constructors

- - - - - - - - - - - - - - - - - -
ConstructorDescription
help.userInfoEmptyInternal use
help.userInfoInternal use
-

Methods

- - - - - - - - - - - - - - - - - -
MethodDescription
help.getUserInfoInternal use
help.editUserInfoInternal use
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/type/messages.Stickers b/data/corefork.telegram.org/type/messages.Stickers deleted file mode 100644 index 88f64c8b3a..0000000000 --- a/data/corefork.telegram.org/type/messages.Stickers +++ /dev/null @@ -1,167 +0,0 @@ - - - - - Messages.Stickers - - - - - - - - - - - - - -
- -
-
-
- -

Messages.Stickers

- -

Stickers

-

- -
-
messages.stickersNotModified#f1749a22 = messages.Stickers;
-messages.stickers#30a6ec7e hash:long stickers:Vector<Document> = messages.Stickers;
-
----functions---
-
-messages.getStickers#d5a5d3a1 emoticon:string hash:long = messages.Stickers;

-

Constructors

- - - - - - - - - - - - - - - - - -
ConstructorDescription
messages.stickersNotModifiedNo new stickers were found for the given query
messages.stickersFound stickers
-

Methods

- - - - - - - - - - - - - -
MethodDescription
messages.getStickersGet stickers by emoji
- -
- -
-
- -
- - - - - - diff --git a/data/corefork.telegram.org/type/storage.FileType b/data/corefork.telegram.org/type/storage.FileType deleted file mode 100644 index a05dc27d7e..0000000000 --- a/data/corefork.telegram.org/type/storage.FileType +++ /dev/null @@ -1,188 +0,0 @@ - - - - - storage.FileType - - - - - - - - - - - - - -
- -
-
-
- -

storage.FileType

- -

Object describes the file type.

-

- -
-
storage.fileUnknown#aa963b05 = storage.FileType;
-storage.filePartial#40bc6f52 = storage.FileType;
-storage.fileJpeg#7efe0e = storage.FileType;
-storage.fileGif#cae1aadf = storage.FileType;
-storage.filePng#a4f63c0 = storage.FileType;
-storage.filePdf#ae1e508d = storage.FileType;
-storage.fileMp3#528a0677 = storage.FileType;
-storage.fileMov#4b09ebbc = storage.FileType;
-storage.fileMp4#b3cea0e4 = storage.FileType;
-storage.fileWebp#1081464c = storage.FileType;

-

Constructors

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ConstructorDescription
storage.fileUnknownUnknown type.
storage.filePartialPart of a bigger file.
storage.fileJpegJPEG image. MIME type: image/jpeg.
storage.fileGifGIF image. MIME type: image/gif.
storage.filePngPNG image. MIME type: image/png.
storage.filePdfPDF document image. MIME type: application/pdf.
storage.fileMp3Mp3 audio. MIME type: audio/mpeg.
storage.fileMovQuicktime video. MIME type: video/quicktime.
storage.fileMp4MPEG-4 video. MIME type: video/mp4.
storage.fileWebpWEBP image. MIME type: image/webp.
- -
- -
-
- -
- - - - - - diff --git a/data/instantview.telegram.org/docs.html b/data/instantview.telegram.org/docs.html deleted file mode 100644 index bc5b664936..0000000000 --- a/data/instantview.telegram.org/docs.html +++ /dev/null @@ -1,1527 +0,0 @@ - - - - - Instant View Manual - - - - - - - - - - - -
- -
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
- -
-
-
-
-

Instant Views and Where to Find Them

- -
- -

This document describes Telegram's Instant View format in stupefying detail. If this is your first time hearing about Instant View, please check out our Introduction and Sample Templates before you dive in.

-

If you're comfortable with the idea of Instant View templates, let's look at what makes them tick. To begin with, this is our in-house artist's idea of how Instant View pages are generated:

-
- -
- -

It turns out, he is not entirely wrong. This is how Instant View pages are really generated:

-
    -
  1. Whenever Telegram needs to display a link preview for a URL, it also checks whether an Instant View template exists for that domain.
  2. -
  3. If a template exists, our Instant View Bot obtains the page using the URL (it only processes pages that have the MIME-type text/html).
  4. -
  5. The bot then applies rules from the template that determine the positioning of the key elements on the source page (using XPath 1.0 expressions) and modifies the page content to fit the Instant View format.
  6. -
  7. The edited page is used to create a new Instant View page that will be displayed to the user.
  8. -
-

This document will explore the Instant View Format, the Types of Rules your template can utilize, as well as some useful XPath constructs, conditions, and functions that may help you build better templates.

-

This manual was intended to be used as a reference, so you don't have to read the entire thing to get started. Our sample templates make for a much better entry point. You can check back here whenever something is not clear.

-

Recent changes

-

September 10, 2020

-
    -
  • Added the new ~allowed_origin option
  • -
  • Added the new @load function
  • -
  • The @inline function now supports the silent parameter which ignores errors while fetching a page
  • -
-

March 20, 2019

-

Version 2.1

-
    -
  • Supported the srcset attribute in Image and Icon types. The IV engine will automatically take the highest image resolution available (but not higher than 2560px).
  • -
  • The @match function now returns only nodes which content was matched by regular expression
  • -
  • The @replace function now returns only nodes which content was replaced by regular expression
  • -
  • The @inline function no longer follows canonical redirect links while fetching a page
  • -
-

Also in this update:

- -

December 10, 2018

-

Instant View 2.0 expands the platform with support for right-to-left languages, new page blocks, useful functions and much more. We recommend using the latest version in your templates. To do this, add the following rule at the beginning of the template:

-
~version: "2.0"
-

Below is a list of changes in version 2.0:

-

New properties:

-
    -
  • kicker
  • -
  • site_name
  • -
-

New types:

-
    -
  • Map
  • -
  • Table
  • -
  • Details
  • -
  • RelatedArticles
  • -
  • Marked
  • -
  • Subscript
  • -
  • Superscript
  • -
  • Icon
  • -
  • PhoneLink
  • -
  • Reference
  • -
-

New types of rules:

- -

New functions:

- -

Other features and improvements:

-
    -
  • Xpath query results can be appended into variables using + (see more)
  • -
  • New XPath function ends-with
  • -
  • Lists can contain block elements such as paragraph, nested lists, tables and so on
  • -
  • Support for attribution in media captions (<cite> tag)
  • -
  • Support for image links (href attribute for the Image type)
  • -
  • Unsupported elements (such as an image inside the blockquote) now generate an error instead of moving up
  • -
  • Improved @simplify function for better processing RichText (e.g. saves line breaks formed by block elements)
  • -
-

Instant View Format

-

An Instant View page is an object with the following properties:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterTypeDescription
title RequiredRichTextPage title
subtitleRichTextPage subtitle
kicker RichTextKicker
authorStringAuthor name
author_urlUrlAuthor link
published_dateUnixtimeDate published
descriptionStringA short description (used in link preview)
image_urlUrlLink preview photo (used in link preview)
document_urlUrlLink preview document (used in link preview)
site_name StringName of website (used in link preview)
channelStringThe username of the article author's (or the originating website's) channel on Telegram in the format @username
coverMedia (Image/Video/Embed/Map)Page cover
body RequiredArticlePage content
-

RTL support

-

The platform supports right-to-left languages. If <html> tag or tag referenced by body property has the attribute dir="rtl", the page will be marked as RTL. In case this attribute is not set, you can set it manually to display the page in Instant View as RTL using the following rule:

-
  @set_attr(dir, "rtl"): $body   # if body is already defined
-  @set_attr(dir, "rtl"): /html   # alternative way
-

Supported types

-

The IV page object can hold the following types:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeAllowed childrenDescriptionHTML counterpart
ArticleHeader
Subheader
Paragraph
Preformatted
Divider
Anchor
List
Blockquote
Pullquote
Media
Image
Video
Audio
Embed
Slideshow
Table
Details
Footer
RelatedArticles
Page content<article>
HeaderRichTextMajor headingWe use the top-level of the <h1><h4> headings found on the source page
SubheaderRichTextMinor headingWe use the remaining headings <h1><h4> as well as <h5><h6> headings
ParagraphRichTextA paragraph<p>
PreformattedRichTextPreformatted text<pre> with the optional attribute data-language*
AnchorAnchor<anchor> with the attribute name that contains the anchor name
DividerA separator<hr>
ListListItemA list<ul> for a bullet list, <ol> for a numbered list
ListItemversion 1.0:
RichText

version 2.0:
Header
Subheader
Paragraph
Preformatted
Divider
Anchor
List
Blockquote
Pullquote
Media
Image
Video
Audio
Embed
Slideshow
Table
Details
A list item<li>
BlockquoteRichText
QuoteCaption
A block quote<blockquote>
PullquoteRichText
QuoteCaption
A pull quote<aside>
QuoteCaptionRichTextCaption of a quote<cite>
MediaImage
Video
Audio
Embed
Map
MediaCaption
Media content<figure>
ImageAn image<img> with the attribute src and the optional attribute href to make the image clickable. Allowed formats: GIF, JPG, PNG (GIF would be converted into Video type by IV)
As of version 2.1, supports the attribute srcset (srcset has higher priority than src, the same as in a browser; IV gets the highest available resolution under 2560px).
VideoA video<video> with the attribute src, or containing the tag <source type="video/mp4"> with the attribute src
AudioAn audio<audio> with the attribute src, or containing the tag <source> with the attribute src and the attribute type (possible types: audio/ogg, audio/mpeg, audio/mp4)
EmbedAn embedded element<iframe> with the attribute src. List of supported embeds
Map A map<img> or <iframe> with the attribute src referring to Google or Yandex maps
SlideshowMedia (Image/Video)
Image
Video
MediaCaption
A slideshow<slideshow>
MediaCaptionRichTextMedia caption<figcaption>
As of IV 2.0, can contain an additional tag <cite> with attribution (author, creator or source of the media)
Table TableCaption
TableRow
A table<table>
TableCaption RichTextA table caption<caption>
TableRow TableCellA table row<tr> with the optional attributes align, valign, can be wrapped with <thead> or <tbody> or <tfoot> with the optional attributes align, valign
TableCell RichTextA table cell<td> for a standard cell, <th> for a header cell, with the optional attributes align, valign, colspan, rowspan
Details 
(version 2.0+)
DetailsHeader
Header
Subheader
Paragraph
Preformatted
Divider
Anchor
List
Blockquote
Pullquote
Media
Image
Video
Audio
Embed
Slideshow
Table
Details
A collapsible block<details> with the optional attribute open to be opened by default
DetailsHeader 
(version 2.0+)
RichTextA visible heading for the collapsible block<summary>
RelatedArticles Header
Link
Related articles<related> containing one of <h1><h6> tag as header of the block and <a> tags with the attribute href containing a URL of related article. Note: Only articles that have an IV will appear in this block on the IV page.
FooterRichTextThe footer<footer>
RichTextBold
Italic
Underline
Strike
Fixed
Marked
Subscript
Superscript
Icon
Link
EmailLink
PhoneLink
LineBreak
Anchor
Reference
String
Formatted textText elements and supported tags
BoldRichTextBold text<b> or <strong>
ItalicRichTextItalic text<i> or <em>
UnderlineRichTextUnderlined text<u> or <ins>
StrikeRichTextStrikethrough text<s> or <del> or <strike>
FixedRichTextMonospace text<code> or <kbd> or <samp> or <tt>
Marked RichTextMarked text<mark>
Subscript RichTextSubscript text<sub>
Superscript RichTextSuperscript text<sup>
Icon A small image inside the text<pic> with the attribute src, width, height. Can contain the attribute optional if the image is not important and may be ignored. Allowed formats: JPG, PNG.
As of version 2.1, supports the attribute srcset (srcset has higher priority than src, the same as in a browser).
LinkRichTextA link<a> with the attribute href containing a URL
EmailLinkRichTextA link to an email address<a> with the attribute href containing a mailto: link
PhoneLink RichTextA link to a phone number<a> with the attribute href containing a tel: link
Reference RichTextA reference<reference> with the attribute name that contains the reference name
LineBreakLine break<br>
-
Note on code languages
-

Telegram apps currently do not support code highlighting, but they will in the future. For this reason, it is advisable to include the code language attribute (data-language) for large <pre> blocks if it is supplied in the source.

-
-

Types of Rules

-

Instant View rules are instructions that tell our IV bot where to find the meta-elements on the source page and how it should modify the content of the page when an Instant View page is created.

-

Each new line in a template describes a new rule. When the bot renders a page into the Instant View format, it applies rules from the relevant template one after another and ignores any empty lines. You can leave comments by starting a line with #, all following text on that line will be ignored unless enclosed in quote marks. You can use the \ symbol to carry a rule over to the next string, like this:

-
# Comment 
-# You can break up \
-  a long rule into \
-  multiple strings
-

Most rules are based on XPath 1.0 expressions used to locate the required nodes on the source page.

-

A block of rules may have a name. In this case, it can be reused in other rules.

-

We support the following types of rules:

-

Conditions

-

Conditions offer unlimited flexibility for your templates. Rules of this type begin with the symbols ? or ! and use the following format:

-
?condition:  xpath_query   # condition example
-!condition:  regexp        # parameter on the right depends on the type of the condition
-?condition                 # some conditions don't have parameters
-

Groups of conditions that immediately follow one another are interpreted as a block. ?-rules follow the OR logic when joined, while !-rules follow the AND logic. This means that for the bot to apply each block, all !-conditions in the block and at least one of the ?-conditions within it must be met. This also means that each block must have at least one ?-condition.

-

Blocks of conditions split your rule set into groups. Groups of rules that do not have any conditions are always applied. All other groups are only applied if their conditions are met.

-

Examples

-
# If a rule is placed here, it will be applied
-# Same with the one here
-
-?false               # This condition is always false
-# The rule placed here will never be applied, because the condition is not met
-# Very useful indeed
-
-?exists: //article   # This condition is true if the page has an article tag
-# On these lines, a new group of rules is located, and it will be applied if
-# there's an article tag on the page, despite the ?false condition above
-
-?exists: //article
-?exists: //div[@id="article"]
-!exists: //meta[@property="og:title"]
-# The rules below this block will be applied if an <article> tag or a
-# <div id="article"> can be found, this tag must also be present: <meta property="og:title">
-

- -
-

Check out the Supported Conditions to see what works out of the box »

-
-

Properties

-

Properties are the building blocks for your IV page. Check the Instant View Format for a list of properties that can be used when creating IV pages (you can also define custom properties, but they will not be used anywhere on the resulting IV page). Use this format to fill properties:

-
property: xpath_query
-property: "Some string"
-property: null
-

Properties store the first node that matches the XPath expression xpath_query. By default, if a property already has a value, it will not be overwritten. You can change this behavior by adding ! to the property name – in this case a new non-empty value can be assigned. If you add !! to the property name, even an empty new value can be assigned to the property.

-

You can also assign a string to the property instead of the xpath_query. In this case, the property will contain a text element with the specified text. It is also possible to assign null to discard the property's value (will only work with !!).

-

Examples

-
title:   //article//h1      # Looking for the 'title' in the article heading
-title:   //h1               # If not found, checking for any headings at all
-title:   //head/title       # If no luck either, trying the <title> tag
-?path: /blog/.*             # On pages in the /blog/ section 
-title!:  //div[@id="title"] # we prefer to use <div id="title">, if present
-?path: /news/.*             # On pages in the /news/ section
-title!!: //h3               # title is always in an h3 tag
-
-author:   //article/@author  # Get author name from the author attribute
-?exists:  //article[has-class("anonymous")]    
-author!!: null               # Don't display author for anonymous posts
-
-

Reminder: The title and body properties are required for an IV page to be created.

-
-

Variables

-

Variables are useful for storing and manipulating nodes before assigning them to properties for the final IV page. Variable names begin with the $ symbol. Use this format to initialize them:

-
$variable: xpath_query
-$variable: "Some text"
-$variable: null
-

Variables store a list of nodes that match the Xpath expression xpath_query. If a variable is assigned for the second time, its previous value is overwritten. You can change this behavior by adding ? to the variable name. You can also append a list of nodes to the previous one by adding + to the variable name.

-

You can also assign a string to the variable instead of the xpath_query. In this case, the variable will contain a list with one text element that has the specified text. It is also possible to assign null to discard the variable's value.

-

Examples

-
$images:  //img
-$images:  //img[@src]     # the previous value will be overwritten
-$images?: //article//img  # a new value will only be assigned if the variable is empty
-$medias:  //img
-$medias+: //video         # now $medias contains all img and video tags
-

Options

-

Options affect how the page is processed by the bot. Options begin with the ~ symbol. Use this format to set them:

-
~option: "value"
-~option: true
-

Options can be set with values in JSON format.

-

Examples

-
~version: "2.1"
-

- -
-

Check out Supported Options to see what else works out of the box.

-
-

Functions

-

Functions are extremely flexible, but you'll probably mostly use them to strip unnecessary nodes from the page and to replace certain elements with others. Function names begin with the @ symbol, you can use the following format:

-
@function:                 xpath_query   # a function without parameters
-@function(param):          xpath_query   # additional parameters are placed in paretheses
-@function(p1 p2):          xpath_query   # a function with two parameters
-@function(p1, "param #2"): xpath_query   # parameters can be separated by commas
-                                         # and enclosed in quote marks when needed
-@function:                 "Some text"   # use string instead of xpath_query if needed
-

The main argument of a function is a list of nodes that match the Xpath expression xpath_query. You can also use a string as the main argument instead of an xpath_query. In this case, the main argument passed to the function will be a list with one text element that has the specified text.

-

Examples

-
@remove:            //header               # removes all <header> tags found on the page
-@replace_tag(<h1>): //div[@class="header"] # replaces all <div class="header"> tags with <h1>
-<h1>:               //div[@class="header"] # an alias for @replace_tag(<h1>)
-

- -

Note: You may find the @debug function particularly useful when creating XPath expressions.

-
-

Check out Supported Functions to see what else works out of the box.

-
-

Block Functions

-

Block functions manipulate blocks of rules. Block function names also begin with the @ symbol, you can use the following format:

-
@function(xpath_query) {   # opening bracket should be at the end of the line
-  $variable: xpath_query   # some other rules here
-  @function: $@            #   inside the block function
-}                          # closing bracket should be on a separate line
-

A block function can contain another block function so they can be nested. Block function can not contain conditions.

-
-

Please note that block functions that execute a block of rules several times (map, repeat, while, while_not) have a limit on the total number of iterations for the entire template.

-
-

Examples

-
@if( //article ) {    # if <article> exists
-  @append(<p>): $$    #   append paragraph into it
-}
-

- -
-

Check out Supported Block Functions to see what else works out of the box.

-
-

Include

-
-

Note: This is a service rule, it will not work in your templates. It was included in this reference to give you a better understanding of how the system works. You can see an example of this rule at work in the Processing Pages section.

-
-

Rules of this type begin with the + symbol and use the following format:

-
+ rules
-

This rule inserts a block of rules with the specified name. In most cases, the name corresponds to the domain to which the rules apply.

-

Examples

-
+ core.telegram.org # inserting the block of rules that is used for core.telegram.org
-?not_exists: $body
-+ telegram.org      # inserting the block of rules that is used for telegram.org
-

Special variables $$ and $@

-

The special variables work within a group of rules.

-
    -
  • The $$ variable always contains the result of the most recent XPath query.
  • -
  • The $@ variable holds the return of the most recently run function.
  • -
-

These variables come in handy when you're creating chains of rules. If a rule is missing xpath_query, the statement is considered to be equal to $$.

-

Examples

-
# Put a picture into a <figure> tag, then set it as the cover
-@wrap(<figure>): //img[@id="cover"]
-cover:           $@
-
-# Insert a divider before each div.divider that's no longer required
-@before(<hr>):   //div[has-class("divider")]
-@remove          # this is the same as @remove: $$
-

Extended XPath

-

For your convenience, you can use the following constructs in your XPath expressions.

-

Context

-

Regular XPath queries search for nodes in the context of the entire document. To specify the context for a particular expression, you can use variables in the format $context. If a matching variable exists, the query will be made relative to each variable node. If it doesn't and a matching property exists, the query will be made relative to the property node. If no matching variables or properties exist, the query return an empty list.

-

Examples

-
$headers:      //h1              # all <h1> tags on the page
-article:       //article         # the first <article> tag on the page
-$art_headers:  $article//h1      # all <h1> tags inside article
-$header_links: $art_headers//a   # all <a> tags inside each $art_headers node
-

Zeroing in on nodes

-

The result of an XPath query is always a list of matching nodes. If you'd like to narrow the list down to a single node, you can use the following syntax: (xpath_query)[n], where n is the number of the desired node. Numbering starts at 1, you can get the last node by using the last() function. This syntax can only be applied to the entire expression.

-

Examples

-
$headers:    //h1                    # all <h1> tags on the page
-$header2:    (//h1)[2]               # the second <h1> tag on the page
-$header2:    ($headers)[2]           # same
-$last_link:  ($header2//a)[last()]   # the last link inside $header2
-

has-class

-

You will often need to locate nodes that have a certain class. To do this, you can use the has-class("class") function that serves as an alias for the expression contains(concat(" ", normalize-space(@class), " "), " class ").

-

Examples

-
# Transform all div.header elements into h1
-<h1>: //div[contains(concat(" ", normalize-space(@class), " "), " header ")]
-# same idea, but much shorter
-<h1>: //div[has-class("header")]
-

ends-with

-

XPath has a starts-with function that checks whether the first string starts with the second string but does not have ends-with. In IV you can use the ends-with("haystack","needle") function that serves as an alias for the expression (substring("haystack", string-length("haystack") - string-length("needle") + 1) = "needle").

-

Examples

-
# Select all JPG images
-@debug: //img[(substring(@src, string-length(@src) - string-length(".jpg") + 1) = ".jpg")]
-# the same, but much shorter
-@debug: //img[ends-with(@src, ".jpg")]
-

prev-sibling

-

An axis that selects the previous sibling of the current node. Serves as an alias for the expression preceding-sibling::*[1]/self.

-

Examples

-
# Transform all div nodes, that immediately follow img nodes into figcaption
-<figcaption>: //div[./preceding-sibling::*[1]/self::img]
-# the same
-<figcaption>: //div[./prev-sibling::img]
-

next-sibling

-

An axis that selects the next sibling of the current node. Serves as an alias for the expression following-sibling::*[1]/self

-

Examples

-
# Join paragraphs following each other into one, separating them with a line break
-@combine(<br>): //p/following-sibling::*[1]/self::p
-# the same, but shorter
-@combine(<br>): //p/next-sibling::p
-

Supported conditions

-

Below are conditions supported in Instant View rules.

-

domain

-
domain: regexp
-

Checks whether the domain of the current page matches a regular expression. The check is case-insensitive, so the actual expression used will look like this: /^regexp$/i.

-

Examples

-
# Rule for *.subdomain.example.com URLs
-?domain: .+\.subdomain\.example\.com
-

domain_not

-
domain_not: regexp
-

Checks whether the domain of the current page does not match a regular expression. The check is case-insensitive, so the actual expression used will look like this: /^regexp$/i.

-

Examples

-
# Rule for *.subdomain.example.com URLs with an exception for dev.subdomain.example.com
-?domain:     .+\.subdomain\.example\.com
-!domain_not: dev\.subdomain\.example\.com
-

path

-
path: regexp
-

Checks whether the path to the current page matches a regular expression. The check is case-insensitive, so the actual expression used will look like this: /^regexp$/i.

-

Examples

-
# Rule for example.com/news/* links
-?path: /news/.+   # no need to escape the slash
-

path_not

-
path_not: regexp
-

Checks whether the path to the current page does not match a regular expression. The check is case-insensitive, so the actual expression used will look like this: /^regexp$/i.

-

Examples

-
# Rule for example.com/news/* links with an exception for example.com/news/recent
-?path:     /news/.+
-!path_not: /news/recent
-

exists

-
exists: xpath_query
-

Checks whether target nodes exist on the current page.

-

Examples

-
# Apply rule only to pages with an <article> tag
-?exists: //article
-

not_exists

-
not_exists: xpath_query
-

Checks whether target nodes do not exist on the current page.

-

Examples

-
# Apply rule only to pages with an <article> tag, that do not include any quotes.
-?exists:     //article
-!not_exists: //article//blockquote
-

true

-
true
-

A condition that is always true.

-

Examples

-
?path:    /blog/.+
-# Rules for the blog section go here
-?true
-# Rules that go here will be applied to all pages
-

false

-
false
-

A condition that is always false.

-

Examples

-
?path:    /news/.+
-# Rules for the news section go here
-?false
-# Rules that go here will never be applied
-

Supported options

-

Below are options supported in Instant View rules.

-

version

-
~version: "2.1"
-

Sets the version of IV used in the template. The behavior of some IV functions may change according to the version provided (see the manual of corresponding function).
The value must be one of "1.0", "2.0" or "2.1". We recommend using the latest version, 2.1.

-

Examples

-
~version: "2.1"
-# Now you can use new features from IV 2.1
-
-

Please note that version should be set at the beginning of the template before any other rules.

-
-

allowed_origin NEW

-
~allowed_origin: "https://example.com"
-~allowed_origin: ["https://example.com", "https://subdomain.example.com"]
-

Sets the origin (or the list of origins) from which content can be loaded using the @load and @inline functions.
The value should be String or Array of String.

-

Examples

-
~allowed_origin: "https://api.example.com"
-# Now you can load content from https://api.example.com regardless of the origin of current page
-@load: "https://api.example.com/get/article"
-

Supported functions

-

The general format for a function is the following:

-
@function: xpath_query
-

Each function accepts the list of nodes returned by the XPath statement as the main parameter. You may omit xpath_query, in which case $$, the result of the previous XPath query, will be passed into the function. The function then processes each element in the list and returns a list of transformed nodes which are stored in the $@ variable.

-

Below is a list of functions that are supported in Instant View rules.

-

debug

-
@debug: xpath_query
-

Logs the elements passed into the function, these elements will be displayed in the status line at the bottom of the screen in the Instant View Editor. Returns the elements passed. Consider combining with $$ and $@.

-

Example

-
@debug: //article//a     # displays all links from the page in the log
-@debug                   # displays all links again
-

- -

Look for debug output at the bottom of your Editor:

-
- -
- - -

remove

-
@remove: xpath_query
-

Removes target nodes from the page, returns an empty list.

-

Examples

-
@remove: //div[has-class("related")] # remove article div.related
-@debug                               # empty list
-

append

-
@append("Some text"): xpath_query
-@append(@attr):       xpath_query
-@append(<tag>):       xpath_query
-@append(<tag>, attr, value[, attr, value[, ...]]): xpath_query
-

Inserts content, specified by the parameter, to the end of each target node.

-
    -
  • If the first parameter is in angle brackets, a new <tag> node will be created. The following two parameters then specify the name and value of an attribute for that node. If value has the format @attr, the value of the attribute attr in the target node will be used as the value. value can be an XPath expression that begins with ., in this case the query will be executed relative to the relevant node, and the text value of the returned elements will be used as the attribute's value. Otherwise, value will be used as the attribute's value.
  • -
  • If the first parameter has the format @attr, a new text element with value of the attribute attr of the targeted node will be created.
  • -
  • Otherwise, a text element with the text specified in the first parameter will be created.
  • -
-

Returns a list of the newly created nodes.

-

Examples

-
# <div class="a"><em>1</em></div>
-@append(<p>): //div
-# <div class="a"><em>1</em><p></p></div>
-

prepend

-
@prepend("Some text"): xpath_query
-@prepend(@attr):       xpath_query
-@prepend(<tag>):       xpath_query
-@prepend(<tag>, attr, value[, attr, value[, ...]]): xpath_query
-

Inserts content, specified by the parameter, to the beginning of each target node.

-
    -
  • If the first parameter is in angle brackets, a new <tag> node will be created. The following two parameters then specify the name and value of an attribute for that node. If value has the format @attr, the value of the attribute attr in the target node will be used as the value. value can be an XPath expression that begins with ., in this case the query will be executed relative to the relevant node, and the text value of the returned elements will be used as the attribute's value. Otherwise, value will be used as the attribute's value.
  • -
  • If the first parameter has the format @attr, a new text element with value of the attribute attr of the targeted node will be created.
  • -
  • Otherwise, a text element with the text specified in the first parameter will be created.
  • -
-

Returns a list of the newly created nodes.

-

Examples

-
# <div class="a"><em>1</em></div>
-@prepend(<p>, data-class, @class): //div
-# <div class="a"><p data-class="a"></p><em>1</em></div>
-

after

-
@after("Some text"): xpath_query
-@after(@attr):       xpath_query
-@after(<tag>):       xpath_query
-@after(<tag>, attr, value[, attr, value[, ...]]): xpath_query
-

Inserts content, specified by the parameter, after each target node.

-
    -
  • If the first parameter is in angle brackets, a new <tag> node will be created. The following two parameters then specify the name and value of an attribute for that node. If value has the format @attr, the value of the attribute attr in the target node will be used as the value. value can be an XPath expression that begins with ., in this case the query will be executed relative to the relevant node, and the text value of the returned elements will be used as the attribute's value. Otherwise, value will be used as the attribute's value.
  • -
  • If the first parameter has the format @attr, a new text element with value of the attribute attr of the targeted node will be created.
  • -
  • Otherwise, a text element with the text specified in the first parameter will be created.
  • -
-

Returns a list of the newly created nodes.

-

Examples

-
# <div class="a"><em>1</em><em>2</em></div>
-@after("!"): //div/em
-# <div class="a"><em>1</em>!<em>2</em>!</div>
-

before

-
@before("Some text"): xpath_query
-@before(@attr):       xpath_query
-@before(<tag>):       xpath_query
-@before(<tag>, attr, value[, attr, value[, ...]]): xpath_query
-

Inserts content, specified by the parameter, before each target node.

-
    -
  • If the first parameter is in angle brackets, a new <tag> node will be created. The following two parameters then specify the name and value of an attribute for that node. If value has the format @attr, the value of the attribute attr in the target node will be used as the value. value can be an XPath expression that begins with ., in this case the query will be executed relative to the relevant node, and the text value of the returned elements will be used as the attribute's value. Otherwise, value will be used as the attribute's value.
  • -
  • If the first parameter has the format @attr, a new text element with value of the attribute attr of the targeted node will be created.
  • -
  • Otherwise, a text element with the text specified in the first parameter will be created.
  • -
-

Returns a list of the newly created nodes.

-

Examples

-
# <div class="a"><em>1</em></div>
-@before("@"): //div/em
-# <div class="a">@<em>1</em></div>
-

append_to

-
@append_to(xpath_query): xpath_query
-@append_to($var):        xpath_query
-

Inserts each target node to the end of the base node.

-

The first parameter specifies the base node. You can pass an XPath expression that begins with ., in this case the query will be executed relative to the relevant node. The first relevant node will be used as the base node. You can also pass a variable name. If such a variable exists, the first relevant node will be used as the base node. If the variable doesn't exist or is empty, the property with a matching name will be used as the base node.

-

Returns a list of target nodes.

-

Examples

-
$div:             //div
-# <div class="a"><em></em></div><p>Text</p>
-@append_to($div): //p
-# <div class="a"><em></em><p>Text</p></div>
-

prepend_to

-
@prepend_to(xpath_query): xpath_query
-@prepend_to($var):        xpath_query
-

Inserts each target node to the beginning of the base node.

-

The first parameter specifies the base node. You can pass an XPath expression that begins with ., in this case the query will be executed relative to the relevant node. The first relevant node will be used as the base node. You can also pass a variable name. If such a variable exists, the first relevant node will be used as the base node. If the variable doesn't exist or is empty, the property with a matching name will be used as the base node.

-

Returns a list of target nodes.

-

Examples

-
$div:              //div
-# <div class="a"><em></em></div><p>Text</p>
-@prepend_to($div): //p
-# <div class="a"><p>Text</p><em></em></div>
-

after_el

-
@after_el(xpath_query): xpath_query
-@after_el($var):        xpath_query
-

Inserts each target node after the base node.

-

The first parameter specifies the base node. You can pass an XPath expression that begins with ., in this case the query will be executed relative to the relevant node. The first relevant node will be used as the base node. You can also pass a variable name. If such a variable exists, the first relevant node will be used as the base node. If the variable doesn't exist or is empty, the property with a matching name will be used as the base node.

-

Returns a list of target nodes.

-

Examples

-
$div:                        //div
-# <div class="a"><p>Text</p><em></em></div>
-@after_el("./../self::div"): //p
-# <div class="a"><em></em></div><p>Text</p>
-

before_el

-
@before_el(xpath_query): xpath_query
-@before_el($var):        xpath_query
-

Inserts each target node before the base node.

-

The first parameter specifies the base node. You can pass an XPath expression that begins with ., in this case the query will be executed relative to the relevant node. The first relevant node will be used as the base node. You can also pass a variable name. If such a variable exists, the first relevant node will be used as the base node. If the variable doesn't exist or is empty, the property with a matching name will be used as the base node.

-

Returns a list of target nodes.

-

Examples

-
$div:                        //div
-# <div class="a"><p>Text</p><em></em></div>
-@before_el("./../self::div"): //p
-# <p>Text</p><div class="a"><em></em></div>
-

replace_tag

-
@replace_tag(<tag>):     xpath_query
-<tag>:                   xpath_query
-

Changes the name of the tag. The new name for the tag should be passed as the first parameter. Returns target nodes.

-

Examples

-
# <div class="list unordered"><div class="item"></div><div class="item"></div></div>
-@replace_tag(<li>): //div[has-class("item")]
-<ul>:               //div[has-class("list")]
-# <ul class="list unordered"><li class="item"></li><li class="item"></li></ul>
-

wrap

-
@wrap(<tag>): xpath_query
-

Wrap each target node in the <tag> tag. Returns a list of the new <tag> elements.

-

Examples

-
# <em>1</em><em>2</em>
-@wrap(<b>): //em
-# <b><em>1</em></b><b><em>2</em></b>
-@wrap(<u>)
-# <b><u><em>1</em></u></b><b><u><em>2</em></u></b>
-@wrap(<p>): $@
-# <b><p><u><em>1</em></u></p></b><b><p><u><em>2</em></u></p></b>
-

wrap_inner

-
@wrap_inner(<tag>): xpath_query
-

Wrap an HTML structure around the content of each target node in the <tag> tag. Returns a list of new <tag> elements.

-

Examples

-
# <p>H<sub>2</sub>0</p>
-@wrap_inner(<b>): //p
-# <p><b>H<sub>2</sub>0</b></p>
-

clone

-
@clone: xpath_query
-

Creates a copy of each target node. Returns a list of the newly created nodes.

-

Examples

-
# <p class="text">Paragraph</p>
-@clone: //p
-# <p class="text">Paragraph</p><p class="text">Paragraph</p>
-

detach

-
@detach: xpath_query
-

Separates the target node from the rest in the parent tag. Creates a copy of the parent tag and wraps the target node into this new instance. Returns a list of parent tags that contain target nodes.

-

Examples

-
# <a href="#1">
-#   <b>1</b>
-#   <p>Link #1</p>
-# </a>
-# <a href="#2">
-#   <b>2</b>
-#   <p>Link #2</p>
-# </a>
-
-@detach: //a/b
-
-# <a href="#1">
-#   <b>1</b>
-# </a>
-# <a href="#1">
-#   <p>Link #1</p>
-# </a>
-# <a href="#2">
-#   <b>2</b>
-# </a>
-# <a href="#2">
-#   <p>Link #2</p>
-# </a>
-
-@after(<br>): $@
-
-# <a href="#1">
-#   <b>1</b>
-# </a><br>
-# <a href="#1">
-#   <p>Link #1</p>
-# </a>
-# <a href="#2">
-#   <b>2</b>
-# </a><br>
-# <a href="#2">
-#   <p>Link #2</p>
-# </a>
-

split_parent

-
@split_parent: xpath_query
-

Splits the parent tag by the target node. Places preceding siblings wrapped into parent element before the target node. Places following siblings wrapped into parent element placed after target node.

-

Returns a list of target nodes.

-

Examples

-
# <p class="text">
-#   <b>First</b> line
-#   <figure><img src="photo.jpg"></figure>
-#   <i>Second</i> line
-# </p>
-@split_parent: //p/figure
-# <p class="text">
-#   <b>First</b> line
-# </p>
-# <figure><img src="photo.jpg"></figure>
-# <p class="text">
-#   <i>Second</i> line
-# </p>
-

pre

-
@pre: xpath_query
-

Specifies that the text inside the target node is already formatted. Returns a list of matching nodes.

-

Examples

-
# <p>     Some          text  , </p>
-# <p>  Some  another      text  </p>
-@pre: (//p)[1]
-# Result in the Instant View page:
-#      Some          text  , 
-# Some another text
-

set_attr

-
@set_attr(attr, value):       xpath_query
-@set_attr(attr, @attr):       xpath_query
-@set_attr(attr, "Some text"): xpath_query
-@set_attr(attr, "Some text", @from-attr, ...): xpath_query
-

Sets an attribute in each matching node. The name of the attribute is passed in the first parameter. The value of the attribute is the rest of the parameters concatenated.

-

If value has the format @attr, the value of the attribute attr of the target node will be used as the value. value can be an XPath expression that begins with ., in this case the query will be executed relative to the relevant node, and the text value of the returned elements will be used as the attribute's value. Otherwise, value will be used as the attribute's value.

-

Returns a list of attribute nodes.

-

Examples

-
# <p class="a"></p>
-@set_attr(data-class, @class)
-# <p class="a" data-class="a"></p>
-@set_attr(id, @class, "_", ./@data-class)
-# <p class="a" data-class="a" id="a_a"></p>
-

set_attrs

-
@set_attrs(attr, value): xpath_query
-@set_attrs(attr, value[, attr, value[, ...]]): xpath_query
-

Sets multiple attributes for each of the target nodes. Each two parameters specify the name and value for the new attributes.

-

If value has the format @attr, the value of the attribute attr of the target node will be used as the value. value can be an XPath expression that begins with ., in this case the query will be executed relative to the relevant node, and the text value of the returned elements will be used as the attribute's value. Otherwise, value will be used as the attribute's value.

-

Returns a list of the matching nodes.

-

Examples

-
# <p class="a"></p>
-@set_attrs(data-class, @class, id, "a_a"): //p
-# <p class="a" data-class="a" id="a_a"></p>
-

match

-
@match(regexp):                         xpath_query
-@match(regexp, match_index):            xpath_query
-@match(regexp, match_index, modifiers): xpath_query
-

Performs a search based on a regular expression. Replaces the content of the target node with the search result. The second parameter specifies the number of the captured parenthesized subpattern. If this is not specified, the text that matched the full pattern will be used. You can specify modifiers for the regular expression using the optional parameter (ims modifiers are supported).

-

Returns a list of target nodes. As of IV 2.1, returns a list of target nodes the content of which matched the regular expression.

-

Examples

-
# <p class="plainText">Hello, world!</p>
-@match("[a-z]+!"): //p
-# <p class="plainText">world!</p>
-@match("([a-z]+)!", 1): //p/text()
-# <p class="plainText">world</p>
-@match("..t", 0, "i"): //p/@class
-# <p class="inT">Bye, world!</p>
-
-# <ul><li>a1</li><li>a</li><li>21b</li><li>.</li></ul>
-@match("[0-9]+"): //ul/li
-# <ul><li>1</li><li></li><li>21</li><li></li></ul>
-@debug: $@
-# Debug 2 nodes:
-#   [0]: <li>1</li>
-#   [1]: <li>21</li>
-

replace

-
@replace(regexp, replacement):            xpath_query
-@replace(regexp, replacement, modifiers): xpath_query
-

Performs a search and replace operation using the regular expression. You can specify modifiers for the regular expression using the optional parameter (ims modifiers are supported).

-

Returns a list of target nodes. As of IV 2.1, returns a list of target nodes the content of which was replaced by the regular expression.

-

Examples

-
# <p class="text">Hello, world!</p>
-@replace("Hello", "Goodbye"): //p/text()
-# <p class="text">Goodbye, world!</p>
-@replace(".t$", "mp"): //p/@class
-# <p class="temp">Goodbye, world!</p>
-@replace("goodb", "B", "i"): //p/text()
-# <p class="temp">Bye, world!</p>
-
-# <ul><li>a1</li><li>a</li><li>21b</li><li>.</li></ul>
-@replace("[0-9]+", "($0)"): //ul/li
-# <ul><li>a(1)</li><li>a</li><li>(21)b</li><li>.</li></ul>
-@debug: $@
-# Debug 2 nodes:
-#   [0]: <li>a(1)</li>
-#   [1]: <li>(21)b</li>
-

urlencode

-
@urlencode: xpath_query
-

Encodes the content of the target node as per RFC 3986. Returns target nodes.

-

Examples

-
# <a href="https://telegram.org">link</a>
-$a: //a
-@urlencode: $a/@href
-# <a href="https%3A%2F%2Ftelegram.org">link</a>
-@set_attr(href, "/?url=", @href): $a
-# <a href="/?url=https%3A%2F%2Ftelegram.org">link</a>
-

urldecode

-
@urldecode: xpath_query
-

Decodes the content of the target node as per RFC 3986. Returns target nodes.

-

Examples

-
# <a href="/?url=https%3A%2F%2Ftelegram.org">link</a>
-$a: //a
-@match("^/\?url=(.+)$", 1): $a/@href
-# <a href="https%3A%2F%2Ftelegram.org">link</a>
-@urldecode
-# <a href="https://telegram.org">link</a>
-

htmlencode

-
@htmlencode: xpath_query
-

Convert special characters in the target node to HTML entities. Returns the target nodes.

-

Examples

-
# <p>&lt;b&gt;Some text&lt;\b&gt;</p>
-@htmlencode: //p
-# <p>&amp;lt;b&amp;gt;Some text&amp;lt;\b&amp;gt;</p>
-

htmldecode

-
@htmldecode: xpath_query
-

Convert special HTML entities in the target node back to characters. Returns the target nodes.

-

Examples

-
# <p>&amp;lt;b&amp;gt;Some text&amp;lt;\b&amp;gt;</p>
-@htmldecode: //p
-# <p>&lt;b&gt;Some text&lt;\b&gt;</p>
-

style_to_attrs

-
@style_to_attrs(css_prop, attr): xpath_query
-@style_to_attrs(css_prop, attr[, css_prop, attr[, ...]]): xpath_query
-

Gets a value of a CSS property from the style attribute and sets it into an attribute for each of the target nodes. Each two parameters specify the name for the new attribute and the name of CSS property. Returns a list of matching nodes.

-

Examples

-
# <img style="width: 20px; height: 20px">
-@style_to_attrs(width, data-width, height, data-height): //img
-# <img style="width: 20px; height: 20px" data-width="20" data-height="20">
-

background_to_image

-
@background_to_image: xpath_query
-

Transforms the target node with a background picture into an <img> tag with an src attribute. The target node must contain a style attribute with the background. Returns a list of transformed nodes.

-

Examples

-
# <div class="bg_image" style="background-image:url(image.jpg)"></div>
-@background_to_image: //div[has-class("bg_image")]
-# <img src="image.jpg">
-

json_to_xml

-
@json_to_xml: xpath_query
-

Transforms the content of the target node to the XML format. The contents must be in valid JSON format. The resulting XML tree will be inserted into the document. Returns the root element of the XML tree.

-

Examples

-
# <div data-var='{"a":1,"b":[1,2],"c":{"p":"Hello!"}}'></div>
-@json_to_xml: //div/@data-var
-@debug: $@
-# <xml><a>1</a><b><item>1</item><item>2</item></b><c><p>Hello!</p></c></xml>
-

html_to_dom

-
@html_to_dom: xpath_query
-

Parse the content of the target node in HTML format and insert it into the document. Returns the root element of the inserted HTML tree.

-

Examples

-
# <div data-content="&lt;b&gt;Some text&lt;\b&gt;"></div>
-@html_to_dom: //div/@data-content
-@debug: $@
-# <dom><b>Some text</b></dom>
-

combine

-
@combine:                        xpath_query
-@combine(" - "):                 xpath_query
-@combine(<tag>):                 xpath_query
-@combine(<tag>[, " - "[, ...]]): xpath_query
-

Combines each target node with its preceding node if such a node exists. You can use parameters to specify nodes to be inserted above the target node. If the parameter is in angular brackets, a new <tag> node will be created. Otherwise a text element with the text specified by the parameter will be used.

-

Returns a list of nodes, preceding the target nodes.

-

Examples

-
# <pre>1 2 3</pre>
-# <pre> 4 5 </pre>
-# <pre>6 7 8</pre>
-@combine:             //pre/following-sibling::*[1]/self::pre
-# <pre>1 2 3 4 5 6 7 8</pre>
-
-# <p>first</p>
-# <p>second</p>
-@combine(<br>, <br>): //p/following-sibling::*[1]/self::p
-# <p>first<br><br>second</p>
-
-# <h1>Title</h1>
-# <strong>Subtitle</strong>
-@combine(<br>, "\n"): //h1/following-sibling::*[1]/self::strong
-# <h1>Title<br>
-# Subtitle</h1>
-

datetime

-
@datetime(-2): xpath_query
-@datetime(-2, "en-US", "yyyy-MM-dd"): xpath_query
-

Transforms the date and time from the text of the target node into a unixtime timestamp. The parameter specifies the timezone of the original date and time.

-

You can also pass a locale and a pattern to parse the date and time in more complicated cases. If a non-gregorian calendar is used, this needs to be specified in the locale. For example, "fa-IR@calendar=persian". Available patterns are documented here.

-

On success, returns a text element with the unixtime timestamp. Otherwise, returns the target element.

-

Examples

-
# <div id="date">1 January 2017, 15:04</div>
-@datetime(-2):  //div[@id="date"]
-published_date: $@   # the property published_date will hold a unixtime timestamp
-
-# <time>دوشنبه, ۲۳ اسفند ۱۳۹۵</time>
-@datetime(0, "fa-IR@calendar=persian", "EEEE, dd MMMM yyyy"): //time
-published_date: $@   # the property published_date will hold a unixtime timestamp
-

simplify

-
-

Note: This is a service function. There is no reason for you to use it in your templates. It was included in this reference to give you a better understanding of how the system works (see the ..after block).

-
-
@simplify: xpath_query
-

Processes the target nodes according to the Instant View format. Returns the target nodes.

-

Examples

-
# <p><span><b>S</b>ome</span> <em>important</em> text!</p>
-@simplify: //p
-# <p><b>S</b>ome <em>important</em> text!</p>
-

inline

-
@inline:         xpath_query
-@inline(silent): xpath_query
-

If the target element is an <iframe> with the attribute src, the content of the iframe will be loaded. The target element will be replaced with the content of the iframe.

-

If the target node is an HTML-comment, a <comment> element with the content of the comment will be created. The comment will be replaced by the newly created node.

-

You can use silent parameter to ignore errors while processing this function. You will still see an error in the debug console, but the rules that come after will continue to execute.

-

Returns a list of replaced nodes.

-
-

Note: The @inline function adheres to the same-origin policy. This means that the target and the inlined pages should have the same origin. You can specify additional allowed origins using the option ~allowed_origin

-
-

Examples

-
# <p><iframe src="/subpage.html"></iframe></p>
-# /subpage.html:
-#   <html><body><p>Hello!</p></body></html>
-@inline: //p/iframe
-# <p><html><body><p>Hello!</p></body></html></p>
-@debug
-# <html><body><p>Hello!</p></body></html>
-
-# <p><!--<b>Hello!</b>, world!--></p>
-@inline: //p/comment()
-# <p><comment><b>Hello!</b>, world!</comment></p>
-@debug
-# <comment><b>Hello!</b>, world!</comment>
-

load NEW

-
@load:         "https://example.com"
-@load(silent): xpath_query
-

Loads the content of the URL. The URL can be specified as a string or be the content of the target node.

-

You can use silent parameter to ignore errors while processing this function. You will still see an error in the debug console, but the rules that come after will continue to execute.

-

Returns the newly created node with loaded content.

-
-

Note: The @load function adheres to the same-origin policy. This means that the target and the loaded pages should have the same origin. You can specify additional allowed origins using the option ~allowed_origin

-
-

Examples

-
@append(<iframe> src "/subpage.html"): /html/body
-$iframe: $@
-@remove
-@inline: $iframe
-# the same, but much shorter
-@load: "/subpage.html"
-
-@load(silent): //meta[@property="api:url"]/@content
-# trying to load content from api:url
-@if ( $@ ) {
-  # Do something with content
-}
-

unsupported

-
@unsupported: xpath_query
-

Specifies that the target node contains essential content that can't be represented in the Instant View format. Returns the target nodes.

-

Examples

-
# <p>See the graph below:</p>
-# <canvas class="article_graph" width="600" height="400"></canvas>
-@unsupported: //canvas[has-class("article_graph")]
-
-

Tip: It is important to identify that a page contains essential unsupported content — no IV page will be generated to ensure that the user never gets incomplete info from an article. The system will take care of the most popular cases in the ..after block, but your template must cover everything that the system doesn't catch.

-
-

Supported block functions

-

The general format for a block function is the following:

-
@function(xpath_query) {
-  # block of rules
-}
-

Block functions usually accept the list of nodes returned by the XPath statement as a parameter. Depending on the function and its parameters, rules inside the block can be run several times or never. Block functions can contain any type of rules except conditions.

-

Below is a list of block functions that are supported in Instant View rules.

-

if

-
@if(xpath_query) {
-  # block of rules
-}
-

Executes the block of rules if target nodes exist on the current page. If target nodes do not exist, the block of rules will be skipped. The $$ and $@ variables contain target nodes found by the XPath query.

-

Example

-
@if( //div[has-class("blockquote")] ) { # if div.blockquote exists
-  <blockquote>: $@                      #   change tag name to blockquote
-  <cite>: $@//div[has-class("author")]  #   and mark div.author as a caption
-}
-

if_not

-
@if_not(xpath_query) {
-  # block of rules
-}
-

Executes a block of rules if target nodes do not exist on the current page. If such nodes exist, the block of rules will be skipped. The $$ and $@ variables contain target nodes found by the XPath query.

-

Example

-
@if_not( $body//footer ) {     # if footer does not exist
-  @append(<footer>): $body     #   append it into body
-}
-

map

-
@map(xpath_query) {
-  # block of rules
-}
-

Executes a block of rules once per each target node found by the XPath query. At the beginning of each iteration, the following variables will be set:

-
    -
  • $$ will contain the target nodes found by XPath query;
  • -
  • $@ will contain the current target node;
  • -
  • $index will contain the index of the current target node (starts with 1);
  • -
  • $first will contain <true> if the current target node is the first in the list and an empty list otherwise;
  • -
  • $middle will contain <true> if the current target node is between the first and the last in the list, empty list otherwise;
  • -
  • $last would contain <true> if the current target node is the last one in the list, empty list otherwise.
  • -
-

Example

-
@map( //div[@id="list"]/p ) {   # for each paragraph in list
-  $p: $@                        #   store the current paragraph in $p variable
-  @prepend_to($p): ". "         #   and
-  @prepend_to($p): $index       #   number them starting with 1
-}
-
-

Please note that the @map function should be used only if it is impossible to use regular functions with xpath queries (for example you need to use $index). Otherwise, regular functions are faster because they process several nodes at once.

-
-

Example

-
# Bad way:
-@map( //div[has-class("image")] ) {
-  $image: $@
-  <cite>:       $image//p/span
-  <figcaption>: $image//p
-  <figure>:     $image
-}
-# The same result, but faster:
-$image:       //div[has-class("image")]
-<cite>:       $image//p/span
-<figcaption>: $image//p
-<figure>:     $image
-

repeat

-
@repeat(n) {
-  # block of rules
-}
-

Executes a block of rules n times. At the beginning of each iteration, the following variables will be set:

-
    -
  • $$ and $@ will contain the previous value of $$;
  • -
  • $index will contain the index of the current iteration (starts with 1);
  • -
  • $first will contain <true> if this is the first iteration, an empty list otherwise;
  • -
  • $middle will contain <true> if the current iteration is between the first and last, empty list otherwise;
  • -
  • $last will contain <true> if this is the last iteration, empty list otherwise.
  • -
-

Example

-
# appends "1, 2, 3, 4, 5" to $body
-@repeat( 5 ) {
-  @append_to($body): $index
-  @if_not( $last ) {
-    @append_to($body): ", "
-  }
-}
-

while

-
@while(xpath_query) {
-  # block of rules
-}
-

Executes a block of rules while target nodes exist on the current page. At the beginning of each iteration the following variables will be set:

-
    -
  • $$ and $@ will contain target nodes found by XPath query;
  • -
  • $index will contain the index of the current iteration (starts with 1);
  • -
  • $first will contain <true> if it is the first iteration, an empty list otherwise.
  • -
-

Example

-
@while( //iframe ) {
-  @inline: $@          # inline all nested iframes
-}
-

while_not

-
@while_not(xpath_query) {
-  # block of rules
-}
-

Executes a block of rules while target nodes do not exist on the current page. At the beginning of each iteration the following variables will be set:

-
    -
  • $$ and $@ will contain target nodes found by XPath query;
  • -
  • $index will contain the index of the current iteration (starts with 1);
  • -
  • $first will contain <true> if this is the first iteration, an empty list otherwise.
  • -
-

Example

-
@while_not( //video ) {   # if no video exists on the current page
-  @inline: //iframe       #   try to inline iframes, maybe video is inside the frame
-}
-

Embedded elements

-

Instant View supports widgets from popular services. We display them as embedded elements or specially formatted quotes. The Instant View bot analyzes all iframes in the document body and generates a widget if the service is supported.

-
-

Some popular widgets do not use iframes. Note that the ..after block of rules contains rules to transform such widgets to an Instant View compatible format.

-
-

We currently support the following services:

-
    -
  • Youtube
  • -
  • Vimeo
  • -
  • Tweets & Twitter Videos
  • -
  • Facebook Posts & Videos
  • -
  • Instagram
  • -
  • Giphy
  • -
  • SoundCloud
  • -
  • GithubGist
  • -
  • Aparat
  • -
  • VK.com Videos
  • -
-

Processing pages

-

All pages are processed according to the following rules:

-
# Url: http://example.com/some_page.html
-+ example.com
-?true
-+ ..after
-

If a page is on a third-level domain and above, the following rules are applied:

-
# Url: http://some.subdomain.example.com/some_page.html
-+ some.subdomain.example.com
-?not_exists: $body
-+ subdomain.example.com
-?not_exists: $body
-+ example.com
-?true
-+ ..after
-

In other words, at first the bot attempts to use a block of rules that features the full domain name. If such a block does not exist, the bot checks for the next level up to the second-level domain.

-

..after is a special block of rules that is applied to all pages irrespective of the domain name.

-

Working with subdomains

-

If the page is on a third-level domain or higher, you need to manually select the domain level to which your template will apply. Use this menu in the top left corner of the page:

-
-
-
- -

Choose a level that hosts pages with the same structure, so that your rules are relevant to all the matching pages on this domain.

-
-

For example, use wikipedia.org to create an IV page for https://en.wikipedia.org/wiki/Domain_name because the page structure doesn't depend on language in Wikipedia.

-
-
- -
-
-
-
-
- - - - - - - - - - - - - - diff --git a/data/promote.telegram.org/tos.html b/data/promote.telegram.org/tos.html deleted file mode 100644 index 317ff68403..0000000000 --- a/data/promote.telegram.org/tos.html +++ /dev/null @@ -1,252 +0,0 @@ - - - - - Telegram Ads - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
- -
-
  1. Telegram Ad Platform Terms of Service
-
-
-
-

Telegram Ad Platform Terms of Service

- -

1. TERMS AND DEFINITIONS

-

1.1. Account – a personalized record of the Advertiser within the Telegram Ad Platform with unique access details, containing the information on the Services, Statistics, Advertiser’s information, Ads and their status, Balance, operating tools and features.

-

1.2. Ad – an advertisement created using the Telegram Ad Platform that specifies where, how, when and which Advertising Materials are to be displayed, including the type and format of the Advertising Materials, their placement (particular channels, groups, games), CPM, Maximum Budget.

-

1.3. Advertiser – the person or entity who has entered into the Agreement with the Company.

-

1.4. Advertising Materials – any graphic/media file and/or any and all accompanying information supplied by the Advertiser to the Company to be displayed for advertising purposes in Publication Spaces. The Advertiser retains all rights, whether owned by the Advertiser or by a third party, and/or licensed or otherwise used by the Advertiser, in relation to any Advertising Materials and grants to the Company a worldwide, non-sublicensable, non-exclusive, royalty-free license to use, serve, copy, reproduce, distribute and display the Advertising Materials, in any known, agreed or hereafter developed manner.

-

1.5. Agreement – the present Terms of Service along with the Advertising Agreement reached between the Company and the Advertiser.

-

1.6. Auction – the automated system that uses certain algorithms to determine the best offered CPM in relation to an Ad for the provision of the Services.

-

1.7. Balance – the amount of money which is available on the Account and can be spent on the Services.

-

1.8. Confidential Information – all information of a Party including, without limitation, information and/or personal data provided by a Party, its related corporations, affiliates, employees, agents, representatives, advisors, or consultants, whether disclosed or communicated verbally, in writing or in any other tangible form, and whether relating to a Party’s business, operations, processes, plans, requirements, inventions, product or service information, pricing, know-how, design rights, trade secrets, software, systems, market opportunities, customers and business affairs.

-

1.9. CPM – Cost-Per-Mille, the price for one thousand Impressions of an Ad.

-

1.10. Company – the legal entity which belongs to Telegram group of companies and has a right to enter the Agreement with the Advertiser for the Services.

-

1.11. Data Protection Laws – the following legislations to the extent applicable from time to time: (a) national laws implementing the Directive on Privacy and Electronic Communications (2002/58/EC) (as amended by Directive 2009/136); (b) the General Data Protection Regulation (2016/679) (the GDPR) and the UK GDPR and any national law supplementing the GDPR or UK GDPR (such as, in the UK, the Data Protection Act 2018), and (c) any other data protection or privacy laws, regulations, or regulatory requirements, guidance and codes of practice applicable to the processing of personal data (as amended and/or replaced from time to time).

-

1.12. Impression – each occurrence of a display of an Ad to a user in a Publication Space, as evidenced by Statistics.

-

1.13. Improper Advertising – any act or omission which violates the Consumer Protection from Unfair Trading Regulations 2008 or any other applicable laws or regulations relating to advertising or marketing standards.

-

1.14. Intellectual Property Rights – trademarks, service marks, rights in trade names, business names, logos or get-up, goodwill and the right to sue for passing off, patents, supplementary protection certificates, rights in inventions, registered and unregistered design rights, copyrights (including rights in software), database rights, image rights and rights to personality, rights in domain names and URLs and social media presence accounts, and all other similar rights in any part of the world (including in confidential information, trade secrets and know-how) and whether registered or not, including, where such rights are obtained or enhanced by registration, any registration of such rights and applications and rights to apply for such registrations.

-

1.15. Maximum Budget – the maximum amount of funds, confirmed by the Advertiser, that can be deducted from the Balance for displaying a particular Ad in a Publication Space. Reaching the Maximum Budget shall result in the Ad being put on hold.

-

1.16. Publication Space – a digital space for Advertising Materials made available by the Company including, without limitation, in Telegram channels, Telegram groups and Telegram games.

-

1.17. Reporting Period – calendar month. The first Reporting Period commences on the date of signing of the Agreement and lasts up to the last day of the relevant calendar month (as an example, June 10 – June 30), the last Reporting Period commences on the first day of the relevant calendar month and lasts up to the date of the Agreement’s termination (as an example, June 01 – June 15).

-

1.18. Services – the display of the Advertising Materials in the context of a particular Ad, in the relevant Publication Space.

-

1.19. Statistics – a detailed report on the Advertiser’s Ads, which specifies the scope of the Services provided. It includes the Advertising Materials data, the cost of the Services in the Reporting Period and other data generated by the Company upon the results of automated checks.

-

1.20. Telegram App – a cloud-based mobile and desktop messaging app with a focus on security and speed, including but not limited to mobile apps for iPhone/iPad/Android/Windows phone, desktop apps for PC/Mac/Linux/macOS/Web-browser, Telegram web and all other interfaces and/or versions which exist or will be created in future.

-

1.21. Telegram Ad Platform – the software solution which provides the Advertiser with the opportunity to create Ads that participate in Auctions for Publication Spaces, control and terminate their Ads, and access the relevant Statistics within the Account.

-

1.22. Telegram Ad Policies and Guidelines – Telegram Ad Policies and Guidelines as available at: https://promote.telegram.org/guidelines.

-

1.23. Telegram Privacy Policy – Telegram Privacy Policy as available at: https://telegram.org/privacy.

-

1.24. Telegram Terms of Service – Telegram Terms of Service as available at: https://telegram.org/tos.

-

1.25. Terms of Service – Telegram Ad Platform Terms of Service as available at: https://promote.telegram.org/tos.

-

2. REQUIREMENTS FOR ADVERTISING MATERIALS

-

2.1. Advertising Materials shall be in compliance with all applicable laws, rules and regulations, present Terms of Service, Telegram Terms of Service, Telegram Privacy Policy, Apple App Store terms and rules as may be applicable, and Google Play terms and rules as may be applicable.

-

2.2. Advertising Materials shall be in compliance with Telegram Ad Policies and Guidelines. Advertising Materials must not relate to the topics as indicated at Ad Policies and Guidelines/Prohibited Content.

-

2.3. The Company reserves the right to update Telegram Ad Policies and Guidelines and the list of topics at clause 2.2 from time to time.

-

3. RIGHTS AND OBLIGATIONS

-

3.1. The Company shall:

-

(a) pursuant to and in accordance with the Advertiser’s instructions submitted via the Telegram Ad Platform in relation to a particular Ad, provide the Services whenever the Advertiser’s CPM bid wins the Auction for a particular Publication Space, for as long as the Ad’s Maximum Budget and the Advertiser’s Balance allow.

-

3.2. The Company may, at its sole discretion:

-

(a) conduct an audit of the Advertising Materials to verify their compliance with all applicable laws, rules and regulations, present Terms of Service, Telegram Ad Policies and Guidelines, Telegram Terms of Service, Telegram Privacy Policy, Apple App Store terms and rules as may be applicable, and Google Play terms and rules as may be applicable. The Company shall not be bound by any time frames in conducting an audit under this clause 3.2(a);

-

(b) terminate or suspend the Services without any liability in the event that the Advertising Materials, as may be evidenced by the results of any audit undertaken by the Company under clause 3.2(a) above, are in conflict with any applicable laws, rules and regulations, present Terms of Services, Telegram Ad Policies and Guidelines, Telegram Terms of Service, Telegram Privacy Policy, Apple App Store terms and rules as may be applicable, and Google Play terms and rules as may be applicable, and inter alia, contain any elements of Improper Advertising, and/or explicitly violate the generally accepted moral and ethical standards, and/or are inconsistent with the Company’s values and principles, including the Company’s stance on fundamental human rights, freedom of speech and data privacy;

-

(c) request any supporting documentation regarding Advertising Materials, including, without limitation, the relevant licenses/permits/certificates for licensed goods/services, agreements with Advertiser’s customers for distribution of goods/services which contain Intellectual Property Rights, and suspend provision of Services until and unless such information is provided to the satisfaction of the Company;

-

(d) request any supporting documentation on Advertiser’s legal status, including, but not limited to, its constitutional documents, tax numbers, residency and related details, powers and rights of representatives, and suspend provision of Services until and unless such information is provided to satisfaction of the Company;

-

(e) transfer any information concerning Advertiser and the Advertising Materials which is required to be disclosed by any regulatory authority, any auditor of the Parties, by judicial or administrative process or otherwise by applicable law or regulation;

-

(f) change the parameters of the Services in the Telegram Ad Platform and, in particular, change the list of available Publication Spaces and minimum CPM; and

-

(g) make changes to these Terms of Service at any time by uploading an updated version of the Terms of Service to its website, which can be accessed here: https://promote.telegram.org/tos.

-

3.3. The Advertiser shall:

-

(a) be fully responsible for the compliance of the placed Advertising Materials with all applicable laws, rules and regulations, present Terms of Services, Telegram Ad Policies and Guidelines, Telegram Terms of Service, Telegram Privacy Policy, Apple App Store terms and rules as may be applicable, and Google Play terms and rules as may be applicable;

-

(b) promptly provide the Company with any information, documents and other materials that the Company may request from time to time in accordance with clauses 3.2(c) to 3.2(e) above;

-

(c) promptly inform the Company of all changes impacting the Company under this Agreement, including but not limited to the Advertiser’s business, contact details, bank details and authorized persons;

-

(d) mark the Advertising Materials, if so required by applicable law, with an indication of the age category of persons for whom it is addressed and any other indications. The Advertiser is solely responsible for correct labelling of the Advertising Materials; and

-

(e) not permit any third party to put forward a bid at an Auction using its Account.

-

3.4. The Advertiser may:

-

(a) place requests for the Services by creating Ads on the Telegram Ad Platform;

-

(b) use the Telegram Ad Platform interfaces to interact with their Ads, e.g. launch Ads and put them on hold, submit changes to the CPM and Maximum Budget of Ads, etc. Without prejudice to clause 3.2(a), changes will be usually applied after fifteen (15) minutes, but no later than in sixty (60) minutes after the request is registered by the Telegram Ad Platform; and

-

(c) be informed of the Statistics.

-

4. LIABILITY

-

4.1. In case of non-compliance or inadequate performance by the Parties of their respective obligations under this Agreement, the Parties will incur liability as provided for under applicable law; except that the Company shall not be liable for failure to fulfill or the improper fulfillment of the Agreement caused by breakdown of telecommunication and energy networks, effects of malicious software or fraudulent acts by the third parties.

-

4.2. The Company undertakes all possible effort to provide the best Services it can. Notwithstanding clause 4.1 above, however, these Services are provided "as is” and “as available” and the Company makes no guarantees that the Services always will be error-free, or that they will function without delays and disruptions. The Company disclaims all warranties, whether express or implied, including the implied warranties of merchantability, fitness for a particular purpose, title, and non-infringement.

-

4.3. Without prejudice to the generality of clause 4.1 above, the Advertiser shall be liable for security of the access details to the Account and shall compensate the Company for any losses related to such use by the persons not authorized to act on behalf of the Advertiser. For the avoidance of doubt, where the Advertiser is in violation of its obligations under this Agreement, the Advertiser shall reimburse the Company for any and all losses incurred as a result of such violation.

-

4.4. The Company's total aggregate liability under this Agreement whether in contract, tort (including negligence), under a warranty, undertaking or representation under statute or otherwise, for any losses or damages suffered or incurred by the Advertiser shall not exceed the total amount of the Advertiser's Balance spent in the previous calendar year.

-

4.5. The Company shall not be liable under or in connection with this Agreement whether in contract, tort (including negligence), under a warranty, undertaking or representation under statute or otherwise, for any indirect or consequential losses, any loss of business, business opportunities or goodwill, or any loss of revenue, savings or profits, whether actual or prospective or for any punitive damages, howsoever arising, whether such losses or damage were foreseeable or in the contemplation of the Advertiser or the Company.

-

4.6. Nothing in this Agreement shall limit or exclude any liability for (i) death or personal injury resulting from negligence, (ii) fraud, fraudulent misrepresentation or willful default, or (iii) for any other liability to the extent it cannot be lawfully excluded or limited.

-

5. WARRANTIES AND INDEMNIFICATION

-

5.1. Warranties – Each Party warrants to the other that:

-

(a) to the best of its knowledge, nothing in this Agreement violates any applicable law, including Data Protection Laws;

-

(b) it has the necessary financial resources to perform its obligations under this Agreement;

-

(c) it has the requisite legal right, power and authority to execute, deliver, and to perform its obligations under this Agreement;

-

(d) this Agreement constitutes its binding obligations in accordance with its terms; and

-

(e) nothing contained in this Agreement will result in a breach of any provision of its constitutional documents or result in a breach of any agreement, license or other instrument, order, judgment or decree of any court or governmental body to which it is bound.

-

5.2. Indemnity – The Advertiser hereby indemnifies, defends and holds harmless on an after tax basis the Company and each of the companies in the Company’s group and its and their directors, employees, officers, contractors, agents and any other related parties (each an Indemnified Person) from and against:

-

(a) all or any claims, actions, proceedings, liabilities, investigations, demands, judgements and/or awards (in each case whether or not successful, compromised or settled and whether joint or several) (together Claims and each a Claim) which may be asserted, established, instituted, made, pending, threatened or alleged against or otherwise involve an Indemnified Person in any jurisdiction by any person whatsoever, including without limitation by a third party or by any supervisory or regulatory agency or body; and/or

-

(b) all or any loss, damage, cost, liability, demand, charge, expense or tax (including, without limitation, (i) any direct, indirect or consequential losses, loss of profit, loss of business, business opportunities or goodwill, loss of reputation, (ii) all interest, penalties, legal costs and all other professional costs and expenses, (iii) all losses suffered or incurred in investigating, preparing for or disputing or defending or providing evidence in connection with or settling any Claim and/or in establishing its right to be indemnified pursuant to this clause 5.2 and/or in seeking advice regarding any Claim and/or in any way related to or in connection with the indemnity contained in this clause 5.2) (together Losses and each a Loss) which may be suffered or incurred by an Indemnified Person,

-

which, directly or indirectly, arise out of, or are attributable to, or are connected with the performance of the Agreement, the Ads, the Advertising Materials, the advertised goods or services or consumption thereof, or non-compliance by the Advertiser with any terms of this Agreement.

-

5.3. Conduct of claims

-

(a) Each Indemnified Person shall give notice as soon as reasonably practicable to the Advertiser of any action commenced against it after receipt of a written notice of any Claim or the commencement of any action or proceeding in respect of which a Claim for indemnification may be sought hereunder, insofar as may be consistent with any obligation of confidentiality or other legal or regulatory obligation which that Indemnified Person owes to any third party or to any regulatory request that has been made of it, but failure to so notify the Advertiser shall not relieve the Advertiser from any liability or any obligation to indemnify the Advertiser and in any event shall not relieve the Advertiser from any liability which the Advertiser may have. Legal advisers to any Indemnified Person shall be selected by such Indemnified Person in its absolute discretion.

-

(b) The Advertiser shall, at the request of any Indemnified Person, conduct the defense of any such action and shall do so at its own expense; provided, however, that legal advisers to the Advertiser shall be reasonably satisfactory to the Indemnified Persons and shall not (except with the consent of the Indemnified Person) also be legal advisers to the Indemnified Person. If the Advertiser conducts the defense of an action, it shall provide each relevant Indemnified Person with all relevant information in respect of any such action on a timely basis (including, without limitation, on request) and the Advertiser will take such action, in each case, as each relevant Indemnified Person may reasonably request.

-

(c) The Advertiser shall not, without the prior written consent of the Indemnified Persons, settle or compromise or consent to the entry of any judgment with respect to any litigation, or any investigation or proceeding by any supervisory or regulatory agency or body, commenced or threatened, or any claim whatsoever in respect of which indemnification could be sought under clause 5.2 (whether or not the Indemnified Persons are actual or potential parties thereto), unless such settlement, compromise or consent: (i) includes an unconditional release of each Indemnified Person from all liability arising out of such Claim; and (ii) does not include a statement as to or an admission of fault, culpability or a failure to act by or on behalf of any Indemnified Person.

-

(d) The provisions of this clause 5 shall not affect or be affected by any other agreement to which any Indemnified Person is a party with respect to indemnification.

-

5.4. Contracts (Rights of Third Parties) Act 1999 – Each Indemnified Person will have the right under the Contracts (Rights of Third Parties) Act 1999 to enforce its rights against the Advertiser under this clause 5; provided that only the consent of the specified parties to the Agreement shall be required to make any amendment of the Agreement or give any waiver under the Agreement.

-
- -
-
- - - - - - - - - - - - - - - - diff --git a/data/telegram.org/blog.html b/data/telegram.org/blog.html deleted file mode 100644 index be6d9f1229..0000000000 --- a/data/telegram.org/blog.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - Telegram Blog - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-

Telegram News

-
-
- -
-

Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests, Global Chat Themes on iOS and More

-
Today's update brings new ways to find memories in shared media with accelerated scrolling…
-
-
Nov 3, 2021
-
- -
-

Chat Themes, Interactive Emoji, Read Receipts in Groups and Live Stream Recording

-
Today's update lets you set different themes for individual chats, share your feelings with…
-
-
Sep 19, 2021
-
- -
-

Live Streams, Flexible Forwarding, Jump to Next Channel, Trending Stickers and More

-
Telegram 8.0 brings live streams with unlimited viewers to groups and channels, options to…
-
-
Aug 31, 2021
-
- -
-

Video Calls with up to 1000 Viewers, Video Messages 2.0, Video Playback Speed and More

-
This update takes video to the next level. Group video calls now have up to 1000 viewers,…
-
-
Jul 30, 2021
-
- -
-

Group Video Calls

-
Today's update lets you turn on your camera or share your screen during Voice Chats in groups – on all devices, including tablets and desktops. This brings voice chats to a whole new…
-
-
Jun 25, 2021
-
- -
-

Animated Backgrounds

-
In addition to Group Video Calls, this update adds animated backgrounds and message sending animations, as well as a new menu button for bots, new ways to import stickers, reminders…
-
-
Jun 25, 2021
-
- -
-

Payments 2.0, Scheduled Voice Chats, New Web Versions

-
This update brings Payments 2.0 for all Telegram chats, Scheduling and Mini Profiles for Voice Chats, new versions of Telegram Web for…
-
-
Apr 26, 2021
-
- -
-

Voice Chats 2.0: Channels, Millions of Listeners, Recorded Chats, Admin Tools

-
Voice Chats first appeared in December, adding a new dimension of live talk to Telegram groups. Starting today, they become available in…
-
-
Mar 19, 2021
-
- -
-

Auto-Delete, Widgets and Expiring Invite Links

-
This update brings an auto-delete timer for messages in any chat, as well as new flexible invite links and faster access to your chats…
-
-
Feb 23, 2021
-
- -
-

Moving Chat History from Other Apps

-
Over 100 million new users joined Telegram this January, seeking more privacy and freedom. But what about the messages and memories that remain in older apps? Starting today, everyone…
-
-
Jan 28, 2021
-
- -
-

Voice Chats Done Right

-
Today, Telegram groups get an entire new dimension with Voice Chats – persistent conference calls that members can join and leave as they please. Our 12th update in 2020 brings them…
-
-
Dec 23, 2020
-
- -
-

Pinned Messages 2.0, Improved Live Locations, Playlists and More

-
Halloween is just around the corner and we've assembled choice tools to help organize your trick-or-treating. Practice your voodoo skills…
-
-
Oct 30, 2020
-
- -
-

Search Filters, Anonymous Admins, Channel Comments and More

-
Your personal Telegram Cloud is endless and full of spicy memes – to help you find your way around it, we're introducing Search Filters.…
-
-
Sep 30, 2020
-
- -
-

Video Calls and Seven Years of Telegram

-
Today marks seven years of Telegram. In 2013, we began as a small app focused on secure messaging and have since grown into a platform with over 400M users. Now this platform also…
-
-
Aug 14, 2020
-
- -
-

Profile Videos, 2 GB File Sharing, Group Stats, Improved People Nearby and More

-
Today's update brings Profile Videos along with improved People Nearby features, unlimited file sharing with up to 2 Gigabytes per file…
-
-
Jul 26, 2020
-
- -
-

Video Editor, Animated Photos, Better GIFs and More

-
In 2015, Telegram released the most powerful photo editor to be implemented in a messaging app, letting you enhance image quality and add…
-
-
Jun 4, 2020
-
- -
-

400 Million Users, 20,000 Stickers, Quizzes 2.0 and €400K for Creators of Educational Tests

-
Telegram has reached 400,000,000 monthly users, up from 300 million a year ago. Every day…
-
-
Apr 24, 2020
-
- -
-

Coronavirus News and Verified Channels

-
Channels are a tool for broadcasting your public messages to large audiences. They offer a unique opportunity to reach people directly, sending a notification to their phones with…
-
-
Apr 3, 2020
-
- -
-

Chat Folders, Archive, Channel Stats and More

-
Many of our users rely on Telegram for their work and studies, even more so in the last weeks. To make sure everyone's chat lists can handle…
-
-
Mar 30, 2020
-
- -
-

New Profiles, Fast Media Viewer and People Nearby 2.0

-
Hundreds of millions rely on Telegram to share precious moments with their loved ones. Today we're making it easier to relive shared memories…
-
-
Feb 13, 2020
-
-
- -
- -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/admin-revolution.html b/data/telegram.org/blog/admin-revolution.html deleted file mode 100644 index fd2d7a7626..0000000000 --- a/data/telegram.org/blog/admin-revolution.html +++ /dev/null @@ -1,261 +0,0 @@ - - - - - Supergroups 10,000: Admin Tools & More - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Supergroups 10,000: Admin Tools & More

- -
- -
- -
- -
- -
-

This is an old blog post. In case you missed it, groups can already have up to 200,000 members each.

-
-

With Telegram 4.1, we're increasing the maximum size of supergroups to 10,000 members each. That’s a lot of people packed into one group, and now users and admins can use search to find specific users among them:

-
- -

Search for members

-
- -

Admins can also search for members in their channels.

-

With groups as big as 10,000 people – the size of a decent small town – you may be looking for some more powerful management tools. And that’s exactly what Telegram 4.1 gives you.

- - -

Admin Rights

-

You can now add admins with specific sets of privileges to help you run your community. Choose who among your trusted admins will be able to add new users, manage messages, block members, edit group info, or even add new admins.

-
- -

Admin rights

-
- -

Partial Bans

-

Admins who don’t want to completely ban members from their supergroups can now partially restrict their rights in order to stop behavior that's causing problems. You can put nasty users into read-only mode or maybe stop them from sending stickers or media for a certain period of time. Now you can do all of this with absolute precision:

-
- -

Partial bans

-
- -

Even robots can get in on the fun. With Bot API version 3.1, you can use admin bots to automatically impose temporary or permanent bans based on member actions. Check out the docs here to start building your robotic police force today.

-

Recent Admin Actions

-

When multiple admins are working with one group, it’s easy to get confused about which admin did what and when (or which admin bot has gone Skynet on your members). That’s why we've added a “Recent Actions” section to the admins page. This section stores a log of all service actions taken in the group in the last 48 hours and is visible to admins only.

-
-
- -

Recent admin actions

-
-
- -

Precise filters

-
- -

Recent actions in supergroups also show messages that were deleted in the last 48 hours and the original versions of edited messages for the same period, so nasty behavior like self-deleted spam will no longer help anyone escape the admins’ wrath.

-

Sharing and Android Pay

-

In other news, Telegram 4.1 for iOS brings you an improved sharing extension. When sharing stuff from other apps to Telegram you can add an optional comment and select multiple recipients easily. 3D Touch on the app icon to see some new actions, including taking a photo/video and sending it to multiple recipients.

-
- -

New sharing extension

-
- -

On Android, Telegram 4.1. gets you Android Pay support for Bot Payments and improved media selection – photos and videos are now shown together when sharing from the attachment menu or gallery.

-

Free speech

-

This update also features anti-censorship tools such as the ability to set up a Proxy server in the “Data and Storage” section of the Settings.

-

We believe in free and secure communication. It’s our responsibility to offer technology to defend our users’ right to privacy and freedom of speech around the world.

-

June 30, 2017
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/android-streaming.html b/data/telegram.org/blog/android-streaming.html deleted file mode 100644 index f035139d8c..0000000000 --- a/data/telegram.org/blog/android-streaming.html +++ /dev/null @@ -1,241 +0,0 @@ - - - - - Streaming and Auto-Night Mode on Android - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Streaming and Auto-Night Mode on Android

- -
- -
- -
- -
- -

Today's 4.8 update to Telegram for Android introduces video streaming. You can now start watching videos right away – without having to fully download them first.

-
- -

Streaming-ready video in a chat

-
- -

All videos newly uploaded from official Telegram apps can be streamed with version 4.8. You can see the caching progress as a light grey strip:

-
- -

Streaming in progress

-
- -

Auto-Night Mode

-

As of this update, Telegram for Android can automatically switch to the dark version of the interface after nightfall or in low-light conditions. To set up Auto-Night Mode, go to Settings > Theme > Auto-Night Mode.

-
- -

Auto-night mode settings

-
- -

Telegram for Android supports a multitude of custom themes, so you can choose which theme the app will switch to using the ‘Preferred Night Theme’ setting.

-

Сonnected websites

-

We're also launching a Telegram Login Widget today. Version 4.8 includes a ‘Logged in with Telegram’ section in the Privacy & Security settings that lists all the websites you are logged in to via Telegram.

-
-

Read more about the Telegram Login Widget

-
-

All these features are also coming to iOS, so stay tuned for our next updates.

-

- -

February 6, 2018,
The Telegram Team

-

P.S.

-

Don‘t miss the other updates we’ve launched in the last few days:

- -
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/android-wear-2-0.html b/data/telegram.org/blog/android-wear-2-0.html deleted file mode 100644 index 1d883c149d..0000000000 --- a/data/telegram.org/blog/android-wear-2-0.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - - Telegram for Android Wear 2.0 - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Telegram for Android Wear 2.0

- -
- -
- -
- -
- -

Google has just unveiled Android Wear 2.0, the latest in smartwatch platforms. It supports standalone apps, so today we're releasing Telegram for Android Wear 2.0. It‘s everything you’d want from a perfect watch app — compact, beautiful, and super-fast.

-
- -
- -

Using this tiny yet powerful app, you can browse your chats and quickly reply to messages with voice, text, emoji, or stickers. You can also view your contacts and even create groups right from your watch.

-
-
- -
-
- -

The smartwatch app also supports several themes in different colors. By the way, theme support is coming to our main Android app soon, so stay tuned.

-

Telegram for Android Wear 2.0 is available for download on Google Play. If you have Android Wear 2.0 installed on your watch, just search for Telegram in the store.

-

- -

February 9, 2017
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/animated-stickers.html b/data/telegram.org/blog/animated-stickers.html deleted file mode 100644 index 8865bb0088..0000000000 --- a/data/telegram.org/blog/animated-stickers.html +++ /dev/null @@ -1,261 +0,0 @@ - - - - - Animated Stickers Done Right - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Animated Stickers Done Right

- -
- -
- -
- Cover Image -
- -

We launched stickers back in January 2015. Since then, the Telegram sticker format has been adopted by other apps to reach a total of 2 billion people. Today we're introducing a new format for animated stickers.

-

We asked ourselves: Can animated stickers have higher quality than static ones while taking less bandwidth? The answer turned out to be YES (but only after we told developers they'd get moving cat pictures).

-
- -
- - - -

Smooth Animations, Tiny Size

-

Telegram engineers experimented with vector graphics, packaging methods and forbidden magic to create the Lottie-based .TGS format, in which each sticker takes up about 20-30 Kilobytessix times smaller than the average photo.

-

Thanks to various optimizations, animated stickers consume less battery than GIFs and run at a smooth 60 frames per second. If a picture is worth a thousand words, that's 180,000 words per sticker.

-
- -
- - - -

Open Platform

-

Naturally, animated stickers are a free platform. All artists are welcome to create new sets and share them with Telegram users.

-

Like its static predecessor, the Telegram animated sticker format is likely to become the new industry standard in messaging. Check out this quick guide to get started.

-
- -
- -

Starter Packs

-
- -To get your conversations moving right away, our artists have created a few sample sets ranging from Rambunctious Rodents to Sentient Snacks. You can find more animated sticker sets in the 'Trending' section of your sticker panel. 🔥 - -

- -

As always, the fastest way to find a sticker that fits your mood is to type in a relevant emoji – Telegram will immediately suggest matching stickers.

-
- -
- -

Keep an eye out for new animated stickers – and our next update.

-

- -

July 6, 2019
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/apple-watch.html b/data/telegram.org/blog/apple-watch.html deleted file mode 100644 index 4a7663955c..0000000000 --- a/data/telegram.org/blog/apple-watch.html +++ /dev/null @@ -1,225 +0,0 @@ - - - - - Telegram on Apple Watch - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Telegram on Apple Watch

- -
- -
- -
-

Telegram for iOS reaches version 3.0 today, packed with the Bot Platform, dedicated sticker tabs and our first take on Apple Watch support.

-
-

Finally! Telegram 3.0 arrived with full Apple Watch support. You can view your recent chats and reply to messages with stickers, locations, emoji, preset phrases or dictated text. You can also view user and group profiles, start new chats, and even block users.

-
- - - - -
-
- -

Chats on your Apple Watch will show all the content available on Telegram: photos, stickers, locations, documents and videos. For those cases when the watch can‘t handle something, we’ve added a shortcut to easily open any message on your Phone.

-
- - - - -
- -

We've made sure that Telegram on Apple Watch does as much as the platform can support right now — and that it does more than any other messaging app out there.

-

- -

The Telegram Team,
June 24, 2015

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/backgrounds-2-0.html b/data/telegram.org/blog/backgrounds-2-0.html deleted file mode 100644 index 5da816ae56..0000000000 --- a/data/telegram.org/blog/backgrounds-2-0.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - Chat Backgrounds 2.0: Make Your Own - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Chat Backgrounds 2.0: Make Your Own

- -
- -
- -
- Telegram 5.3: Introducing the Backgrounds Platform -
- -

No chat can be dull if you have a really cool chat background. Today's update will ensure you get one. You can now search the web for wallpapers, add effects and then share your backgrounds with friends via links.

-

Telegram backgrounds now support motion and blur effects. You can also set any color as your background, apply a pattern and tweak its intensity.

-
- -
- -

Just like before, you can set any photo from your gallery as your chat background. On Android, you can add some extra effects in the built-in photo editor.

-

Share links

-

Having used this new arsenal to create the perfect chat background, you can easily set it to Telegram on all your other devices. What's more, you can infect the rest of the world with your genius by sharing your background via a link, just like this one:
https://t.me/bg/l7jg-vpxmEYBAAAA1e0rNKySlkk

-
- Message containning a Telegram background -
- -

Search backgrounds

-

If you don‘t feel very creative and would like to simply set something nice real quick, we’ve added new backgrounds to the official selection.

-

We've also included a background search option. Find your dream wallpaper based on keywords or color and then set it in just a few taps.

-
- Background Search Results -
- -

We're also announcing the Instant View 2.0 Template Competition: two months, $300,000+ in prizes, $100 per template. See Instant View Contest 2.0 for details.

-

- -

January 31, 2019
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/captions-places.html b/data/telegram.org/blog/captions-places.html deleted file mode 100644 index a8c8915a11..0000000000 --- a/data/telegram.org/blog/captions-places.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - Places, Captions and more - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Places, Captions and more

- -
- -
- -

Today we are adding several long-awaited features in one epic update to our Android and iOS apps.

-

Places

-

When sharing a location, you can now choose venues and landmarks. And when viewing a location, you can get directions. The section was also beautifully redesigned.

-
- - - -
-
- -

Photo Captions

-

Another thing Telegram was lacking – captions for photos. You can now add them to any picture you send, just tap the T in the photo editing panel.

-
- - - -
-
- -

New Voice Messages

-

You can now see whether the recipient has listened to your voice message — and keep track of which ones you've listened to yourself. Voice messages that have not been played yet are now marked with a small dot.

-
- -
-
- -

Smart Notifications

-

Tired of buzzing notifications from active group chats? Sick of multiple notifications every time somebody forwards you a dozen messages? Getting notifications on mobile while chatting with the same person from your desktop? Fixed! Starting today, you will be notified only when it is necessary.

-

Rich link previews

-

As promised, link previews now work for almost any news site — in addition to previews for the most popular services like YouTube and Twitter.

-

Android Goodies

-

Telegram for Android joins the iOS app in showing extended ‘typing’ statuses: you can now see when your chat partner is sending you a photo or recording a voice message. Scrolling and photo animations have become smoother than ever.

-

Last but not least, we've fully redesigned the emoji menu on Android so that it now features a dedicated stickers tab. This is the first drumbeat of the stickers revolution that is coming to Telegram soon.

-
- -
-
- -

Invite Links for Groups

-

OK, this feature is so awesome that it deserves a separate post.

-

- -

The Telegram Team,
April 30, 2015

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/coronavirus.html b/data/telegram.org/blog/coronavirus.html deleted file mode 100644 index aa30643a4c..0000000000 --- a/data/telegram.org/blog/coronavirus.html +++ /dev/null @@ -1,254 +0,0 @@ - - - - - Coronavirus News and Verified Channels - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Coronavirus News and Verified Channels

- -
- -
- -
- Verified Channels and Coronavirus Info -
- -

Telegram Channels are a powerful tool for broadcasting your messages to unlimited audiences. Since 2015, media organizations and public figures have been using them to reach readers, voters and fans – especially in countries where freedom of speech is limited.

-

Recently, we noticed a new type of channel gaining popularity: those created by Ministries of Health from around the world. India, Malaysia, Israel and many other countries now send news updates, warnings and tips via Telegram.

-
- -
- -
-

More about Channels and their features »

-
-

New Verification Tools

-

To help users distinguish trustworthy sources from fake news, we're launching a streamlined verification process today.

-

If you have verified accounts on other social media services, simply contact our new @VerifyBot to get a verification badge for your channel, group or bot.

-
-

More about Telegram Verification Guidelines »

-
-

Notifications for Users

-

Information is the most powerful weapon in the fight for global health – at least until we get a vaccine. To do our part, we've been sending notifications to all users in countries that have official channels with updates about the virus, offering them to join.

-

We invite all health officials to collaborate on keeping people informed. If you work for your country's Ministry of Health and would like to promote its channel, please verify it first using @VerifyBot, then contact us at corona@telegram.org.

-

Coronavirus Info

-

To make sure users find accurate and relevant information about the pandemic in their region, we've created a special channel which shows up as the top result for all coronavirus-related keywords in Search. It contains a list of official news sources by country:

-

- -

Beyond Channels: Groups and Bots

-

Telegram Channels are good for massive one-way broadcasts, but if you're looking for more interactive ways to inform people, try groups or bots.

-

Telegram Groups can have up to 200,000 members each and offer powerful tools for maintaining order. For example, doctors from the Indian state of Karnataka are using this public group to answer questions from users.

-
-

More about Telegram Groups »

-
-

Telegram Bots are third-party apps that you can interact with right from your chat list. You talk to them using buttons – and they reply with messages and media of all kinds. Bots are extremely flexible and can be used for anything from providing information to integrating with other web services.

-

For example, check out @QuizBot which can create and run quizzes like this one.

-
-

More about Telegram Bots »

-
-

And One More Thing

-

We couldn't do anything about the shortage of masks in the real world, but our artists found a way to squeeze an inexhaustible supply into your app.

-

You can apply masks from this set to any pictures you send using Telegram's Photo Editor. Whether to raise awareness, maintain digital hygiene, or simply to hide your nose is up to you.

-
- -
- -

Stay home. Wash your hands. Be safe. And stay tuned for our next updates!

-

- -

April 3, 2020,
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/encrypted-cdns.html b/data/telegram.org/blog/encrypted-cdns.html deleted file mode 100644 index cb54ab0af2..0000000000 --- a/data/telegram.org/blog/encrypted-cdns.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - - More Speed and Security! - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

More Speed and Security!

- -
- -
- -
-
- -

We at Telegram love to build sophisticated technologies that combine speed with security. Starting with Telegram 4.2, we support CDN caching. CDNs are third-party caching nodes that we’ll use to cache publicly available videos and photos posted in massive channels (say, with 100,000+ subscribers) for users in remote locations where Telegram is popular.

-

This will increase download speeds for tens of millions of users as CDN caching allows data to travel shorter distances and helps avoid bottlenecks that exist between regions.

-

While these caching nodes are only used to temporarily store public media (imagine Telegram versions of superpopular YouTube hits), all data that goes through them is encrypted with a key unknown to the caching nodes. In other words, we treat these CDN caching nodes just like we treat your internet provider – they only ever get encrypted junk they can't decipher.

-

Here’s how it works

-
- -
- -

If you're interested in the technical details, feel free to check out this page that describes the relevant encryption and security checks. And as always – the updated source code for the Telegram apps is open and available for your scrutiny. Security experts are welcome to verify the implementation of CDNs based on the open source code we make available for all of our apps.

-

Thanks to this technology, the download speed for public photos and videos in places like South America, Turkey, Indonesia, India, Iran or Iraq will significantly increase without the slightest compromise in security.

-

To sum up

-
    -
  • Download speeds for popular public media are set to increase several times for millions of Telegram users.
  • -
  • CDN caching nodes are not Telegram servers and not part of the Telegram cloud.
  • -
  • CDNs are used only for caching popular public media from massive channels. Private data never goes there.
  • -
  • CDNs only get encrypted data and they never have the keys: even if they are accessed by hackers or third parties, the attacker won’t be able to decipher the files.
  • -
  • Data downloaded from CDN caching nodes is always verified by the receiving Telegram app by way of hash: attackers won’t be able to replace any files with their own versions.
  • -
  • Detailed technical info about CDNs can be found here, the updated source code of Telegram apps ready for CDN support can be found here.
  • -
  • Telegram 4.2 also includes a bucketful of other goodies for you to enjoy.
  • -
-

- -

Stay safe (and fast)!

-

July 23, 2017
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/export-and-more.html b/data/telegram.org/blog/export-and-more.html deleted file mode 100644 index 12ac71f5dd..0000000000 --- a/data/telegram.org/blog/export-and-more.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - Chat Export Tool, Better Notifications and More - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Chat Export Tool, Better Notifications and More

- -
- -
- -
- -
- -

Today’s Telegram update brings you an easy way to save conversations on your disk. In just a few taps, you can export some (or all) of your chats, including photos and other media they contain. As a result you’ll get all your data accessible offline in JSON-format or in beautifully formatted HTML.

-
- -

Data Export Results

-
- -

To use this feature, make sure you have the latest version of Telegram Desktop installed on your computer, then click Settings > Export Telegram data. This tool will be particularly useful for users who have millions of messages and can’t easily access the oldest parts of their messaging history.

-
- -
- -

You can export individual chats by opening the menu in any chat and choosing Export chat history.

-

Exceptions in Notifications

-

Telegram was the first app to give its users notorious flexibility in fine-tuning how their message notifications work. Today we are taking this further by adding Exceptions to the notifications settings, where you can see which chats are excluded from the global settings you defined in Settings > Notifications.

-
- -

Notifications Exceptions

-
- -

Muting all chats but a few (or vice versa) has never been easier.

-

Improved Telegram Passport

-

We’ve been overwhelmed by the reception of Telegram Passport – the tool to log into third-party apps that require real-life identity. Just two weeks after its launch, Passport can be used to sign up for many services, from established sharing economy services to blockchain startups.

-
-To name just a few projects that integrated Telegram Passport: Sum & Substance (KYC & user verification), CEX.IO and Xena (cryptocurrency exchanges), CryptoPay (wallet), YouDrive (carsharing), Profi and Worki (job marketplaces), Minter Network and Minexcoin (blockchain startups), KICKICO, Cryptonomos and ICOadmin (ICO platforms).

- -

Building on this success, today we’re upgrading Passport to support names in original languages and additional types of documents. We’ve also strengthened the algorithms that encrypt Passport data to better protect your data against hacking attacks coming from Telegram (however unlikely those may seem). This way we further ensure that only you have access to your private data.

-

Source Code and APIs

-

As always, you do not have to take our word on how our encryption works. The updated source code of Telegram apps reflecting all of today’s changes is available on GitHub and open for everybody to review. If you are a developer of a service that requires identity verification, make sure you check out these docs explaining how Telegram Passport can be integrated into your app.

-

- -

August 27, 2018
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/filters-anonymous-admins-comments.html b/data/telegram.org/blog/filters-anonymous-admins-comments.html deleted file mode 100644 index bed112b6aa..0000000000 --- a/data/telegram.org/blog/filters-anonymous-admins-comments.html +++ /dev/null @@ -1,261 +0,0 @@ - - - - - Search Filters, Anonymous Admins, Channel Comments and More - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Search Filters, Anonymous Admins, Channel Comments and More

- -
-
-
- -
- Introducing Search Filters, Anonymous Group Admins, Channel Comments and More -
- -

Your personal Telegram Cloud is endless and full of spicy memes. To help you find your way around it, we're introducing Search Filters. Today's update also features Anonymous Admins to make your battle for freedom safer and Channel Comments to make sure everyone's voice is heard.

-

Search Filters

-

From now on, you can filter search results by type using the new tabs: Media, Links, Files and others. To search a particular time period, just type “August 14” or “Yesterday”. Typing the name of any person, group, channel or bot will add a filter by source.

-
- -
- -

These search filters can be combined, which lets you look for something as specific as messages with a link, sent in March 2016, containing the word “boat”.

-

Anonymous Group Admins

-

Telegram is increasingly used to organize protests for democracy and freedom. Today we're introducing another tool for safer protests.

-

Toggle Remain Anonymous in Admin rights to enable Batman mode. The anonymized admin will be hidden in the list of group members, and their messages in the chat will be signed with the group name, similar to channel posts.

-
- Post from an anonymous admin in a group -
- -

Channel Comments

-

Speaking of Channels, we've added a comment button to posts on channels with discussion groups. Comments show up in a cozy little thread of their own, but will also land in the discussion group to keep everyone in the loop and make it easier for admins to keep the conversation civil.

-
- -
- -

If you are not a member of the channel's discussion group, you will be notified about replies to your comments via a new chat called Replies.

-
-

For a limited time only, you can test this feature in this channel.

-
-

If you'd like to enable discussions in your own channel, head to Channel Settings > Discussion.

-

Amazing Android Additions

-

Our Android wizards didn't forget to pack some new smooth animations. To get a taste, try expanding or hiding your keyboard – or switching between your day and night themes from the left menu. You will also see animated popups when deleting messages, changing notifications, saving media, etc.

-
- -
- -

In case you're more into practical things, press and hold on any profile picture in a group chat to take a closer look. And if you're using multiple accounts in one app, you can now preview the chat lists of your other accounts using the same gesture in the account switcher.

-

More Animated Emoji

-

We carry on with our quest to animate every emoji in existence. To get one of these 👇 in a chat, simply send a message with a single emoji.

-
- -
- - -

- -

And that's all for today, see you in the comments.

-

- -

September 30, 2020
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - - diff --git a/data/telegram.org/blog/folders.html b/data/telegram.org/blog/folders.html deleted file mode 100644 index 71673fc44c..0000000000 --- a/data/telegram.org/blog/folders.html +++ /dev/null @@ -1,298 +0,0 @@ - - - - - Chat Folders, Archive, Channel Stats and More - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Chat Folders, Archive, Channel Stats and More

- -
- -
- -
- Introducing Chat Folders -
- -

Many of our users rely on Telegram for their work and studies, even more so in the last weeks. To make sure everyone's chat lists can handle the increased load and you don't miss important messages, we're introducing Chat Folders today.

-

If you have too many chats, you can now separate fun from work, or family stuff from school stuff – then swipe between the tabs to quickly access any of your chats.

-
- -
- -

You can include or exclude all chats of a particular type, like Channels, or Unread – or one by one.

-

Folders become available in the interface when your chat list is long enough to start getting cluttered. Alternatively, you may use this link in your app to enable Chat Folders.

-

Unlimited Pins

-

Each of your folders can have as many pinned chats as you like.

-
- Pinned chats in folders -
- -

Archived Chats

-

Chat Folders work best to make some of your chats more visible. If you're looking to hide some of your chats from view, try archiving them instead.

-

Swipe left on a chat to transfer it to your archived chats folder. When an archived chat gets a notification, it will pop out of the folder and back into your chat list. Muted chats will stay archived forever.

-
- -
- -

You can hide the archive by swiping left on it. See it again by dragging the screen down.

-

On Android, if you are already using Folders, swiping will not work for archiving. Instead, you can long press on a chat to open the bulk actions menu where you can select multiple chats and then pin, mute, archive or delete them all at once.

-
- Archive button in the bulk actions menu -
- - -

Desktop Sync

-

Like everything on Telegram (except for Secret Chats), your Chat Folders will seamlessly sync to all your other connected apps, including our Desktop Apps.

-

Thanks to the extra space available on your computer screen, we've added a folder sidebar – as well as some icons to make your folders more recognizable:

-
- -
- -
-

Get the multiplatform Telegram Desktop or our dedicated macOS app. If you're not using those, you're only enjoying half of Telegram.

-
-

Channel Stats

-
-If you have a channel with more than 1000 50 subscribers, you can now view detailed statistics about its growth and the performance of its posts. -
- -
- -
- -

With this information, you can find out what's working and what's working really well. Hint: Cat Pictures.

-

Voice Recording Animations on Android

-

Our designers added some fancy wavy animations below your finger when you're recording a voice or video message.

-
- -
- -

Tip of the day: Did you know you can slide your finger up to lock recording and keep talking without holding the button?

-

New Animated Emoji

-

The latest additions to our army of animated emoji can help you be brave and urge your friends to stay safe and healthy. Send 🦠, 🤒, 😷, 🤕, 🤧, 🤢, 🤮, 🧼, 💉, 💊 or 🚑 to any chat to check them out.

-
- -
- -

Most of our sticker packs now also have something to say about the situation. Type 🦠 in any chat and wait to see the suggestions:

-
- -
- -

And One More Thing

-

Missing your Catan or D&D partners while the world is on lockdown? Send 🎲 to any chat to get a certified random number from the animated dice.

-

Besides trying to test your luck, you can also use it as a tiebreaker if a group poll or friendly debate ends in a split decision. Pick a number – the closest one wins!

-
- -
- -

Stay home, stay safe and stay tuned for our next updates!

-

- -

March 30, 2020,
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/gif-revolution.html b/data/telegram.org/blog/gif-revolution.html deleted file mode 100644 index fe7c2be2b7..0000000000 --- a/data/telegram.org/blog/gif-revolution.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - - GIF Revolution - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

GIF Revolution

- -
- -
- -

Good news for GIF-lovers! As of today, you can send and download GIFs up to 20x faster. This is possible because we're now re-encoding all GIFs to mpeg4 videos that require up to 95% less disk space for the same image quality.

-

We've optimized our apps so that they can smoothly play even dozens of GIFs on the screen at the same time. GIFs will now play automatically, so there's no need to launch each one manually anymore. (You can turn this off in Settings when you need a break.)

-

Sending GIFs

-

To make sending your favorite animations easier, we've added a dedicated GIF tab to the sticker panel. Tap on GIFs in chats (long tap on iOS) and ‘Save’ to add them to the panel. Then send them to any chat in one tap.

-
- -

-
- -

iOS users can now also send GIFs from the Gallery using the fully redesigned attachment menu.

-
- -
-
- -

GIF Bot

-

Last but not least, our new Inline Bots feature offers another innovative way of finding and sharing GIFs. These bots deserve a separate blog post.

-
-

Read on!

-
-

- -

The Telegram Team,
January 4, 2016

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/group-video-calls.html b/data/telegram.org/blog/group-video-calls.html deleted file mode 100644 index 81c436b6d7..0000000000 --- a/data/telegram.org/blog/group-video-calls.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - - Group Video Calls - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Group Video Calls

- -
-
-
- -
- Introducing Group Video Calls -
- -

Today's update lets you turn on your camera or share your screen during Voice Chats in groups – on all devices, including tablets and desktops. This brings voice chats to a whole new level, ready for online classes, business meetings and family gatherings.

-

We're also introducing animated backgrounds, stylish message animations and more – enough to fill a second blog post.

-

Group video calls

-

Voice chats in any group can now seamlessly turn into group video calls – just tap the camera icon to switch your video on.

-
- -
- -

Tap on any video to make it fullscreen. If you pin a video, it will stay focused as new users join the call and turn on their cameras.

-
-

To start a voice chat, check the ⋮ menu in the profile of any group where you are an admin (on iOS, you will find a 'Voice Chat' button right in the group profile).

-
-

While audio-only participants are unlimited, video is currently available for the first 30 people who join the voice chat. This limit will increase soon as voice chats take on streaming games, live events and more.

-

Screen sharing

-

In addition to your camera feed, you can also share your screen – or both at the same time.

-
- -
- -
-

To share your screen, tap ⋮ or ⋯ in any app and select it from the menu.

-
-

Noise suppression options

-

We've improved noise suppression in voice chats to keep everyone's audio clear and crisp, even when you're eating something crispy. We've also added a toggle to turn noise suppression off in settings – for those times when munching has meaning.

-
- Noise suppression settings -
- - -

Tablet and desktop support

-

Tablets and computers have more screen space and offer more display options – tap to open the side panel and see a split-screen view of the video grid and list of participants, optimized for both portrait and landscape orientation.

-
- -
- -

Voice chats on desktop open in a separate window, so you can type and talk without minimizing anything. Desktop apps also have selective screensharing so you can broadcast an individual program instead of your whole screen.

-
- -
- -

When you're using a desktop app, anyone who starts sharing their screen will be pinned automatically. This is especially useful when small teams meet to coordinate their work.

-

And more?

-

That's it for today… No, wait. In fact, we're having two updates instead of one:

-
-

Read on to learn about Animated Backgrounds and more.

-
-

- -

June 25, 2021
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - - diff --git a/data/telegram.org/blog/instant-view-contest-200K.html b/data/telegram.org/blog/instant-view-contest-200K.html deleted file mode 100644 index ff64a37974..0000000000 --- a/data/telegram.org/blog/instant-view-contest-200K.html +++ /dev/null @@ -1,273 +0,0 @@ - - - - - Instant Views for Everyone & a $200K Contest - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Instant Views for Everyone & a $200K Contest

- -
- -
- -
-

Version 4.0 is the mother of all Telegram updates. Note that we're also launching Video messages + Telescope and Payments for Bots today.

-
-
- -
- -
-

UPD 30.05: We've increased the prize fund of our contest to $315,000 by adding more target domains. Join today!

-
-

Rejoice, brethren and sistren, the day has come! Instant View is now ready to support thousands of websites, including your favorite ones. Soon you will no longer need to launch a web browser to view any article shared with you on Telegram, because today we are launching the Instant View Platform.

-

Instant What?

-

With Instant View, you can enjoy articles from any blog or media outlet in a uniform and easily readable way. Beyond merely showing the text of an article, Instant View pages support images, videos, and any other media. They work great even if the source website isn't optimized for mobile devices.

-
-
- -

Instant View Button

-
-
- -

Instant View Page

-
- -

Instant View pages are lightweight and cached on Telegram servers, so they load instantly on pretty much any connection — hence the name. But the best part is that webmasters don't need to change anything on their sites for Instant Views to work.

-

Meet the Instant View Platform

-
- -
- -

To generate Instant View pages, our parser bot uses templates — sets of rules that tell the bot where to find useful content and what to ignore on a particular domain or URL. The bot uses these instructions to create a slim and beautiful Instant View representation of the source page.

-

Today we are launching the Instant View Platform that allows anyone to create their own templates for websites. Like everything else we launch, this platform is completely open. All are welcome to join us in our quest to make the world's information more accessible (in a much more elegant way) to users everywhere!

-
-

Start here, check out our samples, then open the Instant View Editor and you‘re ready to rock. Also, here’s the full reference doc in case you want to know everything.

-
-

$200,000 Competition for Rule Makers

-

To get the ball rolling, we're also launching a $200,000 (now $315,000!) crowdsourcing competition for template makers. If you know a bit of HTML and want to participate, check out the Contest page. The task is easy: choose a website from our list and be the first to come up with the perfect set of rules to parse articles from that site into the Instant View format. Head over to the docs to get started!

-

For each website that you were the first to describe with an accurate set of rules before the end of the contest, you get $100 from our fund. The one who manages to best describe the most contest domains with their templates will be declared the winner and will get $10,000 on top of the payout from their templates. The second place winner gets a $5,000 prize on top of what they made on successful template submissions.

-
-

Winning templates will be used to display Instant View pages to all Telegram users after we approve them.

-
-

Even if you don't know anything about HTML or programming, you can help our brave template-makers by finding and reporting issues with their work. If somebody wins with a bit of your help, you may get a share of the reward.

-

Tips for website owners

-

If you own a website and want your articles to be viewed natively inside Telegram, simply have a developer add a template for your site.

-

If you distribute your content via a Telegram channel, you don't even have to wait for us to approve your template. Simply send specially formatted links to your subscribers and they will get Instant View pages based on your template right away.

-

You can also direct users who view Instant View pages from your site to join your channel on Telegram (more on how to do that):

-
- -

Join Button

- -

If any of this seems too complicated, just sit back and relax: crowdsourcing will take care of it for you in due time.

-

One More Thing

-

In version 4.0 we‘ve added some nifty Instant View settings. You can now view your articles in dark, gray, or sepia-toned environments, as well as adjust the font type and size. The Auto-Night Theme setting will soothe your eyes by automatically showing dark pages when it’s late.

-
- -

Instant View Settings

-
- -

When you find something noteworthy on an Instant View page, simply long tap on the paragraph to select it for quickly copying or sharing it with your contacts.

-
- -

Quick Copy / Share

-
- -

- -

Good luck making rules, identifying issues, or – if you’re a regular user – happy Instant Viewing!

-
-

P.S. Follow @IVContest to get the latest updates about the contest.

-
-

- -

May 18, 2017
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/live-locations.html b/data/telegram.org/blog/live-locations.html deleted file mode 100644 index 7ba032519f..0000000000 --- a/data/telegram.org/blog/live-locations.html +++ /dev/null @@ -1,243 +0,0 @@ - - - - - Live Locations, Media Player and Languages - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Live Locations, Media Player and Languages

- -
- -
- -
- -
- -

Starting with Telegram 4.4, you can broadcast your current location to any chat in real time.

-

This is useful when you are on your way to an appointment or are trying to coordinate with friends at a large event. Instead of sending static locations on the map every minute, you can now share your Live Location with the people you’re meeting – for 15 minutes, 1 hour, or 8 hours.

-

To use this feature, select ‘Location’ from the attachment menu and choose ‘Share My Location for…’:

-
-
- -
-
- -

You can also share your Live Location in groups, and if other members of the group do the same, you’ll get an interactive map of everyone’s current coordinates. Thanks to a bar at the top of the screen, you will always remember who you’re sharing your location with. And you only need two taps to stop sharing whenever you choose to.

-

New Media Player

-

We’ve completely redesigned our in-app audio player to better support the playback of MP3s and other music files you send and receive. Try the @cctracks channel for a demo – we’ve uploaded some free music there to demonstrate how the new media player works. After downloading an audio file, tap the play button to start listening. To view the cover image and the rest of the chat's playlist, tap on the title of the playing track in the top bar.

-
-
- -
-
- - -

More Languages

-

We’re also launching a new translation platform for Telegram apps. Starting today, Telegram is available in French, Indonesian, Malay, Russian and Ukrainian – with more languages like Persian coming soon. Telegram now supports 13 languages, which are available in Settings.

-

If you don’t like how a specific element in Telegram's interface is translated in your language, you can now use the localization platform to suggest an alternative word or phrase. Everyone can suggest translations and vote for them, making Telegram localization a community-driven effort.

-
- -

Screenshots make translations easier

-
- -

Unlike other services, Telegram can instantly push new translations of words and phrases to the apps. Thanks to this, users won't need to wait for an update in the stores to get the new localized version.

-

This also means that our developers won't have to wait for all translations to be finished before the apps are released, so this new interface will speed up Telegram development too.

-

Better Group Chats

-

As always, we’re trying to make Telegram group chats better. In large groups, you can now recognize messages from admins by the new ‘admin’ badge. And Admins in supergroups can now control whether new members get to see the earlier message history.

-

- -

October 10, 2017
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/permissions-groups-undo.html b/data/telegram.org/blog/permissions-groups-undo.html deleted file mode 100644 index 5908d05a02..0000000000 --- a/data/telegram.org/blog/permissions-groups-undo.html +++ /dev/null @@ -1,265 +0,0 @@ - - - - - Group Permissions, Undo Delete and More - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Group Permissions, Undo Delete and More

- -
- -
- -
- Introducing Telegram 5.2: New permissions for groups, unified group settings, undo deleting chats and more -
- -

Ever wanted to run a sticker-free or GIF-free community? With group permissions, admins can now restrict all members from posting specific kinds of content. Or even restrict members from sending messages altogether – let the admins chat amongst themselves while everybody else witnesses their wisdom in silent awe.

-
- -
- -

In case you ever felt lonely in a group with 100,000 members, Telegram groups now support up to 200,000 members – so now you can feel twice as lonely 🙃. To make managing groups more enjoyable, we've streamlined all group interfaces, including the Settings screens, Admin panels and Member lists.

-
- New group, redesigned empty screen -

A newly created group

-
- -

As of today, supergroups and basic groups are simply groups. It now takes just a few taps to make any group public, add admins with granular privileges or toggle persistent history.

-

Have fun bossing around groups the size of the city of Kassel!

-

Undo clearing history and deleting chats

-

Deleting the wrong chat is rarely fun – but now you'll have a chance to reconsider.

-

When you delete a chat or clear chat history, you'll get a detailed confirmation dialog and an option to restore the chat within the next 5 seconds. Once the time is up, the chat is irretrievably lost in the jaws of Telegram’s underground data shredders.

-
- -
- -

If you relied on “I accidentally deleted the chat with my homework” in your studies, please accept our apologies. From now on, you'll have to blame your digital dog.

-

Sort your contacts

-

Back to the topic of bossing people around, you can now sort your contacts by name and by last seen time on both iOS and Android.

-
-
- Sorting contacts on iOS -

iOS

-
-
- Sorting contacts on Android -

Android

-
- -

Thumbnails and download animations

-

Waiting for large media downloads to finish ranks very low on the list of “The Most Exciting Things to Do Online”. We decided to spice this process up a bit by improving our animation algorithms and adding an ultra-light thumbnail to each photo and video:

-
- -
- -

From now on, every photo you receive will start its life as an obscure blur instead of an empty square. Isn’t this just beautiful?

-

Search bars, dark mode and moar profile pics

-

Search bars on Telegram for iOS and the default dark mode theme on Android got some face-lifting. The Android app also allows you to set up a profile picture when you create an account, so expect to see more friends with faces from now on.

-

Meanwhile on Desktop…

-

The new group permissions also work in Telegram Desktop. Additionally, version 1.5.8 introduces support for automatically downloading files and music and choosing input and output devices for Telegram Calls.

-

Last but not least, you can now change your visuals before heading into an emoji fight:

-
- Choose your emoji on Telegram Desktop -

Choose how you see emoji on Telegram Desktop

-
- -

Another glorious Telegram update is coming in a week or two, so STAY TUNED!

-

- -

January 21, 2019,
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/pinned-messages-locations-playlists/world.html b/data/telegram.org/blog/pinned-messages-locations-playlists/world.html deleted file mode 100644 index 5438ce70da..0000000000 --- a/data/telegram.org/blog/pinned-messages-locations-playlists/world.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - - Pinned Messages 2.0, Improved Live Locations, Playlists and More - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Pinned Messages 2.0, Improved Live Locations, Playlists and More

- -
-
-
- -
- -
- -

Starting today you can pin several messages in every chat, get notified when friends get near if they are sharing their Live Location, send music as Playlists, and more.

-

Multiple Pinned Messages

-

Each chat now supports multiple pinned messages. To jump between them, simply tap the top bar several times – or use the new button to see all pinned messages on a separate page.

-
- -
- -

In addition to channels and groups, pinned messages now work in one-on-one chats.

-

Improved Live Locations

-

When friends share their live location, you can set up an alert that will notify you when they're close. Icons on the live location map also show which direction people are facing.

-
- -
- -

Playlists

-

When you send multiple songs at once, they'll be arranged together in a playlist – easier to play, forward, or comment on. Opening one of the songs will queue them all up in Telegram's built-in media player.

-
- Playlist sent to a chat -
- -

Sending multiple files together also displays them in one chat bubble. Just like with photo albums, you can always select each file or track individually.

-

Channel Post Stats

-

Comments have boosted subscriber activity in channels, and now we're introducing new tools for admins to track it. In addition to channel statistics, you can view stats for individual posts in your channel – including a list of public channels to which your post was forwarded.

-
- Channel post stats page -
- - -

New Animations on Android

-

Our Android developers added new animations for sending messages and switching songs in the music player.

-
- -
- -

Also on Android: when viewing a photo you’ve received, you can edit and send it back right away, instead of downloading and uploading it again. Just tap the brush button when viewing a photo to quickly draw or put stickers on it.

-

Jackpot

-

Send 🎰 to any chat to see if you hit the jackpot.

-
- -
- -

In case you missed it, this also works for 🎲, 🏀, ⚽️ and 🎯.

-

And More Animated Emoji

-

We've animated some new emoji for Halloween. To get one of these 👇 in a chat, simply send a message with a single emoji. When viewing animated emoji in chats, try tapping on ⚰️ or 🎃 for a surprise.

-
- -
- -

If you are not a fan of Halloween, we've got another new animated emoji for you:

-
- -
- -

How to Get This Update

-

The new version with these features is already available for all our Android users via Google Play or APK. If you're on iOS, you'll get the update as soon as either a) Apple finishes reviewing it OR b) you decide it's time to switch to Android. 👀 UPD: (October, 31) The iOS part of the update has now also been approved.

-

And that's it for today, stay tuned for the next update!

-

- -

October 30, 2020
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - - diff --git a/data/telegram.org/blog/profile-videos-people-nearby-and-more.html b/data/telegram.org/blog/profile-videos-people-nearby-and-more.html deleted file mode 100644 index 7c2eca8eef..0000000000 --- a/data/telegram.org/blog/profile-videos-people-nearby-and-more.html +++ /dev/null @@ -1,315 +0,0 @@ - - - - - Profile Videos, 2 GB File Sharing, Group Stats, Improved People Nearby and More - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Profile Videos, 2 GB File Sharing, Group Stats, Improved People Nearby and More

- -
-
-
- -
- Introducing Profile Videos, Improved People Nearby, 2 GB File Sharing and More -
- -

Today's update brings Profile Videos along with improved People Nearby features, unlimited file sharing with up to 2 Gigabytes per file, mini-thumbnails for your chat list and notifications, group stats, and much more.

-

Profile Videos

-

You can now upload a video to your profile – and choose any frame you like for your static profile picture in chats. Capture yourself in action, or wink and wave at people like you're in a magical picture from Harry Potter.

-
- -
- -

Same as with any videos you upload, our media editor will help you enhance quality – or decorate yourself with animated stickers.

-

As your mood changes, you can quickly switch back to a previous profile photo or video by tapping ‘Set as Main’. Great for rewinding time and staying young forever.

-

Soften Skin

-

Speaking of the media editor, any photo or video you take with the front-facing camera now has a soften skin option in the media editor. But you don't need it to look fabulous, you already are fabulous.

-
- -
- - - - -

Improved People Nearby

-

Profile videos make meeting new people a dozen times more interesting, and we've beefed up the People Nearby section for the occasion.

-

When people contact you via the People Nearby section, you will see how far away they are. And when you start a chat with someone nearby, Telegram will suggest a greeting sticker to break the ice. Luckily, all our stickers are extroverts.

-
- Improved People Nearby -
- -

Now that people are carefully emerging into this brave new world, it's time to make friends and repopulate the earth compare your sticker collections. Head over to Contacts > Find People Nearby and try tapping on ’Make myself visible’.

-

Mini-thumbnails

-

Ever wondered whether the incoming picture is just another meme or that selfie you've been waiting for? Get an idea of what media is in a message right away thanks to the new chat list thumbnails.

-
- Mini-thumbnails in the chat list -
- -

The new thumbnails also appear in notifications and message search results. Never lose a cat photo again.

-
-

Speaking of previews, you can hold on a profile picture in the chat list to preview messages without opening the chat. This feature is from 2018, but we had a dream in which a talking squid told us to mention it here.

-
-

Filter New Chats from Non-Contacts

-

Thanks to People Nearby and groups with up to 200,000 members, you can always find someone to chat with. Public figures sometimes have the opposite problem and may wish to tone down the attention they receive — we've got this covered too.

-

If you're getting too many messages from non-contacts, try the new switch in Privacy & Security settings to automatically archive and mute new chats from people not in your contacts. You can access these chats anytime from the Archive folder and bring them back to the main chat list in a tap.

-
- -
- - - -

Group Stats

-

Owners of large groups with over 500 members can now view beautiful, detailed graphs about their activity and growth. Group stats also show a list of top members by number of messages and average message length.

-
- -
- -

By the way, the minimum number of subscribers to get Channel Stats has been reduced to 500 as well. 🎉 We're planning to roll out access to group stats for admins of all groups with 100 members or more in the near future.

-

Android Extras

-

On Android, the music player has been redesigned with sleek new icons and an expandable track list. Tap the button on the left to control looping, shuffling and to reverse the track order so your playlist can moonwalk with you.

-

The message input bar will grow smoothly as you type a long message. And the video editor now allows cropping and rotating videos – to help you hide any evidence you were filming vertically.

-
- -
- -

Multiple Accounts on Telegram Desktop

-

Telegram lets you stay signed in on 3 accounts from different phone numbers without logging out. Our mobile users have been enjoying this feature since 2017, and today it's coming to the multi-platform Telegram Desktop.

-
- -
- -

As always, this doesn't require an active connection to your phone – all our apps are completely self-sufficient.

-

More Animated Emoji

-

Our animated emoji army keeps growing (note to self: build a bigger barracks). To get one of these 👇 in a chat, simply send a message with a single emoji – and watch it jump to life.

-
- -
- -

Be careful, one of them bites. And we're not allowed to tell you which one.

-

If you're looking for something more interactive, try sending a single ⚽️ in any chat to see if you score a goal:

-
- -
- -

And One More Thing

-

Since 2014, Telegram users have been sharing files up to 1,5 GB each, which happens to be 93 times larger than 16 MB (which is a totally random number, we have no idea what it could possibly mean).

-

From now on, you can send unlimited numbers of media and files of any kind – up to 2 GB each.

-
-

And that‘s it for today. We're now in the middle of the year — with eight major updates behind us and long-awaited features just around the corner. Stay tuned!

-

- -

July 26, 2020
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - - diff --git a/data/telegram.org/blog/replies-mentions-stickers.html b/data/telegram.org/blog/replies-mentions-stickers.html deleted file mode 100644 index 162fde7fc6..0000000000 --- a/data/telegram.org/blog/replies-mentions-stickers.html +++ /dev/null @@ -1,257 +0,0 @@ - - - - - Better Replies, Stickers & Invitations - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Better Replies, Stickers & Invitations

- -
- -
- -
- -
- - -

Since 2015 when we first introduced replies, the maximum group size on Telegram has increased by 100 times – from 200 max members to 20,000. These days you can get new mentions or replies in group chats many times during a day – and it’s important not to miss those messages.

-

Starting with Telegram 4.3, whenever somebody replies to you or mentions you in a group, you’ll notice this straight away by the ‘@’ badge in the chats list:

-
-
- -
-
- - -

If you have new replies/mentions in a group, you can now instantly reach them by tapping the new ‘@’ button when inside the chat. This button will disappear once you’ve read all the relevant messages.

-

Favorite Stickers

-

Anyone can create and upload stickers on Telegram. As a result, thousands of new stickers are added to the platform each day, and some of us have dozens of sticker sets installed.

-

Starting today, anyone with five or more sticker sets installed can mark individual stickers as ‘favorites’, and have them always accessible at the top of the sticker panel in the ‘star’ section.

-
-
- -
-
- -

Stickers of the Group

-

Speaking of stickers, large groups with 100 members and more can now choose an official sticker set for all the members of the group to see and use while they're chatting in the group — without the need of adding it to their panels.

-
- -

Group Stickers

-
- -

Invite Friends

-

The ‘Invite Friends’ section (accessible from Contacts) has been completely redesigned. Your contacts that are not on Telegram yet but have many of their friends already using it are now listed at the top. If you invite any of them to join, they’ll be welcomed by tens of Telegram veterans among their contacts:

-
- -

Invite Friends to Telegram

-
- -

…And More

-

As always with new releases, we've included several small goodies you may also like:

-
    -
  • Twitch videos are now supported in the Telegram in-app player, so you can watch Twitch streams in Picture-in-Picture mode while chatting with your friends.
  • -
  • When on a Telegram voice call, you can now check the signal strength thanks to the new indicator.
  • -
  • On iOS, you can edit any photo you pasted directly to a chat from clipboard before sending.
  • -
  • On Android, when forwarding a message, you can long tap to select multiple recipients.
  • -
  • On Android, when viewing photos in Shared Media, you can go to the place in chat where the photo was posted.
  • -
  • On Android, if you have many new messages in many active chats, synchronization will happen much, much faster.
  • -
-

- -

Summer is over. Stay tuned, another update is already brewing in our dungeons!

-

September 3, 2017
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/search-and-media.html b/data/telegram.org/blog/search-and-media.html deleted file mode 100644 index 888b415f15..0000000000 --- a/data/telegram.org/blog/search-and-media.html +++ /dev/null @@ -1,232 +0,0 @@ - - - - - In-App Media Playback and Search in Chats - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

In-App Media Playback and Search in Chats

- -
- -
- -

The new version of Telegram allows you to play media from services like YouTube, Vimeo or SoundCloud directly from Telegram – without having to leave the app. Just tap on the preview of a link to an external media to view the video or listen to the audio file (speaking of audio files, they are now beautifully rendered and played in chats).

-
- - - - - -

- -
- -

The new attachment menu in Android is not only gorgeous and beautifully animated; it also allows you to share contacts, audios and recent photos way easier:

-
- -
-
- -

All of your communications in Telegram are already instantly searchable with the multi-purpose search field, but now you can also search for messages in specific chats. Just tap on the name of the chat in iOS or toggle the Actions menu in Android:

-
- - - - - -

-
- -

You will see the number of occurrences of the keyword in the chat and will be able to navigate through them with the up/down arrows. Enjoy!

-

- -

The Telegram Team,
July 17, 2015

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/shared-media-scrolling-calendar-join-requests-and-more.html b/data/telegram.org/blog/shared-media-scrolling-calendar-join-requests-and-more.html deleted file mode 100644 index 5486c25ece..0000000000 --- a/data/telegram.org/blog/shared-media-scrolling-calendar-join-requests-and-more.html +++ /dev/null @@ -1,343 +0,0 @@ - - - - - Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests, Global Chat Themes on iOS and More - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests, Global Chat Themes on iOS and More

- -
-
-
- -
- Introducing Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests, Global Chat Themes on iOS and More -
- -

Today's update brings new ways to find memories in shared media with high-speed scrolling and a calendar view, an admin approval setting for invite links, global chat themes for your entire app, and more.

-

Hyper-Speed Scrolling for Shared Media

-

Every Telegram user has unlimited cloud storage – and each chat has a Shared Media page that shows all the photos, videos, files and music that have been sent there. We've added a new date bar on the side of the page, which you can drag up and down to scroll through shared media faster.

-
- -
- -

To get a better look, pinch to zoom in and out, so you can see anywhere from 2 big thumbnails to a dozen small squares per row.

-

Calendar View for Shared Media

-

To quickly find media from a specific time, tap on the date bar to open a calendar interface with media previews for each day – then tap to see all the media from that date.

-
- Calendar view in shared media -
- -

In addition to the new tools for jumping between past and present, you can now filter shared media to show only photos, only videos, or both.

-
- New menu with filtering options -
- -
-

To view shared media, simply tap the header at the top of your screen in any chat and scroll down. To open the new menu, tap Menu Android on Android or Menu iOS on iOS.

-
-

Join Requests for Groups and Channels

-

Invite links let you give users the opportunity to join your group or channel on their own time – whether you share the link privately or turn it into a QR code on a billboard is up to you. When you create additional invite links for your chat, there is now a Request Admin Approval setting, which gives admins more control over who is able to join and see the chat.

-
- -
- -

When a user opens a link with Admin Approval turned on, they will see a button to send a join request that admins can manage from a new bar at the top of the chat. From there, admins can view an applicant's public profile pictures and bio, then approve or dismiss their request.

-
-

For example, you could post an invite link to your poetry channel on social media – then approve only your close friends and people in purple to see your writing.

-
- - -

Unique Names for Invite Links

-

Admin Approval can be applied to any link in the 'Additional Invite Links' section – we've also added the ability to give all of those links unique names, so you can label them for better organization.

-
- List of invite links with custom names visible only to admins -
- -
-

Link names will be especially helpful if you're using all the different options that exist for invite links, such as limits on duration, number of uses, etc.

-
-

Global Chat Themes on iOS

-

Our last update introduced 8 new themes that you could set for individual chats – and now they're available for your entire app on iOS (with Android soon to follow). Appearance Settings have been fully redesigned, giving these themes center stage. Built by the Telegram Team, every theme has a Day and Night mode, colorful animated background and gradient message bubbles.

-
- -
- -

Like all themes, you can personalize these designs and tweak the colors or change the pattern. For more options and custom settings, tap ‘Chat Themes’ to edit and share your creations.

- - -

Transit Times for Shared Locations on iOS

-

You can show where you are or where you're headed by sending a location from the attachment menu Attach in the message bar. Tapping a shared location pulls up a map of the area – which now shows you the travel time to get there by Foot foot, Car car, or Public Transport public transport. To see detailed directions or get a taxi to the location, tap on the travel time to open it in your preferred app.

-
- New transit time buttons on iOS -
- -
-

Transit times are shown for both static and live locations – so you can see how long it will take to meet your friends while they're on the move.

-
-

Instant Media Captions for iOS

-

The text you type in the message bar now automatically converts to a caption when you attach media, so you'll never have to retype or cut and paste what you just wrote. This also works with Cloud Drafts – so you can type out the message on your computer, then simply attach the photo from your phone and send it all together.

-
- -
- -
-

Naturally, both transit times and instant media captions will be added to our Android app in the coming updates.

-
-

Settings updated for iOS 15

-

Settings on iOS have been redesigned to match the style of iOS 15, including streamlined Notifications Notification and Stickers Sticker settings. The Devices Devices section now gives you a clearer overview of your active sessions with new icons – tap any device to see more details or log out from it remotely.

-
- -
- -
-

Remember that locations shown for your devices are based exclusively on their IP addresses. This data is not always accurate, so don't be surprised if your laptop suddenly travels to Iceland while you're sleeping.

-
-

More Interactive Emoji

-

This update brings new interactive emoji. Send a single 👻 👎 🤮 😂 💸 or 🎃 in any private chat, then tap the emoji to unleash its full-screen effect.

-
- -
- -

If your chat partner also has the chat open, you will both see the effects and feel the vibrations simultaneously.

-
-

As you know from our previous update, this magic also works with 🎆 🎉 🎈 👍 💩 and ❤️.

-
-

Winter is coming, but our next update is racing to beat it. Stay tuned!

-

- -

November 3, 2021
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - - diff --git a/data/telegram.org/blog/silent-messages-slow-mode.html b/data/telegram.org/blog/silent-messages-slow-mode.html deleted file mode 100644 index 7de63d0e58..0000000000 --- a/data/telegram.org/blog/silent-messages-slow-mode.html +++ /dev/null @@ -1,296 +0,0 @@ - - - - - Silent Messages, Slow Mode, Admin Titles and More - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Silent Messages, Slow Mode, Admin Titles and More

- -
- -
- -
- 5.10 update cover -
- -

The previous update brought more movement to Telegram – this one brings more peace of mind. You can now message friends freely when you know they are sleeping, studying or attending a meeting.

-

Simply hold the Send button to have any message or media delivered without sound.

-
- -
- -

Your recipient will get a notification as usual, but their phone won't make a sound – even if they forgot to enable the Do Not Disturb mode.

-
- Silent notification on the lock screen -
- -

This also works in groups, should you get an urgent idea at five in the morning – but not urgent enough to wake up everyone in your work chat.

-

Slow Mode

-

In case a group you manage is getting hard to follow, the Group Permissions section now features a Slow Mode switch.

-
- Slow Mode settings in the Group Permissions section -
- -

When an admin enables Slow Mode in a group, you will only be able to send one message per the interval they choose. A timer will show how long you have to wait before sending your next message.

-
- Slow Mode timer as seen in a user's input field -
- -

Slow Mode can make conversations in the group more orderly, while raising the value of each individual message. Keep it on permanently, or toggle as necessary to throttle rush hour traffic.

-

Admin Titles

-

If new time-lord powers aren't enough, group owners can now set custom titles for admins like ‘Meme Queen’, ‘Spam Hammer’ or ‘El Duderino’.

-
- Custom title section on the admin rights screen -
- -

As with the default admin labels, custom titles are shown with every message in the group so members know that they‘re talking to the designated ’Myth Buster'.

-
- A message from an admin with a custom title in a group -
- -

To add a custom title, edit the admin's rights in Group Settings.

-

Timestamps and Improved Scrubbing

-

Videos now display thumbnail previews as you scrub through, to help you find the moment you were looking for.

-

If you add a timestamp like 0:45 to a video caption, it will be automatically highlighted as a link. Tapping on a timestamp will play the video from the right spot. This also works if you mention a timestamp when replying to a video.

-
- -
- -

Timestamps are also supported for YouTube videos, in case you want to mark your favorite moments when sharing a Kurzgesagt episode.

-

Animated Emoji

-

When you have animated stickers, why not go one step further and get animated emoji? To check them out, send a single ❤️, 👍, 😒, 😳 or 🥳 to any chat.

-
- -
- -

If your life feels a little too animated recently, Sticker Settings now offer a toggle for looped playback. When disabled, animated stickers will play just once then stay still.

-

Android's New Attachment Menu

-

Android’s attachment menu got a makeover, giving media more real estate. Larger thumbnails make it easier to pick photos and videos at a glance, and swiping up will reveal your full Gallery for better browsing.

-
- -
- -

You can scroll left and right through the other attachment options like locations, polls and music. When selecting media, tap ‘…’ to send items as uncompressed documents.

-
- A screenshot of the options from the '...' menu -
- -

Accent Colors for Night Mode on iOS

-

iOS users can now choose accent colors for night themes. The night doesn't always have to be black and blue, after all.

-
- -
- -

Comments Widget

-

Comments.App, our tool for commenting on channel posts, now lets you add a comments widget to your website.

-

With the widget in place, Telegram users will be able to log in with just two taps and leave comments with text and photos, as well as like, dislike and reply to comments from others.

-

They can also subscribe to comments and get notifications from @DiscussBot.

-
- A screenshot of the Comments Widget featuring a photo sent as a reply to another comment -
- -

Open this page in your browser to try the new widget – it doesn't support Instant View pages… yet. 😈

-

That’s all for now, and don’t worry — the next Telegram update won’t be sent silently.

-

- -

August 9, 2019
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/stickers-revolution.html b/data/telegram.org/blog/stickers-revolution.html deleted file mode 100644 index 8f8fe7f8b0..0000000000 --- a/data/telegram.org/blog/stickers-revolution.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - Custom Sticker Sets - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Custom Sticker Sets

- -
- -
- -
-

Check out Pavel's Channel for some cool sticker sets »

-
-

Starting today, artists can submit their custom sticker sets via the Telegram @stickers bot. Each sticker set gets a permanent link, so that users can easily add new stickers and share them with friends.

-

This enables artists of the world to unleash their creativity and help Telegram users customize their experience. Our in-house artist (responsible for the graphic art in this blog) created the Animals set as an example. If you have Telegram installed and updated, this link will open the set: https://telegram.me/addstickers/Animals.

-
- -

-
- -

Independent designers already began submitting their sticker sets, and we notice stickers like Flags of the World or Vicky uploaded to the @stickers bot.

-

Sharing Stickers

-

Sending a link isn‘t the only way to share a sticker set. When you receive a sticker from a set you do not currently have installed, simply tap on it and choose ’Add to Stickers‘ (’Info' on iOS) to preview and add the whole set.

-
- - -

-
- -

Once you've added a set, its stickers become available via emoji tooltips or the dedicated sticker panel. The iOS app now has one too — you can manually switch it on/off in Chat Settings — Stickers.

-

The new Stickers menu allows you to view, uninstall and share your sticker sets.

-
- -

-
- -

This update is available for Android and iOS and is coming to other apps soon. Sticker sets on Telegram are now fully equipped to spread virally and devour the world.

-

- -

The Telegram Team,
May 19, 2015

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/supergroups.html b/data/telegram.org/blog/supergroups.html deleted file mode 100644 index e5e0cb911a..0000000000 --- a/data/telegram.org/blog/supergroups.html +++ /dev/null @@ -1,251 +0,0 @@ - - - - - Admins, Supergroups and More - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Admins, Supergroups and More

- -
- -
- -

Telegram groups are democratic by design. Everyone can invite new members and change the group‘s name and photo, which is ideal for small bands of friends or coworkers. But Telegram can also support much larger communities that need more administration. To make life easier in big groups, we’re introducing admins today.

-

From now on, you can choose how your groups will operate. By default, all members are still in control. But if you want more order, you can throw the switch and appoint additional administrators to your group.

-
- -

-
- -

If you enable the new restricted mode, only administrators will be able to add new people and change the name and photo of the group. Admins also have the power to remove other members from the group.

-

Supergroups

-
-

UPD: Check out Supergroups 2.0: Pinned posts, Public groups, new moderation tools!

-
-

Telegram groups have always been several steps ahead of the competition. You could have groups of up to 200 people communicating efficiently using replies, mentions and hashtags. Now it's time to go further.

-

Ever since our launch in 2013, our users have been telling us they would like to migrate even larger communities to Telegram. As of today, once your group is full, you can upgrade it to a supergroup that supports up to 5000 members.

-
- -

-
- -

Supergroups are optimized to host large online communities and will load quickly, even if you‘ve missed many messages while away. Here’s what you need to know about how they work:

-
    -
  • New members can see the entire message history when they join.
  • -
  • Deleted messages will disappear for all members.
  • -
  • Ordinary members can only delete their own messages.
  • -
  • Supergroups are muted by default and send fewer joined/left notifications.
  • -
-

All official Telegram clients are getting this update today.

-
-

Please note that you need the latest version of Telegram to access a supergroup. You may want to wait a little bit before upgrading your groups so that the update rolls out to all Telegram users, and they can see their groups.

-
-

iOS Bonus: Best In-App Notifications Ever

-

iOS users will enjoy our new in-app notifications. Pull down on a notification to expand it, view the full text of the message or preview attached media.

-
- -

-
- -

You can immediately send a quick reply or a sticker — all without leaving that particular spot in some other conversation.

-

Android Bonus: Quick Share for Channels

-

Meanwhile, Android users can enjoy the new quick sharing menu in channels. Just tap on the forwarding buttons right next to channel messages.

-
- -
-
- -
-

We have a few more surprises up our sleeve for this year. Stay tuned for more updates!

-

- -

The Telegram Team,
November 25, 2015

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/supergroups5k.html b/data/telegram.org/blog/supergroups5k.html deleted file mode 100644 index c990a9d124..0000000000 --- a/data/telegram.org/blog/supergroups5k.html +++ /dev/null @@ -1,232 +0,0 @@ - - - - - Supergroups 5000: Public Groups, Pinned Posts - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Supergroups 5000: Public Groups, Pinned Posts

- -
- -
- -

Telegram is famous for its awesome group chats. Today’s update makes them even more awesome. To begin with, we’re increasing the number of people who can join a supergroup from 1000 to 5000 members. That's 5 times as good.

-

Supergroup admins can now inform all members about important news using pinned messages. Pinned messages are displayed at the top of the chat screen. All members will get a notification — even if they muted ordinary messages from the group.

-
- -

A pinned message

-
- -

Starting today, supergroups can become public and get a short link, like telegram.me/publictestgroup. This way, anybody can view the group's entire chat history and join to post messages.

-
- -

A public group

-
- -

We know what you’re thinking. What about spammers? To prevent potential spam issues, we're introducing powerful moderation tools for group admins. From now on, they can quickly delete all messages from a specific member, block and report them.

-
- -

New tools for admins

-
- -

These features work only in supergroups, but starting today, any group can be converted to a supergroup by its creator. Group admins are now shown in group members’ lists, so ping your group admin if you think this would be cool.

-
-

Good old groups still work great for smaller communities, so there's no need to convert your group right away.

-
-

And that's it for today, watch out for more updates coming soon!

-

- -

March 13, 2016
The Telegram Team

-

- -

P.S. Please note that we’ll be rolling out public groups gradually. They’re already live in Europe and America, but are currently not available in several countries in Asia, from which we detected significant spam activity in the past.

-

We’ll be making the feature available in more countries as we improve our anti-spam algorithms and scale our abuse team.

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/telegraph.html b/data/telegram.org/blog/telegraph.html deleted file mode 100644 index 575f2f3ce4..0000000000 --- a/data/telegram.org/blog/telegraph.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - Meet the Telegraph API for Logins and Stats - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Meet the Telegraph API for Logins and Stats

- -
- -
- -
- -
- -

Last month, we launched Telegra.ph, a minimalist publishing tool that allows you to create richly formatted posts and push them to the Web in just a click.

-

We tried to keep Telegraph‘s interface as simple as possible: there’s no need to log in or navigate menus. You just open telegra.ph, write your post, hit publish, and it's live.

-
- -

Yes, it's that simple

-
- -

Better with Bots

-

This simplicity has its price of course. Sometimes you want to edit your articles on several devices or stay logged in to avoid having to write your name and profile link under each new title. If any of this sounds familiar, meet our new @Telegraph bot.

-

This simple bot will help you log in and manage your Telegraph posts across any number of devices. In addition, it can give you page view statistics for any post on Telegraph. Just send it a link and watch the numbers roll in.

-

A Time to Gather Stones

-

If you have created some Telegraph posts in the past using browsers on your different devices, the @Telegraph bot helps unite them all under your rule.

-
-
- -

A time to log in

-
-
- -

And a time to gather posts

-
- -

Simply press the Log in on this device button, and all posts you‘ve previously written in that device’s browser will be added to your Telegraph account.

-

Telegraph API

-

Mind you, Telegraph is not intended just for Telegram users. Anyone can use this dead-simple publishing tool. For those who are suffering the constraints of other messengers and can't enjoy the comfort offered by the @Telegraph bot, we have created an open Telegraph API.

-

Using the Telegraph API, any developer can create bots like @Telegraph for any other platform, or even standalone interfaces.

-
-

Here's the full documentation, in case you're interested.

-
-

Meanwhile, allow us to return to our coding dungeons where we're brewing another update to our apps for you this year.

-

- -

December 20, 2016
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/translations-iv2.html b/data/telegram.org/blog/translations-iv2.html deleted file mode 100644 index cba5540cef..0000000000 --- a/data/telegram.org/blog/translations-iv2.html +++ /dev/null @@ -1,276 +0,0 @@ - - - - - Custom Languages, Instant View 2.0 and More - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Custom Languages, Instant View 2.0 and More

- -
- -
- -
-Introducing custom languages, IV 2.0, a new design for Android and more -
- - - -

Telegram's Translations Platform allows you to suggest better wording for Telegram interfaces in any language. We've recently rolled out support for most mainstream languages, and translations are already underway.

-

Today's update brings equal treatment to the smaller linguistic communities around the world. Anyone can now use the translation platform to create their own custom language packs – and translate Telegram into any minority language or local dialect, be that Māori, Scottish Gaelic or Transliterated Klingon.

-

We've made it easy to spread your translations. To translate the interface of your app, simply follow the dedicated sharing link of the desired language. Sharing links can be obtained in the translation panel.

-
- Applying a custom language -
- -

Each language also gets its own public group for discussions. Here are the links for the Catalan language, for example:

- -

Once a user switches to your translation, all changes you apply in the interface will be applied immediately. The days of waiting for the apps to update or passing around localization files are over.

-

Instant View 2.0

-

Another unique feature of Telegram is the Instant View technology that allows Telegram users to view web pages in a consistent way, with zero loading time.

-

Today we're expanding the platform with support for right-to-left languages, blocks of related articles, image links, tables, nested lists, horizontal scrolling, collapsible text blocks and much more.

-

Now you can get beautiful instant view pages for even very complex articles. If you're reading this from one of our newly updated mobile apps, try this Wikipedia page for an example.

-
- -
- - - -

Soon we will announce a new crowdsourcing contest to make Instant View pages available for an even larger part of the internet.

-

The Great iOS Bug Hunt

-

We've made close to a thousand fixes and improvements to the iOS app since the major release of version 5.0. The new Telegram for iOS 5.1 features some 400 minor improvements.

-

New Design for Android

-

Telegram for Android has now reached version 5.0 and received a major overhaul in the design department. It is now much easier to access shared media from the profiles of users, groups and channels:

- - -
- -
- -

Shared media now offers high quality crisp previews, increased loading speed, more info in the links and files sections, and more efficient design.

-
- Shared Files -
- -

The Settings screens were redesigned for a more streamlined experience:

-
- -
- -

Following in the footsteps of the iOS app, Android users can take advantage of the new detailed settings for the badge counter in Settings > Notification and Sounds:

-
- Badge Counter Settings -
- -

We've upgraded the photo selector for profile pictures so that you can choose the correct head to be displayed on your profile:

-
- Choose an area to use for the photo -
- -

Last but not least, you can zoom videos during playback and browse full-resolution images sent as documents just like normal photos, by swiping left and right.

-

- -

December 10, 2018
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/verifiable-apps-and-more.html b/data/telegram.org/blog/verifiable-apps-and-more.html deleted file mode 100644 index 979696a4d3..0000000000 --- a/data/telegram.org/blog/verifiable-apps-and-more.html +++ /dev/null @@ -1,392 +0,0 @@ - - - - - Verifiable Builds, New Theme Editor, Send When Online and So Much More - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Verifiable Builds, New Theme Editor, Send When Online and So Much More

- -
- -
- -
- Dude in a jacket inspecting the hologram of a mechanical dog to verify it's built according to the blueprints provided. -
- - - -

Telegram is the only mass market messaging app with open source apps. Since 2013, this not only allows independent researchers to verify the integrity of end-to-end encryption, but also helps look for vulnerabilities (or backdoors 😈).

-

As of this update, Telegram becomes the first messaging app to allow you to independently verify that the code on GitHub is the exact same code that was used to build the app you downloaded from App Store or Google Play. Security researchers are welcome to check out our Guide to Reproducible Builds for iOS and Android.

-

But we know security isn't the only reason you love Telegram – so we've also added dozens of new features and improvements. Gather round, this blog post is a long one.

-

Theme Editor 2.0

-

Using the new theme editor in Chat Settings (or Appearance Settings on iOS), you can quickly tweak the style of elements in Telegram chats and add awesome gradients to both your messages and your background. Switch between tabs (Main Color, Background, My Messages) to see how deep this rabbit hole goes:

-
- -
- -

Once you're done editing, you can quickly share the result of your work with friends so that they can continue tuning your theme.

-

By the way, this update includes dozens of new cool patterns you can apply to your background. Our favorites are the Math and Parisian motifs, but there's also one we made especially for New Year's Eve.

-
- Screenshot demonstrating some of the new background patterns. -
- -

There are new patterns with cats as well. And space. And cats in space. No time to explain, go check them all out.

- - -

New Predefined Colors

-

Not in a creative mood? Not a problem – we've added a boatload of new predefined color schemes for Telegram's default themes. The theme of your dreams may be just a few taps away, try the new options under Classic, Night, Day, etc.

-
- -
- -

Send When Online

-

Some things are best served fresh, like sushi and today's hot memes. For messages that have to be delivered at the perfect moment, we've added the option to schedule messages to be sent when your recipient comes online.

-

Now you can slide your message in with the morning post – or time a funky duck sticker for the exact moment a meeting gets boring.

-
- -
- -

Note that this option is only available if you are allowed to see your recipient's online status. You can still sneak out of bed without anyone noticing.

-

Improved Venue Sharing

-

Location sharing has been updated to make finding venues easier. You can now tap a place directly on the map to select it, rather than scrolling through a list of all the power converter purveyors in Tosche Station.

-
- -
- - -

View Search Results as a List

-

The Search function allows you to easily jump between messages containing a keyword – or sent by a particular person, or even from a certain day. Tapping the bottom bar will now switch to list view in case you want to see all the results on one page.

-
- -
- -

On iOS, you can also select several messages without leaving Search Mode. (Before you ask, this feature was already available on Android.)

-
- Screenshot showing several messages selected in a chat on iOS – without leaving the Search Mode. -
- - -

Podcast and Audiobook Support

-

You've always been able to share files of up to 1,5 GB, but podcasts and audiobooks now get special treatment. Telegram apps will remember your last position when resuming playback of audio files longer than 20 minutes.

-

If you'd like to make podcasts get to the point a little faster, try the new 2x button (which you already know from voice messages). We've eliminated voice chipmunking in 96.8% of cases.

-
- Screenshot showing the location of the 2x playback button for long audio files. -
- -

On iOS, you can skip forward and back with high-precision scrubbing: just hold on the progress bar and slide your finger down, then left or right.

-

New On Android

-

Switch to Night Mode Faster

-

Telegram has shielded your eyes in dark places with Night Mode since 2017. The power of the sun and moon are now even easier to control, with the Night Mode Switch at the top of the menu. Tap the moon icon and watch the sun rise and fall at your whim.

-
- -
- -

Maps have also joined the dark side in Night Mode, so you don't accidentally burn yourself while browsing locations late in the evening. Ve do as the count vills. (•,..,•)

-
- A shared location on a map in Night Mode on Telegram for Android. -
- -

On iOS, dark maps turn on and off with the system dark mode. Speaking of which, we recently added the option to sync your Telegram theme with system dark mode on iOS 13.

- - -

Sleek New Animations

-

We've peppered the interface with little ripple animations when you press on things to help you get more joy out of buttons. Snappy new animations await when jumping between messages in a chat, opening global search or pulling out the archive folder. To get a closer look at a user's profile picture, drag down on their profile page.

-
- -
- -

Select Parts of Messages

-

Following in the footsteps of the iOS app, Android now also lets you select a portion of the message text to copy or share, instead of only the full text. Sometimes you only want a slice, rather than the whole pie.

-
- -
- -

Multi-sharing from Other Apps

-

Sharing is caring, so we've made it easier than ever to share content from other apps with your friends. You can now tap and hold to select multiple recipients – and even add a comment in case your savage subtweet needs some context.

-
- -
- -

Mark Archive as Read

-

A cluttered chat list reflects a cluttered mind. Clear up those extra unread message counters in your archive by tapping and holding the archive folder and marking them all read. (Not to be confused with marking it red, that's a job for themes.)

-
- Mark all messages as read in the Archive on Android. -
- -

And Other Android Goodies

-

You can сhoose video quality in a more intuitive way when sending videos.

-
- New button for selecting video quality when sending a video. -
- -

Sending contacts now uses a simple, card-style interface that won't take up your whole screen (unless you pull up to expand it).

-
- New contact sharing screen. -
- -

When you're done listening to a voice message with your phone up to your ear, Telegram automatically records a reply - but now you can disable that by turning off Raise to Speak in your Chat Settings.

-

We found 31 other shiny bugs to fix and improvements to make on Android, just in time for your Telegram advent calendar. See if you can find them all.

-

New on iOS

-

Text Size, All the Way

-

You've been able to adjust the size of message text on Telegram from the beginning, but now you can scale the font size throughout the app. I'm not sure if Grandma reads this blog regularly, so you may have to tell her yourself.

-
- Telegram for iOS with enlarged font. -
- -

Choose Your Browser

-

External browsers are now supported for opening links – you can select your preferred app in Settings > Data and Storage > Other.

-
- Browser settings screen. -
- -

Share Sheet Settings

-

Your most popular Telegram chats were recently added to the iOS Share Sheet. In case you'd like to control what can (or can't 😉) appear there, you can use the new toggles under Settings > Data and Storage > Other > Share Sheet.

-
- Share Sheet settings screen. -
- -

Switch Accounts Faster

-

Superman has had a hard time finding phone booths lately, so we added a way to swiftly switch accounts right from your home screen on iOS 13. Simply hold down on the app icon any time you need to change costumes.

-
- App menu on an iOS 13 home screen, featuring a 'Switch Account' button -
- -

Remember that you can use Telegram with multiple accounts, switching between up to 3 phone numbers without logging out.

-

Storage Usage At a Glance

-

The Storage Usage page has been redesigned to more quickly find the settings you're looking for. It also shows your device's storage status, and how much space all those other pesky apps are using compared to Telegram. Bigger, after all, is not always better.

-

You did know that with Telegram there's no need to store every silly meme people ever sent you on your precious device, right?

-
- Storage Usage settings screen. -
- -

Cache-Clearing Shortcuts

-

Selecting multiple messages in a group or channel gives you the option to clear the chat's cache. Like we said, no need to store what you don't need – but also no need to delete actual messages. Just keep things in the cloud, like the cool kids.

-
- Clear Cache button in a channel. -
- -

Check out Settings > Data and Storage > Storage Usage for more options.

-

Member Lists: The Shorter Scrolls

-

In case you're looking to leave some large groups and start fresh in the new decade, long member lists will collapse, so you can get to the 'Leave Group' button without scrolling.

-

By the way, swiping on a group or channel from the chat list and selecting 'Delete' is still the shortest way out, but now there is more than one way to leave the New Year's party early.

-
- Group members screen with a collapsed member list. -
- -

And that's all for today. Happy New Year!

-

2020 is going to be fun. Enjoy winter while we get back to our little warm R&D bunker deep deep underground.

-

- -

December 31, 2019,
The Telegram Team

-

- -
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/video-1000.html b/data/telegram.org/blog/video-1000.html deleted file mode 100644 index 4db839addb..0000000000 --- a/data/telegram.org/blog/video-1000.html +++ /dev/null @@ -1,354 +0,0 @@ - - - - - Video Calls with up to 1000 Viewers, Video Messages 2.0, Video Playback Speed and More - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Video Calls with up to 1000 Viewers, Video Messages 2.0, Video Playback Speed and More

- -
- -
-
- -
- Video Calls with up to 1000 Viewers, Video Messages 2.0, Video Playback Speed and More -
- -

This update takes video to the next level. Group video calls now have up to 1000 viewers, video messages record in higher quality and can be expanded, regular videos may be watched at 0.5 or 2x speed. We've also added screen sharing with sound to all video calls, including 1-on-1 calls — and much more.

-

Group Video Calls 2.0

-

Group video calls allow up to 30 users broadcast video from both their camera and screen – and now 1000 people can watch anything from online lectures to live rap battles.

-

We will keep increasing this limit until all humans on Earth can join one group call and watch us yodel in celebration (coming soon).

-
- -
- -
-

To start a Group Video Call, create a Voice Chat from the info page (in the ⋮ menu on Android) of any group where you are an admin – then turn your video on.

-
-

Video Messages 2.0

-

Video messages are a quick way to check in or share your surroundings without adding another video to your gallery. They now have higher resolution and you can tap on a video message to expand it and take in all those extra pixels.

-
- -
- -

Tapping on an expanded video message pauses it and gives you the opportunity to fast forward or rewind the message in case you missed a word.

-
-

To record a video message, tap the microphone icon in the message bar to switch from voice message recording to video. Press and hold to record, then tap the camera icon to switch back.

-
-

Audio from your device will keep playing as you record so you can now sing along to your favorite songs or reply without pausing your podcast. Additionally, recording with your rear camera lets you pinch to zoom in and capture things at a distance or add a dramatic effect (eerie music not included).

-

Video Playback Speed

-

To power through lecture videos and replay kung fu moves in slow motion, the media player now supports 0.5x, 1.5x and 2x playback speeds. Our Android developer is a fan of hummingbirds, so his app also supports 0.2x speed.

-
- -
- -
-

To change your video playback speed, tap ⋮ on Android or ⋯ on iOS when watching a video in fullscreen.

-
-

On Android, you can also press and hold the 2X button when playing voice or video messages to switch between 0.5x, 1x, 1.5x and 2x playback speed.

-

Timestamp Links

-

Since 2019, putting a timestamp like 0:30 in the captions or replies to videos and YouTube links lets users jump to that exact second – and you can now press and hold on a timestamp in a message to copy the link and share the moment in another chat.

-

Screen Sharing With Sound

-

Screen sharing has been added to 1-on-1 calls as well, and now includes the sound from your device when broadcasting in any video call. So make sure you quit Super Mario before its your turn to present — or don't, and use the game for sound effects.

-
- -
- -

When switching on video during any call, you can swipe to choose a camera or share your screen instead — and use the video preview to make sure that everything is perfect before going live.

- - -
-

To share your screen during a video call, tap the camera button and select your screen as the video source.

-
-

Auto-Delete After 1 Month

-

Messages in any chat can be set to erase themselves after 1 day or 1 week – and now 1 month, in case you need your chats to stick around for a full lunar cycle before disappearing.

-
- Auto-Delete After 1 Month -
- - - -
-

To enable the timer on Android, tap ⋮ > Clear History then choose a duration. On iOS, press and hold a message, tap Select > Clear Chat (top-left) > Enable Auto-Delete.

-
-

Precision Drawing

-

The media editor allows you to illustrate and decorate your photos and videos with drawings, text and stickers. To more easily add fine details (or that perfect mustache and pointy ears), the width of your brush now decreases as you zoom in – giving you the precision of a professional.

-
- -
- -
-

To change the width of your brush at any time, drag the dot up from the color selector.

-
-

The Telegram Desktop app now has its own photo editor to crop, rotate or flip images – and add drawings or stickers. Unique to desktop, your edited versions can be sent as uncompressed files by unchecking the Compress Images box.

-

Passcode Animations

-

New animations make the passcode lock interfaces even snappier than before. If you're using an animated background, it will also appear on the passcode lock screen. The disco never stops.

-
- -
- -

Password Recovery and Reminders

-

We've added a new prompt in Settings to help you practice entering your Two-Step Verification password.

-
- Practice Your 2-Step Verification Password -
- -

If you forgot your password, there is a new password reset option that works even if you don’t have a recovery email — as long as you're still logged into your account. The process will take 7 days and can be cancelled from any of your devices.

-

Message Sending Animations on Android

-

Like emoji and stickers, text messages have new lightweight animations – when you hit Send, your text smoothly transforms into the message bubble as it flies into the chat. iOS users received these energy-efficient animations in the previous update.

-
- -
- -

New In-App Camera on iOS

-

The in-app camera now utilizes all zoom levels on your device – including 0.5x and 2x if available. You can also press and hold to open a zoom wheel that lets you zoom in and out with granular control.

-
- -
- -
-

To use the in-app camera, tap the 📎 icon in the message bar and then tap the camera feed in the attachment menu.

-
-

More for iOS

-

Choose multiple recipients for forwarded messages by tapping 'Select' in the forwarding menu to share your best memes with all your best friends.

-
- Forwarding to multiple recipients -
- -

Scrolling with two fingers in the chat list quickly selects several chats for bulk actions like archive, delete or mark all as read.

- - - - -

Profile pictures now follow the messages as you scroll in group chats so you always know who sent each one, even in long chains of one. word. after. another.

-
- -
- -

New Animated Emoji

-

No Telegram update is complete without new animated emoji. As always, simply send a message with a single emoji to get one of these in a chat:

-
- -
- - -

And that's all for today's update – we're working on the next one at 2X speed.

-

- -

July 30, 2021
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - - diff --git a/data/telegram.org/blog/video-calls.html b/data/telegram.org/blog/video-calls.html deleted file mode 100644 index 77c2d5ee47..0000000000 --- a/data/telegram.org/blog/video-calls.html +++ /dev/null @@ -1,234 +0,0 @@ - - - - - Video Calls and Seven Years of Telegram - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Video Calls and Seven Years of Telegram

- -
-
-
- -
- Video Calls and Seven Years of Telegram -
- -

Today marks seven years of Telegram. In 2013, we began as a small app focused on secure messaging and have since grown into a platform with over 400M users. Telegram is now one of the top 10 most-downloaded apps and is used all over the world to stay in touch with family, collaborate with classmates and coordinate coworkers.

-

We did not reach this milestone on our own – Telegram has never advertised and every user has come to the app because of a recommendation from someone they trust. Strong principles and quality features speak for themselves, and millions of you listened. We've heard you as well, and will continue to develop features that make Telegram much more than just a messaging app. Today we're adding the one you've been asking for – fast and secure video calls.

-

Video Calls

-

2020 highlighted the need for face-to-face communication, and our alpha version of video calls is now available on both Android and iOS. You can start a video call from your contact's profile page, and switch video on or off at any time during voice calls. Like all other video content on Telegram, video calls support picture-in-picture mode, allowing you to scroll through chats and multitask while maintaining eye contact.

-
- -
- -

All video calls are protected with end-to-end encryption. To confirm your connection, compare the four emoji shown on-screen for you and your chat partner – if they match, your call is 100% secured by time-tested encryption also used in Telegram's Secret Chats and Voice Calls. You can find more details on this page.

-
-

Our apps for Android and iOS have reproducible builds, so anyone can verify encryption and confirm that their app uses the exact same open source code that we publish with each update.

-
-

Video calls will receive more features and improvements in future versions, as we work toward launching group video calls in the coming months. But for this midyear milestone, you can now enjoy a little one-on-one time with those closest to you, whether they're in the other room or on another continent.

-

More animated emoji

-

To help you celebrate, we've added another batch of new animated emoji. To get one of these 👇 in a chat, simply send a message with a single emoji.

-
- -
- -

Stay tuned for more updates!

-

- -

August 14, 2020,
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - - diff --git a/data/telegram.org/blog/voice-2-secret-3.html b/data/telegram.org/blog/voice-2-secret-3.html deleted file mode 100644 index b2ac76b048..0000000000 --- a/data/telegram.org/blog/voice-2-secret-3.html +++ /dev/null @@ -1,245 +0,0 @@ - - - - - Voice Messages 2.0, Secret Chats 3.0 and... - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Voice Messages 2.0, Secret Chats 3.0 and...

- -
- -
- -

Voice messages on Telegram just got a completely new interface with waveform visualizations, a brand new player and raise-to-speak functionality.

-

You can now start listening to a long voice message and switch to other media or chats. The message will continue playing in the background. For who are we to defy the god of multi-tasking?

-
- -

New looks for voice messages

-
- -

Recording and listening to voice messages got easier with raise-to-speak and raise-to-listen. When a chat is open, bring your phone to your ear (as if taking a phone call) to listen to new voice messages or record a new one after the signal.

-
- -

Raise to Speak: Preview before sending

-
- -

This feature involves plenty of behind-the-scene magic with proximity sensors, gyroscopes and accelerometers. It works well with most modern devices, but is still experimental. Some phones may require arcane intervention from our devs.

-

Secret Chats 3.0

-

With their self-destruct timers and end-to-end encryption, secret chats are a great way to pass sensitive information. Today we’re bringing the best features from cloud chats over to secret chats: detailed link previews, replies, photo and video captions, sticker sharing, inline bots and GIFs. We’ve also improved key visualizations to make secret chats immune to potential alien invasions.

-
- -

A Secret Chat full of new goodies

-
- -

…and…

-

Privacy. When overly active friends start adding you to random groups or channels, it gets overwhelming quickly. Now you can decide who may add you to groups and channels with granular precision. E.g. “All my contacts. Except those two.”

-

Supergroups. Supergroup creators also get more control. They can now change who may add new members to their group: all existing members or only selected admins. Supergroups can have up to 1000 members, and finding a balance between order and chaos is important if you want them to grow.

-

Sharing extension. Sharing on iOS devices has become way smoother. You can now share any photo, video, audio, document or location to any Telegram chat or channel straight from default iOS apps like Contacts, Maps, Voice Memos and Photos. It is also possible to share stuff to several chats or channels at once.

-

Attachment Menu. Media files will zoom beautifully when you select them in the attachment menu. Note that we’ve moved ‘Image Search’ to the ’Photo or Video’ section (tap the magnifying glass icon in the top right corner).

-

Hotkeys. iPad users with external keyboards get hotkey support. Now you can navigate chats and send messages without ever touching your iPad’s screen. Saves a lot of time.

-

Photo Editor. In the Android corner, we’re introducing additional photo-editing tools – rotate, fade, tint and curves.

-
-
- -

Photo editor

-
-
- -

Curves tool

-
-
- -

We’re not done with updates this month – more features and good news are coming very soon to a Telegram Messenger near you.

-

- - -

February 12, 2016
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/blog/voice-chats.html b/data/telegram.org/blog/voice-chats.html deleted file mode 100644 index 5d9884d39a..0000000000 --- a/data/telegram.org/blog/voice-chats.html +++ /dev/null @@ -1,311 +0,0 @@ - - - - - Voice Chats Done Right - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Voice Chats Done Right

- -
-
-
- -
- Voice Chats Done Right -
- -

Since 2013, we've been expanding the definition of Group Chats, adding features like replies, mentions, polls, admin tools, statistics – and allowing hundreds of thousands of members per group. Many of these features were later incorporated into other apps and redefined how people communicate.

-

Today, Telegram groups get an entire new dimension with Voice Chats – persistent conference calls that members can join and leave as they please. Our 12th update in 2020 brings them to you just in time for remote Christmas carols.

-
-

UPD March 2021: Don't miss Voice Chats 2.0: Channels, Millions of Listeners, Recorded Chats, Admin Tools

-
-

Voice Chats

-

Any Telegram group can now become a voice chat room that is always on. Voice Chats run in parallel to existing text and media-based communication, adding a live layer of ephemeral talk to the group. They can be used as virtual office spaces for teams or informal lounges for any community.

-

While Voice Chats are not group calls, they can achieve similar goals – at the same time offering flexibility instead of old school scheduling. In larger groups, they also provide serendipitous opportunities for talking to people.

-
- -
- -

Groups with active voice chats have a special bar at the top that shows who is talking at the moment (and even how loud they are). This can help you pick the right moment to join – like noticing your friends going over to the cooler.

-
- -
- -

After joining a voice chat, you are free to move around the app, browse conversations and send messages. You stay connected to the chat and the microphone controls remain on screen so that you can quickly mute and unmute yourself at any time.

-

If you're on Android, you can enjoy the full Voice Chat experience with a system-wide floating widget that shows your mic controls and who is currently talking, even when Telegram is in the background. Santa is on Android too – and he needs his sleigh navigator open at all times.

-
- -
- -

You can chat with whomever is online or invite more people via the handy menu. Voice Chats can accommodate a few thousand participants, which means they'll work for everything from consulting family members while out shopping to a massive live event.

-

Last but not least, Voice Chats show spectacular animations. To get these right, our designer had to sell his soul to the devil – and we think it was totally worth it.

-
-

To create a Voice Chat and find your own unique way of using them, open the profile of any group where you're an admin, tap (⋯) or (⋮) and select Start Voice Chat.

-
-

Like Telegram groups before them, we hope that Voice Chats will change the way people collaborate and keep in touch. In the coming weeks, we'll be refining them further, listening to your feedback, improving noise suppression, and adding more features like video and screen sharing.

-

Push-to-Talk Shortcuts

-

On Telegram Desktop and in the native macOS app, you can choose a push-to-talk key for Voice Chats, to control your mic even when Telegram is not focused. At long last, we've found a use for your Caps Lock key.

-
- -
- -

Sticker Outlines

-

Animated stickers on Telegram are optimized for efficiency and deliver smooth 180 frame animations with infinite resolution in less than 50 KB.

-

With today's update, stickers will load even faster than before – and show a shimmering outline of what you're about to see. Be careful not to blink though, or you'll miss it.

-
- -
- -

SD Card Storage on Android

-

Users on Android devices can now move their Telegram app data from internal storage to their SD card, allowing those with minimal storage to save more media and files and maximize their Telegram experience.

-
- Storage Usage settings -
- -
-

Remember that you can always keep Telegram's storage footprint on your device incredibly small. See Settings > Data and Storage > Storage Usage.

-
-

New Animations on Android

-

We've added slick new animations throughout the Android app – when tapping the New Message button, opening profiles, managing chat folders and anywhere you see message counters.

-
- -
- -

Announce Messages on iOS

-

If you're still on iOS, you can have Siri read incoming messages aloud in your headphones. Open iOS Settings > Notifications > Announce Messages and set Telegram to ON to stay up to date on your chats even while washing the dishes.

-

Editing Improvements

-

Android users can now quickly edit a photo which they've already sent to add effects, drawings or stickers with our powerful media editor. iOS users can tap the pen button to quickly edit and send back a photo they have received.

-

Each of these features was previously available only on one of the platforms, but now both iOS and Android offer equal opportunities for drawing moustaches on selfies.

-
- Editing Improvements on iOS and Android -
- -

When editing a message or caption, as you approach the maximum message length, a counter will appear showing how many remaining characters you have lef

-

More Animated Emoji

-

No update is complete without even more animated emoji. As usual, simply send a message with a single emoji to get one of these 👇 in a chat.

-
- -
- -

There's a story in there somewhere about a cyber cowboy solving a murder mystery.

-

Feature Suggestion Platform

-

Many Telegram features started out as user suggestions. To help identify potential new features and locate bugs within the app, we're launching a public Bug and Suggestion Platform.

- - -

We'll be rolling out the ability to suggest new features and report bugs gradually to make sure each submission gets the attention it deserves. All Telegram users are already welcome to view existing entries and vote on them.

-

And that's all for today, we'll see you in 2021 or once we're done building the next big thing – whichever comes first.

-

- -

December 23, 2020
The Telegram Team

-

- -
-

P.S. The end of the year is normally a time to look back at the past 12 months. Instead, our founder Pavel Durov has just announced his strategy for making Telegram sustainable, to continue providing you with great features for decades to come.

-
-
- -
- - -
- - -
-
-
- - - - - - - - diff --git a/data/telegram.org/blog/winter-contest-ends.html b/data/telegram.org/blog/winter-contest-ends.html deleted file mode 100644 index b9cbc5c4cd..0000000000 --- a/data/telegram.org/blog/winter-contest-ends.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - - Winter Contest Ends - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- -
-
-

Winter Contest Ends

- -
- -
- -

The contest to decrypt intercepted traffic of Telegram produced no winners as of March, 1. As promised, today we are publishing the encryption keys necessary to decrypt the traffic.

-
SECRET CHAT:
-2e 20 9f 9d 99 c9 fc 8a 3d dc d5 6d 21 26 46 c9 d8 1a 26 f8 ec f7 f2 7e c9 28 65 95 52 dc 1c 21 bb 95 60 b1 d8 5f 94 5f 43 8d 7e 8e 96 fa e6 89 91 a9 90 39 8b df ef 50 22 06 f8 52 80 e6 50 20 62 71 c4 b2 f5 f8 88 4d 83 ae 66 ec fe cd ec 92 26 69 72 5e 85 f9 ea 58 b0 d6 9f 5b 1e b7 68 15 76 5b 12 88 3d 17 f6 62 49 8b 1f 9d 7a 11 94 67 8d d1 ee d6 55 50 d4 51 c0 5e a5 9a 1a eb 8a 8c 7c 44 1b db 96 5a fd cd 85 47 5b f0 8a 1e b8 d6 74 a4 c7 e7 af 19 3f a6 0a ff e5 3b 9f c4 fc ea 59 af f6 72 60 16 6f 40 af 58 95 98 06 0c 22 00 d7 3d be 96 19 56 54 06 74 d2 6b 38 8d c2 a0 97 62 6d e4 10 99 b9 cf d5 0f 56 9d d3 bb 49 86 d5 15 23 86 03 c3 52 67 82 77 5e 53 e9 ba e8 63 58 ed 55 b0 ef ec 69 65 a0 e5 1d e4 b6 6e 5a 3d 5f 9b 9a 20 67 f5 d5 c4 d7 60 14 c6 56 2d 12 1b 0a
-
-DC 1:
-5e a6 0d a2 9c 90 8e f4 36 d5 48 fe 76 a3 11 f6 66 13 4e 94 bb 11 32 d6 cf fd b0 2f 7b 77 bb 01 d7 42 a4 22 d3 04 e7 d2 fc 5b 32 48 d6 71 eb 18 51 19 99 76 49 46 1a 43 d8 cf cd 8a e2 fe 42 2c 36 d7 05 8b 0c 5e 00 8a 5a bc 35 4f ec 75 b4 10 e1 84 bb cb af ec e3 d6 fd 59 fd 01 83 ef 8b dd 13 50 24 5b 80 09 75 7e c3 c3 08 ba 59 f4 ec c0 87 71 ba 9f 45 8c 15 df 2a cd a5 bc 81 a9 20 fe 42 e2 65 78 02 77 80 11 0e e4 67 f3 40 cf 72 be fc c2 8d 0b ad d9 9e 6e 1a c3 03 71 39 be b9 dd df 7c 63 a6 27 45 ee 8e 00 5e 12 51 51 6c 6a 10 a6 73 3a 10 5d d8 f3 b6 c5 70 fe 91 c2 64 4b d0 74 2d 47 e7 4e 00 cf d5 d3 65 15 2b 48 9c 75 eb a8 96 aa ce 09 49 9b 5e ea 76 06 19 f3 b3 e7 7b af df 5d 68 5e 80 10 48 ec 00 35 90 d3 e5 96 c6 59 a7 44 d8 20 a8 a2 b6 93 64 4f 98 44 23 8e fd
-
-DC 2:
-63 ab 0d b7 98 e1 78 ef 5f 05 9c e4 84 3b 53 b3 4f 6e d1 d3 8a 6d 59 19 32 26 73 60 c2 e2 fe ee d3 2d 74 35 18 08 ba 04 87 cf 7f d9 87 4b 64 d5 80 06 05 f5 01 56 6d c2 66 7e 2d ef f6 a3 82 3d 31 0e ed 6b 46 4c 11 d5 ec 0f 7b be 64 79 26 87 a9 d3 34 27 d8 8b aa b5 36 8b 95 2f a7 c7 2a a6 bf a9 44 51 c5 c8 06 04 78 d2 64 87 e8 13 f3 f0 9b c9 8c bc 29 01 55 a2 80 e1 e8 4e 74 53 7e 05 22 1b 51 3d 1a c5 61 b3 04 98 c2 2f 71 e3 76 2e 31 bd d8 55 15 4b 3e 34 ed 84 b2 56 d0 bd c6 9a 1a 2a 4b 2f fc 68 8e c4 e3 81 23 6f 07 3f 3a 6b 56 f6 ee 31 e6 aa 0d 49 36 6a 51 79 25 bf b6 40 64 8c e2 14 c8 70 37 cb 70 ad a1 83 ed 1f b9 78 b9 93 0c 7c 0c ed 6d c6 aa c2 d0 da 51 ce ae cf 99 8f 65 eb 5a 42 e6 ff 4a 51 a9 97 da 6e ac e5 63 c1 05 a9 fe d0 da da 43 e3 50 14 fc b1 46 ea
-
-DC 3:
-16 0c be 58 e1 74 74 f5 f9 8f f8 82 71 ed 57 84 20 49 bd da 17 0e 00 a8 a4 24 71 79 86 1f ef 3e 41 70 31 de c9 c2 19 23 37 fd ec 2f fa 9e 89 29 4f a2 af 69 cf 24 3a 6e 44 5d 89 d2 8b 50 45 26 3c ff e3 d4 4d 7d b4 88 54 8c 87 09 c5 ac 09 5c e6 62 43 73 b5 3e 96 ea f3 62 76 58 1b fd 8a 36 45 65 4a fc 7b ee 7b 13 06 e5 2f 9d 8f cb b9 a7 6f 76 00 f4 9a ab 50 fb 91 e0 2b ce 28 db 95 02 a0 62 33 bb e7 41 13 7b 2c 7e ba 7c d5 87 12 33 de 44 8d 4b 76 af 59 cc 80 42 02 69 56 90 8a 5d 95 0b 3e 8b ef 65 17 fc 79 62 b4 69 1b 21 aa 89 5b 22 f6 33 67 80 d0 22 f7 76 f2 6c 4b af 69 07 0f 2c 3a af 67 6b 74 c0 7f 8c 83 85 85 8e 47 b7 55 42 c1 3d 70 33 9d 87 60 7c f6 8b 99 96 1d af 82 b8 d2 37 c7 a3 fc ac 25 fe 77 f0 29 4d 82 a4 15 89 cb c2 27 ae 4f 16 d6 b8 4c cb de 2a 59 d7
-
-DC 4:
-b4 aa dc bc 8e e5 6a f4 9f 7b 65 de cd 1c 28 3d f1 58 f6 03 e1 34 9d 63 54 b0 15 a7 b8 a6 45 4e de dd cd e4 1a 54 d7 9b fe 46 05 c7 62 19 d9 7a c0 00 6b e6 72 83 3d 15 00 99 d9 9b 97 c0 4a a8 85 e7 85 3c 3f a4 2f 6a 57 0b 3c b0 2a 97 65 6f bf 4e 0d 93 f7 55 3b 3a 39 a1 1a 0f db 9d 7a df 5b c6 9b 45 9a ea e4 27 92 8c c3 d2 75 53 66 e4 1c 29 f1 14 fc fd e8 c0 c8 12 47 ee 5a 92 f1 bf 1f 6f 8e 95 a5 90 81 37 d6 5d bd 5c 4c 41 61 29 6e 4f 7e 83 e1 b9 ef 00 00 de 25 33 f4 df 1a 94 f0 e7 1c fd 35 c0 75 65 88 ef c5 aa b5 c9 7d 0e e4 6d b7 9f 10 ca 4b f0 c9 c7 2d 30 20 e9 e1 b8 03 de a2 60 4e 3f 59 dc 36 a2 50 f8 52 5e 32 c8 c1 84 87 84 d6 54 42 dd ab b4 1b d6 fe e4 29 d3 70 4e 3e 48 ba 86 80 39 b7 94 3c 31 18 f8 bd 7b d8 89 6b 32 77 5c 89 4a a1 ca 18 ba 1e 6a 87 6a
-
-DC 5:
-4c 76 1f 87 08 53 54 cb 12 fd 01 bd bd e6 42 d2 6b 47 4b d8 0b 6a eb 9f 24 8b ee 77 1f 8b a5 3f f5 f1 c7 80 05 80 2c 20 29 7c 3c 14 59 2b 5e 7f 69 58 3b 7e 07 37 25 67 3d 18 ac f2 28 43 63 8f a5 41 c1 ba 53 dd eb 3d 36 0d 7b d3 14 f7 f9 83 aa 0c 81 20 89 e0 c7 d7 e9 ef 11 aa 43 ca 54 2a 9f 69 0f 1d 99 ef f6 55 14 71 6d a3 1e c2 75 fb 1c 88 f7 c0 21 64 5d 34 db 3f a4 e7 a9 f0 af 9f 9d 14 a4 3a 49 7c 50 e6 45 24 3a cb a4 a6 2a 35 dd 6c 9c ce 87 24 d1 ff 13 19 15 43 89 a4 8c 39 66 a2 22 df 4e 94 76 e1 89 b5 03 7a 2b 34 e7 39 09 f9 22 5d cb 36 4e ce 37 e7 cf 7d ab b5 8b db 81 c6 c8 f4 c7 7c 3a 22 59 fc e6 32 19 aa 46 d2 95 96 61 61 e6 cc 57 f0 0e 87 5c 7d 5b 87 e7 64 28 c6 03 38 3c 0b a6 5e 4a 21 a3 67 af e5 b3 88 cc 9d 03 98 33 ac c6 87 b4 b6 82 42 c4 41 33 39
-


- -

We would like to use this opportunity to thank the users ABC, @DefuseSec, @hackappcom, @Morj and x7mz who helped us further improve security of the client apps and expand guidelines for third-party developers.

-

Since we have no winner in the current challenge, we are going to launch a new competition, with an easier task, but a larger prize. The new competition will allow participants not only to intercept traffic, but to manipulate it as well. We are now building the tools that will enable the contestants to perform all kinds of active attacks. Once the platform is ready later this month, we will announce the new contest on Twitter. Please follow us at @telegram!

-

March 2, 2014
The Telegram Team

-
- -
- - -
- - -
-
-
- - - - - - - diff --git a/data/telegram.org/verify.html b/data/telegram.org/verify.html deleted file mode 100644 index bbad161620..0000000000 --- a/data/telegram.org/verify.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - Page Verification Guidelines - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
-
-
-

Page Verification Guidelines

- -
- Verification -
- -

The Telegram team generally verifies active official channels, bots or public groups that have verified accounts on at least two of these services:

-
    -
  1. TikTok
  2. -
  3. Instagram
  4. -
  5. Facebook
  6. -
  7. YouTube
  8. -
  9. Twitter
  10. -
  11. VK
  12. -
  13. Snapchat
  14. -
-

Please add a link to your Telegram channel to your profiles on these services — so that we can confirm that they indeed belong to you. Once this is done, please contact our @VerifyBot for verification.

-

What if I don't have a verified account on two of these services?

-

If you have an undisputed page on Wikipedia, that satisfies Wikipedia's Notability Guidelines – and that page lists a link to your channel, bot or public group on Telegram – it can be counted as one of the missing verified accounts.

-

In the case of organizations, a link to the Telegram channel from the official website of the organization may also be taken into account. The bot will offer to submit additional data and comments after checking the social media links.

-
-

If you're using a Wikipedia or Official Website link instead of one of the social media accounts, please make sure that they include a link to the channel, group or bot you want to verify on Telegram.

-
-

Can my user account be verified?

-

Sorry, Telegram doesn’t verify user accounts at the moment. Verification is only available for big and active official channels, groups and bots.

-

Do I need verification?

-

Note that verification doesn't give any additional abilities in Telegram - it is simply one of the ways to demonstrate that your channel, group or bot is official. A link to Telegram on your official site or other official accounts elsewhere can achieve a similar result.

-

How do I change the name or short link after verification?

-

A verified channel, group or bot can't change its name or short link (t.me/…). If changes are necessary, you can remove verification status first. Contact @VerifyBot and send /unverify. You can then reobtain verification using the bot.

-
- -
-
- -
-
-
- - - - - - - diff --git a/data/tsf.telegram.org/manuals/answering_questions.html b/data/tsf.telegram.org/manuals/answering_questions.html deleted file mode 100644 index 08a0159429..0000000000 --- a/data/tsf.telegram.org/manuals/answering_questions.html +++ /dev/null @@ -1,265 +0,0 @@ - - - - - Telegram Support Force - - - - - - - - - - - - - - - - - - - - -
- -
-
-
-
- -
-
-
-
- -
-
- -

Answering Questions

- -

We answer questions. This document holds general ideas on how to handle them.
This was intended for volunteers of the Telegram Support Force, but anyone else is free to take a look as well.

-

General

-
    -
  1. Our goal is to bring human support to human beings. To achieve this goal, we rely on volunteers. Your pay is perfection in what you do, so be cool.

    -
  2. -
  3. Corporate support standards do not apply here. Treat people in a kind, personal, informal manner. No need to pretend to be something you are not (unless you're a dog in disguise — keep human appearances in this case).

    -
  4. -
  5. Never lie to people.

    -
  6. -
  7. Check everything before you reply. Things change or may no longer work the way you remember. This includes interface details, links (!) and, well, everything.

    -
  8. -
  9. Support is a form of Art, so be fun and creative.

    -
  10. -
-

The result

-

As support volunteers, we need to provide a solution for the user. Remember, that this doesn't always have to be the solution the user was asking for. So first, we want to understand the problem that drove them to ask the question. And then find a way of solving — completely or partially — that problem.

-

For example, some users ask us for an option to send sketches or drawings to their friends. While this is not possible directly, one could take a photo with their thumb on the camera (to get a black picture), then use the drawing tools built into the photo editor to make their doodle.

-

This isn‘t what the user was looking for, but it solves the problem — and it is even more flexible and customizable than the original idea (since you could also add stickers and emoji out of the box). Some solutions are less elegant. For example, right now you can’t email your Telegram conversations. While there is much less need to do so, since you can access everything in the cloud from any of your devices, this may be a problem in some cases. What one could do then, is open the conversation in Telegram Web (or any other desktop client), select multiple messages with the mouse, then copy and paste them into a text document. Any solution is better than no solution at all.

-

There will be cases, when it is not possible to solve the problem at all. As a user in this situation, I want that people on the other end of the line understand me and care about the whole thing. Therefore, two things become important:

-
    -
  • Make it clear that you understand the issue. ‘No, you can’t do that‘ is not a good answer. ’No, I‘m afraid it is not possible to make Telegram wash your dishes in a fast and securely encrypted way’ — is better.
  • -
  • Be gentle. Gentle doesn‘t mean soft — if we really can’t do something, it means just that — we can‘t. But adding ’Sorry about that' helps a lot.
  • -
-

Lastly, whatever the outcome, I always look for help from a human being, not a dumb interface. When you're casual and witty, the user feels more at ease. On the other hand, human beings, as opposed to dumb interfaces, usually understand what is appropriate in which situation. For example, when a user is in distress, he most likely needs help first — and jokes can wait until the crisis has been dealt with.

-
-

To sum up, we need to be: smart (to identify the problem and find an approach to the user), inventive (to find a solution, not always the obvious one), compassionate (in case there is no immediate solution) — and witty (otherwise it gets boring). I'm sure we are.

-

What if I don't know the answer

-

Happens to all. Don't worry, you can always find one. The TSF BIOS will tell you what to do in most situations. In case it doesn‘t or you’re not sure, ask your fellow volunteers in the group — they should know. If worst comes to worst, consult Markus.

-

Admitting you don't know something is infinitely better than trying to cover it up. So when cornered use this mantra: ‘I’m afraid I don‘t know this. Will ask my teammates and get back to you’. Just make sure that the question is not in the FAQs before you say this.

-

Handling user suggestions

-

The three rules for requests and suggestions are: don‘t lie, don’t promise anything, and don't give an exact timeframe.

-
    -
  • The internal Suggestions board on Trello has a list of most frequently suggested features together with estimations on how likely, when and why they will be introduced.
  • -
  • For insights into the decision making process, check our Feature Philosophy.
  • -
-

Plans change frequently, so it‘s best if we only talk about things that exist. Never say that something will be done. ’We may do this‘, ’we will definitely add this at some point in the future‘ or ’this is coming soon' — is as far as we can go.

-

Same applies to the negative: never say we will never do something (except steal users‘ spouses and enslave their children, as mentioned in the general FAQ). The worst thing that can happen is ’we are currently not working on this‘, ’we may consider this', etc.

-

Even if you know something is happening tomorrow, say ‘in the next few days’. People love it when they get things earlier than they expected — and get downright angry if we get 5 minutes (or a few months) late.

-

Reporting bugs in Telegram

-

Every now and then you will get actual bug-reports. We have an internal board on trello, so you will be able to search all known issues and get the relevant info.

-
    -
  • The Handling Bugs manual covers all you need to know about bug reporting in Telegram.
  • -
  • The internal Issues board on Trello lists all known issues.
  • -
-

If you are not part of the team and are looking for advanced troubleshooting tips, you may find the Troubleshooting section interesting.

-

Chatting

-

Truth is, most users come to simply say ‘hello’. Hello them back if you have the time. Sometimes these users do have a question after all. In other cases they may be new to Telegram, without many friends to chat with or show them around. So you can tell them more about Telegram, point to interesting features — or even other Telegram apps. No need to advertise, just explain what needs explaining.

-

Remember: we’re here to help those we can help and talk to others that we feel we have the time to talk to, but not more. If kids get too insistent without any real needs, it’s ok to ignore them after a few replies. If somebody seems to be a nice conversation partner, it’s always a good idea to discuss Telegram, see what the user thinks is missing. Maybe tell them about our Support Initiative.

-

Real-life problems

-

Unfortunately, we cannot really help people with real-life problems. A few kind words wouldn‘t hurt, but generally we should send those users to places where they can get actual help, like a crisis line or chat. (Now, if you want to be a member of the TSF and read this far, go send a picture of a kangaroo to the auditions account. No, this is not a joke. It is a test that helps us understand whether or not you actually read this. And don’t tell others. If you're already a member, you know what to do: humpa viceroy squid)

-

Insults

-

Yep, everyone gets their share of those. First of all, remember that these people are not really talking to you. They just see an abstract ‘Telegram’ entity. My advice is to humor them — I usually send a ‘well, that escalated quickly’ picture and it helps many users. Joke around with them and you’ll be surprised how that can humble people. And never insult back, even if they manage to get you angry for some reason. Nonviolent irony is always your best — and only — weapon.

-
-
Other TSF documents:
-

-
- -
-
-
-
- - - - - - - - - - - - - - - - - diff --git a/data/tsf.telegram.org/manuals/bios.html b/data/tsf.telegram.org/manuals/bios.html deleted file mode 100644 index 0dd0856f36..0000000000 --- a/data/tsf.telegram.org/manuals/bios.html +++ /dev/null @@ -1,331 +0,0 @@ - - - - - Telegram Support Force - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
-
- -
-
-
-
- -
-
- -

TSF BIOS

- -
- -
-

This page will help you navigate our docs and interfaces in any situation.
It will only be of interest to TSF members. Here's how you become one.

-
-

1. Getting started

-

Answering Questions is our constitution. Come back to it anytime you're in doubt.

-
    -
  1. Our creed and goals
  2. -
  3. I don't know the answer
  4. -
  5. User wants to chat
  6. -
  7. User has real life problems
  8. -
  9. User is insulting me
  10. -
-

The TSupport client is your rifle.
Learn all its features, and use an up to date template file.

-

1a. Asking teammates for help

-

Never hesitate to ask for help in your local TSF group. But remember: Not everyone in your group uses the same support account and speaks the same languages as you. When you want to ask something:

-
    -
  1. Write a summary of the user's question in one message (don't copy-paste, be brief)
  2. -
  3. Always use English (there are team members in your group who don't speak your language)
  4. -
  5. Always include the entire footer from the question (all hashtags)
  6. -
-

1b. Coming back from the dead

-

If you notice that you haven't answered any questions lately, go read the Coming and Going manual.

-

2. Tracing your progress

-

You can check our TSF Panel to see your stats and how you compare against other TSF members. You can also add a little TSF Bio in the panel, so that others know more about you, what you like, what you do, what devices you have and what languages you can speak.

-

3. Basic questions

-

You should be able to handle these easily. Here's where you find information:

-
    -
  1. FAQ
  2. -
  3. Tips & Tricks Trello
  4. -
  5. App comparison table
  6. -
  7. Screenshots (wiki)
  8. -
  9. Answer templates (wiki)
  10. -
  11. Articles about Telegram in the media
  12. -
-

Whenever you learn something that was not in the docs,
make sure that this new info finds its way into the docs!

-

4. Bug reports

-

Search our trello boards before you do anything. In most cases, you will find all the info right away. Ask in your local group if anything is not clear. Use the bug report groups if you need to test things on devices you don't have.

-
    -
  1. Reporting bugs from Answering Questions
  2. -
  3. Bug Handling Manual
  4. -
  5. Investigating Bugs
  6. -
  7. Issues disambiguation board on Trello
  8. -
-

5. User suggestions

-

Search trello boards first. It could be a bug, a feature or a known suggestion. Discuss in local groups if new suggestions need to be added, then add the suggestion to the board. Don't do this if you're not sure. And remember that not all suggestions need to be added to the board. Use common sense and the feature philosophy.

-
    -
  1. Handling user suggestions from Answering Questions
  2. -
  3. Feature philosophy
  4. -
  5. Suggestions Trello board (about)
  6. -
-
-

Read the About section of the Suggestions Board before you add anything.

-
-

6. Projects and suggestions for the TSF

-

The Telegram Support Force is full of brilliant and creative people, and there are many more useful things that can be done besides answering questions. If you're interested in doing more, check out the TSF Projects board where you'll find a list of currently active projects initiated by our TSF members. Find one to your liking or just sign up to be notified when something that requires your skills is going on.

-

The list of projects is not very long for now, but we're working on adding more. If you have an idea for a project, see this card.

-

If you have other suggestions and ideas for the general workings of the TSF, our templates, and interfaces, don't hesitate to contact Markus about it. Oh, and: Rude frescoes. If you have no idea what this last thing was about, read on to the end of this document.

-
-

WARNING: If you've just joined the TSF and are still figuring out what's going on, we'd suggest not to get too involved with things like side projects. It's a better idea to first get comfortable with answering user questions before you spread out.

-
-

7. Security questions

-

Stick to the FAQ in case of ordinary users. Always consult Markus (unless the matter is fully covered in the Bestiary). If Markus is not available at the moment, ask in your local group. Don't be afraid to tell an advanced user that you are not a specialist — you don't have to be.

-
    -
  1. Ask users for the source of their doubts, most likely you'll get a link
  2. -
  3. The Features & Tricks board has a Bestiary section, look there for known articles
  4. -
  5. Advanced FAQ
  6. -
  7. Advanced concerns and questions should be mailed to security@telegram.org
  8. -
-

To use trello search for links, remove the http(s):// part. E.g.:

-
- -
- -

Trello search is not perfect for links even this way, so may be a good idea to take a personal look at the Bestiary if the search doesn't return anything. New links for problems that are covered in the Bestiary should be added to the relevant cards.

-

8. New language requests

-

Anyone can use the Translation platform to suggest improvements to our current translations — or create their own custom language packs and translate Telegram into any language.

-
    -
  1. Translations instructions in the FAQ
  2. -
  3. Translations section
  4. -
-

9. Join support force requests

-

Don't give our manifesto to just anybody. Try to see if the user is reasonable. If not, you can tell them that finding how to join us is the first test.

-

10. Media requests

-

Explain that you're a volunteer and can't handle press requests, but they can submit a request to @PressBot.

-

Never promise anything. Be extra careful when handling any questions from journalists. If it's something related to simple Telegram features, reply – but make sure they understand that you've volunteered to help users in support and are not a spokesperson for Telegram.

-

If it's anything more complicated, e.g.:

-
    -
  • Touches on any sensitive subjects like encryption, privacy, moderation, etc. in any way
  • -
  • Contains a list of questions
  • -
-

=> Simply direct to @PressBot.

-

11. Legal stuff

-

You as our volunteers are not trained in legal matters, so it's safer to do nothing at all, should you encounter any kind of legal requests. Lawyers know how to reach us. So simply ignore those messages, do not open, do not reply, do not worry. We'll handle everything.

-

12. Secret words

-

By the way, when reading our manuals, you will sometimes notice words that are definitely out of place. For example, a text may at some point say something like Bionic sycophants out of the blue – only in real life the strange words won't be highlighted in italics. If you find such words in our manuals, talk to @Gladosbot and send her the /sendsecret command (without parameters). The bot will ask you for the secret words you've found and respond if you've entered them correctly.

-

Try this now with the secret words you've just found in the paragraph above – and keep your eyes opened for more of them in other documents. Please don't neglect this! Secret words help us understand whether or not you are up to date on our docs in a friendly way.

-

13. Spam-related requests

-

Some users will complain that they were unfairly limited to only sending messages to their mutual contacts. We at the TSF do not have the tools to handle such requests, but our friendly @spambot is always ready to help them – and it speaks many different languages, including those that we don't. Feel free to send the spambot template to such users. If they keep insisting that you do something about their situation, it is OK to ignore them.

-

Some users will have you believe that somebody reported them 'for fun' or 'by mistake', but the reality is usually very different. We have a dedicated team of moderators that process every report aided by sophisticated algorithms, so it is not easy to get limited by mistake. Naturally, both humans and algorithms can err, but the @spambot has all the tools necessary for filing an appeal.

-

And remember: the vast, absolute majority of Telegram users never get reported at all, most reports are declined, and most of the people that do get limited never even notice it. They can talk to anyone they've talked to before, they can reply to any messages other people send them, and the initial limitation lasts for only a short period of time. Most likely, you wouldn't notice if we limited your account for a week or even a month.

-

Learn more about our antispam systems on Trello »

-

14. Abuse requests

-

The Telegram Support Force is an organization of volunteers that exists to help Telegram users find their way around the apps; you, our volunteers, are not qualified to solve cases involving illegal content — and neither am I (Markus). It is not an issue of trust, rather consider this:

-
    -
  1. We would like our volunteers to be safe from possible legal consequences in case of misunderstandings and incorrectly handled cases.
  2. -
  3. Exposure to certain materials can result in life-long mental scarring, so we want to leave this to professionals that choose to handle such materials for a living.
  4. -
-

For these good reasons the Telegram abuse department is completely separate from the TSF and is staffed by professionals and not volunteers. It is their job to deal with any public content and abuse-related disputes. Please tell users to write to abuse@telegram.org and include all the details and links — or use the built-in report buttons in our apps.

-
-

Please note: spam@telegram.org is NOT used for complaints about spam. More info

-
-

15. Stick to the BIOS

-

This is where you go whenever you're not sure of what to do next. If you don't find your answer in the BIOS, tell Markus about it. It's important to keep this document up to date.

-
-

TSF manuals

-

-
- -
-
-
-
- - - - - - - - - - - - - - - - - diff --git a/data/tsf.telegram.org/manuals/bug_hunting.html b/data/tsf.telegram.org/manuals/bug_hunting.html deleted file mode 100644 index b548c26a6d..0000000000 --- a/data/tsf.telegram.org/manuals/bug_hunting.html +++ /dev/null @@ -1,270 +0,0 @@ - - - - - Telegram Support Force - - - - - - - - - - - - - - - - - - - - -
- -
-
-
-
- -
-
-
-
- -
-
- -

Bug Hunting Algorithm

- -
- -
-

You already know how to handle bugs in general and what to do with them once they're identified. But how exactly do you investigate a problem and what questions should you ask? Here's an easy algorithm for you.

-
-

0. Reproduce it!

-

Before we even start investigating, we should try to cut out the middleman (in this case, the user). You‘ll save a lot of time if you can reproduce the issue yourself. Then you simply need to investigate the bug, alert your group, log it to Trello if necessary, then present the user with a solution, workaround, or a report that the devs know about the issue and will do something eventually. If you don’t have the necessary devices, try asking in your local group or the Chat.

-

So investigate the bug with the help of the user only if you can‘t reproduce the issue, or don’t understand what steps are necessary to reproduce it, or if the TSF lacks the necessary devices. Otherwise, do it yourself.

-

1. Find out what's wrong

-

We need to figure out why things are not working the way they are supposed to. A million things can go wrong in a computer program. Each one of our apps consists of many thousand lines of code, and we need to tell our developers where to look. Turns out, the easiest way of finding out is by confirming where NOT to look.

-

We want to make the problem smaller and the questions we ask ourselves or the user must eliminate possibilities. As soon as we‘ve removed enough options, we’ll have a pretty good idea of what‘s going on. Remember the game where you need to guess a person’s name that is written on a card stuck to your forehead by asking yes / no questions? Goes like that:

-
-

Is this a real person? No. Is it a comic book character? Yes. Is it a girl? No. Did he appear in a new movie recently? Yes. Does he have cancer? Yes. Deadpool! Right.

-
-

With each step, we eliminate a million wrong answers and get closer and closer to the right one. We can apply the same treatment to bugs. The task then becomes to find the questions that give us the most information and are easiest to answer.

-

But what info do we need?

-

1.1. Locate the responsible party

-

Above all, we need to know which developer is responsible for the bug – in some cases, a bug may not even have to do with Telegram at all. And if it does, the right developer will possibly know what to do and what else to ask. That is, if we can convince him that it's his bug. So, depending on the issue, we may start with one of these questions:

-
    -
  • Does this only happen in one app? Try [insert a different (official) Telegram client].
    This is relatively easy to check and an answer gives us a lot of information. If the issue is not present in other apps, we can assume that it may be platform-specific and that it's unlikely (although still faintly possible) to be a server-side thing. If the issue does reproduce in apps on other OSs‘, it’s likely to be server-related. Only after this question is answered will you truly know the responsible developer. Note: Please only use official clients for this check. Doesn't help us at all if we check whether stuff works in Telegram forks or not.

    -
  • -
  • Does this only happen in Telegram? Try [insert a different standard app that can do the same thing].
    Some issues, especially when they are related to standard components (e.g., keyboard, input field), may be system-wide. If the same glitches reproduce in other apps, our developers are less likely to be able to do something about them (although sometimes they will). Just make sure that you ask people to check stuff in apps they already have installed.

    -
  • -
  • When investigating connection issues: Does this happen on mobile, WiFi or both?
    While not exactly a yes-no question, this one lets our system administrators know where to look for lags. Naturally, it doesn't give us anything useful when the problem is not related to network connections.

    -
  • -
-

Naturally, there are many cases when you can be pretty sure that the bug belongs to the app it was seen on — this is true for interface glitches and any strange behavior in app-specific components. If that's the case, you skip the questions from this section and move on to the next. Brawny pink pastries.

-

1.2. Pinpoint the bug

-

Once you know the problem‘s general address, the possibilities for elimination begin branching out – each issue will require its own pattern. Here are several ideas for questions, but this is by no means an exclusive or required list. You’ll need to adapt heavily to the situation you're dealing with each time.

-
    -
  • Is this a local problem or does it involve more than one device/app?
    Since Telegram is about people sending stuff to other people, things can go wrong on one, or two sides, or both. For example: a video can't be played. The problem may be in the receiving app (bug in video player) – or it could be in the sending app (bug in video encoder).

    -
  • -
  • Does it happen in a particular kind of chats?
    One-on-one chats, secret chats, basic groups and channels/supergroups use very different underlying technologies. This means that each kind of chats may have its unique problems.

    -
  • -
  • Can this be related to specific settings on the device?
    Some problems may be triggered by external circumstances. E.g., privacy settings that restrict access to photos or contacts. As another example, Android devices may experience high battery drain because some battery-saving software is trying to shut down Telegram processes – Telegram reopens itself all the time and this war is heating up the device.

    -
  • -
  • Does it reproduce in the latest OS version for the relevant device?
    If yes, we don't need to look further into OS versions. If no, we should find out which versions are affected, this will help the developer greatly.

    -
  • -
-

Try to think along these lines. But don't go too deep.

-

1.3. Stop when you have enough

-

For most issues, we only need to know three things:

-
    -
  • What exactly goes wrong and how (detailed description, maybe screenshot)
  • -
  • Which one of the developers is responsible
  • -
  • What steps do we take to reproduce the issue
  • -
-

For issues that can't be easily reproduced, we need additional info:

-
    -
  • What special conditions must be met to reproduce the issue (OS version, exotic device, conjunction of stars…)
  • -
-

Sometimes the developer will ask for additional information or conditions, but generally, that's IT. If you have all this info, you're done – stop tormenting yourself or the user and go report to your local group (and maybe file a Trello card if necessary).

-

1.4. Bundle your questions

-

It is not always possible to have a real-time conversation with the user, so we should load our messages with the maximum possible payload. Instead of saying “are you still having this issue?” and running off, it's better to come up with a small set of questions. Select three or four (more is possible, but can be overwhelming for the user) that would give you the best overview of the problem.

-

Try to come up with several reasons why the issue could be happening, and choose such questions that could either prove or disprove your theories. This way you will use our users‘ time efficiently and keep them happy. Even if they can’t reply right away, you will come back to useful information.

-

Always send numbered lists of questions. This way, the user is less likely to miss one and you will find their reply much easier to read.

-

And that's about it. You are ready to Report the Bug, read about it in more details in the Bug Handling Manual.

-

A few more things before we wrap it up:

-

Appendix A: Useless questions and requests

-

Our goal is not to make the issue disappear for the user we're currently talking to. Our goal is to find out what was wrong and to make the issue go away forever, for everyone.

-

Things like “log out and in again” or “reinstall the app” do not give us any information. Therefore, let's never ask our users to do those things, unless this was expressly recommended by the docs or by the devs. The only exception is when you‘ve run out of options and nobody can reproduce the issue – in this case we’re allowed to say:

-
-

"Well, this is very strange. We can't reproduce this on our side and you say none of our suggestions help. Sorry! You could try reinstalling the app – this shouldn‘t help, but since you’ve already tried everything else, why not do that as well. Tell me if for some reason it does change anything."

-
-

Please note: It is absolutely, 100%, unquestionably FORBIDDEN to START DEBUGGING by asking the user to try logging out and in again, reinstalling the app or any such nonsense.

-

Appendix B: Saving time

-

When talking to people who are having issues, we‘re often tempted to ask some random question, get a +1 to our leaderboard stats and run off to the next question before they return. If you do this, both you and the user are performing utterly useless actions: you’re not helping anyone and they aren't giving us any info.

-

So whenever you ask the user to do something, ask yourself first: If I were alone, diagnosing this issue on my own with an intention to collect information as quickly as possible, would I do this now? If the answer is no, think of something useful instead.

-
- -
-
-
-
- - - - - - - - - - - - - - - - -