mirror of
https://github.com/MarshalX/telegram-crawler.git
synced 2025-01-01 09:06:24 +01:00
Update content of files
This commit is contained in:
parent
9d649f7000
commit
d9ee7a55a6
15 changed files with 0 additions and 4238 deletions
|
@ -1,366 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Payments API</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta property="description" content="You can accept payments from Telegram users via Telegram Bots.
|
||||
Note: This article is intended for MTProto API developers.…">
|
||||
<meta property="og:title" content="Payments API">
|
||||
<meta property="og:image" content="">
|
||||
<meta property="og:description" content="You can accept payments from Telegram users via Telegram Bots.
|
||||
Note: This article is intended for MTProto API developers.…">
|
||||
<link rel="shortcut icon" href="/favicon.ico?4" type="image/x-icon" />
|
||||
|
||||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
||||
|
||||
<link href="/css/telegram.css?214" rel="stylesheet" media="screen">
|
||||
<style>
|
||||
</style>
|
||||
</head>
|
||||
<body class="preload">
|
||||
<div class="dev_page_wrap">
|
||||
<div class="dev_page_head navbar navbar-static-top navbar-tg">
|
||||
<div class="navbar-inner">
|
||||
<div class="container clearfix">
|
||||
<ul class="nav navbar-nav navbar-right hidden-xs"><li class="navbar-twitter"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i><span> Twitter</span></a></li></ul>
|
||||
<ul class="nav navbar-nav">
|
||||
<li><a href="//telegram.org/">Home</a></li>
|
||||
<li class="hidden-xs"><a href="//telegram.org/faq">FAQ</a></li>
|
||||
<li class="hidden-xs"><a href="//telegram.org/apps">Apps</a></li>
|
||||
<li class="active"><a href="/api">API</a></li>
|
||||
<li class=""><a href="/mtproto">Protocol</a></li>
|
||||
<li class=""><a href="/schema">Schema</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container clearfix">
|
||||
<div class="dev_page">
|
||||
<div id="dev_page_content_wrap" class=" ">
|
||||
<div class="dev_page_bread_crumbs"><ul class="breadcrumb clearfix"><li><a href="/api" >API</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/api/payments" >Payments API</a></li></ul></div>
|
||||
<h1 id="dev_page_title">Payments API</h1>
|
||||
|
||||
<div id="dev_page_content"><!-- scroll_nav -->
|
||||
|
||||
<p>You can accept payments from Telegram users via <a href="/bots">Telegram Bots</a>.</p>
|
||||
<blockquote>
|
||||
<p>Note: This article is intended for MTProto API developers. If you're looking for a general overview of Telegram Payments, check out the <a href="https://telegram.org/blog/payments">Telegram blog</a> and the <a href="/bots/payments">bot API payment manual</a>.</p>
|
||||
</blockquote>
|
||||
<h3><a class="anchor" href="#introducing-payments" id="introducing-payments" name="introducing-payments"><i class="anchor-icon"></i></a>Introducing Payments</h3>
|
||||
<p>Telegram bots can accept payments for goods and services from users.
|
||||
For more info on how payments work, check out the <a href="https://telegram.org/blog/payments">Telegram Blog</a> and the <a href="/bots/payments">bot API payment manual</a>.</p>
|
||||
<p>This page will elaborate on the actions required to work with payments using the <strong>MTProto API</strong>.</p>
|
||||
<blockquote>
|
||||
<p>A simplified version of the process is available only for bots using the <a href="/bots/payments">bot API</a>.</p>
|
||||
</blockquote>
|
||||
<p>The first step for bots is <a href="/bots/payments#the-payments-api">enable payments as described here »</a>.</p>
|
||||
<p>Then, we work with payments as follows.</p>
|
||||
<h3><a class="anchor" href="#1-create-invoice" id="1-create-invoice" name="1-create-invoice"><i class="anchor-icon"></i></a>1. Create Invoice</h3>
|
||||
<pre><code><a href='/constructor/inputWebDocument'>inputWebDocument</a>#9bed434d url:<a href='/type/string'>string</a> size:<a href='/type/int'>int</a> mime_type:<a href='/type/string'>string</a> attributes:<a href='/type/Vector%20t'>Vector</a><<a href='/type/DocumentAttribute'>DocumentAttribute</a>> = <a href='/type/InputWebDocument'>InputWebDocument</a>;
|
||||
|
||||
<a href='/constructor/labeledPrice'>labeledPrice</a>#cb296bf8 label:<a href='/type/string'>string</a> amount:<a href='/type/long'>long</a> = <a href='/type/LabeledPrice'>LabeledPrice</a>;
|
||||
|
||||
<a href='/constructor/invoice'>invoice</a>#cd886e0 flags:<a href='/type/%23'>#</a> test:flags.0?<a href='/constructor/true'>true</a> name_requested:flags.1?<a href='/constructor/true'>true</a> phone_requested:flags.2?<a href='/constructor/true'>true</a> email_requested:flags.3?<a href='/constructor/true'>true</a> shipping_address_requested:flags.4?<a href='/constructor/true'>true</a> flexible:flags.5?<a href='/constructor/true'>true</a> phone_to_provider:flags.6?<a href='/constructor/true'>true</a> email_to_provider:flags.7?<a href='/constructor/true'>true</a> currency:<a href='/type/string'>string</a> prices:<a href='/type/Vector%20t'>Vector</a><<a href='/type/LabeledPrice'>LabeledPrice</a>> max_tip_amount:flags.8?<a href='/type/long'>long</a> suggested_tip_amounts:flags.8?<a href='/type/Vector%20t'>Vector</a><<a href='/type/long'>long</a>> = <a href='/type/Invoice'>Invoice</a>;
|
||||
|
||||
<a href='/constructor/inputMediaInvoice'>inputMediaInvoice</a>#d9799874 flags:<a href='/type/%23'>#</a> title:<a href='/type/string'>string</a> description:<a href='/type/string'>string</a> photo:flags.0?<a href='/type/InputWebDocument'>InputWebDocument</a> invoice:<a href='/type/Invoice'>Invoice</a> payload:<a href='/type/bytes'>bytes</a> provider:<a href='/type/string'>string</a> provider_data:<a href='/type/DataJSON'>DataJSON</a> start_param:flags.1?<a href='/type/string'>string</a> = <a href='/type/InputMedia'>InputMedia</a>;
|
||||
|
||||
---functions---
|
||||
|
||||
<a href='/method/messages.sendMedia'>messages.sendMedia</a>#3491eba9 flags:<a href='/type/%23'>#</a> silent:flags.5?<a href='/constructor/true'>true</a> background:flags.6?<a href='/constructor/true'>true</a> clear_draft:flags.7?<a href='/constructor/true'>true</a> peer:<a href='/type/InputPeer'>InputPeer</a> reply_to_msg_id:flags.0?<a href='/type/int'>int</a> media:<a href='/type/InputMedia'>InputMedia</a> message:<a href='/type/string'>string</a> random_id:<a href='/type/long'>long</a> reply_markup:flags.2?<a href='/type/ReplyMarkup'>ReplyMarkup</a> entities:flags.3?<a href='/type/Vector%20t'>Vector</a><<a href='/type/MessageEntity'>MessageEntity</a>> schedule_date:flags.10?<a href='/type/int'>int</a> = <a href='/type/Updates'>Updates</a>;</code></pre>
|
||||
<p>The user contacts the bot and requests to purchase something.
|
||||
The bot forms an <a href="/constructor/inputMediaInvoice">inputMediaInvoice</a> with an <a href="/constructor/invoice">invoice</a> constructor with a description of the goods or service, amount to be paid, as well as requested shipping info.
|
||||
The <code>provider</code> parameter of the <a href="/constructor/inputMediaInvoice">inputMediaInvoice</a> constructor is where you put the token value that <a href="/bots/payments#the-payments-api">you've obtained earlier via Botfather</a>. It is possible for one merchant bot to use several different tokens for different users or different goods and services.</p>
|
||||
<p>Use the <a href="/method/messages.sendMedia">messages.sendMedia</a> method to send the <a href="/constructor/invoice">invoice</a>.
|
||||
You can also attach an inline keyboard to the message using the <code>reply_markup</code> field: if provided, the first button must be a <a href="/constructor/keyboardButtonBuy">keyboardButtonBuy</a> button. Otherwise, an inline keyboard will be generated automatically, with a <code>Pay 'total price'</code> <a href="/constructor/keyboardButtonBuy">keyboardButtonBuy</a> as only button.</p>
|
||||
<p>An invoice message with a pay button can only be sent to a private chat with the user. Groups and channels are not supported.</p>
|
||||
<h3><a class="anchor" href="#2-order-information" id="2-order-information" name="2-order-information"><i class="anchor-icon"></i></a>2. Order information</h3>
|
||||
<h4><a class="anchor" href="#21-invoice-message" id="21-invoice-message" name="21-invoice-message"><i class="anchor-icon"></i></a>2.1 Invoice message</h4>
|
||||
<pre><code><a href='/constructor/keyboardButtonBuy'>keyboardButtonBuy</a>#afd93fbb text:<a href='/type/string'>string</a> = <a href='/type/KeyboardButton'>KeyboardButton</a>;
|
||||
|
||||
<a href='/constructor/keyboardButtonRow'>keyboardButtonRow</a>#77608b83 buttons:<a href='/type/Vector%20t'>Vector</a><<a href='/type/KeyboardButton'>KeyboardButton</a>> = <a href='/type/KeyboardButtonRow'>KeyboardButtonRow</a>;
|
||||
<a href='/constructor/replyInlineMarkup'>replyInlineMarkup</a>#48a30254 rows:<a href='/type/Vector%20t'>Vector</a><<a href='/type/KeyboardButtonRow'>KeyboardButtonRow</a>> = <a href='/type/ReplyMarkup'>ReplyMarkup</a>;
|
||||
|
||||
<a href='/constructor/webDocument'>webDocument</a>#1c570ed1 url:<a href='/type/string'>string</a> access_hash:<a href='/type/long'>long</a> size:<a href='/type/int'>int</a> mime_type:<a href='/type/string'>string</a> attributes:<a href='/type/Vector%20t'>Vector</a><<a href='/type/DocumentAttribute'>DocumentAttribute</a>> = <a href='/type/WebDocument'>WebDocument</a>;
|
||||
<a href='/constructor/webDocumentNoProxy'>webDocumentNoProxy</a>#f9c8bcc6 url:<a href='/type/string'>string</a> size:<a href='/type/int'>int</a> mime_type:<a href='/type/string'>string</a> attributes:<a href='/type/Vector%20t'>Vector</a><<a href='/type/DocumentAttribute'>DocumentAttribute</a>> = <a href='/type/WebDocument'>WebDocument</a>;
|
||||
|
||||
<a href='/constructor/messageMediaInvoice'>messageMediaInvoice</a>#84551347 flags:<a href='/type/%23'>#</a> shipping_address_requested:flags.1?<a href='/constructor/true'>true</a> test:flags.3?<a href='/constructor/true'>true</a> title:<a href='/type/string'>string</a> description:<a href='/type/string'>string</a> photo:flags.0?<a href='/type/WebDocument'>WebDocument</a> receipt_msg_id:flags.2?<a href='/type/int'>int</a> currency:<a href='/type/string'>string</a> total_amount:<a href='/type/long'>long</a> start_param:<a href='/type/string'>string</a> = <a href='/type/MessageMedia'>MessageMedia</a>;
|
||||
|
||||
<a href='/constructor/message'>message</a>#85d6cbe2 flags:<a href='/type/%23'>#</a> out:flags.1?<a href='/constructor/true'>true</a> mentioned:flags.4?<a href='/constructor/true'>true</a> media_unread:flags.5?<a href='/constructor/true'>true</a> silent:flags.13?<a href='/constructor/true'>true</a> post:flags.14?<a href='/constructor/true'>true</a> from_scheduled:flags.18?<a href='/constructor/true'>true</a> legacy:flags.19?<a href='/constructor/true'>true</a> edit_hide:flags.21?<a href='/constructor/true'>true</a> pinned:flags.24?<a href='/constructor/true'>true</a> id:<a href='/type/int'>int</a> from_id:flags.8?<a href='/type/Peer'>Peer</a> peer_id:<a href='/type/Peer'>Peer</a> fwd_from:flags.2?<a href='/type/MessageFwdHeader'>MessageFwdHeader</a> via_bot_id:flags.11?<a href='/type/long'>long</a> reply_to:flags.3?<a href='/type/MessageReplyHeader'>MessageReplyHeader</a> date:<a href='/type/int'>int</a> message:<a href='/type/string'>string</a> media:flags.9?<a href='/type/MessageMedia'>MessageMedia</a> reply_markup:flags.6?<a href='/type/ReplyMarkup'>ReplyMarkup</a> entities:flags.7?<a href='/type/Vector%20t'>Vector</a><<a href='/type/MessageEntity'>MessageEntity</a>> views:flags.10?<a href='/type/int'>int</a> forwards:flags.10?<a href='/type/int'>int</a> replies:flags.23?<a href='/type/MessageReplies'>MessageReplies</a> edit_date:flags.15?<a href='/type/int'>int</a> post_author:flags.16?<a href='/type/string'>string</a> grouped_id:flags.17?<a href='/type/long'>long</a> restriction_reason:flags.22?<a href='/type/Vector%20t'>Vector</a><<a href='/type/RestrictionReason'>RestrictionReason</a>> ttl_period:flags.25?<a href='/type/int'>int</a> = <a href='/type/Message'>Message</a>;
|
||||
|
||||
<a href='/constructor/updateNewMessage'>updateNewMessage</a>#1f2b0afd message:<a href='/type/Message'>Message</a> pts:<a href='/type/int'>int</a> pts_count:<a href='/type/int'>int</a> = <a href='/type/Update'>Update</a>;</code></pre>
|
||||
<p>The user receives an <a href="/constructor/updateNewMessage">updateNewMessage</a> constructor from the bot, containing a <a href="/constructor/messageMediaInvoice">messageMediaInvoice</a> constructor with basic info about the product.</p>
|
||||
<p>The <a href="/constructor/message">message</a> will also have a <a href="/constructor/replyInlineMarkup">replyInlineMarkup</a> keyboard attached to it.
|
||||
The the first button of the keyboard will always be a <a href="/constructor/keyboardButtonBuy">keyboardButtonBuy</a> button.</p>
|
||||
<h4><a class="anchor" href="#22-getting-invoice-info-about-the-product" id="22-getting-invoice-info-about-the-product" name="22-getting-invoice-info-about-the-product"><i class="anchor-icon"></i></a>2.2 Getting invoice info about the product</h4>
|
||||
<pre><code><a href='/constructor/invoice'>invoice</a>#cd886e0 flags:<a href='/type/%23'>#</a> test:flags.0?<a href='/constructor/true'>true</a> name_requested:flags.1?<a href='/constructor/true'>true</a> phone_requested:flags.2?<a href='/constructor/true'>true</a> email_requested:flags.3?<a href='/constructor/true'>true</a> shipping_address_requested:flags.4?<a href='/constructor/true'>true</a> flexible:flags.5?<a href='/constructor/true'>true</a> phone_to_provider:flags.6?<a href='/constructor/true'>true</a> email_to_provider:flags.7?<a href='/constructor/true'>true</a> currency:<a href='/type/string'>string</a> prices:<a href='/type/Vector%20t'>Vector</a><<a href='/type/LabeledPrice'>LabeledPrice</a>> max_tip_amount:flags.8?<a href='/type/long'>long</a> suggested_tip_amounts:flags.8?<a href='/type/Vector%20t'>Vector</a><<a href='/type/long'>long</a>> = <a href='/type/Invoice'>Invoice</a>;
|
||||
|
||||
<a href='/constructor/paymentRequestedInfo'>paymentRequestedInfo</a>#909c3f94 flags:<a href='/type/%23'>#</a> name:flags.0?<a href='/type/string'>string</a> phone:flags.1?<a href='/type/string'>string</a> email:flags.2?<a href='/type/string'>string</a> shipping_address:flags.3?<a href='/type/PostAddress'>PostAddress</a> = <a href='/type/PaymentRequestedInfo'>PaymentRequestedInfo</a>;
|
||||
|
||||
<a href='/constructor/paymentSavedCredentialsCard'>paymentSavedCredentialsCard</a>#cdc27a1f id:<a href='/type/string'>string</a> title:<a href='/type/string'>string</a> = <a href='/type/PaymentSavedCredentials'>PaymentSavedCredentials</a>;
|
||||
|
||||
<a href='/constructor/payments.paymentForm'>payments.paymentForm</a>#1694761b flags:<a href='/type/%23'>#</a> can_save_credentials:flags.2?<a href='/constructor/true'>true</a> password_missing:flags.3?<a href='/constructor/true'>true</a> form_id:<a href='/type/long'>long</a> bot_id:<a href='/type/long'>long</a> invoice:<a href='/type/Invoice'>Invoice</a> provider_id:<a href='/type/long'>long</a> url:<a href='/type/string'>string</a> native_provider:flags.4?<a href='/type/string'>string</a> native_params:flags.4?<a href='/type/DataJSON'>DataJSON</a> saved_info:flags.0?<a href='/type/PaymentRequestedInfo'>PaymentRequestedInfo</a> saved_credentials:flags.1?<a href='/type/PaymentSavedCredentials'>PaymentSavedCredentials</a> users:<a href='/type/Vector%20t'>Vector</a><<a href='/type/User'>User</a>> = <a href='/type/payments.PaymentForm'>payments.PaymentForm</a>;
|
||||
|
||||
---functions---
|
||||
|
||||
<a href='/method/payments.getPaymentForm'>payments.getPaymentForm</a>#8a333c8d flags:<a href='/type/%23'>#</a> peer:<a href='/type/InputPeer'>InputPeer</a> msg_id:<a href='/type/int'>int</a> theme_params:flags.0?<a href='/type/DataJSON'>DataJSON</a> = <a href='/type/payments.PaymentForm'>payments.PaymentForm</a>;</code></pre>
|
||||
<p>If the user clicks on the <a href="/constructor/keyboardButtonBuy">keyboardButtonBuy</a> button, the client proceeds to call <a href="/method/payments.getPaymentForm">payments.getPaymentForm</a> with the message ID of the invoice preview message to get the <a href="/constructor/payments.paymentForm">payment form</a>.</p>
|
||||
<p>The returned form will contain fields that should be passed to the payment provider along with the full <a href="/constructor/invoice">invoice</a>.
|
||||
The payment form also contains info about previously saved payment credentials and order information (name, phone number, email, shipping address & so on).</p>
|
||||
<p>The full <a href="/constructor/invoice">invoice</a> contains info about the information required for the order, the price and the currency, and whether this is a <code>test</code> order.</p>
|
||||
<h4><a class="anchor" href="#23-verifying-information" id="23-verifying-information" name="23-verifying-information"><i class="anchor-icon"></i></a>2.3 Verifying information</h4>
|
||||
<pre><code><a href='/constructor/invoice'>invoice</a>#cd886e0 flags:<a href='/type/%23'>#</a> test:flags.0?<a href='/constructor/true'>true</a> name_requested:flags.1?<a href='/constructor/true'>true</a> phone_requested:flags.2?<a href='/constructor/true'>true</a> email_requested:flags.3?<a href='/constructor/true'>true</a> shipping_address_requested:flags.4?<a href='/constructor/true'>true</a> flexible:flags.5?<a href='/constructor/true'>true</a> phone_to_provider:flags.6?<a href='/constructor/true'>true</a> email_to_provider:flags.7?<a href='/constructor/true'>true</a> currency:<a href='/type/string'>string</a> prices:<a href='/type/Vector%20t'>Vector</a><<a href='/type/LabeledPrice'>LabeledPrice</a>> max_tip_amount:flags.8?<a href='/type/long'>long</a> suggested_tip_amounts:flags.8?<a href='/type/Vector%20t'>Vector</a><<a href='/type/long'>long</a>> = <a href='/type/Invoice'>Invoice</a>;
|
||||
|
||||
<a href='/constructor/postAddress'>postAddress</a>#1e8caaeb street_line1:<a href='/type/string'>string</a> street_line2:<a href='/type/string'>string</a> city:<a href='/type/string'>string</a> state:<a href='/type/string'>string</a> country_iso2:<a href='/type/string'>string</a> post_code:<a href='/type/string'>string</a> = <a href='/type/PostAddress'>PostAddress</a>;
|
||||
|
||||
<a href='/constructor/paymentRequestedInfo'>paymentRequestedInfo</a>#909c3f94 flags:<a href='/type/%23'>#</a> name:flags.0?<a href='/type/string'>string</a> phone:flags.1?<a href='/type/string'>string</a> email:flags.2?<a href='/type/string'>string</a> shipping_address:flags.3?<a href='/type/PostAddress'>PostAddress</a> = <a href='/type/PaymentRequestedInfo'>PaymentRequestedInfo</a>;
|
||||
|
||||
<a href='/constructor/payments.validatedRequestedInfo'>payments.validatedRequestedInfo</a>#d1451883 flags:<a href='/type/%23'>#</a> id:flags.0?<a href='/type/string'>string</a> shipping_options:flags.1?<a href='/type/Vector%20t'>Vector</a><<a href='/type/ShippingOption'>ShippingOption</a>> = <a href='/type/payments.ValidatedRequestedInfo'>payments.ValidatedRequestedInfo</a>;
|
||||
|
||||
---functions---
|
||||
|
||||
<a href='/method/payments.validateRequestedInfo'>payments.validateRequestedInfo</a>#db103170 flags:<a href='/type/%23'>#</a> save:flags.0?<a href='/constructor/true'>true</a> peer:<a href='/type/InputPeer'>InputPeer</a> msg_id:<a href='/type/int'>int</a> info:<a href='/type/PaymentRequestedInfo'>PaymentRequestedInfo</a> = <a href='/type/payments.ValidatedRequestedInfo'>payments.ValidatedRequestedInfo</a>;</code></pre>
|
||||
<p>If any data at all is requested by the <a href="/constructor/invoice"><strong>invoice</strong></a> (<code>name_requested</code>, <code>phone_requested</code>, <code>email_requested</code>, <code>shipping_address_requested</code>), the user must call <a href="/method/payments.validateRequestedInfo">payments.validateRequestedInfo</a>, providing the required data (as usual, <code>msg_id</code> is the ID of the invoice message).
|
||||
The user can choose to save order information for future use by setting the <code>save</code> flag.
|
||||
Data can be autofilled as described in <a href="#2-3-1-autofill">autofill</a>.</p>
|
||||
<p>If no errors are found in the submitted info, the <a href="/constructor/payments.ValidatedRequestedInfo">response</a> of the method will contain an <code>id</code> flag, to be used later to complete the payment.</p>
|
||||
<p>If the <code>flexible</code> flag of the invoice is set, calling the <a href="/method/payments.validateRequestedInfo">payments.validateRequestedInfo</a> method will send a <a href="/constructor/updateBotShippingQuery">shipping query update</a> to the bot, to which the bot will reply with the available shipping options for the specified address <a href="#2-4-select-delivery-option">as described here »</a>.
|
||||
The return value in this case will also contain a <code>shipping_options</code> field with the available shipping options.</p>
|
||||
<p>If any errors are found in the submmitted data, a <a href="/constructor/updateServiceNotification">service notification</a> will be sent to the user, with a description of the error from the bot.</p>
|
||||
<h4><a class="anchor" href="#231-autofill" id="231-autofill" name="231-autofill"><i class="anchor-icon"></i></a>2.3.1 Autofill</h4>
|
||||
<pre><code><a href='/constructor/payments.savedInfo'>payments.savedInfo</a>#fb8fe43c flags:<a href='/type/%23'>#</a> has_saved_credentials:flags.1?<a href='/constructor/true'>true</a> saved_info:flags.0?<a href='/type/PaymentRequestedInfo'>PaymentRequestedInfo</a> = <a href='/type/payments.SavedInfo'>payments.SavedInfo</a>;
|
||||
|
||||
---functions---
|
||||
|
||||
<a href='/method/payments.getSavedInfo'>payments.getSavedInfo</a>#227d824b = <a href='/type/payments.SavedInfo'>payments.SavedInfo</a>;
|
||||
<a href='/method/payments.clearSavedInfo'>payments.clearSavedInfo</a>#d83d70c1 flags:<a href='/type/%23'>#</a> credentials:flags.0?<a href='/constructor/true'>true</a> info:flags.1?<a href='/constructor/true'>true</a> = <a href='/type/Bool'>Bool</a>;</code></pre>
|
||||
<p>The requested fields can be autofilled with the info provided in the <code>saved_info</code> field of the <a href="/constructor/payments.paymentForm">payment form</a>, or with the info fetched manually using <a href="/method/payments.getSavedInfo">payments.getSavedInfo</a>.</p>
|
||||
<p>Saved order information can also be cleared using <a href="/method/payments.clearSavedInfo">payments.clearSavedInfo</a>.</p>
|
||||
<h4><a class="anchor" href="#24-select-delivery-option" id="24-select-delivery-option" name="24-select-delivery-option"><i class="anchor-icon"></i></a>2.4 Select delivery option</h4>
|
||||
<pre><code><a href='/constructor/labeledPrice'>labeledPrice</a>#cb296bf8 label:<a href='/type/string'>string</a> amount:<a href='/type/long'>long</a> = <a href='/type/LabeledPrice'>LabeledPrice</a>;
|
||||
|
||||
<a href='/constructor/shippingOption'>shippingOption</a>#b6213cdf id:<a href='/type/string'>string</a> title:<a href='/type/string'>string</a> prices:<a href='/type/Vector%20t'>Vector</a><<a href='/type/LabeledPrice'>LabeledPrice</a>> = <a href='/type/ShippingOption'>ShippingOption</a>;
|
||||
|
||||
<a href='/constructor/updateBotShippingQuery'>updateBotShippingQuery</a>#b5aefd7d query_id:<a href='/type/long'>long</a> user_id:<a href='/type/long'>long</a> payload:<a href='/type/bytes'>bytes</a> shipping_address:<a href='/type/PostAddress'>PostAddress</a> = <a href='/type/Update'>Update</a>;
|
||||
|
||||
---functions---
|
||||
|
||||
<a href='/method/messages.setBotShippingResults'>messages.setBotShippingResults</a>#e5f672fa flags:<a href='/type/%23'>#</a> query_id:<a href='/type/long'>long</a> error:flags.0?<a href='/type/string'>string</a> shipping_options:flags.1?<a href='/type/Vector%20t'>Vector</a><<a href='/type/ShippingOption'>ShippingOption</a>> = <a href='/type/Bool'>Bool</a>;</code></pre>
|
||||
<p>If a shipping address was requested and the bot included the parameter <code>flexible</code>, when the user <a href="#2-3-verifying-information">validates order information</a> the Telegram API will send an <a href="/constructor/updateBotShippingQuery">updateBotShippingQuery</a> to the bot.
|
||||
The bot must respond using <a href="/method/messages.setBotShippingResults">messages.setBotShippingResults</a> either with a list of possible delivery options and the relevant delivery prices, or with an error (for example, if delivery to the specified address is not possible).</p>
|
||||
<p>The returned shipping options or the shipping error will be returned to the user while <a href="#2-3-verifying-information">validating order information</a>.</p>
|
||||
<h3><a class="anchor" href="#3-payment" id="3-payment" name="3-payment"><i class="anchor-icon"></i></a>3. Payment</h3>
|
||||
<pre><code><a href='/constructor/inputPaymentCredentialsSaved'>inputPaymentCredentialsSaved</a>#c10eb2cf id:<a href='/type/string'>string</a> tmp_password:<a href='/type/bytes'>bytes</a> = <a href='/type/InputPaymentCredentials'>InputPaymentCredentials</a>;
|
||||
<a href='/constructor/inputPaymentCredentials'>inputPaymentCredentials</a>#3417d728 flags:<a href='/type/%23'>#</a> save:flags.0?<a href='/constructor/true'>true</a> data:<a href='/type/DataJSON'>DataJSON</a> = <a href='/type/InputPaymentCredentials'>InputPaymentCredentials</a>;
|
||||
<a href='/constructor/inputPaymentCredentialsApplePay'>inputPaymentCredentialsApplePay</a>#aa1c39f payment_data:<a href='/type/DataJSON'>DataJSON</a> = <a href='/type/InputPaymentCredentials'>InputPaymentCredentials</a>;
|
||||
<a href='/constructor/inputPaymentCredentialsGooglePay'>inputPaymentCredentialsGooglePay</a>#8ac32801 payment_token:<a href='/type/DataJSON'>DataJSON</a> = <a href='/type/InputPaymentCredentials'>InputPaymentCredentials</a>;
|
||||
|
||||
|
||||
<a href='/constructor/payments.paymentForm'>payments.paymentForm</a>#1694761b flags:<a href='/type/%23'>#</a> can_save_credentials:flags.2?<a href='/constructor/true'>true</a> password_missing:flags.3?<a href='/constructor/true'>true</a> form_id:<a href='/type/long'>long</a> bot_id:<a href='/type/long'>long</a> invoice:<a href='/type/Invoice'>Invoice</a> provider_id:<a href='/type/long'>long</a> url:<a href='/type/string'>string</a> native_provider:flags.4?<a href='/type/string'>string</a> native_params:flags.4?<a href='/type/DataJSON'>DataJSON</a> saved_info:flags.0?<a href='/type/PaymentRequestedInfo'>PaymentRequestedInfo</a> saved_credentials:flags.1?<a href='/type/PaymentSavedCredentials'>PaymentSavedCredentials</a> users:<a href='/type/Vector%20t'>Vector</a><<a href='/type/User'>User</a>> = <a href='/type/payments.PaymentForm'>payments.PaymentForm</a>;</code></pre>
|
||||
<h4><a class="anchor" href="#31-web-payment" id="31-web-payment" name="31-web-payment"><i class="anchor-icon"></i></a>3.1 Web payment</h4>
|
||||
<pre><code><a href='/constructor/inputPaymentCredentials'>inputPaymentCredentials</a>#3417d728 flags:<a href='/type/%23'>#</a> save:flags.0?<a href='/constructor/true'>true</a> data:<a href='/type/DataJSON'>DataJSON</a> = <a href='/type/InputPaymentCredentials'>InputPaymentCredentials</a>;
|
||||
|
||||
<a href='/constructor/payments.paymentForm'>payments.paymentForm</a>#1694761b flags:<a href='/type/%23'>#</a> can_save_credentials:flags.2?<a href='/constructor/true'>true</a> password_missing:flags.3?<a href='/constructor/true'>true</a> form_id:<a href='/type/long'>long</a> bot_id:<a href='/type/long'>long</a> invoice:<a href='/type/Invoice'>Invoice</a> provider_id:<a href='/type/long'>long</a> url:<a href='/type/string'>string</a> native_provider:flags.4?<a href='/type/string'>string</a> native_params:flags.4?<a href='/type/DataJSON'>DataJSON</a> saved_info:flags.0?<a href='/type/PaymentRequestedInfo'>PaymentRequestedInfo</a> saved_credentials:flags.1?<a href='/type/PaymentSavedCredentials'>PaymentSavedCredentials</a> users:<a href='/type/Vector%20t'>Vector</a><<a href='/type/User'>User</a>> = <a href='/type/payments.PaymentForm'>payments.PaymentForm</a>;</code></pre>
|
||||
<p>Typically, payment takes place by opening the <code>url</code> in the specified <a href="/constructor/payments.paymentForm">payment form</a>, which leads to a payment form on the website of the payment gateway.
|
||||
Once the user finishes entering their payment credentials, a <a href="/api/web-events"><code>payment_form_submit</code> web event</a> is generated by the payment gateway, containing <code>data</code> and <code>title</code> JSON fields.</p>
|
||||
<p>The <code>title</code> is used by the client app to represent the payment credentials (typically a censored version of credit card information).
|
||||
The <code>data</code> is used to generate an <a href="/constructor/inputPaymentCredentials">inputPaymentCredentials</a> constructor.
|
||||
Eventually, you can set the <code>save</code> flag to save the credit card info for future use, only if <a href="/api/srp">2FA</a> is enabled.</p>
|
||||
<p>Telegram <strong>does not</strong> have access to your card information. Credit card details will be handled only by the payment system.</p>
|
||||
<h4><a class="anchor" href="#32-native-payment" id="32-native-payment" name="32-native-payment"><i class="anchor-icon"></i></a>3.2 Native payment</h4>
|
||||
<pre><code><a href='/constructor/inputPaymentCredentials'>inputPaymentCredentials</a>#3417d728 flags:<a href='/type/%23'>#</a> save:flags.0?<a href='/constructor/true'>true</a> data:<a href='/type/DataJSON'>DataJSON</a> = <a href='/type/InputPaymentCredentials'>InputPaymentCredentials</a>;
|
||||
|
||||
<a href='/constructor/payments.paymentForm'>payments.paymentForm</a>#1694761b flags:<a href='/type/%23'>#</a> can_save_credentials:flags.2?<a href='/constructor/true'>true</a> password_missing:flags.3?<a href='/constructor/true'>true</a> form_id:<a href='/type/long'>long</a> bot_id:<a href='/type/long'>long</a> invoice:<a href='/type/Invoice'>Invoice</a> provider_id:<a href='/type/long'>long</a> url:<a href='/type/string'>string</a> native_provider:flags.4?<a href='/type/string'>string</a> native_params:flags.4?<a href='/type/DataJSON'>DataJSON</a> saved_info:flags.0?<a href='/type/PaymentRequestedInfo'>PaymentRequestedInfo</a> saved_credentials:flags.1?<a href='/type/PaymentSavedCredentials'>PaymentSavedCredentials</a> users:<a href='/type/Vector%20t'>Vector</a><<a href='/type/User'>User</a>> = <a href='/type/payments.PaymentForm'>payments.PaymentForm</a>;</code></pre>
|
||||
<p>Most telegram apps support working natively with the native APIs of some payment providers, without opening the website of the payment and receiving a JS event.</p>
|
||||
<p>This is done using the JSON <code>native_params</code> parameters field of the <a href="/constructor/payments.paymentForm">payments.paymentForm</a> constructor, which contains an object, which can contain one or more of the following fields:</p>
|
||||
<ul>
|
||||
<li><code>publishable_key</code>: Stripe API publishable key</li>
|
||||
<li><code>apple_pay_merchant_id</code>: Apple Pay merchant ID</li>
|
||||
<li><code>android_pay_public_key</code>: Android Pay public key</li>
|
||||
<li><code>android_pay_bgcolor</code>: Android Pay form background color</li>
|
||||
<li><code>android_pay_inverse</code>: Whether to use the dark theme in the Android Pay form</li>
|
||||
<li><code>need_country</code>: True, if the user country must be provided,</li>
|
||||
<li><code>need_zip</code>: True, if the user ZIP/postal code must be provided,</li>
|
||||
<li><code>need_cardholder_name</code>: True, if the cardholder name must be provided</li>
|
||||
</ul>
|
||||
<p>The payment gateway to use is decided based on the value of the <code>native_provider</code> field.</p>
|
||||
<h5><a class="anchor" href="#321-stripe" id="321-stripe" name="321-stripe"><i class="anchor-icon"></i></a>3.2.1 Stripe</h5>
|
||||
<pre><code><a href='/constructor/inputPaymentCredentials'>inputPaymentCredentials</a>#3417d728 flags:<a href='/type/%23'>#</a> save:flags.0?<a href='/constructor/true'>true</a> data:<a href='/type/DataJSON'>DataJSON</a> = <a href='/type/InputPaymentCredentials'>InputPaymentCredentials</a>;
|
||||
|
||||
<a href='/constructor/payments.paymentForm'>payments.paymentForm</a>#1694761b flags:<a href='/type/%23'>#</a> can_save_credentials:flags.2?<a href='/constructor/true'>true</a> password_missing:flags.3?<a href='/constructor/true'>true</a> form_id:<a href='/type/long'>long</a> bot_id:<a href='/type/long'>long</a> invoice:<a href='/type/Invoice'>Invoice</a> provider_id:<a href='/type/long'>long</a> url:<a href='/type/string'>string</a> native_provider:flags.4?<a href='/type/string'>string</a> native_params:flags.4?<a href='/type/DataJSON'>DataJSON</a> saved_info:flags.0?<a href='/type/PaymentRequestedInfo'>PaymentRequestedInfo</a> saved_credentials:flags.1?<a href='/type/PaymentSavedCredentials'>PaymentSavedCredentials</a> users:<a href='/type/Vector%20t'>Vector</a><<a href='/type/User'>User</a>> = <a href='/type/payments.PaymentForm'>payments.PaymentForm</a>;</code></pre>
|
||||
<p>If the <code>native_provider</code> field is set and equal to <code>stripe</code>, the client can make use of the <a href="https://stripe.com/docs/api/tokens/object">native Stripe token APIs</a> with the <code>publishable_key</code> from the <code>native_params</code> to add a payment method to Stripe, and then use the token <code>type</code> and <code>id</code> to generate a JSON object:</p>
|
||||
<pre><code>{"type":"token.type", "id":"token.id"}"</code></pre>
|
||||
<p>The generated JSON object can then be passed to the <code>data</code> field of the <a href="/constructor/inputPaymentCredentials">inputPaymentCredentials</a>.
|
||||
Eventually, you can set the <code>save</code> flag to save the credit card info for future use, only if <a href="/api/srp">2FA</a> is enabled.</p>
|
||||
<p>Telegram <strong>does not</strong> have access to your card information. Credit card details will be handled only by the payment system.</p>
|
||||
<p>Example implementation: <a href="https://github.com/DrKLO/Telegram">Telegram for Android</a>.</p>
|
||||
<h4><a class="anchor" href="#33-apple-pay" id="33-apple-pay" name="33-apple-pay"><i class="anchor-icon"></i></a>3.3 Apple pay</h4>
|
||||
<pre><code><a href='/constructor/inputPaymentCredentialsApplePay'>inputPaymentCredentialsApplePay</a>#aa1c39f payment_data:<a href='/type/DataJSON'>DataJSON</a> = <a href='/type/InputPaymentCredentials'>InputPaymentCredentials</a>;</code></pre>
|
||||
<p>On iOS devices, Apple Pay can be used to generate payment data, which is then sent using the <a href="/constructor/inputPaymentCredentialsApplePay">inputPaymentCredentialsApplePay</a> constructor.</p>
|
||||
<p>Example implementation: <a href="https://github.com/TelegramMessenger/Telegram-iOS/">Telegram for iOS</a>.</p>
|
||||
<h4><a class="anchor" href="#34-android-pay" id="34-android-pay" name="34-android-pay"><i class="anchor-icon"></i></a>3.4 Android pay</h4>
|
||||
<pre><code><a href='/constructor/inputPaymentCredentialsGooglePay'>inputPaymentCredentialsGooglePay</a>#8ac32801 payment_token:<a href='/type/DataJSON'>DataJSON</a> = <a href='/type/InputPaymentCredentials'>InputPaymentCredentials</a>;</code></pre>
|
||||
<p>On Android devices, Google Pay can be used to generate payment data, which is then sent using the <a href="/constructor/inputPaymentCredentialsApplePay">inputPaymentCredentialsGooglePay</a> constructor.</p>
|
||||
<p>Example implementation: <a href="https://github.com/DrKLO/Telegram/blob/ff5735503e068a6f1cada09b977f633df7caf98d/TMessagesProj/src/main/java/org/telegram/ui/PaymentFormActivity.java">Telegram for Android</a>.</p>
|
||||
<h4><a class="anchor" href="#35-using-saved-payment-credentials" id="35-using-saved-payment-credentials" name="35-using-saved-payment-credentials"><i class="anchor-icon"></i></a>3.5 Using saved payment credentials</h4>
|
||||
<pre><code><a href='/constructor/inputPaymentCredentialsSaved'>inputPaymentCredentialsSaved</a>#c10eb2cf id:<a href='/type/string'>string</a> tmp_password:<a href='/type/bytes'>bytes</a> = <a href='/type/InputPaymentCredentials'>InputPaymentCredentials</a>;
|
||||
|
||||
<a href='/constructor/paymentSavedCredentialsCard'>paymentSavedCredentialsCard</a>#cdc27a1f id:<a href='/type/string'>string</a> title:<a href='/type/string'>string</a> = <a href='/type/PaymentSavedCredentials'>PaymentSavedCredentials</a>;
|
||||
|
||||
<a href='/constructor/payments.paymentForm'>payments.paymentForm</a>#1694761b flags:<a href='/type/%23'>#</a> can_save_credentials:flags.2?<a href='/constructor/true'>true</a> password_missing:flags.3?<a href='/constructor/true'>true</a> form_id:<a href='/type/long'>long</a> bot_id:<a href='/type/long'>long</a> invoice:<a href='/type/Invoice'>Invoice</a> provider_id:<a href='/type/long'>long</a> url:<a href='/type/string'>string</a> native_provider:flags.4?<a href='/type/string'>string</a> native_params:flags.4?<a href='/type/DataJSON'>DataJSON</a> saved_info:flags.0?<a href='/type/PaymentRequestedInfo'>PaymentRequestedInfo</a> saved_credentials:flags.1?<a href='/type/PaymentSavedCredentials'>PaymentSavedCredentials</a> users:<a href='/type/Vector%20t'>Vector</a><<a href='/type/User'>User</a>> = <a href='/type/payments.PaymentForm'>payments.PaymentForm</a>;
|
||||
|
||||
<a href='/constructor/account.tmpPassword'>account.tmpPassword</a>#db64fd34 tmp_password:<a href='/type/bytes'>bytes</a> valid_until:<a href='/type/int'>int</a> = <a href='/type/account.TmpPassword'>account.TmpPassword</a>;
|
||||
|
||||
---functions---
|
||||
|
||||
<a href='/method/account.getTmpPassword'>account.getTmpPassword</a>#449e0b51 password:<a href='/type/InputCheckPasswordSRP'>InputCheckPasswordSRP</a> period:<a href='/type/int'>int</a> = <a href='/type/account.TmpPassword'>account.TmpPassword</a>;</code></pre>
|
||||
<p>To reuse saved payment methods, the <code>saved_credentials</code> field of the <a href="/constructor/payments.paymentForm">payment form</a> is used.
|
||||
The <code>title</code> of the <a href="/constructor/paymentSavedCredentialsCard">paymentSavedCredentialsCard</a> can be used to preview a censored version of credit card info.
|
||||
The <code>id</code> field is provided by the payment provider directly to the Telegram servers when saving the payment method, and identifies the payment method.
|
||||
Full credit card info <strong>is not</strong> saved on Telegram Servers, and cannot be fetched by the user.</p>
|
||||
<p>In order to <strong>use</strong> the saved payment method, <a href="/api/srp">2FA</a> must be enabled: the user must verify their identity by entering their <a href="/api/srp">2FA</a> password, which is then used as described in the <a href="/api/srp">SRP docs</a> to generate SRP parameters which must be passed to <a href="/method/account.getTmpPassword">account.getTmpPassword</a>.</p>
|
||||
<p>The generated temporary password can then be used to make payments using the saved credentials using the <a href="/constructor/inputPaymentCredentialsSaved">inputPaymentCredentialsSaved</a> constructor.</p>
|
||||
<ul>
|
||||
<li>The <code>id</code> field is the <a href="/constructor/paymentSavedCredentialsCard">paymentSavedCredentialsCard</a> <code>id</code>.</li>
|
||||
<li>The <code>tmp_password</code> is the temporary payment password generated by the server, if the user provided a correct <a href="/api/srp">2FA password</a>.</li>
|
||||
</ul>
|
||||
<p>Example implementation: <a href="https://github.com/DrKLO/Telegram">Telegram for Android</a>.</p>
|
||||
<h3><a class="anchor" href="#4-pre-checkout" id="4-pre-checkout" name="4-pre-checkout"><i class="anchor-icon"></i></a>4. Pre-Checkout</h3>
|
||||
<pre><code><a href='/constructor/inputPaymentCredentialsSaved'>inputPaymentCredentialsSaved</a>#c10eb2cf id:<a href='/type/string'>string</a> tmp_password:<a href='/type/bytes'>bytes</a> = <a href='/type/InputPaymentCredentials'>InputPaymentCredentials</a>;
|
||||
<a href='/constructor/inputPaymentCredentials'>inputPaymentCredentials</a>#3417d728 flags:<a href='/type/%23'>#</a> save:flags.0?<a href='/constructor/true'>true</a> data:<a href='/type/DataJSON'>DataJSON</a> = <a href='/type/InputPaymentCredentials'>InputPaymentCredentials</a>;
|
||||
<a href='/constructor/inputPaymentCredentialsApplePay'>inputPaymentCredentialsApplePay</a>#aa1c39f payment_data:<a href='/type/DataJSON'>DataJSON</a> = <a href='/type/InputPaymentCredentials'>InputPaymentCredentials</a>;
|
||||
<a href='/constructor/inputPaymentCredentialsGooglePay'>inputPaymentCredentialsGooglePay</a>#8ac32801 payment_token:<a href='/type/DataJSON'>DataJSON</a> = <a href='/type/InputPaymentCredentials'>InputPaymentCredentials</a>;
|
||||
|
||||
<a href='/constructor/payments.paymentResult'>payments.paymentResult</a>#4e5f810d updates:<a href='/type/Updates'>Updates</a> = <a href='/type/payments.PaymentResult'>payments.PaymentResult</a>;
|
||||
<a href='/constructor/payments.paymentVerificationNeeded'>payments.paymentVerificationNeeded</a>#d8411139 url:<a href='/type/string'>string</a> = <a href='/type/payments.PaymentResult'>payments.PaymentResult</a>;
|
||||
|
||||
---functions---
|
||||
|
||||
<a href='/method/payments.sendPaymentForm'>payments.sendPaymentForm</a>#30c3bc9d flags:<a href='/type/%23'>#</a> form_id:<a href='/type/long'>long</a> peer:<a href='/type/InputPeer'>InputPeer</a> msg_id:<a href='/type/int'>int</a> requested_info_id:flags.0?<a href='/type/string'>string</a> shipping_option_id:flags.1?<a href='/type/string'>string</a> credentials:<a href='/type/InputPaymentCredentials'>InputPaymentCredentials</a> tip_amount:flags.2?<a href='/type/long'>long</a> = <a href='/type/payments.PaymentResult'>payments.PaymentResult</a>;</code></pre>
|
||||
<p>After <a href="#2-3-verifying-information">verifying order information</a>, the final step for the client is to call <a href="/method/payments.sendPaymentForm">payments.sendPaymentForm</a>, with the following parameters:</p>
|
||||
<ul>
|
||||
<li>The <code>msg_id</code> is set to the ID of the invoice message</li>
|
||||
<li><code>requested_info_id</code> is set to the <code>id</code> of the <a href="#2-3-verifying-information">verified order information</a>, if it was requested</li>
|
||||
<li><code>shipping_option_id</code> is set to the <a href="#2-5-select-delivery-option">selected delivery option</a>, if shipping was requested.</li>
|
||||
<li><code>credentials</code> are the payment credentials generated by the payment provider, required to complete the order.</li>
|
||||
</ul>
|
||||
<p>Payment method info can also be saved to the Telegram Servers and reused, by setting the <code>save</code> flag of <a href="/constructor/inputPaymentCredentials">inputPaymentCredentials</a> when sending the form.
|
||||
This is only possible on accounts with <a href="/api/srp">2FA</a> enabled.</p>
|
||||
<p>The bot then <a href="#4-1-receiving-pre-checkout-query">replies to the received precheckout query</a>, finally the user <a href="#5-checkout">proceeds to checkout</a>.</p>
|
||||
<p>Please note that if the result of the method is a <a href="/constructor/payments.paymentVerificationNeeded">payments.paymentVerificationNeeded</a>, before <a href="#5-checkout">proceeding to checkout</a> the payment provider requires the user to verify his identity by opening the provided <code>url</code> and following instructions.
|
||||
Once the user finishes working with the webpage, the client can <a href="#5-checkout">proceed to checkout</a>.</p>
|
||||
<p>Eventual errors are returned in the form of RPC errors, with the description of the error by the bot contained in <a href="/constructor/updateServiceNotification">service updates</a>.</p>
|
||||
<h4><a class="anchor" href="#41-receiving-pre-checkout-query" id="41-receiving-pre-checkout-query" name="41-receiving-pre-checkout-query"><i class="anchor-icon"></i></a>4.1 Receiving pre-checkout query</h4>
|
||||
<pre><code><a href='/constructor/paymentRequestedInfo'>paymentRequestedInfo</a>#909c3f94 flags:<a href='/type/%23'>#</a> name:flags.0?<a href='/type/string'>string</a> phone:flags.1?<a href='/type/string'>string</a> email:flags.2?<a href='/type/string'>string</a> shipping_address:flags.3?<a href='/type/PostAddress'>PostAddress</a> = <a href='/type/PaymentRequestedInfo'>PaymentRequestedInfo</a>;
|
||||
|
||||
<a href='/constructor/updateBotPrecheckoutQuery'>updateBotPrecheckoutQuery</a>#8caa9a96 flags:<a href='/type/%23'>#</a> query_id:<a href='/type/long'>long</a> user_id:<a href='/type/long'>long</a> payload:<a href='/type/bytes'>bytes</a> info:flags.0?<a href='/type/PaymentRequestedInfo'>PaymentRequestedInfo</a> shipping_option_id:flags.1?<a href='/type/string'>string</a> currency:<a href='/type/string'>string</a> total_amount:<a href='/type/long'>long</a> = <a href='/type/Update'>Update</a>;
|
||||
|
||||
---functions---
|
||||
|
||||
<a href='/method/messages.setBotPrecheckoutResults'>messages.setBotPrecheckoutResults</a>#9c2dd95 flags:<a href='/type/%23'>#</a> success:flags.1?<a href='/constructor/true'>true</a> query_id:<a href='/type/long'>long</a> error:flags.0?<a href='/type/string'>string</a> = <a href='/type/Bool'>Bool</a>;</code></pre>
|
||||
<p>The user enters their payment information as described above and presses the final pay button.
|
||||
At this moment the Telegram API sends an <a href="/constructor/updateBotPrecheckoutQuery">updateBotPrecheckoutQuery</a> constructor that contains all the available information about the order to the bot.
|
||||
The bot must reply using <a href="/method/messages.setBotPrecheckoutResults">messages.setBotPrecheckoutResults</a> <strong>within 10 seconds</strong> after receiving this update or the transaction is canceled.</p>
|
||||
<p>The bot may return an error if it can‘t process the order for any reason. We highly recommend specifying a reason for failure to complete the order in human readable form (e.g. "Sorry, we’re all out of rubber ducks! Would you be interested in a steel bear instead?"). Telegram will display this reason to the user.</p>
|
||||
<h3><a class="anchor" href="#5-checkout" id="5-checkout" name="5-checkout"><i class="anchor-icon"></i></a>5. Checkout</h3>
|
||||
<pre><code><a href='/constructor/keyboardButtonBuy'>keyboardButtonBuy</a>#afd93fbb text:<a href='/type/string'>string</a> = <a href='/type/KeyboardButton'>KeyboardButton</a>;
|
||||
|
||||
<a href='/constructor/keyboardButtonRow'>keyboardButtonRow</a>#77608b83 buttons:<a href='/type/Vector%20t'>Vector</a><<a href='/type/KeyboardButton'>KeyboardButton</a>> = <a href='/type/KeyboardButtonRow'>KeyboardButtonRow</a>;
|
||||
<a href='/constructor/replyInlineMarkup'>replyInlineMarkup</a>#48a30254 rows:<a href='/type/Vector%20t'>Vector</a><<a href='/type/KeyboardButtonRow'>KeyboardButtonRow</a>> = <a href='/type/ReplyMarkup'>ReplyMarkup</a>;
|
||||
|
||||
<a href='/constructor/messageMediaInvoice'>messageMediaInvoice</a>#84551347 flags:<a href='/type/%23'>#</a> shipping_address_requested:flags.1?<a href='/constructor/true'>true</a> test:flags.3?<a href='/constructor/true'>true</a> title:<a href='/type/string'>string</a> description:<a href='/type/string'>string</a> photo:flags.0?<a href='/type/WebDocument'>WebDocument</a> receipt_msg_id:flags.2?<a href='/type/int'>int</a> currency:<a href='/type/string'>string</a> total_amount:<a href='/type/long'>long</a> start_param:<a href='/type/string'>string</a> = <a href='/type/MessageMedia'>MessageMedia</a>;
|
||||
|
||||
<a href='/constructor/message'>message</a>#85d6cbe2 flags:<a href='/type/%23'>#</a> out:flags.1?<a href='/constructor/true'>true</a> mentioned:flags.4?<a href='/constructor/true'>true</a> media_unread:flags.5?<a href='/constructor/true'>true</a> silent:flags.13?<a href='/constructor/true'>true</a> post:flags.14?<a href='/constructor/true'>true</a> from_scheduled:flags.18?<a href='/constructor/true'>true</a> legacy:flags.19?<a href='/constructor/true'>true</a> edit_hide:flags.21?<a href='/constructor/true'>true</a> pinned:flags.24?<a href='/constructor/true'>true</a> id:<a href='/type/int'>int</a> from_id:flags.8?<a href='/type/Peer'>Peer</a> peer_id:<a href='/type/Peer'>Peer</a> fwd_from:flags.2?<a href='/type/MessageFwdHeader'>MessageFwdHeader</a> via_bot_id:flags.11?<a href='/type/long'>long</a> reply_to:flags.3?<a href='/type/MessageReplyHeader'>MessageReplyHeader</a> date:<a href='/type/int'>int</a> message:<a href='/type/string'>string</a> media:flags.9?<a href='/type/MessageMedia'>MessageMedia</a> reply_markup:flags.6?<a href='/type/ReplyMarkup'>ReplyMarkup</a> entities:flags.7?<a href='/type/Vector%20t'>Vector</a><<a href='/type/MessageEntity'>MessageEntity</a>> views:flags.10?<a href='/type/int'>int</a> forwards:flags.10?<a href='/type/int'>int</a> replies:flags.23?<a href='/type/MessageReplies'>MessageReplies</a> edit_date:flags.15?<a href='/type/int'>int</a> post_author:flags.16?<a href='/type/string'>string</a> grouped_id:flags.17?<a href='/type/long'>long</a> restriction_reason:flags.22?<a href='/type/Vector%20t'>Vector</a><<a href='/type/RestrictionReason'>RestrictionReason</a>> ttl_period:flags.25?<a href='/type/int'>int</a> = <a href='/type/Message'>Message</a>;
|
||||
|
||||
<a href='/constructor/updateNewMessage'>updateNewMessage</a>#1f2b0afd message:<a href='/type/Message'>Message</a> pts:<a href='/type/int'>int</a> pts_count:<a href='/type/int'>int</a> = <a href='/type/Update'>Update</a>;
|
||||
|
||||
<a href='/constructor/payments.paymentReceipt'>payments.paymentReceipt</a>#70c4fe03 flags:<a href='/type/%23'>#</a> date:<a href='/type/int'>int</a> bot_id:<a href='/type/long'>long</a> provider_id:<a href='/type/long'>long</a> title:<a href='/type/string'>string</a> description:<a href='/type/string'>string</a> photo:flags.2?<a href='/type/WebDocument'>WebDocument</a> invoice:<a href='/type/Invoice'>Invoice</a> info:flags.0?<a href='/type/PaymentRequestedInfo'>PaymentRequestedInfo</a> shipping:flags.1?<a href='/type/ShippingOption'>ShippingOption</a> tip_amount:flags.3?<a href='/type/long'>long</a> currency:<a href='/type/string'>string</a> total_amount:<a href='/type/long'>long</a> credentials_title:<a href='/type/string'>string</a> users:<a href='/type/Vector%20t'>Vector</a><<a href='/type/User'>User</a>> = <a href='/type/payments.PaymentReceipt'>payments.PaymentReceipt</a>;
|
||||
|
||||
---functions---
|
||||
|
||||
<a href='/method/payments.getPaymentReceipt'>payments.getPaymentReceipt</a>#2478d1cc peer:<a href='/type/InputPeer'>InputPeer</a> msg_id:<a href='/type/int'>int</a> = <a href='/type/payments.PaymentReceipt'>payments.PaymentReceipt</a>;</code></pre>
|
||||
<p>In case the bot confirms the order, Telegram requests the payment provider to complete the transaction. If the payment information was entered correctly and the payment goes through, the Telegram API will modify the invoice message and send a service message as described below. Once your bot receives this message, it should proceed with delivering the goods or services purchased by the user.</p>
|
||||
<p>If all is OK, the user receives a <a href="/constructor/payments.paymentResult">payments.paymentResult</a> in reply to the <a href="/method/payments.sendPaymentForm">payments.sendPaymentForm</a> query, containing info about the updated invoice message in the form of an <a href="/constructor/updateEditMessage">updateEditMessage</a>.</p>
|
||||
<p>The invoice message will be updated as follows: the attached <a href="/constructor/messageMediaInvoice">messageMediaInvoice</a> will now have a <code>receipt_msg_id</code> field.
|
||||
Clients should treat invoice messages with a <code>receipt_msg_id</code> field as receipt messages, <strong>locally</strong> modifying the label of the <a href="/constructor/keyboardButtonBuy">keyboardButtonBuy</a> button to a localized version of the word <code>Receipt</code>.
|
||||
From this point, clicking on the <code>Receipt</code> button should trigger a call to <a href="/method/payments.getPaymentReceipt">payments.getPaymentReceipt</a>, providing the <code>receipt_msg_id</code> to the <code>msg_id</code> field, which will return info about the transaction.</p>
|
||||
<p>The payment will also generate one service message of type <a href="/constructor/messageActionPaymentSent">messageActionPaymentSent</a> or <a href="/constructor/messageActionPaymentSentMe">messageActionPaymentSentMe</a>, replying to the invoice.
|
||||
For bots, the service message will be of type <a href="/constructor/messageActionPaymentSentMe">messageActionPaymentSentMe</a>, for users it will be a <a href="/constructor/messageActionPaymentSent">messageActionPaymentSent</a>.</p>
|
||||
<pre><code><a href='/constructor/messageActionPaymentSentMe'>messageActionPaymentSentMe</a>#8f31b327 flags:<a href='/type/%23'>#</a> currency:<a href='/type/string'>string</a> total_amount:<a href='/type/long'>long</a> payload:<a href='/type/bytes'>bytes</a> info:flags.0?<a href='/type/PaymentRequestedInfo'>PaymentRequestedInfo</a> shipping_option_id:flags.1?<a href='/type/string'>string</a> charge:<a href='/type/PaymentCharge'>PaymentCharge</a> = <a href='/type/MessageAction'>MessageAction</a>;
|
||||
<a href='/constructor/messageActionPaymentSent'>messageActionPaymentSent</a>#40699cd0 currency:<a href='/type/string'>string</a> total_amount:<a href='/type/long'>long</a> = <a href='/type/MessageAction'>MessageAction</a>;</code></pre></div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_wrap">
|
||||
<div class="footer_columns_wrap footer_desktop">
|
||||
<div class="footer_column footer_column_telegram">
|
||||
<h5>Telegram</h5>
|
||||
<div class="footer_telegram_description"></div>
|
||||
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
|
||||
</div>
|
||||
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/faq">About</a></h5>
|
||||
<ul>
|
||||
<li><a href="//telegram.org/faq">FAQ</a></li>
|
||||
<li><a href="//telegram.org/blog">Blog</a></li>
|
||||
<li><a href="//telegram.org/jobs">Jobs</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/apps#mobile-apps">Mobile Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="//telegram.org/dl/ios">iPhone/iPad</a></li>
|
||||
<li><a href="//telegram.org/dl/android">Android</a></li>
|
||||
<li><a href="//telegram.org/dl/wp">Windows Phone</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/apps#desktop-apps">Desktop Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
|
||||
<li><a href="//macos.telegram.org/">macOS</a></li>
|
||||
<li><a href="//telegram.org/dl/web">Web-browser</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column footer_column_platform">
|
||||
<h5><a href="/">Platform</a></h5>
|
||||
<ul>
|
||||
<li><a href="/api">API</a></li>
|
||||
<li><a href="//translations.telegram.org/">Translations</a></li>
|
||||
<li><a href="//instantview.telegram.org/">Instant View</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_columns_wrap footer_mobile">
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/faq">About</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/blog">Blog</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/apps">Apps</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/">Platform</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/js/main.js?42"></script>
|
||||
<script src="/js/jquery.min.js?1"></script>
|
||||
<script src="/js/bootstrap.min.js"></script>
|
||||
|
||||
<script>window.initDevPageNav&&initDevPageNav();
|
||||
backToTopInit("Go up");
|
||||
removePreloadInit();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
File diff suppressed because it is too large
Load diff
|
@ -1,226 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Working with Updates</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta property="description" content="How to subscribe to updates and handle them properly.">
|
||||
<meta property="og:title" content="Working with Updates">
|
||||
<meta property="og:image" content="9c2ddd579d3d7cedba">
|
||||
<meta property="og:description" content="How to subscribe to updates and handle them properly.">
|
||||
<link rel="shortcut icon" href="/favicon.ico?4" type="image/x-icon" />
|
||||
|
||||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
||||
|
||||
<link href="/css/telegram.css?214" rel="stylesheet" media="screen">
|
||||
<style>
|
||||
</style>
|
||||
</head>
|
||||
<body class="preload">
|
||||
<div class="dev_page_wrap">
|
||||
<div class="dev_page_head navbar navbar-static-top navbar-tg">
|
||||
<div class="navbar-inner">
|
||||
<div class="container clearfix">
|
||||
<ul class="nav navbar-nav navbar-right hidden-xs"><li class="navbar-twitter"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i><span> Twitter</span></a></li></ul>
|
||||
<ul class="nav navbar-nav">
|
||||
<li><a href="//telegram.org/">Home</a></li>
|
||||
<li class="hidden-xs"><a href="//telegram.org/faq">FAQ</a></li>
|
||||
<li class="hidden-xs"><a href="//telegram.org/apps">Apps</a></li>
|
||||
<li class="active"><a href="/api">API</a></li>
|
||||
<li class=""><a href="/mtproto">Protocol</a></li>
|
||||
<li class=""><a href="/schema">Schema</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container clearfix">
|
||||
<div class="dev_page">
|
||||
<div id="dev_page_content_wrap" class=" ">
|
||||
<div class="dev_page_bread_crumbs"><ul class="breadcrumb clearfix"><li><a href="/api" >API</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/api/updates" >Working with Updates</a></li></ul></div>
|
||||
<h1 id="dev_page_title">Working with Updates</h1>
|
||||
|
||||
<div id="dev_page_content"><!-- scroll_nav -->
|
||||
|
||||
<p>When a client is being actively used, events will occur that affect the current user and that they must learn about as soon as possible, e.g. when a new message is received. To eliminate the need for the client itself to periodically download these events, there is an update delivery mechanism in which the server sends the user notifications over one of its available connections with the client.</p>
|
||||
<h3><a class="anchor" href="#subscribing-to-updates" id="subscribing-to-updates" name="subscribing-to-updates"><i class="anchor-icon"></i></a>Subscribing to Updates</h3>
|
||||
<p>Update events are sent to an authorized user into the last active connection (except for connections needed for downloading / uploading files).</p>
|
||||
<p>So to start receiving updates the client needs to init connection and call API method, e.g. to <a href="#fetching-state">fetch current state</a>.</p>
|
||||
<h3><a class="anchor" href="#event-sequences" id="event-sequences" name="event-sequences"><i class="anchor-icon"></i></a>Event sequences</h3>
|
||||
<p>All events are received from the socket as a sequence of TL-serialized <a href="/type/Updates">Updates</a> objects, which might be optionally gzip-compressed in the same way as <a href="/api/invoking#uncompressing-data">responses to queries</a>.</p>
|
||||
<p>Each <a href="/type/Updates">Updates</a> object may contain single or multiple <a href="/type/Update">Update</a> objects, representing different events happening.</p>
|
||||
<p>In order to apply all updates in precise order and to guarantee that no update is missed or applied twice there is <code>seq</code> attribute in <a href="/type/Updates">Updates</a> constructors, and <code>pts</code> (with <code>pts_count</code>) or <code>qts</code> attributes in <a href="/type/Update">Update</a> constructors. The client must use those attributes values in combination with locally stored state to correctly apply incoming updates.</p>
|
||||
<p>When a gap in updates sequence occurs, it must be filled via calling one of the API methods. <a href="#recovering-gaps">More below »</a></p>
|
||||
<h3><a class="anchor" href="#updates-sequence" id="updates-sequence" name="updates-sequence"><i class="anchor-icon"></i></a><a href="/type/Updates">Updates</a> sequence</h3>
|
||||
<p>As said earlier, each payload with updates has a TL-type <a href="/type/Updates">Updates</a>. It can be seen from the schema below that this type has several constructors.</p>
|
||||
<pre><code><a href='/constructor/updatesTooLong'>updatesTooLong</a>#e317af7e = <a href='/type/Updates'>Updates</a>;
|
||||
<a href='/constructor/updateShort'>updateShort</a>#78d4dec1 update:<a href='/type/Update'>Update</a> date:<a href='/type/int'>int</a> = <a href='/type/Updates'>Updates</a>;
|
||||
<a href='/constructor/updateShortMessage'>updateShortMessage</a>#313bc7f8 flags:<a href='/type/%23'>#</a> out:flags.1?<a href='/constructor/true'>true</a> mentioned:flags.4?<a href='/constructor/true'>true</a> media_unread:flags.5?<a href='/constructor/true'>true</a> silent:flags.13?<a href='/constructor/true'>true</a> id:<a href='/type/int'>int</a> user_id:<a href='/type/long'>long</a> message:<a href='/type/string'>string</a> pts:<a href='/type/int'>int</a> pts_count:<a href='/type/int'>int</a> date:<a href='/type/int'>int</a> fwd_from:flags.2?<a href='/type/MessageFwdHeader'>MessageFwdHeader</a> via_bot_id:flags.11?<a href='/type/long'>long</a> reply_to:flags.3?<a href='/type/MessageReplyHeader'>MessageReplyHeader</a> entities:flags.7?<a href='/type/Vector%20t'>Vector</a><<a href='/type/MessageEntity'>MessageEntity</a>> ttl_period:flags.25?<a href='/type/int'>int</a> = <a href='/type/Updates'>Updates</a>;
|
||||
<a href='/constructor/updateShortChatMessage'>updateShortChatMessage</a>#4d6deea5 flags:<a href='/type/%23'>#</a> out:flags.1?<a href='/constructor/true'>true</a> mentioned:flags.4?<a href='/constructor/true'>true</a> media_unread:flags.5?<a href='/constructor/true'>true</a> silent:flags.13?<a href='/constructor/true'>true</a> id:<a href='/type/int'>int</a> from_id:<a href='/type/long'>long</a> chat_id:<a href='/type/long'>long</a> message:<a href='/type/string'>string</a> pts:<a href='/type/int'>int</a> pts_count:<a href='/type/int'>int</a> date:<a href='/type/int'>int</a> fwd_from:flags.2?<a href='/type/MessageFwdHeader'>MessageFwdHeader</a> via_bot_id:flags.11?<a href='/type/long'>long</a> reply_to:flags.3?<a href='/type/MessageReplyHeader'>MessageReplyHeader</a> entities:flags.7?<a href='/type/Vector%20t'>Vector</a><<a href='/type/MessageEntity'>MessageEntity</a>> ttl_period:flags.25?<a href='/type/int'>int</a> = <a href='/type/Updates'>Updates</a>;
|
||||
<a href='/constructor/updateShortSentMessage'>updateShortSentMessage</a>#9015e101 flags:<a href='/type/%23'>#</a> out:flags.1?<a href='/constructor/true'>true</a> id:<a href='/type/int'>int</a> pts:<a href='/type/int'>int</a> pts_count:<a href='/type/int'>int</a> date:<a href='/type/int'>int</a> media:flags.9?<a href='/type/MessageMedia'>MessageMedia</a> entities:flags.7?<a href='/type/Vector%20t'>Vector</a><<a href='/type/MessageEntity'>MessageEntity</a>> ttl_period:flags.25?<a href='/type/int'>int</a> = <a href='/type/Updates'>Updates</a>;
|
||||
<a href='/constructor/updatesCombined'>updatesCombined</a>#725b04c3 updates:<a href='/type/Vector%20t'>Vector</a><<a href='/type/Update'>Update</a>> users:<a href='/type/Vector%20t'>Vector</a><<a href='/type/User'>User</a>> chats:<a href='/type/Vector%20t'>Vector</a><<a href='/type/Chat'>Chat</a>> date:<a href='/type/int'>int</a> seq_start:<a href='/type/int'>int</a> seq:<a href='/type/int'>int</a> = <a href='/type/Updates'>Updates</a>;
|
||||
<a href='/constructor/updates'>updates</a>#74ae4240 updates:<a href='/type/Vector%20t'>Vector</a><<a href='/type/Update'>Update</a>> users:<a href='/type/Vector%20t'>Vector</a><<a href='/type/User'>User</a>> chats:<a href='/type/Vector%20t'>Vector</a><<a href='/type/Chat'>Chat</a>> date:<a href='/type/int'>int</a> seq:<a href='/type/int'>int</a> = <a href='/type/Updates'>Updates</a>;</code></pre>
|
||||
<p><a href="/constructor/updatesTooLong">updatesTooLong</a> indicates that there are too many events pending to be pushed to the client, so one needs to <a href="#recovering-gaps">fetch them manually</a>.</p>
|
||||
<p>Events inside <a href="/constructor/updateShort">updateShort</a> constructors, normally, have lower priority and are broadcast to a large number of users, i.e. one of the chat participants started entering text in a big conversation (<a href="/constructor/updateChatUserTyping">updateChatUserTyping</a>).</p>
|
||||
<p>The <a href="/constructor/updateShortMessage">updateShortMessage</a>, <a href="/constructor/updateShortMessage">updateShortSentMessage</a> and <a href="/constructor/updateShortChatMessage">updateShortChatMessage</a> constructors are redundant but help significantly reduce the transmitted message size for 90% of the updates. They should be transformed to <a href="/constructor/updateShort">updateShort</a> upon receiving.</p>
|
||||
<p>Two remaining constructors <a href="/constructor/updates">updates</a> and <a href="/constructor/updatesCombined">updatesCombined</a> are part of the Updates sequence. Both of them have <code>seq</code> attribute, which indicates the remote Updates state after the generation of the Updates, and <code>seq_start</code> indicates the remote Updates state after the <em>first</em> of the Updates in the packet is generated. For <a href="/constructor/updates">updates</a>, <code>seq_start</code> attribute is omitted, because it is assumed that it is always equal to <code>seq</code>.</p>
|
||||
<h3><a class="anchor" href="#message-related-event-sequences" id="message-related-event-sequences" name="message-related-event-sequences"><i class="anchor-icon"></i></a>Message-related event sequences</h3>
|
||||
<p>Each <em>event</em> related to a message box (message created, message edited, message deleted, etc) is identified by a unique autoincremented <em>pts</em>, or <em>qts</em> in case of secret chat updates, certain bot updates, etc.</p>
|
||||
<p>Each message box can be considered as some server-side DB table that stores messages and events associated with them.
|
||||
All boxes are completely independent, and each pts sequence is tied to just one box (see below).</p>
|
||||
<p><a href="/type/Update">Update</a> object may contain info about <em>multiple events</em> (for example, <a href="/constructor/updateDeleteMessages">updateDeleteMessages</a>).
|
||||
That's why all single updates might have <em>pts_count</em> parameter indicating the <em>number of events</em> contained in the received <em>update</em> (with some exceptions, in this case, the <em>pts_count</em> is considered to be <code>0</code>).</p>
|
||||
<p>Each <a href="/api/channel">channel and supergroup</a> has its message box and <em>its event sequence</em> as a result; private chats and legacy groups of one user have another <em>common event sequence</em>.
|
||||
Secret chats, certain bot events and other kinds of updates have yet another <em>common secondary event sequence</em>.</p>
|
||||
<p>To recap, the client has to take care of the integrity of the following sequences to properly handle updates:</p>
|
||||
<ul>
|
||||
<li>Updates sequence (seq)<ul>
|
||||
<li>Common message box sequence (pts)</li>
|
||||
<li>Secondary event sequence (qts)</li>
|
||||
<li>Channel message box sequence 1 (pts)</li>
|
||||
<li>Channel message box sequence 2 (pts)</li>
|
||||
<li>Channel message box sequence 3 (pts)</li>
|
||||
<li>and so on...</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h3><a class="anchor" href="#fetching-state" id="fetching-state" name="fetching-state"><i class="anchor-icon"></i></a>Fetching state</h3>
|
||||
<p>The <em>common</em> update state is represented by the <a href="/type/updates.State">updates.State</a> constructor.
|
||||
When the user logs in for the first time, call to <a href="/method/updates.getState">updates.getState</a> has to be made to store the latest update state (which will not be the absolute initial state, just the latest state at the current time).
|
||||
The common update state can also be fetched from <a href="/constructor/updates.differenceTooLong">updates.differenceTooLong</a>.</p>
|
||||
<p>The <em>channel update state</em> is represented simply by the <em>pts</em> of the event sequence: when first logging in, the initial channel state can be obtained from the <a href="/constructor/dialog">dialog</a> constructor when fetching dialogs, from <a href="/constructor/channelFull">the full channel info</a>, or it can be received <a href="https://core.telegram.org/constructor/updateChannelTooLong">as an updateChannelTooLong update</a>.</p>
|
||||
<p>The <em>secondary update state</em> is represented by the <em>qts</em> of the secret event sequence, it is contained in the <a href="/type/updates.State">updates.State</a> of the <em>common update state</em>.</p>
|
||||
<p>The <em>Updates sequence state</em> is represented by the <em>date</em> and <em>seq</em> of the <em>Updates sequence</em>, it is contained in the <a href="/type/updates.State">updates.State</a> of the <em>common</em> update state.</p>
|
||||
<h3><a class="anchor" href="#update-handling" id="update-handling" name="update-handling"><i class="anchor-icon"></i></a>Update handling</h3>
|
||||
<p>Update handling in Telegram clients consists of receiving events, making sure there were no gaps and no events were missed based on the locally stored state of the correspondent event sequence, and then updating the locally stored state based on the parameters received.</p>
|
||||
<p>When the client receives payload with serialized updates, first of all, it needs to walk through all of the nested <a href="/type/Update">Update</a> objects and check if they belong to any of message box sequences (have <code>pts</code> or <code>qts</code> parameters). Those updates need to be handled separately according to corresponding local state and new <code>pts</code>/<code>qts</code> values. <a href="#pts-checking-and-applying">Details below »</a></p>
|
||||
<p>After message box updates are handled, if there are any other updates remaining the client needs to handle them with respect to <code>seq</code>. <a href="#seq-checking-and-applying">Details below »</a></p>
|
||||
<h4><a class="anchor" href="#pts-checking-and-applying" id="pts-checking-and-applying" name="pts-checking-and-applying"><i class="anchor-icon"></i></a><code>pts</code>: checking and applying</h4>
|
||||
<p>Here, <code>local_pts</code> will be the local state, <code>pts</code> will be the remote state, <code>pts_count</code> will be the number of events in the update.</p>
|
||||
<p>If <code>local_pts + pts_count === pts</code>, the update can be applied.
|
||||
If <code>local_pts + pts_count > pts</code>, the update was already applied, and must be ignored.
|
||||
If <code>local_pts + pts_count < pts</code>, there's an update gap that must be <a href="#recovering-gaps">filled</a>.</p>
|
||||
<p>For example, let's assume the client has the following local state for the channel <code>123456789</code>:</p>
|
||||
<pre><code>local_pts = 131</code></pre>
|
||||
<p>Now let's assume an <a href="/constructor/updateNewChannelMessage">updateNewChannelMessage</a> from channel <code>123456789</code> is received with <code>pts = 132</code> and <code>pts_count=1</code>.
|
||||
Since <code>local_pts + pts_count === pts</code>, the total number of events since the last stored state is, in fact, equal to <code>pts_count</code>: this means the update can be safely accepted and the remote <code>pts</code> applied:</p>
|
||||
<pre><code>local_pts = 132</code></pre>
|
||||
<p>Since:</p>
|
||||
<ul>
|
||||
<li><code>pts</code> indicates the server state <strong>after</strong> the new channel message events are generated</li>
|
||||
<li><code>pts_count</code> indicates the number of events in the new channel update</li>
|
||||
<li>The server state <strong>before the new channel message event was generated</strong> has to be: <code>pts_before = pts - pts_count = 131</code>, which is, in fact, equal to our local state.</li>
|
||||
</ul>
|
||||
<p>Now let's assume an <a href="/constructor/updateNewChannelMessage">updateNewChannelMessage</a> from channel <code>123456789</code> is received with <code>pts = 132</code> and <code>pts_count=1</code>.
|
||||
Since <code>local_pts + pts_count > pts</code> (<code>133 > 132</code>), the update is skipped because we've already handled this update (in fact, our current <code>local_pts</code> was set by this same update, and it was resent twice due to network issues or other issues).</p>
|
||||
<p>Now let's assume an <a href="/constructor/updateDeleteChannelMessages">updateDeleteChannelMessages</a> from channel <code>123456789</code> is received with <code>pts = 140</code> and <code>pts_count=5</code>.
|
||||
Since <code>local_pts + pts_count < pts</code> (<code>137 < 140</code>), this means that updates were missed, and the gap must be recovered.</p>
|
||||
<h5><a class="anchor" href="#secret-chats--bots" id="secret-chats--bots" name="secret-chats--bots"><i class="anchor-icon"></i></a>Secret chats & bots</h5>
|
||||
<p>The whole process is very similar for secret chats and certain bot updates, but there is <code>qts</code> instead of <code>pts</code>, and events are never grouped, so it's assumed that <code>qts_count</code> is always equal to 1.</p>
|
||||
<h4><a class="anchor" href="#seq-checking-and-applying" id="seq-checking-and-applying" name="seq-checking-and-applying"><i class="anchor-icon"></i></a><code>seq</code>: checking and applying</h4>
|
||||
<p>On top level when handling received <a href="/constructor/updates">updates</a> and <a href="/constructor/updatesCombined">updatesCombined</a> there are three possible cases:
|
||||
If <code>local_seq + 1 === seq_start</code>, the updates can be applied.
|
||||
If <code>local_seq + 1 > seq_start</code>, the updates were already applied, and must be ignored.
|
||||
If <code>local_seq + 1 < seq_start</code>, there's an updates gap that must be <a href="#recovering-gaps">filled</a> (updates.getDifference must be used as with common and secret event sequences).</p>
|
||||
<p>If the updates were applied, local <em>Updates state</em> must be updated with <code>seq</code> and <code>date</code> from the constructor.</p>
|
||||
<p>For all the other <a href="/type/Updates">Updates</a> type constructors there is no need to check <code>seq</code> or change a local state.</p>
|
||||
<h3><a class="anchor" href="#recovering-gaps" id="recovering-gaps" name="recovering-gaps"><i class="anchor-icon"></i></a>Recovering gaps</h3>
|
||||
<p>To do this, <a href="/method/updates.getDifference">updates.getDifference</a> (common/secret state) or <a href="/method/updates.getChannelDifference">updates.getChannelDifference</a> (channel state) with the respective local states must be called.
|
||||
These methods should also be called on startup, to fetch new updates (preferably with some flags to reduce server load, see the method's docs).
|
||||
Manually obtaining updates is also required in the following situations:</p>
|
||||
<ul>
|
||||
<li>Loss of sync: a gap was found in <strong>seq</strong> / <strong>pts</strong> / <strong>qts</strong> (as described above). It may be useful to wait up to 0.5 seconds in this situation and abort the sync in case a new update arrives, that fills the gap.</li>
|
||||
<li>Session loss on the server: the client receives a <a href="https://core.telegram.org/mtproto/service_messages#new-session-creation-notification">new session created notification</a>. This can be caused by garbage collection on the MTProto server or a server reboot.</li>
|
||||
<li>Incorrect update: the client cannot deserialize the received data.</li>
|
||||
<li>Incomplete update: the client is missing data about a chat/user from one of the shortened constructors, such as <a href="/constructor/updateShortChatMessage">updateShortChatMessage</a>, etc.</li>
|
||||
<li>Long period without updates: no updates for 15 minutes or longer.</li>
|
||||
<li>The server requests the client to fetch the difference using <a href="/constructor/updateChannelTooLong">updateChannelTooLong</a> or <a href="/constructor/updatesTooLong">updatesTooLong</a>.</li>
|
||||
</ul>
|
||||
<p>When calling <a href="/method/updates.getDifference">updates.getDifference</a> if the <a href="/constructor/updates.differenceSlice">updates.differenceSlice</a> constructor is returned in response, the full difference was too large to be received in one request. The intermediate status, <strong>intermediate_state</strong>, must be saved on the client and the query must be repeated, using the intermediate status as the current status.</p>
|
||||
<p>To fetch the updates difference of a channel, <a href="/method/updates.getChannelDifference">updates.getChannelDifference</a> is used.
|
||||
If the difference is too large to be received in one request, the <code>final</code> flag of the result is <strong>not</strong> set (see <a href="/type/updates.ChannelDifference">docs</a>).
|
||||
The intermediate status, represented by the <strong>pts</strong>, must be saved on the client and the query must be repeated, using the intermediate status as the current status.</p>
|
||||
<p>For perfomance reasons and for better user experience, client can set maximum gap size to be filled: <code>pts_total_limit</code> parameter of <a href="/method/updates.getDifference">updates.getDifference</a> and <code>limit</code> parameter for <a href="/method/updates.getChannelDifference">updates.getChannelDifference</a> can be used.</p>
|
||||
<p>If the gap is too large and there are too many updates to fetch, a <code>*TooLong</code> constructor will be returned. In this case, the client must <a href="#fetching-state">re-fetch the state</a>, re-start fetching updates from that state and follow the instructions that can be found <a href="/constructor/updates.channelDifferenceTooLong">here</a>.</p>
|
||||
<p>It is recommended to use limit <code>10-100</code> for channels and <code>1000-10000</code> otherwise.</p>
|
||||
<h3><a class="anchor" href="#example-implementations" id="example-implementations" name="example-implementations"><i class="anchor-icon"></i></a>Example implementations</h3>
|
||||
<p>Implementations also have to take care to postpone updates received via the socket while filling gaps in the event and Update sequences, as well as avoid filling gaps in the same sequence.</p>
|
||||
<p>Example implementations: <a href="https://github.com/tdlib/td">tdlib</a>, <a href="https://github.com/danog/MadelineProto">MadelineProto</a>. </p>
|
||||
<p>An interesting and easy way this can be implemented, instead of using various locks, is by running background loops, like in <a href="https://docs.madelineproto.xyz/docs/UPDATES_INTERNAL.html">MadelineProto »</a>.</p>
|
||||
<h3><a class="anchor" href="#push-notifications-about-updates" id="push-notifications-about-updates" name="push-notifications-about-updates"><i class="anchor-icon"></i></a><a href="/api/push-updates">PUSH Notifications about Updates</a></h3>
|
||||
<p>If a client does not have an active connection at the time of an event, <a href="/api/push-updates">PUSH Notifications</a> will also be useful.</p></div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_wrap">
|
||||
<div class="footer_columns_wrap footer_desktop">
|
||||
<div class="footer_column footer_column_telegram">
|
||||
<h5>Telegram</h5>
|
||||
<div class="footer_telegram_description"></div>
|
||||
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
|
||||
</div>
|
||||
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/faq">About</a></h5>
|
||||
<ul>
|
||||
<li><a href="//telegram.org/faq">FAQ</a></li>
|
||||
<li><a href="//telegram.org/blog">Blog</a></li>
|
||||
<li><a href="//telegram.org/jobs">Jobs</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/apps#mobile-apps">Mobile Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="//telegram.org/dl/ios">iPhone/iPad</a></li>
|
||||
<li><a href="//telegram.org/dl/android">Android</a></li>
|
||||
<li><a href="//telegram.org/dl/wp">Windows Phone</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/apps#desktop-apps">Desktop Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
|
||||
<li><a href="//macos.telegram.org/">macOS</a></li>
|
||||
<li><a href="//telegram.org/dl/web">Web-browser</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column footer_column_platform">
|
||||
<h5><a href="/">Platform</a></h5>
|
||||
<ul>
|
||||
<li><a href="/api">API</a></li>
|
||||
<li><a href="//translations.telegram.org/">Translations</a></li>
|
||||
<li><a href="//instantview.telegram.org/">Instant View</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_columns_wrap footer_mobile">
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/faq">About</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/blog">Blog</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/apps">Apps</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/">Platform</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/js/main.js?42"></script>
|
||||
<script src="/js/jquery.min.js?1"></script>
|
||||
<script src="/js/bootstrap.min.js"></script>
|
||||
|
||||
<script>window.initDevPageNav&&initDevPageNav();
|
||||
backToTopInit("Go up");
|
||||
removePreloadInit();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,145 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>payments.ValidatedRequestedInfo</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta property="description" content="Validated user-provided info">
|
||||
<meta property="og:title" content="payments.ValidatedRequestedInfo">
|
||||
<meta property="og:image" content="">
|
||||
<meta property="og:description" content="Validated user-provided info">
|
||||
<link rel="shortcut icon" href="/favicon.ico?4" type="image/x-icon" />
|
||||
|
||||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
||||
|
||||
<link href="/css/telegram.css?214" rel="stylesheet" media="screen">
|
||||
<style>
|
||||
</style>
|
||||
</head>
|
||||
<body class="preload">
|
||||
<div class="dev_page_wrap">
|
||||
<div class="dev_page_head navbar navbar-static-top navbar-tg">
|
||||
<div class="navbar-inner">
|
||||
<div class="container clearfix">
|
||||
<ul class="nav navbar-nav navbar-right hidden-xs"><li class="navbar-twitter"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i><span> Twitter</span></a></li></ul>
|
||||
<ul class="nav navbar-nav">
|
||||
<li><a href="//telegram.org/">Home</a></li>
|
||||
<li class="hidden-xs"><a href="//telegram.org/faq">FAQ</a></li>
|
||||
<li class="hidden-xs"><a href="//telegram.org/apps">Apps</a></li>
|
||||
<li class=""><a href="/api">API</a></li>
|
||||
<li class=""><a href="/mtproto">Protocol</a></li>
|
||||
<li class="active"><a href="/schema">Schema</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container clearfix">
|
||||
<div class="dev_page">
|
||||
<div id="dev_page_content_wrap" class=" ">
|
||||
<div class="dev_page_bread_crumbs"><ul class="breadcrumb clearfix"><li><a href="/api" >API</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/schema" >TL-schema</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/constructor/payments.ValidatedRequestedInfo" >payments.ValidatedRequestedInfo</a></li></ul></div>
|
||||
<h1 id="dev_page_title">payments.ValidatedRequestedInfo</h1>
|
||||
|
||||
<div id="dev_page_content"><p>Validated user-provided info</p>
|
||||
<p>{schema}</p>
|
||||
<h3><a class="anchor" href="#parameters" id="parameters" name="parameters"><i class="anchor-icon"></i></a>Parameters</h3>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th style="text-align: center;">Type</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>flags</strong></td>
|
||||
<td style="text-align: center;"><a href="/type/%23">#</a></td>
|
||||
<td>Flags, see <a href="/mtproto/TL-combinators#conditional-fields">TL conditional fields</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>id</strong></td>
|
||||
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.0?<a href="/type/string">string</a></td>
|
||||
<td>ID</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>shipping_options</strong></td>
|
||||
<td style="text-align: center;"><a href="/mtproto/TL-combinators#conditional-fields">flags</a>.1?<a href="/type/Vector%20t">Vector</a><<a href="/type/ShippingOption">ShippingOption</a>></td>
|
||||
<td>Shipping options</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3><a class="anchor" href="#type" id="type" name="type"><i class="anchor-icon"></i></a>Type</h3>
|
||||
<p><a href="/type/payments.ValidatedRequestedInfo">payments.ValidatedRequestedInfo</a></p></div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_wrap">
|
||||
<div class="footer_columns_wrap footer_desktop">
|
||||
<div class="footer_column footer_column_telegram">
|
||||
<h5>Telegram</h5>
|
||||
<div class="footer_telegram_description"></div>
|
||||
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
|
||||
</div>
|
||||
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/faq">About</a></h5>
|
||||
<ul>
|
||||
<li><a href="//telegram.org/faq">FAQ</a></li>
|
||||
<li><a href="//telegram.org/blog">Blog</a></li>
|
||||
<li><a href="//telegram.org/jobs">Jobs</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/apps#mobile-apps">Mobile Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="//telegram.org/dl/ios">iPhone/iPad</a></li>
|
||||
<li><a href="//telegram.org/dl/android">Android</a></li>
|
||||
<li><a href="//telegram.org/dl/wp">Windows Phone</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/apps#desktop-apps">Desktop Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
|
||||
<li><a href="//macos.telegram.org/">macOS</a></li>
|
||||
<li><a href="//telegram.org/dl/web">Web-browser</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column footer_column_platform">
|
||||
<h5><a href="/">Platform</a></h5>
|
||||
<ul>
|
||||
<li><a href="/api">API</a></li>
|
||||
<li><a href="//translations.telegram.org/">Translations</a></li>
|
||||
<li><a href="//instantview.telegram.org/">Instant View</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_columns_wrap footer_mobile">
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/faq">About</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/blog">Blog</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/apps">Apps</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/">Platform</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/js/main.js?42"></script>
|
||||
|
||||
<script>backToTopInit("Go up");
|
||||
removePreloadInit();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,134 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>true</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta property="description" content="See predefined identifiers.">
|
||||
<meta property="og:title" content="true">
|
||||
<meta property="og:image" content="">
|
||||
<meta property="og:description" content="See predefined identifiers.">
|
||||
<link rel="shortcut icon" href="/favicon.ico?4" type="image/x-icon" />
|
||||
|
||||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
||||
|
||||
<link href="/css/telegram.css?214" rel="stylesheet" media="screen">
|
||||
<style>
|
||||
</style>
|
||||
</head>
|
||||
<body class="preload">
|
||||
<div class="dev_page_wrap">
|
||||
<div class="dev_page_head navbar navbar-static-top navbar-tg">
|
||||
<div class="navbar-inner">
|
||||
<div class="container clearfix">
|
||||
<ul class="nav navbar-nav navbar-right hidden-xs"><li class="navbar-twitter"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i><span> Twitter</span></a></li></ul>
|
||||
<ul class="nav navbar-nav">
|
||||
<li><a href="//telegram.org/">Home</a></li>
|
||||
<li class="hidden-xs"><a href="//telegram.org/faq">FAQ</a></li>
|
||||
<li class="hidden-xs"><a href="//telegram.org/apps">Apps</a></li>
|
||||
<li class=""><a href="/api">API</a></li>
|
||||
<li class=""><a href="/mtproto">Protocol</a></li>
|
||||
<li class="active"><a href="/schema">Schema</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container clearfix">
|
||||
<div class="dev_page">
|
||||
<div id="dev_page_content_wrap" class=" ">
|
||||
<div class="dev_page_bread_crumbs"><ul class="breadcrumb clearfix"><li><a href="/api" >API</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/schema" >TL-schema</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/constructor/true" >true</a></li></ul></div>
|
||||
<h1 id="dev_page_title">true</h1>
|
||||
|
||||
<div id="dev_page_content"><p>See <a href="/mtproto/TL-formal#predefined-identifiers">predefined identifiers</a>.</p>
|
||||
<p><div class="clearfix">
|
||||
<ul class="dev_layer_select slightly-pull-right nav nav-pills">
|
||||
<li class="dropdown">
|
||||
<a class="dropdown-toggle" onclick="return dropdownClick(this, event)" href="#">Layer 133 <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="?layer=1">1 – Base layer</a></li><li><a href="?layer=2">2 – New userpic notifications</a></li><li><a href="?layer=3">3 – Send message can trigger link change</a></li><li><a href="?layer=4">4 – Check-in chats</a></li><li><a href="?layer=5">5 – Localized SMS, localized notifications</a></li><li><a href="?layer=6">6 – Foursquare integration</a></li><li><a href="?layer=7">7 – Added wallPaperSolid</a></li><li><a href="?layer=8">8 – Added end-to-end encryption</a></li><li><a href="?layer=9">9 – Improved big files upload perfomance</a></li><li><a href="?layer=10">10 – Improved chat participants updates</a></li><li><a href="?layer=11">11 – Improved secret chats</a></li><li><a href="?layer=12">12 – New dynamic support</a></li><li><a href="?layer=13">13 – Audio, video MIME; contacts import retry; new secret actions</a></li><li><a href="?layer=14">14 – Notify settings sync, blacklist sync</a></li><li><a href="?layer=15">15 – Modified getHistory offset behaviour</a></li><li><a href="?layer=16">16 – Split sendCode into 2 parts</a></li><li><a href="?layer=17">17 – Added custom typing, introduced message flags</a></li><li><a href="?layer=18">18 – Added usernames</a></li><li><a href="?layer=23">23 – Stickers for secret chats</a></li><li><a href="?layer=105">105 – Scheduled messages, Cloud themes</a></li><li><a href="?layer=108">108 – Login with QR code</a></li><li><a href="?layer=109">109 – Polls v2</a></li><li><a href="?layer=110">110 – People Nearby 2.0, Bank card entity</a></li><li><a href="?layer=111">111 – Folders, Broadcast Stats</a></li><li><a href="?layer=112">112 – Old featured stickers, generic dice, poll timer, poll solution</a></li><li><a href="?layer=113">113 – PSA</a></li><li><a href="?layer=114">114 – Video thumbs for GIFs</a></li><li><a href="?layer=115">115 – Peek Channel Invite</a></li><li><a href="?layer=116">116 – Group Stats, Profile Videos</a></li><li><a href="?layer=117">117 – WebRTC Phone Calls</a></li><li><a href="?layer=118">118 – Callback with 2FA, Countries list</a></li><li><a href="?layer=119">119 – Comments in channels, Threads, Anonymous Admins</a></li><li><a href="?layer=120">120 – Multipins, Message Stats, GeoLive v2</a></li><li><a href="?layer=121">121 – SVG-based Outlines for Stickers</a></li><li><a href="?layer=122">122 – Voice Chats</a></li><li><a href="?layer=123">123 – Voice Chat improvements</a></li><li><a href="?layer=124">124 – Expiring Invite links</a></li><li><a href="?layer=125">125 – Voice Chats in Broadcasts</a></li><li><a href="?layer=126">126 – Ban channels in channels</a></li><li><a href="?layer=127">127 – Payments in channels</a></li><li><a href="?layer=128">128 – Microthumbs for User/Chat profile photos</a></li><li><a href="?layer=129">129 – Video Chats</a></li><li><a href="?layer=130">130 – Custom placeholder for bot reply keyboards</a></li><li><a href="?layer=131">131 – Reset 2FA Password after a week</a></li><li><a href="?layer=132">132 – Chat themes</a></li><li><a href="?layer=133"><strong>133 – 64-bit IDs for User/Chat</strong></a></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="/api/layers">More...</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<pre class="page_scheme"><code><a href="/constructor/true" class="current_page_link" >true</a>#3fedd339 = <a href="/type/True" >True</a>;</code></pre></p>
|
||||
<h3><a class="anchor" href="#parameters" id="parameters" name="parameters"><i class="anchor-icon"></i></a>Parameters</h3>
|
||||
<p>This constructor does not require any parameters.</p>
|
||||
<h3><a class="anchor" href="#type" id="type" name="type"><i class="anchor-icon"></i></a>Type</h3>
|
||||
<p><a href="/type/True">True</a></p>
|
||||
<h3><a class="anchor" href="#related-pages" id="related-pages" name="related-pages"><i class="anchor-icon"></i></a>Related pages</h3>
|
||||
<h4><a class="anchor" href="#tl-formal" id="tl-formal" name="tl-formal"><i class="anchor-icon"></i></a><a href="/mtproto/TL-formal">TL-formal</a></h4></div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_wrap">
|
||||
<div class="footer_columns_wrap footer_desktop">
|
||||
<div class="footer_column footer_column_telegram">
|
||||
<h5>Telegram</h5>
|
||||
<div class="footer_telegram_description"></div>
|
||||
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
|
||||
</div>
|
||||
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/faq">About</a></h5>
|
||||
<ul>
|
||||
<li><a href="//telegram.org/faq">FAQ</a></li>
|
||||
<li><a href="//telegram.org/blog">Blog</a></li>
|
||||
<li><a href="//telegram.org/jobs">Jobs</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/apps#mobile-apps">Mobile Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="//telegram.org/dl/ios">iPhone/iPad</a></li>
|
||||
<li><a href="//telegram.org/dl/android">Android</a></li>
|
||||
<li><a href="//telegram.org/dl/wp">Windows Phone</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/apps#desktop-apps">Desktop Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
|
||||
<li><a href="//macos.telegram.org/">macOS</a></li>
|
||||
<li><a href="//telegram.org/dl/web">Web-browser</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column footer_column_platform">
|
||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
||||
<ul>
|
||||
<li><a href="//core.telegram.org/api">API</a></li>
|
||||
<li><a href="//translations.telegram.org/">Translations</a></li>
|
||||
<li><a href="//instantview.telegram.org/">Instant View</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_columns_wrap footer_mobile">
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/faq">About</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/blog">Blog</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/apps">Apps</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/js/main.js?42"></script>
|
||||
|
||||
<script>backToTopInit("Go up");
|
||||
removePreloadInit();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,238 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Mobile Protocol: Detailed Description</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta property="description" content="As of version 4.6, major Telegram clients are using MTProto 2.0.
|
||||
MTProto v.1.0 is deprecated and is currently being phased…">
|
||||
<meta property="og:title" content="Mobile Protocol: Detailed Description">
|
||||
<meta property="og:image" content="https://corefork.telegram.org/file/811140746/2/CzMyJPVnPo8.81605/c2310d6ede1a5e220f">
|
||||
<meta property="og:description" content="As of version 4.6, major Telegram clients are using MTProto 2.0.
|
||||
MTProto v.1.0 is deprecated and is currently being phased…">
|
||||
<link rel="shortcut icon" href="/favicon.ico?4" type="image/x-icon" />
|
||||
|
||||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
||||
|
||||
<link href="/css/telegram.css?214" rel="stylesheet" media="screen">
|
||||
<style>
|
||||
</style>
|
||||
</head>
|
||||
<body class="preload">
|
||||
<div class="dev_page_wrap">
|
||||
<div class="dev_page_head navbar navbar-static-top navbar-tg">
|
||||
<div class="navbar-inner">
|
||||
<div class="container clearfix">
|
||||
<ul class="nav navbar-nav navbar-right hidden-xs"><li class="navbar-twitter"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i><span> Twitter</span></a></li></ul>
|
||||
<ul class="nav navbar-nav">
|
||||
<li><a href="//telegram.org/">Home</a></li>
|
||||
<li class="hidden-xs"><a href="//telegram.org/faq">FAQ</a></li>
|
||||
<li class="hidden-xs"><a href="//telegram.org/apps">Apps</a></li>
|
||||
<li class=""><a href="/api">API</a></li>
|
||||
<li class="active"><a href="/mtproto">Protocol</a></li>
|
||||
<li class=""><a href="/schema">Schema</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container clearfix">
|
||||
<div class="dev_page">
|
||||
<div id="dev_page_content_wrap" class=" ">
|
||||
<div class="dev_page_bread_crumbs"><ul class="breadcrumb clearfix"><li><a href="/mtproto" >Mobile Protocol</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/mtproto/description" >Mobile Protocol: Detailed Description</a></li></ul></div>
|
||||
<h1 id="dev_page_title">Mobile Protocol: Detailed Description</h1>
|
||||
|
||||
<div id="dev_page_content"><!-- scroll_nav -->
|
||||
|
||||
<blockquote>
|
||||
<p>As of version 4.6, major Telegram clients are using <strong>MTProto 2.0</strong>.
|
||||
MTProto v.1.0 is deprecated and is currently being phased out.</p>
|
||||
</blockquote>
|
||||
<p>This article describes the basic layer of the MTProto protocol version 2.0 (Cloud chats, server-client encryption). The principal differences from version 1.0 (<a href="/mtproto/description_v1">described here</a> for reference) are as follows:</p>
|
||||
<ul>
|
||||
<li>SHA-256 is used instead of SHA-1;</li>
|
||||
<li>Padding bytes are involved in the computation of <strong>msg_key</strong>;</li>
|
||||
<li><strong>msg_key</strong> depends not only on the message to be encrypted, but on a portion of <strong>auth_key</strong> as well;</li>
|
||||
<li>12..1024 padding bytes are used instead of 0..15 padding bytes in v.1.0.</li>
|
||||
</ul>
|
||||
<p>See also: <a href="https://core.telegram.org/api/end-to-end">MTProto 2.0: Secret Chats, end-to-end encryption</a></p>
|
||||
<h3><a class="anchor" href="#protocol-description" id="protocol-description" name="protocol-description"><i class="anchor-icon"></i></a>Protocol description</h3>
|
||||
<p>Before a message (or a multipart message) is 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 that consists of a 64-bit key identifier <strong>auth_key_id</strong> (that uniquely identifies an authorization key for the server as well as the user) and a 128-bit message key <strong>msg_key</strong>. </p>
|
||||
<p>The authorization key <strong>auth_key</strong> combined with the message key <strong>msg_key</strong> define an actual 256-bit key <strong>aes_key</strong> and a 256-bit initialization vector <strong>aes_iv</strong>, which are used to encrypt the message using AES-256 encryption in infinite garble extension (IGE) mode. 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). In <strong>MTProto 2.0</strong>, the message key is defined as the 128 middle bits of the SHA-256 of the message body (including session, message ID, padding, etc.) prepended by 32 bytes taken from the authorization key. In the older <strong>MTProto 1.0</strong>, the message key was computed as the lower 128 bits of SHA-1 of the message body, excluding the padding bytes.</p>
|
||||
<p>Multipart messages are encrypted as a single message. </p>
|
||||
<div><a href="/file/811140746/2/CzMyJPVnPo8.81605/c2310d6ede1a5e220f">
|
||||
<img src="/file/811140746/2/CzMyJPVnPo8.81605/c2310d6ede1a5e220f" alt="MTProto server-client encryption, cloud chats" class="dev_page_image" style="max-width: 600px;">
|
||||
</a></div>
|
||||
<blockquote>
|
||||
<p>Got questions about this setup? — Check out the <a href="http://core.telegram.org/techfaq">Advanced FAQ</a>!</p>
|
||||
</blockquote>
|
||||
<h6><strong>Note 1</strong></h6>
|
||||
<p>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:</p>
|
||||
<ul>
|
||||
<li>server salt (64-Bit)</li>
|
||||
<li>session id</li>
|
||||
<li>message sequence number</li>
|
||||
<li>message length</li>
|
||||
<li>time</li>
|
||||
</ul>
|
||||
<h6><strong>Note 2</strong></h6>
|
||||
<p>Telegram's <strong>End-to-end</strong> encrypted Secret Chats are using an additional layer of encryption on top of the described above. See <a href="https://core.telegram.org/api/end-to-end">Secret Chats, End-to-End encryption</a> for details.</p>
|
||||
<h3><a class="anchor" href="#terminology" id="terminology" name="terminology"><i class="anchor-icon"></i></a>Terminology</h3>
|
||||
<h4><a class="anchor" href="#authorization-key-auth-key" id="authorization-key-auth-key" name="authorization-key-auth-key"><i class="anchor-icon"></i></a>Authorization Key (auth_key)</h4>
|
||||
<p>A 2048-bit key shared by the client device and the server, created upon user registration directly on the client device by exchanging Diffie-Hellman keys, and never transmitted over a network. Each authorization key is user-specific. There is nothing that prevents a user from having several keys (that correspond to “permanent sessions” on different devices), and some of these may be locked forever in the event the device is lost. See also <a href="/mtproto/auth_key">Creating an Authorization Key</a>.</p>
|
||||
<h4><a class="anchor" href="#server-key" id="server-key" name="server-key"><i class="anchor-icon"></i></a>Server Key</h4>
|
||||
<p>A 2048-bit RSA key used by the server digitally to sign its own messages while registration is underway and the authorization key is being generated. The application has a built-in public server key which can be used to verify a signature but cannot be used to sign messages. A private server key is stored on the server and changed very infrequently.</p>
|
||||
<h4><a class="anchor" href="#key-identifier-auth-key-id" id="key-identifier-auth-key-id" name="key-identifier-auth-key-id"><i class="anchor-icon"></i></a>Key Identifier (auth_key_id)</h4>
|
||||
<p>The 64 lower-order bits of the SHA1 hash of the authorization key are used to indicate which particular key was used to encrypt a message. Keys must be uniquely defined by the 64 lower-order bits of their SHA1, and in the event of a collision, an authorization key is regenerated. A zero key identifier means that encryption is not used which is permissible for a limited set of message types used during registration to generate an authorization key in a Diffie-Hellman exchange. <strong>For MTProto 2.0, SHA1 is still used here, because auth_key_id should identify the authorization key used independently of the protocol version.</strong></p>
|
||||
<h4><a class="anchor" href="#session" id="session" name="session"><i class="anchor-icon"></i></a>Session</h4>
|
||||
<p>A (random) 64-bit number generated by the client to distinguish between individual sessions (for example, between different instances of the application, created with the same authorization key). The session in conjunction with the key identifier corresponds to an application instance. The server can maintain session state. <em>Under no circumstances can a message meant for one session be sent into a different session</em>. The server may unilaterally forget any client sessions; clients should be able to handle this. </p>
|
||||
<h4><a class="anchor" href="#server-salt" id="server-salt" name="server-salt"><i class="anchor-icon"></i></a>Server Salt</h4>
|
||||
<p>A (random) 64-bit number changed every 30 minutes (separately for each session) at the request of the server. All subsequent messages must contain the new salt (although, messages with the old salt are still accepted for a further 1800 seconds). Required to protect against replay attacks and certain tricks associated with adjusting the client clock to a moment in the distant future.</p>
|
||||
<h4><a class="anchor" href="#message-identifier-msg-id" id="message-identifier-msg-id" name="message-identifier-msg-id"><i class="anchor-icon"></i></a>Message Identifier (msg_id)</h4>
|
||||
<p>A (time-dependent) 64-bit number used uniquely to identify a message within a session. Client message identifiers are divisible by 4, server message identifiers modulo 4 yield 1 if the message is a response to a client message, and 3 otherwise. Client message identifiers must increase monotonically (within a single session), the same as server message identifiers, and must approximately equal unixtime*2^32. This way, a message identifier points to the approximate moment in time the message was created. A message is rejected over 300 seconds after it is created or 30 seconds before it is created (this is needed to protect from replay attacks). In this situation, it must be re-sent with a different identifier (or placed in a container with a higher identifier). The identifier of a message container must be strictly greater than those of its nested messages.</p>
|
||||
<p><strong>Important</strong>: to counter replay-attacks the lower 32 bits of <strong>msg_id</strong> passed by the client must not be empty and must present a fractional part of the time point when the message was created.</p>
|
||||
<h4><a class="anchor" href="#content-related-message" id="content-related-message" name="content-related-message"><i class="anchor-icon"></i></a>Content-related Message</h4>
|
||||
<p>A message requiring an explicit acknowledgment. These include all the user and many service messages, virtually all with the exception of containers and acknowledgments. </p>
|
||||
<h4><a class="anchor" href="#message-sequence-number-msg-seqno" id="message-sequence-number-msg-seqno" name="message-sequence-number-msg-seqno"><i class="anchor-icon"></i></a>Message Sequence Number (msg_seqno)</h4>
|
||||
<p>A 32-bit number equal to twice the number of “content-related” messages (those requiring acknowledgment, and in particular those that are not containers) created by the sender prior to this message and subsequently incremented by one if the current message is a content-related message. A container is always generated after its entire contents; therefore, its sequence number is greater than or equal to the sequence numbers of the messages contained in it.</p>
|
||||
<h4><a class="anchor" href="#message-key-msg-key" id="message-key-msg-key" name="message-key-msg-key"><i class="anchor-icon"></i></a>Message Key (msg_key)</h4>
|
||||
<p>In <strong>MTProto 2.0</strong>, the middle 128 bits of the SHA-256 hash of the message to be encrypted (including the internal header and the <em>padding bytes</em> for MTProto 2.0), prepended by a 32-byte fragment of the authorization key.</p>
|
||||
<p>In <strong>MTProto 1.0</strong>, message key was defined differently, as the lower 128 bits of the SHA-1 hash of the message to be encrypted, with padding bytes excluded from the computation of the hash. Authorization key was not involved in this computation.</p>
|
||||
<h4><a class="anchor" href="#internal-cryptographic-header" id="internal-cryptographic-header" name="internal-cryptographic-header"><i class="anchor-icon"></i></a>Internal (cryptographic) Header</h4>
|
||||
<p>A header (16 bytes) added before a message or a container before it is all encrypted together. Consists of the server salt (64 bits) and the session (64 bits).</p>
|
||||
<h4><a class="anchor" href="#external-cryptographic-header" id="external-cryptographic-header" name="external-cryptographic-header"><i class="anchor-icon"></i></a>External (cryptographic) Header</h4>
|
||||
<p>A header (24 bytes) added before an encrypted message or a container. Consists of the key identifier <strong>auth_key_id</strong> (64 bits) and the message key <strong>msg_key</strong> (128 bits).</p>
|
||||
<h4><a class="anchor" href="#payload" id="payload" name="payload"><i class="anchor-icon"></i></a>Payload</h4>
|
||||
<p>External header + encrypted message or container.</p>
|
||||
<h3><a class="anchor" href="#defining-aes-key-and-initialization-vector" id="defining-aes-key-and-initialization-vector" name="defining-aes-key-and-initialization-vector"><i class="anchor-icon"></i></a>Defining AES Key and Initialization Vector</h3>
|
||||
<p>The 2048-bit authorization key (auth_key) and the 128-bit message key (msg_key) are used to compute a 256-bit AES key (aes_key) and a 256-bit initialization vector (aes_iv) which are subsequently used to encrypt the part of the message to be encrypted (i. e. everything with the exception of the external header that is added later) with AES-256 in infinite garble extension (IGE) mode.</p>
|
||||
<p>For MTProto 2.0, the algorithm for computing aes_key and aes_iv from auth_key and msg_key is as follows.</p>
|
||||
<ul>
|
||||
<li>msg_key_large = SHA256 (substr (auth_key, 88+x, 32) + plaintext + random_padding);</li>
|
||||
<li>msg_key = substr (msg_key_large, 8, 16);</li>
|
||||
<li>sha256_a = SHA256 (msg_key + substr (auth_key, x, 36));</li>
|
||||
<li>sha256_b = SHA256 (substr (auth_key, 40+x, 36) + msg_key);</li>
|
||||
<li>aes_key = substr (sha256_a, 0, 8) + substr (sha256_b, 8, 16) + substr (sha256_a, 24, 8);</li>
|
||||
<li>aes_iv = substr (sha256_b, 0, 8) + substr (sha256_a, 8, 16) + substr (sha256_b, 24, 8);</li>
|
||||
</ul>
|
||||
<p>where x = 0 for messages from client to server and x = 8 for those from server to client.</p>
|
||||
<p><em>For the obsolete MTProto 1.0, msg_key, aes_key, and aes_iv were computed differently (see <a href="/mtproto/description_v1#defining-aes-key-and-initialization-vector">this document</a> for reference).</em></p>
|
||||
<p>The lower-order 1024 bits of auth_key are not involved in the computation. They may (together with the remaining bits or separately) be used on the client device to encrypt the local copy of the data received from the server. The 512 lower-order bits of auth_key are not stored on the server; therefore, if the client device uses them to encrypt local data and the user loses the key or the password, data decryption of local data is impossible (even if data from the server could be obtained).</p>
|
||||
<p>In MTProto 1.0, when AES was used to encrypt a block of data of a length not divisible by 16 bytes, the data was padded with 0 to 15 random padding bytes <strong>random_padding</strong> to a length divisible by 16 bytes prior to encryption. <strong>In MTProto 2.0, this padding is taken into account when computing <code>msg_key</code>. Note that MTProto 2.0 requires from 12 to 1024 bytes of padding, still subject to the condition that the resulting message length be divisible by 16 bytes.</strong></p>
|
||||
<h3><a class="anchor" href="#using-mtproto-20-instead-of-mtproto-10" id="using-mtproto-20-instead-of-mtproto-10" name="using-mtproto-20-instead-of-mtproto-10"><i class="anchor-icon"></i></a>Using MTProto 2.0 instead of MTProto 1.0</h3>
|
||||
<p>A client may either use only MTProto 2.0 or only MTProto 1.0 in the same TCP connection. The server detects the protocol used by the first message received from the client, and then uses the same encryption for its messages, and expects the client to use the same encryption henceforth. We recommend using MTProto 2.0; MTProto 1.0 is deprecated and supported for backward compatibility only.</p>
|
||||
<h3><a class="anchor" href="#important-checks" id="important-checks" name="important-checks"><i class="anchor-icon"></i></a>Important Checks</h3>
|
||||
<p>When an encrypted message is received, it <em>must</em> be checked that <strong>msg_key</strong> is <em>in fact</em> equal to the 128 middle bits of the SHA-256 of the decrypted data with a 32-byte fragment of <strong>auth_key</strong> prepended to it, and that msg_id has even parity for messages from client to server, and odd parity for messages from server to client.</p>
|
||||
<p>In addition, the identifiers (msg_id) of the last N messages received from the other side must be stored, and if a message comes in with msg_id lower than all or equal to any of the stored values, the message is to be ignored. Otherwise, the new message msg_id is added to the set, and, if the number of stored msg_id values is greater than N, the oldest (i. e. the lowest) is forgotten.</p>
|
||||
<p>On top of this, msg_id values that belong over 30 seconds in the future or over 300 seconds in the past are to be ignored. This is especially important for the server. The client would also find this useful (to protect from a replay attack), but only if it is certain of its time (for example, if its time has been synchronized with that of the server).</p>
|
||||
<p>Certain client-to-server service messages containing data sent by the client to the server (for example, msg_id of a recent client query) may, nonetheless, be processed on the client even if the time appears to be “incorrect”. This is especially true of messages to change server_salt and notifications of invalid client time. See <a href="/mtproto/service_messages">Mobile Protocol: Service Messages</a>.</p>
|
||||
<h3><a class="anchor" href="#storing-an-authorization-key-on-a-client-device" id="storing-an-authorization-key-on-a-client-device" name="storing-an-authorization-key-on-a-client-device"><i class="anchor-icon"></i></a>Storing an Authorization Key on a Client Device</h3>
|
||||
<p>It may be suggested to users concerned with security that they password protect the authorization key in approximately the same way as in ssh. This can be accomplished by prepending the value of cryptographic hash function, such as SHA-256, of the key to the front of the key, following which the entire string is encrypted using AES in CBC mode and a key equal to the user’s (text) password. When the user inputs the password, the stored protected password is decrypted and verified by checking the SHA-256 value. From the user’s standpoint, this is practically the same as using an application or a website password.</p>
|
||||
<h3><a class="anchor" href="#unencrypted-messages" id="unencrypted-messages" name="unencrypted-messages"><i class="anchor-icon"></i></a>Unencrypted Messages</h3>
|
||||
<p>Special plain-text messages may be used to create an authorization key as well as to perform a time synchronization. They begin with auth_key_id = 0 (64 bits) which means that there is no auth_key. This is followed directly by the message body in serialized format without internal or external headers. A message identifier (64 bits) and body length in bytes (32 bytes) are added before the message body.</p>
|
||||
<p>Only a very limited number of messages of special types can be transmitted as plain text. </p>
|
||||
<h3><a class="anchor" href="#schematic-presentation-of-messages" id="schematic-presentation-of-messages" name="schematic-presentation-of-messages"><i class="anchor-icon"></i></a>Schematic Presentation of Messages</h3>
|
||||
<h4><a class="anchor" href="#encrypted-message" id="encrypted-message" name="encrypted-message"><i class="anchor-icon"></i></a>Encrypted Message</h4>
|
||||
<table class="table"><tr>
|
||||
<td><a href="#key-identifier-auth-key-id"><strong>auth_key_id</strong></a><br>int64</td>
|
||||
<td><a href="#message-key-msg-key"><strong>msg_key</strong></a><br>int128</td>
|
||||
<td><a href="#encrypted-message-encrypted-data"><strong>encrypted_data</strong></a><br>bytes</td>
|
||||
</tr></table>
|
||||
<h4><a class="anchor" href="#encrypted-message-encrypted-data" id="encrypted-message-encrypted-data" name="encrypted-message-encrypted-data"><i class="anchor-icon"></i></a>Encrypted Message: <em>encrypted_data</em></h4>
|
||||
<p>Contains the cypher text for the following data:</p>
|
||||
<table class="table"><tr>
|
||||
<td><a href="#server-salt"><strong>salt</strong></a><br>int64</td>
|
||||
<td><a href="#session"><strong>session_id</strong></a><br>int64</td>
|
||||
<td><a href="#message-identifier-msg-id"><strong>message_id</strong></a><br>int64</td>
|
||||
<td><a href="#message-sequence-number-msg-seqno"><strong>seq_no</strong></a><br>int32</td>
|
||||
<td><strong>message_data_length</strong><br>int32</td>
|
||||
<td><strong>message_data</strong><br>bytes</td>
|
||||
<td><strong>padding</strong>12..1024<br>bytes</td>
|
||||
</tr></table>
|
||||
<h4><a class="anchor" href="#unencrypted-message" id="unencrypted-message" name="unencrypted-message"><i class="anchor-icon"></i></a>Unencrypted Message</h4>
|
||||
<table class="table"><tr>
|
||||
<td><a href="#key-identifier-auth-key-id"><strong>auth_key_id</strong></a> = <code>0</code><br>int64</td>
|
||||
<td><a href="#message-identifier-msg-id"><strong>message_id</strong></a><br>int64</td>
|
||||
<td><strong>message_data_length</strong><br>int32</td>
|
||||
<td><strong>message_data</strong><br>bytes</td>
|
||||
</tr></table>
|
||||
<p><strong>MTProto 2.0 uses 12..1024 padding bytes, instead of the 0..15 used in MTProto 1.0</strong></p>
|
||||
<h3><a class="anchor" href="#creating-an-authorization-key" id="creating-an-authorization-key" name="creating-an-authorization-key"><i class="anchor-icon"></i></a>Creating an Authorization Key</h3>
|
||||
<p>An authorization key is normally created once for every user during the application installation process immediately prior to registration. Registration itself, in actuality, occurs after the authorization key is created. However, a user may be prompted to complete the registration form while the authorization key is being generated in the background. Intervals between user key strokes may be used as a source of entropy in the generation of high-quality random numbers required for the creation of an authorization key.</p>
|
||||
<p>See <a href="/mtproto/auth_key">Creating an Authorization Key</a>.</p>
|
||||
<p>During the creation of the authorization key, the client obtains its server salt (to be used with the new key for all communication in the near future). The client then creates an encrypted session using the newly generated key, and subsequent communication occurs within that session (including the transmission of the user's registration information and phone number validation) unless the client creates a new session. The client is free to create new or additional sessions at any time by choosing a new random session_id.</p></div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_wrap">
|
||||
<div class="footer_columns_wrap footer_desktop">
|
||||
<div class="footer_column footer_column_telegram">
|
||||
<h5>Telegram</h5>
|
||||
<div class="footer_telegram_description"></div>
|
||||
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
|
||||
</div>
|
||||
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/faq">About</a></h5>
|
||||
<ul>
|
||||
<li><a href="//telegram.org/faq">FAQ</a></li>
|
||||
<li><a href="//telegram.org/blog">Blog</a></li>
|
||||
<li><a href="//telegram.org/jobs">Jobs</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/apps#mobile-apps">Mobile Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="//telegram.org/dl/ios">iPhone/iPad</a></li>
|
||||
<li><a href="//telegram.org/dl/android">Android</a></li>
|
||||
<li><a href="//telegram.org/dl/wp">Windows Phone</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/apps#desktop-apps">Desktop Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
|
||||
<li><a href="//macos.telegram.org/">macOS</a></li>
|
||||
<li><a href="//telegram.org/dl/web">Web-browser</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column footer_column_platform">
|
||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
||||
<ul>
|
||||
<li><a href="//core.telegram.org/api">API</a></li>
|
||||
<li><a href="//translations.telegram.org/">Translations</a></li>
|
||||
<li><a href="//instantview.telegram.org/">Instant View</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_columns_wrap footer_mobile">
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/faq">About</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/blog">Blog</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/apps">Apps</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/js/main.js?42"></script>
|
||||
<script src="/js/jquery.min.js?1"></script>
|
||||
<script src="/js/bootstrap.min.js"></script>
|
||||
|
||||
<script>window.initDevPageNav&&initDevPageNav();
|
||||
backToTopInit("Go up");
|
||||
removePreloadInit();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,205 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Mobile Protocol: Detailed Description (v.1.0, DEPRECATED)</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta property="description" content="This document describes MTProto v.1.0, its status is DEPRECATED.
|
||||
For information on encryption used in up-to-date Telegram…">
|
||||
<meta property="og:title" content="Mobile Protocol: Detailed Description (v.1.0, DEPRECATED)">
|
||||
<meta property="og:image" content="https://corefork.telegram.org/file/811140187/1/sfBQV3Trp80/3a3c48bad836b853ed">
|
||||
<meta property="og:description" content="This document describes MTProto v.1.0, its status is DEPRECATED.
|
||||
For information on encryption used in up-to-date Telegram…">
|
||||
<link rel="shortcut icon" href="/favicon.ico?4" type="image/x-icon" />
|
||||
|
||||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
||||
|
||||
<link href="/css/telegram.css?214" rel="stylesheet" media="screen">
|
||||
<style>
|
||||
</style>
|
||||
</head>
|
||||
<body class="preload">
|
||||
<div class="dev_page_wrap">
|
||||
<div class="dev_page_head navbar navbar-static-top navbar-tg">
|
||||
<div class="navbar-inner">
|
||||
<div class="container clearfix">
|
||||
<ul class="nav navbar-nav navbar-right hidden-xs"><li class="navbar-twitter"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i><span> Twitter</span></a></li></ul>
|
||||
<ul class="nav navbar-nav">
|
||||
<li><a href="//telegram.org/">Home</a></li>
|
||||
<li class="hidden-xs"><a href="//telegram.org/faq">FAQ</a></li>
|
||||
<li class="hidden-xs"><a href="//telegram.org/apps">Apps</a></li>
|
||||
<li class=""><a href="/api">API</a></li>
|
||||
<li class="active"><a href="/mtproto">Protocol</a></li>
|
||||
<li class=""><a href="/schema">Schema</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container clearfix">
|
||||
<div class="dev_page">
|
||||
<div id="dev_page_content_wrap" class=" ">
|
||||
<div class="dev_page_bread_crumbs"><ul class="breadcrumb clearfix"><li><a href="/mtproto" >Mobile Protocol</a></li><i class="icon icon-breadcrumb-divider"></i><li><a href="/mtproto/description_v1" >Mobile Protocol: Detailed Description (v.1.0…</a></li></ul></div>
|
||||
<h1 id="dev_page_title">Mobile Protocol: Detailed Description (v.1.0, DEPRECATED)</h1>
|
||||
|
||||
<div id="dev_page_content"><blockquote>
|
||||
<p>This document describes MTProto <strong>v.1.0</strong>, its status is <strong>DEPRECATED</strong>.
|
||||
For information on encryption used in up-to-date Telegram clients, kindly see <a href="/mtproto/description">this document</a>.</p>
|
||||
</blockquote>
|
||||
<p>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. </p>
|
||||
<p>A user key together with the message key define an actual 256-bit key and a 256-bit initialization vector, which is what encrypts the message using AES-256 encryption with infinite garble extension (IGE). 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. </p>
|
||||
<div><a href="/file/811140187/1/sfBQV3Trp80/3a3c48bad836b853ed">
|
||||
<img src="/file/811140187/1/sfBQV3Trp80/3a3c48bad836b853ed" alt="MTProto server-client encryption, cloud chats" class="dev_page_image">
|
||||
</a></div>
|
||||
<h3><a class="anchor" href="#terminology" id="terminology" name="terminology"><i class="anchor-icon"></i></a>Terminology</h3>
|
||||
<h4><a class="anchor" href="#authorization-key" id="authorization-key" name="authorization-key"><i class="anchor-icon"></i></a>Authorization Key</h4>
|
||||
<p>a 2048-bit key shared by the client device and the server, created upon user registration directly on the client device be exchanging Diffie-Hellman keys, and never transmitted over a network. Each authorization key is user-specific. There is nothing that prevents a user from having several keys (that correspond to “permanent sessions” on different devices), and some of these may be locked forever in the event the device is lost. See also <a href="/mtproto/auth_key">Creating an Authorization Key</a>.</p>
|
||||
<h4><a class="anchor" href="#server-key" id="server-key" name="server-key"><i class="anchor-icon"></i></a>Server Key</h4>
|
||||
<p>a 2048-bit RSA key used by the server digitally to sign its own messages while registration is underway and the authorization key is being generated. The application has a built-in public server key which can be used to verify a signature but cannot be used to sign messages. A private server key is stored on the server and changed very infrequently.</p>
|
||||
<h4><a class="anchor" href="#key-identifier" id="key-identifier" name="key-identifier"><i class="anchor-icon"></i></a>Key Identifier</h4>
|
||||
<p>The 64 lower-order bits of the SHA1 hash of the authorization key are used to indicate which particular key was used to encrypt a message. Keys must be uniquely defined by the 64 lower-order bits of their SHA1, and in the event of a collision, an authorization key is regenerated. A zero key identifier means that encryption is not used which is permissible for a limited set of message types used during registration to generate an authorization key based on a Diffie-Hellman exchange.</p>
|
||||
<h4><a class="anchor" href="#session" id="session" name="session"><i class="anchor-icon"></i></a>Session</h4>
|
||||
<p>a (random) 64-bit number generated by the client to distinguish between individual sessions (for example, between different instances of the application, created with the same authorization key). The session in conjunction with the key identifier corresponds to an application instance. The server can maintain session state. <em>Under no circumstances can a message meant for one session be sent into a different session</em>. The server may unilaterally forget any client sessions; clients should be able to handle this. </p>
|
||||
<h4><a class="anchor" href="#server-salt" id="server-salt" name="server-salt"><i class="anchor-icon"></i></a>Server Salt</h4>
|
||||
<p>a (random) 64-bit number periodically (say, every 24 hours) changed (separately for each session) at the request of the server. All subsequent messages must contain the new salt (although, messages with the old salt are still accepted for a further 300 seconds). Required to protect against replay attacks and certain tricks associated with adjusting the client clock to a moment in the distant future.</p>
|
||||
<h4><a class="anchor" href="#message-identifier-msg-id" id="message-identifier-msg-id" name="message-identifier-msg-id"><i class="anchor-icon"></i></a>Message Identifier (msg_id)</h4>
|
||||
<p>a (time-dependent) 64-bit number used uniquely to identify a message within a session. Client message identifiers are divisible by 4, server message identifiers modulo 4 yield 1 if the message is a response to a client message, and 3 otherwise. Client message identifiers must increase monotonically (within a single session), the same as server message identifiers, and must approximately equal unixtime*2^32. This way, a message identifier points to the approximate moment in time the message was created. A message is rejected over 300 seconds after it is created or 30 seconds before it is created (this is needed to protect from replay attacks). In this situation, it must be re-sent with a different identifier (or placed in a container with a higher identifier). The identifier of a message container must be strictly greater than those of its nested messages.</p>
|
||||
<p><strong>Important</strong>: to counter replay-attacks the lower 32 bits of <strong>msg_id</strong> passed by the client must not be empty and must present a fractional part of the time point when the message was created. At some point in the nearest future the server will start ignoring messages, in which the lower 32 bits of <strong>msg_id</strong> contain too many zeroes.</p>
|
||||
<h4><a class="anchor" href="#content-related-message" id="content-related-message" name="content-related-message"><i class="anchor-icon"></i></a>Content-related Message</h4>
|
||||
<p>A message requiring an explicit acknowledgment. These include all the user and many service messages, virtually all with the exception of containers and acknowledgments. </p>
|
||||
<h4><a class="anchor" href="#message-sequence-number-msg-seqno" id="message-sequence-number-msg-seqno" name="message-sequence-number-msg-seqno"><i class="anchor-icon"></i></a>Message Sequence Number (msg_seqno)</h4>
|
||||
<p>a 32-bit number equal to twice the number of “content-related” messages (those requiring acknowledgment, and in particular those that are not containers) created by the sender prior to this message and subsequently incremented by one if the current message is a content-related message. A container is always generated after its entire contents; therefore, its sequence number is greater than or equal to the sequence numbers of the messages contained in it.</p>
|
||||
<h4><a class="anchor" href="#message-key" id="message-key" name="message-key"><i class="anchor-icon"></i></a>Message Key</h4>
|
||||
<p>The lower-order 128 bits of the SHA1 hash of the part of the message to be encrypted (including the internal header and excluding the alignment bytes).</p>
|
||||
<h4><a class="anchor" href="#internal-cryptographic-header" id="internal-cryptographic-header" name="internal-cryptographic-header"><i class="anchor-icon"></i></a>Internal (cryptographic) Header</h4>
|
||||
<p>A header (16 bytes) added before a message or a container before it is all encrypted together. Consists of the server salt (64 bits) and the session (64 bits).</p>
|
||||
<h4><a class="anchor" href="#external-cryptographic-header" id="external-cryptographic-header" name="external-cryptographic-header"><i class="anchor-icon"></i></a>External (cryptographic) Header</h4>
|
||||
<p>A header (24 bytes) added before an encrypted message or a container. Consists of a key identifier (64 bits) and a message key (128 bits).</p>
|
||||
<h4><a class="anchor" href="#payload" id="payload" name="payload"><i class="anchor-icon"></i></a>Payload</h4>
|
||||
<p>External header + encrypted message or container.</p>
|
||||
<h3><a class="anchor" href="#defining-aes-key-and-initialization-vector" id="defining-aes-key-and-initialization-vector" name="defining-aes-key-and-initialization-vector"><i class="anchor-icon"></i></a>Defining AES Key and Initialization Vector</h3>
|
||||
<p>The 2048-bit authorization key (auth_key) and the 128-bit message key (msg_key) are used to compute a 256-bit AES key (aes_key) and a 256-bit initialization vector (aes_iv) which are subsequently used to encrypt the part of the message to be encrypted (i. e. everything with the exception of the external header which is added later) with AES-256 in infinite garble extension (IGE) mode.</p>
|
||||
<p>The algorithm for computing aes_key and aes_iv from auth_key and msg_key is as follows:</p>
|
||||
<ul>
|
||||
<li>msg_key = substr (SHA1 (plaintext), 4, 16);</li>
|
||||
<li>sha1_a = SHA1 (msg_key + substr (auth_key, x, 32));</li>
|
||||
<li>sha1_b = SHA1 (substr (auth_key, 32+x, 16) + msg_key + substr (auth_key, 48+x, 16));</li>
|
||||
<li>sha1_с = SHA1 (substr (auth_key, 64+x, 32) + msg_key);</li>
|
||||
<li>sha1_d = SHA1 (msg_key + substr (auth_key, 96+x, 32));</li>
|
||||
<li>aes_key = substr (sha1_a, 0, 8) + substr (sha1_b, 8, 12) + substr (sha1_c, 4, 12);</li>
|
||||
<li>aes_iv = substr (sha1_a, 8, 12) + substr (sha1_b, 0, 8) + substr (sha1_c, 16, 4) + substr (sha1_d, 0, 8);</li>
|
||||
</ul>
|
||||
<p>where x = 0 for messages from client to server and x = 8 for those from server to client.</p>
|
||||
<p>The lower-order 1024 bits of auth_key are not involved in the computation. They may (together with the remaining bits or separately) be used on the client device to encrypt the local copy of the data received from the server. The 512 lower-order bits of auth_key are not stored on the server; therefore, if the client device uses them to encrypt local data and the user loses the key or the password, data decryption of local data is impossible (even if data from the server could be obtained).</p>
|
||||
<p>When AES is used to encrypt a block of data of a length not divisible by 16 bytes, the data is padded with random bytes to the smallest length divisible by 16 bytes immediately prior to being encrypted.</p>
|
||||
<h3><a class="anchor" href="#important-tests" id="important-tests" name="important-tests"><i class="anchor-icon"></i></a>Important Tests</h3>
|
||||
<p>When an encrypted message is received, it <em>must</em> be checked that msg_key is <em>in fact</em> equal to the 128 lower-order bits of the SHA1 hash of the previously encrypted portion, and that msg_id has even parity for messages from client to server, and odd parity for messages from server to client.</p>
|
||||
<p>In addition, the identifiers (msg_id) of the last N messages received from the other side must be stored, and if a message comes in with msg_id lower than all or equal to any of the stored values, the message is to be ignored. Otherwise, the new message msg_id is added to the set, and, if the number of stored msg_id values is greater than N, the oldest (i. e. the lowest) is forgotten.</p>
|
||||
<p>In addition, msg_id values that belong over 30 seconds in the future or over 300 seconds in the past are to be ignored. This is especially important for the server. The client would also find this useful (to protect from a replay attack), but only if it is certain of its time (for example, if its time has been synchronized with that of the server).</p>
|
||||
<p>Certain client-to-server service messages containing data sent by the client to the server (for example, msg_id of a recent client query) may, nonetheless, be processed on the client even if the time appears to be “incorrect”. This is especially true of messages to change server_salt and notifications of invalid client time. See <a href="/mtproto/service_messages">Mobile Protocol: Service Messages</a>.</p>
|
||||
<h3><a class="anchor" href="#storing-an-authorization-key-on-a-client-device" id="storing-an-authorization-key-on-a-client-device" name="storing-an-authorization-key-on-a-client-device"><i class="anchor-icon"></i></a>Storing an Authorization Key on a Client Device</h3>
|
||||
<p>It may be suggested to users concerned with security that they password protect the authorization key in approximately the same way as in ssh. This is accomplished by adding the SHA1 of the key to the front of the key, following which the entire string is encrypted using AES in CBC mode and a key equal to the user’s (text) password. When the user inputs the password, the stored protected password is decrypted and verified by being compared with SHA1. From the user’s standpoint, this is practically the same as using an application or a website password.</p>
|
||||
<h3><a class="anchor" href="#unencrypted-messages" id="unencrypted-messages" name="unencrypted-messages"><i class="anchor-icon"></i></a>Unencrypted Messages</h3>
|
||||
<p>Special plain-text messages may be used to create an authorization key as well as to perform a time synchronization. They begin with auth_key_id = 0 (64 bits) which means that there is no auth_key. This is followed directly by the message body in serialized format without internal or external headers. A message identifier (64 bits) and body length in bytes (32 bytes) are added before the message body.</p>
|
||||
<p>Only a very limited number of messages of special types can be transmitted as plain text. </p>
|
||||
<h3><a class="anchor" href="#schematic-presentation-of-messages" id="schematic-presentation-of-messages" name="schematic-presentation-of-messages"><i class="anchor-icon"></i></a>Schematic Presentation of Messages</h3>
|
||||
<h4><a class="anchor" href="#encrypted-message" id="encrypted-message" name="encrypted-message"><i class="anchor-icon"></i></a>Encrypted Message</h4>
|
||||
<table class="table"><tr>
|
||||
<td><a href="#key-identifier"><strong>auth_key_id</strong></a><br>int64</td>
|
||||
<td><a href="#message-key"><strong>msg_key</strong></a><br>int128</td>
|
||||
<td><a href="#encrypted-message-encrypted-data"><strong>encrypted_data</strong></a><br>bytes</td>
|
||||
</tr></table>
|
||||
<h4><a class="anchor" href="#encrypted-message-encrypted-data" id="encrypted-message-encrypted-data" name="encrypted-message-encrypted-data"><i class="anchor-icon"></i></a>Encrypted Message: <em>encrypted_data</em></h4>
|
||||
<p>Contains the cypher text for the following data:</p>
|
||||
<table class="table"><tr>
|
||||
<td><a href="#server-salt"><strong>salt</strong></a><br>int64</td>
|
||||
<td><a href="#session"><strong>session_id</strong></a><br>int64</td>
|
||||
<td><a href="#message-identifier-msg-id"><strong>message_id</strong></a><br>int64</td>
|
||||
<td><a href="#message-sequence-number-msg-seqno"><strong>seq_no</strong></a><br>int32</td>
|
||||
<td><strong>message_data_length</strong><br>int32</td>
|
||||
<td><strong>message_data</strong><br>bytes</td>
|
||||
<td><strong>padding</strong> 0..15<br>bytes</td>
|
||||
</tr></table>
|
||||
<h4><a class="anchor" href="#unencrypted-message" id="unencrypted-message" name="unencrypted-message"><i class="anchor-icon"></i></a>Unencrypted Message</h4>
|
||||
<table class="table"><tr>
|
||||
<td><a href="#key-identifier"><strong>auth_key_id</strong></a> = <code>0</code><br>int64</td>
|
||||
<td><a href="#message-identifier-msg-id"><strong>message_id</strong></a><br>int64</td>
|
||||
<td><strong>message_data_length</strong><br>int32</td>
|
||||
<td><strong>message_data</strong><br>bytes</td>
|
||||
</tr></table>
|
||||
<h3><a class="anchor" href="#creating-an-authorization-key" id="creating-an-authorization-key" name="creating-an-authorization-key"><i class="anchor-icon"></i></a>Creating an Authorization Key</h3>
|
||||
<p>An authorization key is normally created once for every user during the application installation process immediately prior to registration. Registration itself, in actuality, occurs after the authorization key is created. However, a user may be prompted to complete the registration form while the authorization key is being generated in the background. Intervals between user key strokes may be used as a source of entropy in the generation of high-quality random numbers required for the creation of an authorization key.</p>
|
||||
<p>See <a href="/mtproto/auth_key">Creating an Authorization Key</a>.</p>
|
||||
<p>During the creation of the authorization key, the client obtains its server salt (to be used with the new key for all communication in the near future). The client then creates an encrypted session using the newly generated key, and subsequent communication occurs within that session (including the transmission of the user's registration information and phone number validation) unless the client creates a new session. The client is free to create new or additional sessions at any time by choosing a new random session_id.</p></div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_wrap">
|
||||
<div class="footer_columns_wrap footer_desktop">
|
||||
<div class="footer_column footer_column_telegram">
|
||||
<h5>Telegram</h5>
|
||||
<div class="footer_telegram_description"></div>
|
||||
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
|
||||
</div>
|
||||
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/faq">About</a></h5>
|
||||
<ul>
|
||||
<li><a href="//telegram.org/faq">FAQ</a></li>
|
||||
<li><a href="//telegram.org/blog">Blog</a></li>
|
||||
<li><a href="//telegram.org/jobs">Jobs</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/apps#mobile-apps">Mobile Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="//telegram.org/dl/ios">iPhone/iPad</a></li>
|
||||
<li><a href="//telegram.org/dl/android">Android</a></li>
|
||||
<li><a href="//telegram.org/dl/wp">Windows Phone</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/apps#desktop-apps">Desktop Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
|
||||
<li><a href="//macos.telegram.org/">macOS</a></li>
|
||||
<li><a href="//telegram.org/dl/web">Web-browser</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column footer_column_platform">
|
||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
||||
<ul>
|
||||
<li><a href="//core.telegram.org/api">API</a></li>
|
||||
<li><a href="//translations.telegram.org/">Translations</a></li>
|
||||
<li><a href="//instantview.telegram.org/">Instant View</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_columns_wrap footer_mobile">
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/faq">About</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/blog">Blog</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/apps">Apps</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/js/main.js?42"></script>
|
||||
|
||||
<script>backToTopInit("Go up");
|
||||
removePreloadInit();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,143 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Creating Custom Cloud Themes</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta property="description" content="Official Telegram apps support custom cloud themes as of version 5.11. Everyone is welcome to create and share their themes.…">
|
||||
<meta property="og:title" content="Creating Custom Cloud Themes">
|
||||
<meta property="og:image" content="">
|
||||
<meta property="og:description" content="Official Telegram apps support custom cloud themes as of version 5.11. Everyone is welcome to create and share their themes.…">
|
||||
<link rel="shortcut icon" href="/favicon.ico?4" type="image/x-icon" />
|
||||
|
||||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
||||
|
||||
<link href="/css/telegram.css?214" rel="stylesheet" media="screen">
|
||||
<style>
|
||||
</style>
|
||||
</head>
|
||||
<body class="preload">
|
||||
<div class="dev_page_wrap">
|
||||
<div class="dev_page_head navbar navbar-static-top navbar-tg">
|
||||
<div class="navbar-inner">
|
||||
<div class="container clearfix">
|
||||
<ul class="nav navbar-nav navbar-right hidden-xs"><li class="navbar-twitter"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i><span> Twitter</span></a></li></ul>
|
||||
<ul class="nav navbar-nav">
|
||||
<li><a href="//telegram.org/">Home</a></li>
|
||||
<li class="hidden-xs"><a href="//telegram.org/faq">FAQ</a></li>
|
||||
<li class="hidden-xs"><a href="//telegram.org/apps">Apps</a></li>
|
||||
<li class=""><a href="/api">API</a></li>
|
||||
<li class=""><a href="/mtproto">Protocol</a></li>
|
||||
<li class=""><a href="/schema">Schema</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container clearfix">
|
||||
<div class="dev_page">
|
||||
<div id="dev_page_content_wrap" class=" ">
|
||||
<div class="dev_page_bread_crumbs"></div>
|
||||
<h1 id="dev_page_title">Creating Custom Cloud Themes</h1>
|
||||
|
||||
<div id="dev_page_content"><p>Official Telegram apps support <a href="https://telegram.org/blog/scheduled-reminders-themes#custom-cloud-themes">custom cloud themes</a> as of version <strong>5.11</strong>. Everyone is welcome to create and share their themes.</p>
|
||||
<h3><a class="anchor" name="creating-a-theme" href="#creating-a-theme"><i class="anchor-icon"></i></a>Creating a theme</h3>
|
||||
<p>You can use the <a href="https://themes.contest.com/"><strong>Online Theme Editor</strong></a> (use a <strong>VPN</strong> if it is blocked in your country) to create new Telegram themes from scratch or edit existing ones. Simply log in with your Telegram account and pick a platform to start <strong>editing</strong> the relevant theme file – or <strong>import</strong> an existing theme.</p>
|
||||
<ul>
|
||||
<li>Set a <strong>name</strong> for your theme using the <code>name</code> attribute</li>
|
||||
<li>Set colors for elements using <strong>hex codes</strong> or the <strong>color picker</strong></li>
|
||||
<li>Press ‘Save and apply theme’ to <strong>push changes</strong> to all users of your theme</li>
|
||||
</ul>
|
||||
<h3><a class="anchor" name="checking-your-theme-in-app" href="#checking-your-theme-in-app"><i class="anchor-icon"></i></a>Checking your theme in-app</h3>
|
||||
<p>Once you have <strong>saved</strong> a theme for the first time, Telegram will send you a message with its <a href="#publishing-your-theme">sharing link</a>. Open the link in the app to switch to your theme.</p>
|
||||
<p>You can always switch to your theme in <em>Settings > Chat Settings</em>. On iOS and MacOS native app – <em>Settings > Appearance</em>.</p>
|
||||
<h3><a class="anchor" name="publishing-your-theme" href="#publishing-your-theme"><i class="anchor-icon"></i></a>Publishing your theme</h3>
|
||||
<p>Each theme has a <code>t.me/addtheme</code> <strong>link</strong> which people can use to switch to your theme. You can choose a beautiful short link (e.g., <a href="https://t.me/addtheme/desert"><a href="https://t.me/addtheme/desert">https://t.me/addtheme/desert</a></a>) by changing the <code>shortname</code> attribute. If you add support for multiple platforms, the same link can be used for setting your theme on <strong>all</strong> of them.</p>
|
||||
<h3><a class="anchor" name="updating-your-theme" href="#updating-your-theme"><i class="anchor-icon"></i></a>Updating your theme</h3>
|
||||
<p>Your theme gets <strong>updated automatically</strong> for all its users whenever you save and apply changes.</p>
|
||||
<h3><a class="anchor" name="including-a-chat-background" href="#including-a-chat-background"><i class="anchor-icon"></i></a>Including a chat background</h3>
|
||||
<p>Your themes can include a <a href="https://telegram.org/blog/backgrounds-2-0">custom wallpaper</a>. To do this, simply go to <em>Settings > Chat Settings > Chat Background</em>. On iOS and MacOS native app – <em>Settings > Appearance > Chat Background</em>.</p>
|
||||
<p>Open any background and tap the sharing button in the top right corner, then copy its <code>t.me/bg/...</code> link. In the theme file, set this link as the value of the <code>wallpaper</code> attribute.</p>
|
||||
<p>For Telegram Desktop, if you want to make the background <strong>tiled</strong>, add <code>?mode=tiled</code> at the end of the link. For example:</p>
|
||||
<pre><code>wallpaper: t.me/bg/-jI7lnO3DFABAAAA1vXcFaZP_Vo?mode=tiled</code></pre>
|
||||
<h3><a class="anchor" name="creating-themes-in-app" href="#creating-themes-in-app"><i class="anchor-icon"></i></a>Creating themes in-app</h3>
|
||||
<p>If you prefer a more WYSIWYG approach, try creating themes using the in-app tools for customizing appearance. Telegram for <a href="https://telegra.ph/Create-Theme-Android-FAQ">Android</a> and <a href="https://telegra.ph/Create-Theme-Desktop-FAQ">Telegram Desktop</a> have advanced in-app theme editors. Telegram for iOS and MacOS allow choosing a custom accent color from the color wheel and a background, then saving the result as a custom theme.</p>
|
||||
<p>Once you have saved a new theme in any of the apps, it also becomes accessible in the <a href="https://themes.contest.com/">online editor</a>.</p>
|
||||
<p><strong>Read more</strong></p>
|
||||
<ul>
|
||||
<li><a href="https://telegra.ph/Create-Theme-Android-FAQ">Android Theme Editor</a></li>
|
||||
<li><a href="https://telegra.ph/Create-Theme-Desktop-FAQ">Telegram Desktop Theme Editor</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_wrap">
|
||||
<div class="footer_columns_wrap footer_desktop">
|
||||
<div class="footer_column footer_column_telegram">
|
||||
<h5>Telegram</h5>
|
||||
<div class="footer_telegram_description"></div>
|
||||
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
|
||||
</div>
|
||||
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/faq">About</a></h5>
|
||||
<ul>
|
||||
<li><a href="//telegram.org/faq">FAQ</a></li>
|
||||
<li><a href="//telegram.org/blog">Blog</a></li>
|
||||
<li><a href="//telegram.org/jobs">Jobs</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/apps#mobile-apps">Mobile Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="//telegram.org/dl/ios">iPhone/iPad</a></li>
|
||||
<li><a href="//telegram.org/dl/android">Android</a></li>
|
||||
<li><a href="//telegram.org/dl/wp">Windows Phone</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/apps#desktop-apps">Desktop Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
|
||||
<li><a href="//macos.telegram.org/">macOS</a></li>
|
||||
<li><a href="//telegram.org/dl/web">Web-browser</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column footer_column_platform">
|
||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
||||
<ul>
|
||||
<li><a href="//core.telegram.org/api">API</a></li>
|
||||
<li><a href="//translations.telegram.org/">Translations</a></li>
|
||||
<li><a href="//instantview.telegram.org/">Instant View</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_columns_wrap footer_mobile">
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/faq">About</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/blog">Blog</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//telegram.org/apps">Apps</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/js/main.js?42"></script>
|
||||
|
||||
<script>backToTopInit("Go up");
|
||||
removePreloadInit();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,224 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>$300,000 for Cracking Telegram Encryption</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta property="og:title" content="$300,000 for Cracking Telegram Encryption">
|
||||
<meta property="og:image" content="https://telegram.org/file/811140704/1/2Er4fG4UQLI/7ee52af54b98564554">
|
||||
<meta property="og:site_name" content="Telegram">
|
||||
<meta property="og:description" content="$300,000 for cracking #Telegram encryption">
|
||||
<meta name="twitter:card" content="summary_large_image" /><meta name="twitter:image" content="https://telegram.org/file/811140704/1/2Er4fG4UQLI/7ee52af54b98564554" />
|
||||
<meta property="fb:app_id" content="254098051407226">
|
||||
<meta property="vk:app_id" content="3782569">
|
||||
<meta name="apple-itunes-app" content="app-id=686449807">
|
||||
<meta name="telegram:channel" content="@telegram">
|
||||
<link rel="canonical" href="https://telegram.org/blog/cryptocontest" />
|
||||
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
|
||||
<link rel="alternate icon" href="/favicon.ico?4" type="image/x-icon" />
|
||||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
||||
|
||||
<link href="/css/telegram.css?214" rel="stylesheet" media="screen">
|
||||
<style>
|
||||
</style>
|
||||
</head>
|
||||
<body class="preload">
|
||||
<div id="fb-root"></div>
|
||||
<div class="tl_page_wrap">
|
||||
<div class="tl_page_head navbar navbar-static-top navbar navbar-tg">
|
||||
<div class="navbar-inner">
|
||||
<div class="container clearfix">
|
||||
<ul class="nav navbar-nav navbar-right"><li class="dropdown top_lang_select"><a class="dropdown-toggle" onclick="return dropdownClick(this, event)" href="#"><i class="dev_top_lang_icon"></i> <b class="minicaret"></b></a>
|
||||
<ul class="dropdown-menu"><li class=""><a href="?setln=en">English</a></li><li class="long "><a href="?setln=id">Bahasa Indonesia</a></li><li class="long "><a href="?setln=ms">Bahasa Melayu</a></li><li class=""><a href="?setln=de">Deutsch</a></li><li class=""><a href="?setln=es">Español</a></li><li class=""><a href="?setln=fr">Français</a></li><li class=""><a href="?setln=it">Italiano</a></li><li class=""><a href="?setln=nl">Nederlands</a></li><li class=""><a href="?setln=uz">O‘zbek</a></li><li class=""><a href="?setln=pl">Polski</a></li><li class="long "><a href="?setln=pt-br">Português (Brasil)</a></li><li class=""><a href="?setln=tr">Türkçe</a></li><li class=""><a href="?setln=be">Беларуская</a></li><li class=""><a href="?setln=ru">Русский</a></li><li class=""><a href="?setln=uk">Українська</a></li><li class=""><a href="?setln=ar">العربية</a></li><li class=""><a href="?setln=fa">فارسی</a></li><li class=""><a href="?setln=ko">한국어</a></li></ul></li><li class="navbar-twitter hidden-xs"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i> Twitter</a></li></ul>
|
||||
<ul class="nav navbar-nav">
|
||||
<li class=""><a href="/">Home</a></li>
|
||||
<li class=""><a href="/faq">FAQ</a></li>
|
||||
<li class=""><a href="/apps">Apps</a></li>
|
||||
<li class="hidden-xs "><a href="//core.telegram.org/api">API</a></li>
|
||||
<li class="hidden-xs "><a href="//core.telegram.org/mtproto">Protocol</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container clearfix tl_page_container ">
|
||||
<div class="tl_page">
|
||||
<div class="tl_contest_page_wrap">
|
||||
<div class="tl_blog_side_blog"><div class="side_blog_wrap">
|
||||
<div class="side_blog">
|
||||
<a href="/blog" class="side_blog_header">Recent News</a>
|
||||
<div class="side_blog_entries">
|
||||
<a href="/blog/shared-media-scrolling-calendar-join-requests-and-more" class="side_blog_entry">
|
||||
<div class="side_blog_date">Nov 3</div>
|
||||
<div class="side_blog_title">Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests and More</div>
|
||||
</a><a href="/blog/chat-themes-interactive-emoji-read-receipts" class="side_blog_entry">
|
||||
<div class="side_blog_date">Sep 19</div>
|
||||
<div class="side_blog_title">Chat Themes, Interactive Emoji, Read Receipts in Groups and Live Stream Recording</div>
|
||||
</a><a href="/blog/live-streams-forwarding-next-channel" class="side_blog_entry">
|
||||
<div class="side_blog_date">Aug 31</div>
|
||||
<div class="side_blog_title">Live Streams, Flexible Forwarding and More</div>
|
||||
</a><a href="/blog/video-1000" class="side_blog_entry">
|
||||
<div class="side_blog_date">Jul 30</div>
|
||||
<div class="side_blog_title">Video Calls with up to 1000 Viewers, Video Playback Speed and More</div>
|
||||
</a><a href="/blog/group-video-calls" class="side_blog_entry">
|
||||
<div class="side_blog_date">Jun 25</div>
|
||||
<div class="side_blog_title">Group Video Calls</div>
|
||||
</a><a href="/blog/animated-backgrounds" class="side_blog_entry">
|
||||
<div class="side_blog_date">Jun 25</div>
|
||||
<div class="side_blog_title"> Animated Backgrounds</div>
|
||||
</a><a href="/blog/payments-2-0-scheduled-voice-chats" class="side_blog_entry">
|
||||
<div class="side_blog_date">Apr 26</div>
|
||||
<div class="side_blog_title">Payments 2.0, Scheduled Voice Chats, New Web Versions</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
<div id="dev_page_content_wrap" class=" ">
|
||||
<div class="dev_page_bread_crumbs"></div>
|
||||
<h1 id="dev_page_title">$300,000 for Cracking Telegram Encryption</h1>
|
||||
|
||||
<div id="dev_page_content"><div class="blog_side_image_wrap">
|
||||
<img src="/file/811140704/1/2Er4fG4UQLI/7ee52af54b98564554" class="blog_side_image"/>
|
||||
</div>
|
||||
|
||||
<blockquote>
|
||||
<p>This contest is <a href="https://telegram.org/blog/cryptocontest-ends">over</a>, but Telegram's <strong>bug bounty program</strong> is always open.</p>
|
||||
<p><strong>Security researchers</strong> are welcome to submit any issues they find in the Telegram <strong>apps</strong> or <strong>protocol</strong> to us at <strong>security@telegram.org</strong>. All submissions which result in a change of code or configuration are eligible for bounties, ranging from <strong>$500</strong> to <a href="https://telegram.org/blog/crowdsourcing-a-more-secure-future"><strong>$100,000</strong></a> or more, depending on the severity of the issue.</p>
|
||||
</blockquote>
|
||||
<p>Earlier this year we had a <a href="/blog/winter-contest-ends">contest</a> to decipher intercepted Telegram messages, that did not produce a winner. Today we announce a new contest with an easier task and a larger prize — <strong>$300,000</strong> for cracking <a href="https://core.telegram.org/api/end-to-end">Telegram's encryption</a>, and this time contestants can not only monitor traffic, but also act as the Telegram server and use active attacks, which vastly increases their capabilities.</p>
|
||||
<p>In this contest you assume the role of a malicious entity in full control of both the communication lines and the Telegram servers themselves.</p>
|
||||
<blockquote>
|
||||
<p><strong>UPD</strong> The current round of the contest is over. <a href="https://telegram.org/blog/cryptocontest-ends"><strong>Go to results »</strong></a></p>
|
||||
</blockquote>
|
||||
<p>Your goal is to extract sensitive data (a secret email address) from a Secret Chat between two users — Nick and Paul. You control the entire process, from chat creation to the sending of each individual message and can perform various active attacks, including MITM, KPA, CPA, replay attacks, etc.</p>
|
||||
<h4><a class="anchor" name="contest-interface" href="#contest-interface"><i class="anchor-icon"></i></a>Contest Interface</h4>
|
||||
<p>In order to facilitate the task, we have created an interface, using which you can act as the server and determine which side gets what data. For more details, please check out the <strong><a href="https://core.telegram.org/contest300K">Cracking Contest Description</a></strong>.</p>
|
||||
<h4><a class="anchor" name="objectives" href="#objectives"><i class="anchor-icon"></i></a>Objectives</h4>
|
||||
<p>In order to confirm that Telegram crypto was indeed cracked and claim your <strong>$300,000</strong>, you‘ll need to send an email to the secret email address that you’ve extracted from one of the messages exchanged by Paul and Nick.</p>
|
||||
<p>Your email must contain:<br>- The entire text of the message that contained the secret email.<br>- Session logs for the successful attempt with your user_id.<br>- A detailed explanation of the attack on the protocol.<br>- Your bank account details to receive the $300,000 prize.</p>
|
||||
<p>There is also a bonus objective with an independent prize of <strong>$100,000</strong>.<br><a href="https://core.telegram.org/contest300K#bonus-objective">See full description for details »</a></p>
|
||||
<h4><a class="anchor" name="end-date" href="#end-date"><i class="anchor-icon"></i></a>End Date</h4>
|
||||
<p>To prove that the competition was fair, we will add a command that returns the keys used for encryption as soon as a winner is announced. In case there is no winner by February 4, 2015, decryption commands will be added at that date.</p>
|
||||
<div>
|
||||
<a href="/file/811140570/1/HuWOtUZqH3Y/ae540ee4fe9e565761" target="_blank"><img src="/file/811140509/1/w7ub14yjRmE/857f9fc6bf21c49411" title="Click for print quality image" class="dev_page_image" /></a><br>
|
||||
</div>
|
||||
|
||||
<p><em>November 4, 2014<br>The Telegram Team</em></p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="tl_main_share clearfix">
|
||||
<a href="https://t.me/share/url?url=https%3A%2F%2Ftelegram.org%2Fblog%2Fcryptocontest&text=%24300%2C000%20for%20cracking%20%23Telegram%20encryption" class="tl_telegram_share_btn" id="tl_telegram_share_btn" data-text="$300,000 for cracking #Telegram encryption" data-url="https://telegram.org/blog/cryptocontest"><i class="tl_telegram_share_icon"></i><span class="tl_telegram_share_label" target="_blank">Forward</span></a>
|
||||
<a href="https://twitter.com/share" class="tl_twitter_share_btn" id="tl_twitter_share_btn" data-text="$300,000 for cracking #Telegram encryption" data-url="https://telegram.org/blog/cryptocontest" data-via="Telegram">Tweet <span class="tl_twitter_share_cnt"></span></a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="tl_main_recent_news_wrap tlb_other_news_wrap tl_blog_list_page_wrap">
|
||||
<h3 class="tl_main_recent_news_header">
|
||||
<a href="/blog">Other News</a>
|
||||
</h3>
|
||||
<div class="tl_main_recent_news_cards clearfix">
|
||||
<a class="dev_blog_card_link_wrap" href="/blog/shared-media-scrolling-calendar-join-requests-and-more"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001930/3/yPTwxfusWZg.174275/3f847742c263cdae99" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests, Global Chat Themes on iOS and More</h4>
|
||||
<div class="dev_blog_card_lead">Today's update brings new ways to find memories in shared media with accelerated scrolling…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Nov 3, 2021</div>
|
||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/chat-themes-interactive-emoji-read-receipts"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001155/2/kLfFr4UDBdo.74223/58bec6bc2a18455c5f" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Chat Themes, Interactive Emoji, Read Receipts in Groups and Live Stream Recording</h4>
|
||||
<div class="dev_blog_card_lead">Today's update lets you set different themes for individual chats, share your feelings with…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Sep 19, 2021</div>
|
||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/live-streams-forwarding-next-channel"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001784/4/IlXX31YWz5U.92729/eabf233f3635354560" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Live Streams, Flexible Forwarding, Jump to Next Channel, Trending Stickers and More</h4>
|
||||
<div class="dev_blog_card_lead">Telegram 8.0 brings live streams with unlimited viewers to groups and channels, options to…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Aug 31, 2021</div>
|
||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/video-1000"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001574/3/Pqda66P2qCA.71942/56366f0bdd3630cab8" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Video Calls with up to 1000 Viewers, Video Messages 2.0, Video Playback Speed and More</h4>
|
||||
<div class="dev_blog_card_lead">This update takes video to the next level. Group video calls now have up to 1000 viewers,…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Jul 30, 2021</div>
|
||||
</div></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_wrap">
|
||||
<div class="footer_columns_wrap footer_desktop">
|
||||
<div class="footer_column footer_column_telegram">
|
||||
<h5>Telegram</h5>
|
||||
<div class="footer_telegram_description"></div>
|
||||
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
|
||||
</div>
|
||||
|
||||
<div class="footer_column">
|
||||
<h5><a href="/faq">About</a></h5>
|
||||
<ul>
|
||||
<li><a href="/faq">FAQ</a></li>
|
||||
<li><a href="/blog">Blog</a></li>
|
||||
<li><a href="/jobs">Jobs</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/apps#mobile-apps">Mobile Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="/dl/ios">iPhone/iPad</a></li>
|
||||
<li><a href="/dl/android">Android</a></li>
|
||||
<li><a href="/dl/wp">Windows Phone</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/apps#desktop-apps">Desktop Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
|
||||
<li><a href="//macos.telegram.org/">macOS</a></li>
|
||||
<li><a href="/dl/web">Web-browser</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column footer_column_platform">
|
||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
||||
<ul>
|
||||
<li><a href="//core.telegram.org/api">API</a></li>
|
||||
<li><a href="//translations.telegram.org/">Translations</a></li>
|
||||
<li><a href="//instantview.telegram.org/">Instant View</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_columns_wrap footer_mobile">
|
||||
<div class="footer_column">
|
||||
<h5><a href="/faq">About</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/blog">Blog</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/apps">Apps</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/js/main.js?42"></script>
|
||||
|
||||
<script>initScrollVideos(true);
|
||||
twitterCustomShareInit();
|
||||
blogSideImageInit();
|
||||
backToTopInit("Go up");
|
||||
removePreloadInit();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,245 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Edit Messages, New Mentions and More</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta property="og:title" content="Edit Messages, New Mentions and More">
|
||||
<meta property="og:image" content="https://telegram.org/file/811140010/1/POGV5NPdHAo.23437.gif/f1389ee360bf61f577">
|
||||
<meta property="og:site_name" content="Telegram">
|
||||
<meta property="og:description" content="Editing messages, new mentions, frequent contacts, bots in attachment menu, and more.">
|
||||
<meta property="article:published_time" content="2016-05-15T17:12:57+00:00"><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:image" content="https://telegram.org/file/811140010/1/POGV5NPdHAo.23437.gif/f1389ee360bf61f577" />
|
||||
<meta property="fb:app_id" content="254098051407226">
|
||||
<meta property="vk:app_id" content="3782569">
|
||||
<meta name="apple-itunes-app" content="app-id=686449807">
|
||||
<meta name="telegram:channel" content="@telegram">
|
||||
<link rel="canonical" href="https://telegram.org/blog/edit" />
|
||||
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
|
||||
<link rel="alternate icon" href="/favicon.ico?4" type="image/x-icon" />
|
||||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
||||
|
||||
<link href="/css/telegram.css?214" rel="stylesheet" media="screen">
|
||||
<style>
|
||||
</style>
|
||||
</head>
|
||||
<body class="preload">
|
||||
<div id="fb-root"></div>
|
||||
<div class="tl_page_wrap">
|
||||
<div class="tl_page_head navbar navbar-static-top navbar navbar-tg">
|
||||
<div class="navbar-inner">
|
||||
<div class="container clearfix">
|
||||
<ul class="nav navbar-nav navbar-right"><li class="dropdown top_lang_select"><a class="dropdown-toggle" onclick="return dropdownClick(this, event)" href="#"><i class="dev_top_lang_icon"></i> <b class="minicaret"></b></a>
|
||||
<ul class="dropdown-menu"><li class=""><a href="?setln=en">English</a></li><li class="long "><a href="?setln=id">Bahasa Indonesia</a></li><li class="long "><a href="?setln=ms">Bahasa Melayu</a></li><li class=""><a href="?setln=de">Deutsch</a></li><li class=""><a href="?setln=es">Español</a></li><li class=""><a href="?setln=fr">Français</a></li><li class=""><a href="?setln=it">Italiano</a></li><li class=""><a href="?setln=nl">Nederlands</a></li><li class=""><a href="?setln=uz">O‘zbek</a></li><li class=""><a href="?setln=pl">Polski</a></li><li class="long "><a href="?setln=pt-br">Português (Brasil)</a></li><li class=""><a href="?setln=tr">Türkçe</a></li><li class=""><a href="?setln=be">Беларуская</a></li><li class=""><a href="?setln=ru">Русский</a></li><li class=""><a href="?setln=uk">Українська</a></li><li class=""><a href="?setln=ar">العربية</a></li><li class=""><a href="?setln=fa">فارسی</a></li><li class=""><a href="?setln=ko">한국어</a></li></ul></li><li class="navbar-twitter hidden-xs"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i> Twitter</a></li></ul>
|
||||
<ul class="nav navbar-nav">
|
||||
<li class=""><a href="/">Home</a></li>
|
||||
<li class=""><a href="/faq">FAQ</a></li>
|
||||
<li class=""><a href="/apps">Apps</a></li>
|
||||
<li class="hidden-xs "><a href="//core.telegram.org/api">API</a></li>
|
||||
<li class="hidden-xs "><a href="//core.telegram.org/mtproto">Protocol</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container clearfix tl_page_container ">
|
||||
<div class="tl_page">
|
||||
<div class="tl_contest_page_wrap">
|
||||
<div class="tl_blog_side_blog"><div class="side_blog_wrap">
|
||||
<div class="side_blog">
|
||||
<a href="/blog" class="side_blog_header">Recent News</a>
|
||||
<div class="side_blog_entries">
|
||||
<a href="/blog/shared-media-scrolling-calendar-join-requests-and-more" class="side_blog_entry">
|
||||
<div class="side_blog_date">Nov 3</div>
|
||||
<div class="side_blog_title">Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests and More</div>
|
||||
</a><a href="/blog/chat-themes-interactive-emoji-read-receipts" class="side_blog_entry">
|
||||
<div class="side_blog_date">Sep 19</div>
|
||||
<div class="side_blog_title">Chat Themes, Interactive Emoji, Read Receipts in Groups and Live Stream Recording</div>
|
||||
</a><a href="/blog/live-streams-forwarding-next-channel" class="side_blog_entry">
|
||||
<div class="side_blog_date">Aug 31</div>
|
||||
<div class="side_blog_title">Live Streams, Flexible Forwarding and More</div>
|
||||
</a><a href="/blog/video-1000" class="side_blog_entry">
|
||||
<div class="side_blog_date">Jul 30</div>
|
||||
<div class="side_blog_title">Video Calls with up to 1000 Viewers, Video Playback Speed and More</div>
|
||||
</a><a href="/blog/group-video-calls" class="side_blog_entry">
|
||||
<div class="side_blog_date">Jun 25</div>
|
||||
<div class="side_blog_title">Group Video Calls</div>
|
||||
</a><a href="/blog/animated-backgrounds" class="side_blog_entry">
|
||||
<div class="side_blog_date">Jun 25</div>
|
||||
<div class="side_blog_title"> Animated Backgrounds</div>
|
||||
</a><a href="/blog/payments-2-0-scheduled-voice-chats" class="side_blog_entry">
|
||||
<div class="side_blog_date">Apr 26</div>
|
||||
<div class="side_blog_title">Payments 2.0, Scheduled Voice Chats, New Web Versions</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
<div id="dev_page_content_wrap" class=" ">
|
||||
<div class="dev_page_bread_crumbs"></div>
|
||||
<h1 id="dev_page_title">Edit Messages, New Mentions and More</h1>
|
||||
|
||||
<div id="dev_page_content"><div class="blog_side_image_wrap">
|
||||
<img src="/file/811140010/1/POGV5NPdHAo.23437.gif/f1389ee360bf61f577" class="blog_side_image"/>
|
||||
</div>
|
||||
|
||||
<p>Farewell to typos! Starting today, you can edit the text of your messages after sending them. This works across all Telegram chats, including groups and one-on-one conversations.</p>
|
||||
<div class="blog_image_wrap">
|
||||
<a href="/file/811140100/2/maZcBXgwrmE.306486/5bd7c8f4708afe28f8" target="_blank"><img src="/file/811140100/2/maZcBXgwrmE.306486/5bd7c8f4708afe28f8" title="Edit messages" /></a>
|
||||
<p>Edit messages</p>
|
||||
</div>
|
||||
|
||||
<p>Simply tap and hold on a message, then press ‘Edit’. If you're on <a href="https://desktop.telegram.org">desktop</a>, press the up arrow button to edit your last message. The messages will display a small ‘edited’ label so that it's easy to tell which were altered.</p>
|
||||
<h4><a class="anchor" name="new-mentions" href="#new-mentions"><i class="anchor-icon"></i></a>New Mentions</h4>
|
||||
<p><a href="https://telegram.org/blog/replies-mentions-hashtags">Mentioning</a> other people in groups is handy since it sends them a notification about your message even if they muted the group. Starting today, you can mention any members in a group – even if they don't have a <a href="https://telegram.org/blog/usernames-and-secret-chats-v2">username</a>. Just type the <code>@</code> symbol and select whoever you would like to address. Easy!</p>
|
||||
<div class="blog_image_wrap">
|
||||
<a href="/file/811140709/1/gTAMe7KBjxI.213591/37b9d9f3090d78a47f" target="_blank"><img src="/file/811140709/1/gTAMe7KBjxI.213591/37b9d9f3090d78a47f" title="Mention group members" /></a>
|
||||
<p>Mention group members</p>
|
||||
</div>
|
||||
|
||||
<h4><a class="anchor" name="people-list" href="#people-list"><i class="anchor-icon"></i></a>People List</h4>
|
||||
<p>Speaking of addressing people, you can now get to your recent chats much faster using the new People list in Search.</p>
|
||||
<div class="blog_image_wrap">
|
||||
<a href="/file/811140588/2/TcLgRm4lvOs.216480/400f4e745ca4c23d05" target="_blank"><img src="/file/811140588/2/TcLgRm4lvOs.216480/400f4e745ca4c23d05" title="People" /></a>
|
||||
<p>Recent chats</p>
|
||||
</div>
|
||||
|
||||
|
||||
<h4><a class="anchor" name="bot-attachments" href="#bot-attachments"><i class="anchor-icon"></i></a>Bot Attachments</h4>
|
||||
<p>We've also made it easier for you to access your favorite <a href="https://telegram.org/blog/inline-bots">inline bots</a>. Simply scroll down the attachment menu – and there they are. The more you use them, the higher they will climb.</p>
|
||||
<div class="blog_image_wrap">
|
||||
<a href="/file/811140151/2/QBr-eVQIcDQ.234803/03ff1e9b0848871394" target="_blank"><img src="/file/811140151/2/QBr-eVQIcDQ.234803/03ff1e9b0848871394" title="Bots in attachment menu" /></a>
|
||||
<p>Bots in attachment menu</p>
|
||||
</div>
|
||||
|
||||
<p>Naturally, you will only see inline bots in the attachment menu if you used them at least once. Try <a href="https://telegram.me/youtube">@youtube</a>, <a href="https://telegram.me/gif">@gif</a> or <a href="https://telegram.me/imdb">@imdb</a> if you don't know where to start. Check out <a href="https://telegram.org/blog/inline-bots">this post</a> for more info on how to use inline bots.</p>
|
||||
<h4><a class="anchor" name="interface-improvements" href="#interface-improvements"><i class="anchor-icon"></i></a>Interface Improvements</h4>
|
||||
<p>We‘ve added quick sharing buttons to forwarded messages from bots, channels, and public groups. Notifications about messages with stickers will now show the relevant emoji so that you’ll know the general idea at first glance.</p>
|
||||
<div class="blog_image_wrap">
|
||||
<a href="/file/811140465/2/t_gAyjk4S3A.61521/73620590fdc021aa4e" target="_blank"><img src="/file/811140465/2/t_gAyjk4S3A.61521/73620590fdc021aa4e" title="Scroll to bottom" /></a>
|
||||
<p>Scroll to bottom</p>
|
||||
</div>
|
||||
|
||||
<p>Last but not least, if you're on <a href="https://telegram.org/dl/ios">iOS</a>, your app now remembers the scroll position in chats when switching to a different chat and back. And scrolling up in a chat summons a new button that will send you back to the bottom in one tap. This button also displays a handy unread message counter if new ones are waiting for you there.</p>
|
||||
<div><br></div>
|
||||
|
||||
<p>And that's it for today. Stay tuned for more updates coming soon!</p>
|
||||
<div><br></div>
|
||||
|
||||
<p><em>May 15, 2016<br>The Telegram Team</em></p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="tl_main_share clearfix">
|
||||
<a href="https://t.me/share/url?url=https%3A%2F%2Ftelegram.org%2Fblog%2Fedit&text=Editing%20messages%2C%20new%20mentions%2C%20frequent%20contacts%2C%20bots%20in%20attachment%20menu%2C%20and%20more." class="tl_telegram_share_btn" id="tl_telegram_share_btn" data-text="Editing messages, new mentions, frequent contacts, bots in attachment menu, and more." data-url="https://telegram.org/blog/edit"><i class="tl_telegram_share_icon"></i><span class="tl_telegram_share_label" target="_blank">Forward</span></a>
|
||||
<a href="https://twitter.com/share" class="tl_twitter_share_btn" id="tl_twitter_share_btn" data-text="Editing messages, new mentions, frequent contacts, bots in attachment menu, and more." data-url="https://telegram.org/blog/edit" data-via="Telegram">Tweet <span class="tl_twitter_share_cnt"></span></a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="tl_main_recent_news_wrap tlb_other_news_wrap tl_blog_list_page_wrap">
|
||||
<h3 class="tl_main_recent_news_header">
|
||||
<a href="/blog">Other News</a>
|
||||
</h3>
|
||||
<div class="tl_main_recent_news_cards clearfix">
|
||||
<a class="dev_blog_card_link_wrap" href="/blog/shared-media-scrolling-calendar-join-requests-and-more"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001930/3/yPTwxfusWZg.174275/3f847742c263cdae99" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests, Global Chat Themes on iOS and More</h4>
|
||||
<div class="dev_blog_card_lead">Today's update brings new ways to find memories in shared media with accelerated scrolling…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Nov 3, 2021</div>
|
||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/chat-themes-interactive-emoji-read-receipts"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001155/2/kLfFr4UDBdo.74223/58bec6bc2a18455c5f" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Chat Themes, Interactive Emoji, Read Receipts in Groups and Live Stream Recording</h4>
|
||||
<div class="dev_blog_card_lead">Today's update lets you set different themes for individual chats, share your feelings with…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Sep 19, 2021</div>
|
||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/live-streams-forwarding-next-channel"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001784/4/IlXX31YWz5U.92729/eabf233f3635354560" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Live Streams, Flexible Forwarding, Jump to Next Channel, Trending Stickers and More</h4>
|
||||
<div class="dev_blog_card_lead">Telegram 8.0 brings live streams with unlimited viewers to groups and channels, options to…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Aug 31, 2021</div>
|
||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/video-1000"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001574/3/Pqda66P2qCA.71942/56366f0bdd3630cab8" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Video Calls with up to 1000 Viewers, Video Messages 2.0, Video Playback Speed and More</h4>
|
||||
<div class="dev_blog_card_lead">This update takes video to the next level. Group video calls now have up to 1000 viewers,…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Jul 30, 2021</div>
|
||||
</div></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_wrap">
|
||||
<div class="footer_columns_wrap footer_desktop">
|
||||
<div class="footer_column footer_column_telegram">
|
||||
<h5>Telegram</h5>
|
||||
<div class="footer_telegram_description"></div>
|
||||
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
|
||||
</div>
|
||||
|
||||
<div class="footer_column">
|
||||
<h5><a href="/faq">About</a></h5>
|
||||
<ul>
|
||||
<li><a href="/faq">FAQ</a></li>
|
||||
<li><a href="/blog">Blog</a></li>
|
||||
<li><a href="/jobs">Jobs</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/apps#mobile-apps">Mobile Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="/dl/ios">iPhone/iPad</a></li>
|
||||
<li><a href="/dl/android">Android</a></li>
|
||||
<li><a href="/dl/wp">Windows Phone</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/apps#desktop-apps">Desktop Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
|
||||
<li><a href="//macos.telegram.org/">macOS</a></li>
|
||||
<li><a href="/dl/web">Web-browser</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column footer_column_platform">
|
||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
||||
<ul>
|
||||
<li><a href="//core.telegram.org/api">API</a></li>
|
||||
<li><a href="//translations.telegram.org/">Translations</a></li>
|
||||
<li><a href="//instantview.telegram.org/">Instant View</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_columns_wrap footer_mobile">
|
||||
<div class="footer_column">
|
||||
<h5><a href="/faq">About</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/blog">Blog</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/apps">Apps</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/js/main.js?42"></script>
|
||||
|
||||
<script>initScrollVideos(true);
|
||||
twitterCustomShareInit();
|
||||
blogSideImageInit();
|
||||
backToTopInit("Go up");
|
||||
removePreloadInit();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,298 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Chat Folders, Archive, Channel Stats and More</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta property="og:title" content="Chat Folders, Archive, Channel Stats and More">
|
||||
<meta property="og:image" content="https://telegram.org//file/464001733/2/yIk_VZst65A.206330/2a44567f3f712767a8">
|
||||
<meta property="og:site_name" content="Telegram">
|
||||
<meta property="og:description" content="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.">
|
||||
<meta property="article:published_time" content="2020-03-30T11:41:00+00:00"><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:image" content="https://telegram.org//file/464001733/2/yIk_VZst65A.206330/2a44567f3f712767a8" />
|
||||
<meta property="fb:app_id" content="254098051407226">
|
||||
<meta property="vk:app_id" content="3782569">
|
||||
<meta name="apple-itunes-app" content="app-id=686449807">
|
||||
<meta name="telegram:channel" content="@telegram">
|
||||
<link rel="canonical" href="https://telegram.org/blog/folders" />
|
||||
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
|
||||
<link rel="alternate icon" href="/favicon.ico?4" type="image/x-icon" />
|
||||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
||||
|
||||
<link href="/css/telegram.css?214" rel="stylesheet" media="screen">
|
||||
<style>
|
||||
</style>
|
||||
</head>
|
||||
<body class="preload">
|
||||
<div id="fb-root"></div>
|
||||
<div class="tl_page_wrap">
|
||||
<div class="tl_page_head navbar navbar-static-top navbar navbar-tg">
|
||||
<div class="navbar-inner">
|
||||
<div class="container clearfix">
|
||||
<ul class="nav navbar-nav navbar-right"><li class="dropdown top_lang_select"><a class="dropdown-toggle" onclick="return dropdownClick(this, event)" href="#"><i class="dev_top_lang_icon"></i> <b class="minicaret"></b></a>
|
||||
<ul class="dropdown-menu"><li class=""><a href="?setln=en">English</a></li><li class="long "><a href="?setln=id">Bahasa Indonesia</a></li><li class="long "><a href="?setln=ms">Bahasa Melayu</a></li><li class=""><a href="?setln=de">Deutsch</a></li><li class=""><a href="?setln=es">Español</a></li><li class=""><a href="?setln=fr">Français</a></li><li class=""><a href="?setln=it">Italiano</a></li><li class=""><a href="?setln=nl">Nederlands</a></li><li class=""><a href="?setln=uz">O‘zbek</a></li><li class=""><a href="?setln=pl">Polski</a></li><li class="long "><a href="?setln=pt-br">Português (Brasil)</a></li><li class=""><a href="?setln=tr">Türkçe</a></li><li class=""><a href="?setln=be">Беларуская</a></li><li class=""><a href="?setln=ru">Русский</a></li><li class=""><a href="?setln=uk">Українська</a></li><li class=""><a href="?setln=ar">العربية</a></li><li class=""><a href="?setln=fa">فارسی</a></li><li class=""><a href="?setln=ko">한국어</a></li></ul></li><li class="navbar-twitter hidden-xs"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i> Twitter</a></li></ul>
|
||||
<ul class="nav navbar-nav">
|
||||
<li class=""><a href="/">Home</a></li>
|
||||
<li class=""><a href="/faq">FAQ</a></li>
|
||||
<li class=""><a href="/apps">Apps</a></li>
|
||||
<li class="hidden-xs "><a href="//core.telegram.org/api">API</a></li>
|
||||
<li class="hidden-xs "><a href="//core.telegram.org/mtproto">Protocol</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container clearfix tl_page_container ">
|
||||
<div class="tl_page">
|
||||
<div class="tl_contest_page_wrap">
|
||||
<div class="tl_blog_side_blog"><div class="side_blog_wrap">
|
||||
<div class="side_blog">
|
||||
<a href="/blog" class="side_blog_header">Recent News</a>
|
||||
<div class="side_blog_entries">
|
||||
<a href="/blog/shared-media-scrolling-calendar-join-requests-and-more" class="side_blog_entry">
|
||||
<div class="side_blog_date">Nov 3</div>
|
||||
<div class="side_blog_title">Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests and More</div>
|
||||
</a><a href="/blog/chat-themes-interactive-emoji-read-receipts" class="side_blog_entry">
|
||||
<div class="side_blog_date">Sep 19</div>
|
||||
<div class="side_blog_title">Chat Themes, Interactive Emoji, Read Receipts in Groups and Live Stream Recording</div>
|
||||
</a><a href="/blog/live-streams-forwarding-next-channel" class="side_blog_entry">
|
||||
<div class="side_blog_date">Aug 31</div>
|
||||
<div class="side_blog_title">Live Streams, Flexible Forwarding and More</div>
|
||||
</a><a href="/blog/video-1000" class="side_blog_entry">
|
||||
<div class="side_blog_date">Jul 30</div>
|
||||
<div class="side_blog_title">Video Calls with up to 1000 Viewers, Video Playback Speed and More</div>
|
||||
</a><a href="/blog/group-video-calls" class="side_blog_entry">
|
||||
<div class="side_blog_date">Jun 25</div>
|
||||
<div class="side_blog_title">Group Video Calls</div>
|
||||
</a><a href="/blog/animated-backgrounds" class="side_blog_entry">
|
||||
<div class="side_blog_date">Jun 25</div>
|
||||
<div class="side_blog_title"> Animated Backgrounds</div>
|
||||
</a><a href="/blog/payments-2-0-scheduled-voice-chats" class="side_blog_entry">
|
||||
<div class="side_blog_date">Apr 26</div>
|
||||
<div class="side_blog_title">Payments 2.0, Scheduled Voice Chats, New Web Versions</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
<div id="dev_page_content_wrap" class=" ">
|
||||
<div class="dev_page_bread_crumbs"></div>
|
||||
<h1 id="dev_page_title">Chat Folders, Archive, Channel Stats and More</h1>
|
||||
|
||||
<div id="dev_page_content"><div class="blog_side_image_wrap">
|
||||
<img src="/file/464001127/1/2inZeH9yDnA.24478.gif/69b158f350f0af1b79" class="blog_side_image"/>
|
||||
</div>
|
||||
|
||||
<div class="blog_wide_image">
|
||||
<a href="/file/464001733/2/yIk_VZst65A.206330/2a44567f3f712767a8" target="_blank"><img src="/file/464001132/1/pfRkjlgxXjk.72504/d55b2cc06f5b3b277a" srcset="/file/464001733/2/yIk_VZst65A.206330/2a44567f3f712767a8, 1200w" title="Wait, I'm actually wearing dino pyjamas for work too." alt="Introducing Chat Folders"/></a>
|
||||
</div>
|
||||
|
||||
<p>Many of our users rely on Telegram for their <strong>work</strong> and <strong>studies</strong>, 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 <strong>Chat Folders</strong> today.</p>
|
||||
<p>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.</p>
|
||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001295/3/NSKA7WOtlYg.68623/ffdf3cad1d552691e4" style="max-width: 400px;" title="Since all the yoga studios are closed, your chats will have to start folding for you" alt="Chat Folders for busy chat lists">
|
||||
<source src="/file/464001651/2/OeSErRvuUnk.3945128.mp4/f3fb02d142050bed46" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
|
||||
<p>You can include or exclude all chats of a particular type, like <strong>Channels</strong>, or <strong>Unread</strong> – or one by one.</p>
|
||||
<p>Folders become available in the interface when your chat list is long enough to start getting cluttered. Alternatively, you may use <a href="tg://settings/folders">this link</a> in your app to enable Chat Folders.</p>
|
||||
<h3><a class="anchor" name="unlimited-pins" href="#unlimited-pins"><i class="anchor-icon"></i></a>Unlimited Pins</h3>
|
||||
<p>Each of your folders can have as many <strong>pinned chats</strong> as you like.</p>
|
||||
<div class="blog_image_wrap blog_medium_image_wrap">
|
||||
<a href="/file/464001884/1/fIos-y73dLo.103411/50371b2ab1a4d7e024" target="_blank"><img src="/file/464001685/1/POFwA7gDxMs.23771/633c88ba323d1fd0a2" title="You get a pin! You get a pin! Everyone gets a pin!" alt="Pinned chats in folders" srcset="/file/464001884/1/fIos-y73dLo.103411/50371b2ab1a4d7e024 , 2x" /></a>
|
||||
</div>
|
||||
|
||||
<h3><a class="anchor" name="archived-chats" href="#archived-chats"><i class="anchor-icon"></i></a>Archived Chats</h3>
|
||||
<p>Chat Folders work best to make some of your chats <strong>more visible</strong>. If you're looking to <strong>hide</strong> some of your chats from view, try <a href="https://telegram.org/blog/archive-and-new-design#everything-in-its-place"><strong>archiving</strong></a> them instead. </p>
|
||||
<p>Swipe left on a chat to transfer it to your <strong>archived chats</strong> folder. When an archived chat gets a notification, it will pop out of the folder and back into your chat list. <strong>Muted</strong> chats will <strong>stay archived</strong> forever.</p>
|
||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/811140089/1a1a/El2hG5wVR34.46491/7dc806e6a17f4bf077" style="max-width: 480px;" title="Archival footage from the introduction of Archived Chats - May 2019" alt="Archiving chats">
|
||||
<source src="/file/811140993/1890/r8DEDj-9j1c.2142992.mp4/c8b190a64437af3f7b" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
|
||||
<p>You can <strong>hide the archive</strong> by swiping left on it. See it again by dragging the screen down. </p>
|
||||
<p>On Android, if you are already using Folders, swiping will not work for archiving. Instead, you can <em>long press</em> on a chat to open the <strong>bulk actions menu</strong> where you can <strong>select multiple chats</strong> and then pin, mute, archive or delete them all at once.</p>
|
||||
<div class="blog_image_wrap blog_medium_image_wrap">
|
||||
<a href="/file/464001215/1/iuyfMuit-OM.76006/e8f1fe20650d8da43f" target="_blank"><img src="/file/464001944/1/EwYVaNx8FZQ.19257/a79c239f66ca4c0822" title="Ash nazg durbatulûk, ash nazg gimbatul, ash nazg thrakatulûk, agh burzum-ishi krimpatul" alt="Archive button in the bulk actions menu" srcset="/file/464001215/1/iuyfMuit-OM.76006/e8f1fe20650d8da43f , 2x" /></a>
|
||||
</div>
|
||||
|
||||
|
||||
<h3><a class="anchor" name="desktop-sync" href="#desktop-sync"><i class="anchor-icon"></i></a>Desktop Sync</h3>
|
||||
<p>Like everything on Telegram (except for Secret Chats), your Chat Folders will seamlessly sync to all your other connected apps, including our <strong>Desktop Apps</strong>.</p>
|
||||
<p>Thanks to the extra space available on your computer screen, we've added a folder <strong>sidebar</strong> – as well as some <strong>icons</strong> to make your folders more recognizable:</p>
|
||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001728/3/a9Cl439dQJo.67152/b175434a5f3ea05da2" style="max-width: 400px;" title="For everyone wondering, the icon next to the bell is a roly-poly toy. I use it for news channels." alt="Folders as seen on Telegram Desktop">
|
||||
<source src="/file/464001049/2/TKQT-8qaP8k.3132583.mp4/8cef979865b66b1a9e" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
|
||||
<blockquote>
|
||||
<p>Get the multiplatform <a href="https://desktop.telegram.org"><strong>Telegram Desktop</strong></a> or our dedicated <a href="https://macos.telegram.org"><strong>macOS app</strong></a>. If you're not using those, you're only enjoying <em>half</em> of Telegram.</p>
|
||||
</blockquote>
|
||||
<h3><a class="anchor" name="channel-stats" href="#channel-stats"><i class="anchor-icon"></i></a>Channel Stats</h3>
|
||||
<div>
|
||||
If you have a channel with more than <s>1000</s> <b>50 subscribers</b>, you can now view <b>detailed statistics</b> about its <b>growth</b> and the <b>performance</b> of its posts.
|
||||
</div>
|
||||
|
||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001702/3/uv3ANJTThlk.65177/9d8f2ed8fae740350a" style="max-width: 400px;" title="Warning: this video contains GRAPH-ic content" alt="Channel stats screens">
|
||||
<source src="/file/464001940/4/YMojV6mIcyw.3310232.mp4/3b62a4ef0d026dd9c8" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
|
||||
<p>With this information, you can find out what's working and what's working <em>really well</em>. Hint: Cat Pictures.</p>
|
||||
<h3><a class="anchor" name="voice-recording-animations-on-android" href="#voice-recording-animations-on-android"><i class="anchor-icon"></i></a>Voice Recording Animations on Android</h3>
|
||||
<p>Our designers added some fancy wavy animations below your finger when you're <strong>recording</strong> a voice or <a href="https://telegram.org/blog/video-messages-and-telescope"><strong>video message</strong></a>. </p>
|
||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001192/3/JdKsApFr3Ko.53933/e8c66ae5e26dbfb37e" style="max-width: 400px;" title="Made from 100% free-range wibbles, wobbles and waves." alt="Recording a video message">
|
||||
<source src="/file/464001032/2/wydqu-DaaxA.2105145.mp4/5f3e7ac71587b924e3" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
|
||||
<p><strong>Tip of the day:</strong> Did you know you can slide your finger up to lock recording and keep talking without holding the button?</p>
|
||||
<h3><a class="anchor" name="new-animated-emoji" href="#new-animated-emoji"><i class="anchor-icon"></i></a>New Animated Emoji</h3>
|
||||
<p>The latest additions to our army of <strong>animated emoji</strong> can help you be brave and urge your friends to stay safe and healthy. Send <img class="emoji" src="//telegram.org/img/emoji/40/F09FA6A0.png" width="20" height="20" alt="🦠" />, <img class="emoji" src="//telegram.org/img/emoji/40/F09FA492.png" width="20" height="20" alt="🤒" />, <img class="emoji" src="//telegram.org/img/emoji/40/F09F98B7.png" width="20" height="20" alt="😷" />, <img class="emoji" src="//telegram.org/img/emoji/40/F09FA495.png" width="20" height="20" alt="🤕" />, <img class="emoji" src="//telegram.org/img/emoji/40/F09FA4A7.png" width="20" height="20" alt="🤧" />, <img class="emoji" src="//telegram.org/img/emoji/40/F09FA4A2.png" width="20" height="20" alt="🤢" />, <img class="emoji" src="//telegram.org/img/emoji/40/F09FA4AE.png" width="20" height="20" alt="🤮" />, <img class="emoji" src="//telegram.org/img/emoji/40/F09FA7BC.png" width="20" height="20" alt="🧼" />, <img class="emoji" src="//telegram.org/img/emoji/40/F09F9289.png" width="20" height="20" alt="💉" />, <img class="emoji" src="//telegram.org/img/emoji/40/F09F928A.png" width="20" height="20" alt="💊" /> or <img class="emoji" src="//telegram.org/img/emoji/40/F09F9A91.png" width="20" height="20" alt="🚑" /> to any chat to check them out.</p>
|
||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001060/1/Dl70xbIDxHA.20840/9ecd296d80363b3dd3" style="max-width: 400px;" title="You can touch these faces as much as you want." alt="New batch of animated emoji">
|
||||
<source src="/file/464001090/2/38s-0HCinGk.599604.mp4/c8aae5890a765600d2" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
|
||||
<p>Most of our sticker packs now also have something to say about the situation. Type <img class="emoji" src="//telegram.org/img/emoji/40/F09FA6A0.png" width="20" height="20" alt="🦠" /> in any chat and wait to see the suggestions:</p>
|
||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001921/2/3Aw2XqDrYuY.19034/8cbd2b6c3425e44a0a" style="max-width: 400px;" title="Don't worry, our artists have been washing their hands each time they add a new sticker to the pack." alt="New animated stickers">
|
||||
<source src="/file/464001025/2/0anHDPFzeo4.2112545.mp4/ce429cf7d50a46584c" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
|
||||
<h3><a class="anchor" name="and-one-more-thing" href="#and-one-more-thing"><i class="anchor-icon"></i></a>And One More Thing</h3>
|
||||
<p>Missing your Catan or D&D partners while the world is on lockdown? Send <img class="emoji" src="//telegram.org/img/emoji/40/F09F8EB2.png" width="20" height="20" alt="🎲" /> to any chat to get a certified random number from the <strong>animated dice</strong>.</p>
|
||||
<p>Besides trying to test your luck, you can also use it as a <strong>tiebreaker</strong> if a <a href="https://telegram.org/blog/polls-2-0-vmq">group poll</a> or friendly debate ends in a split decision. Pick a number – the closest one wins! </p>
|
||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001752/3/M-fEXuih3zc.19034/1e5d087ae14676bd03" style="max-width: 400px;" title="Also works in zero gravity, perfect for space trips. " alt="Animated dice emoji with a random number generated on Telegram servers">
|
||||
<source src="/file/464001501/1/xIquYdxUX1w.1166468.mp4/1ef978753bbb5eb56b" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
|
||||
<p>Stay home, stay safe and stay tuned for our next updates!</p>
|
||||
<div><br></div>
|
||||
|
||||
<p><em>March 30, 2020,<br>The Telegram Team</em></p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="tl_main_share clearfix">
|
||||
<a href="https://t.me/share/url?url=https%3A%2F%2Ftelegram.org%2Fblog%2Ffolders&text=Telegram%206.0%20brings%20Chat%20Folders%2C%20Archive%2C%20Channel%20Stats%2C%20New%20Stickers%20and%20Emoji%20and%20More." class="tl_telegram_share_btn" id="tl_telegram_share_btn" data-text="Telegram 6.0 brings Chat Folders, Archive, Channel Stats, New Stickers and Emoji and More." data-url="https://telegram.org/blog/folders"><i class="tl_telegram_share_icon"></i><span class="tl_telegram_share_label" target="_blank">Forward</span></a>
|
||||
<a href="https://twitter.com/share" class="tl_twitter_share_btn" id="tl_twitter_share_btn" data-text="Telegram 6.0 brings Chat Folders, Archive, Channel Stats, New Stickers and Emoji and More." data-url="https://telegram.org/blog/folders" data-via="Telegram">Tweet <span class="tl_twitter_share_cnt"></span></a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="tl_main_recent_news_wrap tlb_other_news_wrap tl_blog_list_page_wrap">
|
||||
<h3 class="tl_main_recent_news_header">
|
||||
<a href="/blog">Other News</a>
|
||||
</h3>
|
||||
<div class="tl_main_recent_news_cards clearfix">
|
||||
<a class="dev_blog_card_link_wrap" href="/blog/shared-media-scrolling-calendar-join-requests-and-more"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001930/3/yPTwxfusWZg.174275/3f847742c263cdae99" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests, Global Chat Themes on iOS and More</h4>
|
||||
<div class="dev_blog_card_lead">Today's update brings new ways to find memories in shared media with accelerated scrolling…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Nov 3, 2021</div>
|
||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/chat-themes-interactive-emoji-read-receipts"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001155/2/kLfFr4UDBdo.74223/58bec6bc2a18455c5f" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Chat Themes, Interactive Emoji, Read Receipts in Groups and Live Stream Recording</h4>
|
||||
<div class="dev_blog_card_lead">Today's update lets you set different themes for individual chats, share your feelings with…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Sep 19, 2021</div>
|
||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/live-streams-forwarding-next-channel"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001784/4/IlXX31YWz5U.92729/eabf233f3635354560" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Live Streams, Flexible Forwarding, Jump to Next Channel, Trending Stickers and More</h4>
|
||||
<div class="dev_blog_card_lead">Telegram 8.0 brings live streams with unlimited viewers to groups and channels, options to…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Aug 31, 2021</div>
|
||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/video-1000"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001574/3/Pqda66P2qCA.71942/56366f0bdd3630cab8" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Video Calls with up to 1000 Viewers, Video Messages 2.0, Video Playback Speed and More</h4>
|
||||
<div class="dev_blog_card_lead">This update takes video to the next level. Group video calls now have up to 1000 viewers,…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Jul 30, 2021</div>
|
||||
</div></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_wrap">
|
||||
<div class="footer_columns_wrap footer_desktop">
|
||||
<div class="footer_column footer_column_telegram">
|
||||
<h5>Telegram</h5>
|
||||
<div class="footer_telegram_description"></div>
|
||||
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
|
||||
</div>
|
||||
|
||||
<div class="footer_column">
|
||||
<h5><a href="/faq">About</a></h5>
|
||||
<ul>
|
||||
<li><a href="/faq">FAQ</a></li>
|
||||
<li><a href="/blog">Blog</a></li>
|
||||
<li><a href="/jobs">Jobs</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/apps#mobile-apps">Mobile Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="/dl/ios">iPhone/iPad</a></li>
|
||||
<li><a href="/dl/android">Android</a></li>
|
||||
<li><a href="/dl/wp">Windows Phone</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/apps#desktop-apps">Desktop Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
|
||||
<li><a href="//macos.telegram.org/">macOS</a></li>
|
||||
<li><a href="/dl/web">Web-browser</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column footer_column_platform">
|
||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
||||
<ul>
|
||||
<li><a href="//core.telegram.org/api">API</a></li>
|
||||
<li><a href="//translations.telegram.org/">Translations</a></li>
|
||||
<li><a href="//instantview.telegram.org/">Instant View</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_columns_wrap footer_mobile">
|
||||
<div class="footer_column">
|
||||
<h5><a href="/faq">About</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/blog">Blog</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/apps">Apps</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/js/main.js?42"></script>
|
||||
|
||||
<script>initScrollVideos(true);
|
||||
twitterCustomShareInit();
|
||||
blogSideImageInit();
|
||||
backToTopInit("Go up");
|
||||
removePreloadInit();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,315 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Profile Videos, 2 GB File Sharing, Group Stats, Improved People Nearby and More</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta property="og:title" content="Profile Videos, 2 GB File Sharing, Group Stats, Improved People Nearby and More">
|
||||
<meta property="og:image" content="https://telegram.org/file/464001840/2/LFAUy_p-pXo.79318/d12a4155cb4fcb2735">
|
||||
<meta property="og:site_name" content="Telegram">
|
||||
<meta property="og:description" content="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.">
|
||||
<meta property="article:published_time" content="2020-07-26T07:37:16+00:00"><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:image" content="https://telegram.org/file/464001840/2/LFAUy_p-pXo.79318/d12a4155cb4fcb2735" />
|
||||
<meta property="fb:app_id" content="254098051407226">
|
||||
<meta property="vk:app_id" content="3782569">
|
||||
<meta name="apple-itunes-app" content="app-id=686449807">
|
||||
<meta name="telegram:channel" content="@telegram">
|
||||
<link rel="canonical" href="https://telegram.org/blog/profile-videos-people-nearby-and-more" />
|
||||
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
|
||||
<link rel="alternate icon" href="/favicon.ico?4" type="image/x-icon" />
|
||||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
||||
|
||||
<link href="/css/telegram.css?214" rel="stylesheet" media="screen">
|
||||
<style>
|
||||
</style>
|
||||
</head>
|
||||
<body class="preload">
|
||||
<div id="fb-root"></div>
|
||||
<div class="tl_page_wrap">
|
||||
<div class="tl_page_head navbar navbar-static-top navbar navbar-tg">
|
||||
<div class="navbar-inner">
|
||||
<div class="container clearfix">
|
||||
<ul class="nav navbar-nav navbar-right"><li class="dropdown top_lang_select"><a class="dropdown-toggle" onclick="return dropdownClick(this, event)" href="#"><i class="dev_top_lang_icon"></i> <b class="minicaret"></b></a>
|
||||
<ul class="dropdown-menu"><li class=""><a href="?setln=en">English</a></li><li class="long "><a href="?setln=id">Bahasa Indonesia</a></li><li class="long "><a href="?setln=ms">Bahasa Melayu</a></li><li class=""><a href="?setln=de">Deutsch</a></li><li class=""><a href="?setln=es">Español</a></li><li class=""><a href="?setln=fr">Français</a></li><li class=""><a href="?setln=it">Italiano</a></li><li class=""><a href="?setln=nl">Nederlands</a></li><li class=""><a href="?setln=uz">O‘zbek</a></li><li class=""><a href="?setln=pl">Polski</a></li><li class="long "><a href="?setln=pt-br">Português (Brasil)</a></li><li class=""><a href="?setln=tr">Türkçe</a></li><li class=""><a href="?setln=be">Беларуская</a></li><li class=""><a href="?setln=ru">Русский</a></li><li class=""><a href="?setln=uk">Українська</a></li><li class=""><a href="?setln=ar">العربية</a></li><li class=""><a href="?setln=fa">فارسی</a></li><li class=""><a href="?setln=ko">한국어</a></li></ul></li><li class="navbar-twitter hidden-xs"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i> Twitter</a></li></ul>
|
||||
<ul class="nav navbar-nav">
|
||||
<li class=""><a href="/">Home</a></li>
|
||||
<li class=""><a href="/faq">FAQ</a></li>
|
||||
<li class=""><a href="/apps">Apps</a></li>
|
||||
<li class="hidden-xs "><a href="//core.telegram.org/api">API</a></li>
|
||||
<li class="hidden-xs "><a href="//core.telegram.org/mtproto">Protocol</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container clearfix tl_page_container ">
|
||||
<div class="tl_page">
|
||||
<div class="tl_contest_page_wrap">
|
||||
<div class="tl_blog_side_blog"><div class="side_blog_wrap">
|
||||
<div class="side_blog">
|
||||
<a href="/blog" class="side_blog_header">Recent News</a>
|
||||
<div class="side_blog_entries">
|
||||
<a href="/blog/shared-media-scrolling-calendar-join-requests-and-more" class="side_blog_entry">
|
||||
<div class="side_blog_date">Nov 3</div>
|
||||
<div class="side_blog_title">Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests and More</div>
|
||||
</a><a href="/blog/chat-themes-interactive-emoji-read-receipts" class="side_blog_entry">
|
||||
<div class="side_blog_date">Sep 19</div>
|
||||
<div class="side_blog_title">Chat Themes, Interactive Emoji, Read Receipts in Groups and Live Stream Recording</div>
|
||||
</a><a href="/blog/live-streams-forwarding-next-channel" class="side_blog_entry">
|
||||
<div class="side_blog_date">Aug 31</div>
|
||||
<div class="side_blog_title">Live Streams, Flexible Forwarding and More</div>
|
||||
</a><a href="/blog/video-1000" class="side_blog_entry">
|
||||
<div class="side_blog_date">Jul 30</div>
|
||||
<div class="side_blog_title">Video Calls with up to 1000 Viewers, Video Playback Speed and More</div>
|
||||
</a><a href="/blog/group-video-calls" class="side_blog_entry">
|
||||
<div class="side_blog_date">Jun 25</div>
|
||||
<div class="side_blog_title">Group Video Calls</div>
|
||||
</a><a href="/blog/animated-backgrounds" class="side_blog_entry">
|
||||
<div class="side_blog_date">Jun 25</div>
|
||||
<div class="side_blog_title"> Animated Backgrounds</div>
|
||||
</a><a href="/blog/payments-2-0-scheduled-voice-chats" class="side_blog_entry">
|
||||
<div class="side_blog_date">Apr 26</div>
|
||||
<div class="side_blog_title">Payments 2.0, Scheduled Voice Chats, New Web Versions</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
<div id="dev_page_content_wrap" class=" ">
|
||||
<div class="dev_page_bread_crumbs"></div>
|
||||
<h1 id="dev_page_title">Profile Videos, 2 GB File Sharing, Group Stats, Improved People Nearby and More</h1>
|
||||
|
||||
<div id="dev_page_content"><div class="blog_side_image_wrap">
|
||||
<picture class="dev_page_tgsticker blog_side_image js-tgsticker_image" style="width:160px;"><div style="padding-top:100%"></div><source type="application/x-tgsticker" srcset="/file/464001523/1/w-RLVIRC_uk.13374/1c1cac6caab829fe46"><img src="/file/464001801/4/pPObBDJVv-M.32191.png/9963667389a3218249" /></picture>
|
||||
</div>
|
||||
|
||||
<div class="blog_wide_image">
|
||||
<a href="/file/464001391/1/S7f4bk3oS9Y.226420/98d0d31a444c948a48" target="_blank"><img src="/file/464001840/2/LFAUy_p-pXo.79318/d12a4155cb4fcb2735" srcset="/file/464001391/1/S7f4bk3oS9Y.226420/98d0d31a444c948a48, 1200w" title="Introducing Life Forms Nearby, Profile Videos and a cartload of other things we'd like you to have instead of video calls." alt="Introducing Profile Videos, Improved People Nearby, 2 GB File Sharing and More"/></a>
|
||||
</div>
|
||||
|
||||
<p>Today's update brings <strong>Profile Videos</strong> along with improved <strong>People Nearby</strong> features, unlimited file sharing with up to <strong>2 Gigabytes</strong> per file, <strong>mini-thumbnails</strong> for your chat list and notifications, <strong>group stats</strong>, and much more.</p>
|
||||
<h3><a class="anchor" name="profile-videos" href="#profile-videos"><i class="anchor-icon"></i></a>Profile Videos</h3>
|
||||
<p>You can now upload a <strong>video</strong> 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 <em>Harry Potter</em>.</p>
|
||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001329/1/hPrutuB_Ug8.55106/9445d9d5c3fadb4087" style="max-width: 400px;" title="Telegram: The number one app to show off your sweater-tying skills." alt="Video demo: Profile videos and other new features">
|
||||
<source src="/file/464001601/1/-5dAQyKKHMs.4817020.mp4/63f7e27bc5e2868e4f" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
|
||||
<p>Same as with any videos you upload, our <a href="https://telegram.org/blog/video-editor-gifs">media editor</a> will help you <strong>enhance quality</strong> – or decorate yourself with <strong>animated stickers</strong>.</p>
|
||||
<p>As your mood changes, you can quickly <strong>switch back</strong> to a previous profile photo or video by tapping <em>‘Set as Main’</em>. Great for rewinding time and staying young forever.</p>
|
||||
<h3><a class="anchor" name="soften-skin" href="#soften-skin"><i class="anchor-icon"></i></a>Soften Skin</h3>
|
||||
<p>Speaking of the media editor, any photo or video you take with the <strong>front-facing camera</strong> now has a <strong>soften skin</strong> option in the media editor. But you don't need it to look fabulous, you already <strong>are</strong> fabulous.</p>
|
||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001647/1/VO7enamgufY.68940/00fd25d8ad0ba66724" style="max-width: 400px;" title="Lizard people made us add this feature to hide their scales! We're doomed." alt="Soften skin in video editor">
|
||||
<source src="/file/464001315/2/eORqYEPfJ3A.3667350.mp4/4f645d25b9c8bff7f9" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
|
||||
|
||||
<!--### New Settings
|
||||
|
||||
<div class="blog_image_wrap blog_medium_image_wrap">
|
||||
<a href="/file/464001795/1/95fWhgCKpW0.250694/ea9be7e9ec127923e2" target="_blank"><img src="/file/464001616/2/2_mP8m67qnY.53919/4f4183cc0080f1d3aa" title="TITLE" alt="TITLE" srcset="/file/464001795/1/95fWhgCKpW0.250694/ea9be7e9ec127923e2 , 2x" /></a>
|
||||
</div>-->
|
||||
|
||||
<h3><a class="anchor" name="improved-people-nearby" href="#improved-people-nearby"><i class="anchor-icon"></i></a>Improved People Nearby</h3>
|
||||
<p>Profile videos make <strong>meeting new people</strong> a dozen times more interesting, and we've beefed up the <a href="https://telegram.org/blog/new-profiles-people-nearby">People Nearby</a> section for the occasion. </p>
|
||||
<p>When people contact you via the People Nearby section, you will see <strong>how far away</strong> they are. And when you start a chat with someone nearby, Telegram will suggest a <strong>greeting sticker</strong> to break the ice. Luckily, all our stickers are extroverts.</p>
|
||||
<div class="blog_image_wrap blog_medium_image_wrap">
|
||||
<a href="/file/464001827/2/Ezvi90I22s8.129077/11f12131a4291130be" target="_blank"><img src="/file/464001578/4/bhymRQBl8pg.82645/61a900c8a44b9089fb" title="Good sticker chemistry is the best compatibility test." alt="Improved People Nearby" srcset="/file/464001827/2/Ezvi90I22s8.129077/11f12131a4291130be , 2x" /></a>
|
||||
</div>
|
||||
|
||||
<p>Now that people are carefully emerging into this brave new world, it's time to make friends and <del>repopulate the earth</del> compare your sticker collections. Head over to <em>Contacts > Find People Nearby</em> and try tapping on <em>’Make myself visible’</em>.</p>
|
||||
<h3><a class="anchor" name="mini-thumbnails" href="#mini-thumbnails"><i class="anchor-icon"></i></a>Mini-thumbnails</h3>
|
||||
<p>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 <strong>chat list thumbnails</strong>.</p>
|
||||
<div class="blog_image_wrap blog_medium_image_wrap">
|
||||
<a href="/file/464001583/1/d5lEqGTYkgI.55808/4c6ea0bade20a0bfed" target="_blank"><img src="/file/464001846/1/M1G29Jg06TU.55808/a25f635c5bfb4292d4" title="We heard you liked thumbnails so we made a thumbnail of your thumbnails so you can preview your previews." alt="Mini-thumbnails in the chat list" srcset="/file/464001583/1/d5lEqGTYkgI.55808/4c6ea0bade20a0bfed , 2x" /></a>
|
||||
</div>
|
||||
|
||||
<p>The new thumbnails also appear in <strong>notifications</strong> and <strong>message search results</strong>. Never lose a cat photo again.</p>
|
||||
<blockquote>
|
||||
<p>Speaking of previews, you can <a href="https://telegram.org/blog/unread-replace-2x#and-three-more-on-android">hold on a profile picture in the chat list</a> to <strong>preview messages</strong> without opening the chat. This feature is from <a href="https://telegram.org/evolution#june-2018">2018</a>, but we had a dream in which a talking squid told us to mention it here.</p>
|
||||
</blockquote>
|
||||
<h3><a class="anchor" name="filter-new-chats-from-non-contacts" href="#filter-new-chats-from-non-contacts"><i class="anchor-icon"></i></a>Filter New Chats from Non-Contacts</h3>
|
||||
<p>Thanks to <strong>People Nearby</strong> and groups with up to <strong>200,000 members</strong>, you can always find someone to chat with. Public figures sometimes have the opposite problem and may wish to <strong>tone down</strong> the attention they receive — we've got this covered too.</p>
|
||||
<p>If you're getting too many messages from non-contacts, try the new switch in <em>Privacy & Security</em> settings to automatically <strong>archive and mute new chats</strong> from people <strong>not in your contacts</strong>. You can access these chats anytime from the <em>Archive</em> folder and bring them back to the main chat list in a tap.</p>
|
||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001738/2/E_8uXXezFjQ.23282/2081c1d30fb2b5bdbc" style="max-width: 400px;" title="This chat list is invite only." alt="Unarchiving a chat that was muted and archived automatically">
|
||||
<source src="/file/464001658/2/lCUtNfRZ8Cc.2741176.mp4/209c2a434f6ced861f" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
|
||||
<!--<div class="blog_image_wrap blog_medium_image_wrap">
|
||||
<a href="/file/464001998/2/VPpBfFqXD64.36144/ac2ddf854185632bdf" target="_blank"><img src="/file/464001129/1/NDZiFHHICTA.14717/941ce030293c0801e2" title="TITLE" alt="TITLE" srcset="/file/464001998/2/VPpBfFqXD64.36144/ac2ddf854185632bdf , 2x" /></a>
|
||||
</div>-->
|
||||
|
||||
<h3><a class="anchor" name="group-stats" href="#group-stats"><i class="anchor-icon"></i></a>Group Stats</h3>
|
||||
<p>Owners of <strong>large groups</strong> with over 500 members can now view beautiful, <strong>detailed graphs</strong> about their activity and growth. Group stats also show a list of <strong>top members</strong> by number of messages and average message length. </p>
|
||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001487/2/UxOAdLiFnm8.51818/5882f8e84e116d727f" style="max-width: 400px;" title="Remember, it's pronounced 'data' not 'data'." alt="Group Stats demo">
|
||||
<source src="/file/464001387/1/9KOktyaxKDY.3482828.mp4/d4ee46effb38c81630" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
|
||||
<p>By the way, the minimum number of subscribers to get <a href="https://telegram.org/blog/folders">Channel Stats</a> has been reduced to 500 as well. <img class="emoji" src="//telegram.org/img/emoji/40/F09F8E89.png" width="20" height="20" alt="🎉" /> We're planning to roll out access to group stats for admins of all groups with <strong>100 members</strong> or more in the near future.</p>
|
||||
<h3><a class="anchor" name="android-extras" href="#android-extras"><i class="anchor-icon"></i></a>Android Extras</h3>
|
||||
<p>On Android, the <strong>music player</strong> has been redesigned with <strong>sleek new icons</strong> and an <strong>expandable track list</strong>. Tap the button on the left to control looping, shuffling and to reverse the track order so your playlist can moonwalk with you. </p>
|
||||
<p>The message input bar will grow <strong>smoothly</strong> as you type a long message. And the video editor now allows <strong>cropping and rotating videos</strong> – to help you hide any evidence you were filming vertically. </p>
|
||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001872/2/uiSBUZErBPU.46868/4e7c8f0c71e5031066" style="max-width: 400px;" title="Caption this" alt="New Android features: crop and rotation for videos, updated music player, input field animations">
|
||||
<source src="/file/464001689/4/0qi7I-gJTRA.2042682.mp4/c8890b148ef0f0ea6c" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
|
||||
<h3><a class="anchor" name="multiple-accounts-on-telegram-desktop" href="#multiple-accounts-on-telegram-desktop"><i class="anchor-icon"></i></a>Multiple Accounts on Telegram Desktop</h3>
|
||||
<p>Telegram lets you stay signed in on <strong>3 accounts</strong> from <strong>different phone numbers</strong> without logging out. Our mobile users have been enjoying this feature <a href="https://telegram.org/evolution#december-2017">since 2017</a>, and today it's coming to the multi-platform <a href="https://desktop.telegram.org">Telegram Desktop</a>.</p>
|
||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001201/1/tuCISSXz1jU.118777/65809708bf9e4764e2" style="max-width: 400px;" title="One for you, one for your dog and one for his alter-ego" alt="Switching between accounts on Telegram Desktop">
|
||||
<source src="/file/464001226/1/KVW36Gn_xPQ.1250655.mp4/2e8c56cd5cb10c6c3a" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
|
||||
<p>As always, this doesn't require an active connection to your phone – <a href="https://telegram.org/apps">all our apps</a> are completely <strong>self-sufficient</strong>.</p>
|
||||
<h3><a class="anchor" name="more-animated-emoji" href="#more-animated-emoji"><i class="anchor-icon"></i></a>More Animated Emoji</h3>
|
||||
<p>Our animated emoji army keeps growing (note to self: build a bigger barracks). To get one of these <img class="emoji" src="//telegram.org/img/emoji/40/F09F9187.png" width="20" height="20" alt="👇" /> in a chat, simply send a message with a single emoji – and watch it jump to life.</p>
|
||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001357/4/1vyAtnKPsL4.59524/d992c49dddd53ee964" style="max-width: 400px;" title="We always used the sponge emoji to say 'peanut' before we saw it animated." alt="New animated emoji">
|
||||
<source src="/file/464001424/2/rk16EgXTg2c.3749748.mp4/4fe4153910dce4f7e5" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
|
||||
<p>Be careful, one of them bites. And we're not allowed to tell you which one.</p>
|
||||
<p>If you're looking for something more interactive, try sending a single <img class="emoji" src="//telegram.org/img/emoji/40/E29ABD.png" width="20" height="20" alt="⚽️" /> in any chat to see if you <strong>score a goal</strong>:</p>
|
||||
<div class="blog_video_player_wrap" style="max-width: 400px; margin: 20px auto 20px;">
|
||||
<video class="blog_video_player tl_blog_vid_autoplay" onclick="videoTogglePlay(this)" autoplay loop controls muted poster="/file/464001751/1/xTwxr4zFyEk.39477/99c49c57f2cbbaea44" style="max-width: 400px;" title="Make sure you're at least 11 meters from your phone before you hit 'Send', otherwise it's not fair." alt="Animated football emoji">
|
||||
<source src="/file/464001813/1/UNRs534SEyA.2454275.mp4/a1c9f65d5a9cf70b62" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
|
||||
<h3><a class="anchor" name="and-one-more-thing" href="#and-one-more-thing"><i class="anchor-icon"></i></a>And One More Thing</h3>
|
||||
<p>Since <a href="https://telegram.org/evolution#january-2014">2014</a>, Telegram users have been sharing files up to <strong>1,5 GB</strong> each, which happens to be 93 times larger than <strong>16 MB</strong> (which is a <em>totally random number</em>, we have no idea what it could possibly mean).</p>
|
||||
<p>From now on, you can send unlimited numbers of media and files of any kind – up to <strong>2 GB</strong> each.</p>
|
||||
<hr>
|
||||
<p>And that‘s it for today. We're now in the middle of the year — with <a href="https://telegram.org/blog">eight major updates</a> behind us and long-awaited features just around the corner. Stay tuned!</p>
|
||||
<div><br></div>
|
||||
|
||||
<p><em>July 26, 2020<br>The Telegram Team</em></p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="tl_main_share clearfix">
|
||||
<a href="https://t.me/share/url?url=https%3A%2F%2Ftelegram.org%2Fblog%2Fprofile-videos-people-nearby-and-more&text=Introducing%20Profile%20Videos%2C%202%20GB%20File%20Sharing%2C%20Group%20Stats%2C%20Improved%20People%20Nearby%20and%20More" class="tl_telegram_share_btn" id="tl_telegram_share_btn" data-text="Introducing Profile Videos, 2 GB File Sharing, Group Stats, Improved People Nearby and More" data-url="https://telegram.org/blog/profile-videos-people-nearby-and-more"><i class="tl_telegram_share_icon"></i><span class="tl_telegram_share_label" target="_blank">Forward</span></a>
|
||||
<a href="https://twitter.com/share" class="tl_twitter_share_btn" id="tl_twitter_share_btn" data-text="Introducing Profile Videos, 2 GB File Sharing, Group Stats, Improved People Nearby and More" data-url="https://telegram.org/blog/profile-videos-people-nearby-and-more" data-via="Telegram">Tweet <span class="tl_twitter_share_cnt"></span></a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="tl_main_recent_news_wrap tlb_other_news_wrap tl_blog_list_page_wrap">
|
||||
<h3 class="tl_main_recent_news_header">
|
||||
<a href="/blog">Other News</a>
|
||||
</h3>
|
||||
<div class="tl_main_recent_news_cards clearfix">
|
||||
<a class="dev_blog_card_link_wrap" href="/blog/shared-media-scrolling-calendar-join-requests-and-more"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001930/3/yPTwxfusWZg.174275/3f847742c263cdae99" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests, Global Chat Themes on iOS and More</h4>
|
||||
<div class="dev_blog_card_lead">Today's update brings new ways to find memories in shared media with accelerated scrolling…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Nov 3, 2021</div>
|
||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/chat-themes-interactive-emoji-read-receipts"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001155/2/kLfFr4UDBdo.74223/58bec6bc2a18455c5f" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Chat Themes, Interactive Emoji, Read Receipts in Groups and Live Stream Recording</h4>
|
||||
<div class="dev_blog_card_lead">Today's update lets you set different themes for individual chats, share your feelings with…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Sep 19, 2021</div>
|
||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/live-streams-forwarding-next-channel"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001784/4/IlXX31YWz5U.92729/eabf233f3635354560" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Live Streams, Flexible Forwarding, Jump to Next Channel, Trending Stickers and More</h4>
|
||||
<div class="dev_blog_card_lead">Telegram 8.0 brings live streams with unlimited viewers to groups and channels, options to…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Aug 31, 2021</div>
|
||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/video-1000"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001574/3/Pqda66P2qCA.71942/56366f0bdd3630cab8" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Video Calls with up to 1000 Viewers, Video Messages 2.0, Video Playback Speed and More</h4>
|
||||
<div class="dev_blog_card_lead">This update takes video to the next level. Group video calls now have up to 1000 viewers,…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Jul 30, 2021</div>
|
||||
</div></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_wrap">
|
||||
<div class="footer_columns_wrap footer_desktop">
|
||||
<div class="footer_column footer_column_telegram">
|
||||
<h5>Telegram</h5>
|
||||
<div class="footer_telegram_description"></div>
|
||||
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
|
||||
</div>
|
||||
|
||||
<div class="footer_column">
|
||||
<h5><a href="/faq">About</a></h5>
|
||||
<ul>
|
||||
<li><a href="/faq">FAQ</a></li>
|
||||
<li><a href="/blog">Blog</a></li>
|
||||
<li><a href="/jobs">Jobs</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/apps#mobile-apps">Mobile Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="/dl/ios">iPhone/iPad</a></li>
|
||||
<li><a href="/dl/android">Android</a></li>
|
||||
<li><a href="/dl/wp">Windows Phone</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/apps#desktop-apps">Desktop Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
|
||||
<li><a href="//macos.telegram.org/">macOS</a></li>
|
||||
<li><a href="/dl/web">Web-browser</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column footer_column_platform">
|
||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
||||
<ul>
|
||||
<li><a href="//core.telegram.org/api">API</a></li>
|
||||
<li><a href="//translations.telegram.org/">Translations</a></li>
|
||||
<li><a href="//instantview.telegram.org/">Instant View</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_columns_wrap footer_mobile">
|
||||
<div class="footer_column">
|
||||
<h5><a href="/faq">About</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/blog">Blog</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/apps">Apps</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/js/main.js?42"></script>
|
||||
<script src="/js/tgsticker.js?24"></script>
|
||||
|
||||
<script>mainInitTgStickers({"maxDeviceRatio":2,"cachingModulo":4});
|
||||
initScrollVideos(true);
|
||||
twitterCustomShareInit();
|
||||
blogSideImageInit();
|
||||
backToTopInit("Go up");
|
||||
removePreloadInit();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,238 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Reinventing Group Chats: Replies, Mentions, Hashtags and More</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta property="og:title" content="Reinventing Group Chats: Replies, Mentions, Hashtags and More">
|
||||
<meta property="og:image" content="https://telegram.org/file/811140676/2/o55coTw-06w/6120fb5819695809fa">
|
||||
<meta property="og:site_name" content="Telegram">
|
||||
<meta property="og:description" content="Reinventing group chats in #Telegram: Replies, Mentions, Hashtags and more">
|
||||
<meta property="article:published_time" content="2015-03-19T13:49:16+00:00"><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:image" content="https://telegram.org/file/811140676/2/o55coTw-06w/6120fb5819695809fa" />
|
||||
<meta property="fb:app_id" content="254098051407226">
|
||||
<meta property="vk:app_id" content="3782569">
|
||||
<meta name="apple-itunes-app" content="app-id=686449807">
|
||||
<meta name="telegram:channel" content="@telegram">
|
||||
<link rel="canonical" href="https://telegram.org/blog/replies-mentions-hashtags" />
|
||||
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
|
||||
<link rel="alternate icon" href="/favicon.ico?4" type="image/x-icon" />
|
||||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
||||
|
||||
<link href="/css/telegram.css?214" rel="stylesheet" media="screen">
|
||||
<style>
|
||||
</style>
|
||||
</head>
|
||||
<body class="preload">
|
||||
<div id="fb-root"></div>
|
||||
<div class="tl_page_wrap">
|
||||
<div class="tl_page_head navbar navbar-static-top navbar navbar-tg">
|
||||
<div class="navbar-inner">
|
||||
<div class="container clearfix">
|
||||
<ul class="nav navbar-nav navbar-right"><li class="dropdown top_lang_select"><a class="dropdown-toggle" onclick="return dropdownClick(this, event)" href="#"><i class="dev_top_lang_icon"></i> <b class="minicaret"></b></a>
|
||||
<ul class="dropdown-menu"><li class=""><a href="?setln=en">English</a></li><li class="long "><a href="?setln=id">Bahasa Indonesia</a></li><li class="long "><a href="?setln=ms">Bahasa Melayu</a></li><li class=""><a href="?setln=de">Deutsch</a></li><li class=""><a href="?setln=es">Español</a></li><li class=""><a href="?setln=fr">Français</a></li><li class=""><a href="?setln=it">Italiano</a></li><li class=""><a href="?setln=nl">Nederlands</a></li><li class=""><a href="?setln=uz">O‘zbek</a></li><li class=""><a href="?setln=pl">Polski</a></li><li class="long "><a href="?setln=pt-br">Português (Brasil)</a></li><li class=""><a href="?setln=tr">Türkçe</a></li><li class=""><a href="?setln=be">Беларуская</a></li><li class=""><a href="?setln=ru">Русский</a></li><li class=""><a href="?setln=uk">Українська</a></li><li class=""><a href="?setln=ar">العربية</a></li><li class=""><a href="?setln=fa">فارسی</a></li><li class=""><a href="?setln=ko">한국어</a></li></ul></li><li class="navbar-twitter hidden-xs"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i> Twitter</a></li></ul>
|
||||
<ul class="nav navbar-nav">
|
||||
<li class=""><a href="/">Home</a></li>
|
||||
<li class=""><a href="/faq">FAQ</a></li>
|
||||
<li class=""><a href="/apps">Apps</a></li>
|
||||
<li class="hidden-xs "><a href="//core.telegram.org/api">API</a></li>
|
||||
<li class="hidden-xs "><a href="//core.telegram.org/mtproto">Protocol</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container clearfix tl_page_container ">
|
||||
<div class="tl_page">
|
||||
<div class="tl_contest_page_wrap">
|
||||
<div class="tl_blog_side_blog"><div class="side_blog_wrap">
|
||||
<div class="side_blog">
|
||||
<a href="/blog" class="side_blog_header">Recent News</a>
|
||||
<div class="side_blog_entries">
|
||||
<a href="/blog/shared-media-scrolling-calendar-join-requests-and-more" class="side_blog_entry">
|
||||
<div class="side_blog_date">Nov 3</div>
|
||||
<div class="side_blog_title">Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests and More</div>
|
||||
</a><a href="/blog/chat-themes-interactive-emoji-read-receipts" class="side_blog_entry">
|
||||
<div class="side_blog_date">Sep 19</div>
|
||||
<div class="side_blog_title">Chat Themes, Interactive Emoji, Read Receipts in Groups and Live Stream Recording</div>
|
||||
</a><a href="/blog/live-streams-forwarding-next-channel" class="side_blog_entry">
|
||||
<div class="side_blog_date">Aug 31</div>
|
||||
<div class="side_blog_title">Live Streams, Flexible Forwarding and More</div>
|
||||
</a><a href="/blog/video-1000" class="side_blog_entry">
|
||||
<div class="side_blog_date">Jul 30</div>
|
||||
<div class="side_blog_title">Video Calls with up to 1000 Viewers, Video Playback Speed and More</div>
|
||||
</a><a href="/blog/group-video-calls" class="side_blog_entry">
|
||||
<div class="side_blog_date">Jun 25</div>
|
||||
<div class="side_blog_title">Group Video Calls</div>
|
||||
</a><a href="/blog/animated-backgrounds" class="side_blog_entry">
|
||||
<div class="side_blog_date">Jun 25</div>
|
||||
<div class="side_blog_title"> Animated Backgrounds</div>
|
||||
</a><a href="/blog/payments-2-0-scheduled-voice-chats" class="side_blog_entry">
|
||||
<div class="side_blog_date">Apr 26</div>
|
||||
<div class="side_blog_title">Payments 2.0, Scheduled Voice Chats, New Web Versions</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
<div id="dev_page_content_wrap" class=" ">
|
||||
<div class="dev_page_bread_crumbs"></div>
|
||||
<h1 id="dev_page_title">Reinventing Group Chats: Replies, Mentions, Hashtags and More</h1>
|
||||
|
||||
<div id="dev_page_content"><div class="blog_side_image_wrap">
|
||||
<img src="/file/811140676/2/o55coTw-06w/6120fb5819695809fa" class="blog_side_image"/>
|
||||
</div>
|
||||
|
||||
<p>Group chats have not evolved much since they first appeared in messaging apps many years ago. Today's new features bring group chat communication much closer to what it should look like in 2015. <a href="https://telegram.org/dl/ios">iOS</a>, <a href="https://telegram.org/dl/android">Android</a>, <a href="https://telegram.org/dl/osx">OSX</a> and <a href="https://web.telegram.org/">Telegram Web</a> get them first.</p>
|
||||
<h4><a class="anchor" name="replies" href="#replies"><i class="anchor-icon"></i></a>Replies</h4>
|
||||
<p>To reply to a specific message in a group chat, simply tap on it (double-tap on iOS) and choose Reply. Easy as that!</p>
|
||||
<div><center>
|
||||
<a href="/file/811140203/2/oS7yPaCccIc/be7761b5c2023e4a98" target="_blank"><img src="/file/811140203/2/oS7yPaCccIc/be7761b5c2023e4a98" title="You can reply to any message in a group" style="padding: 10px 5px; width: 195px" /></a>
|
||||
|
||||
<a href="/file/811140973/3/Y_QnykDVz4Y/8547554d387eb8c34b" target="_blank"><img src="/file/811140973/3/Y_QnykDVz4Y/8547554d387eb8c34b" title="Write your reply" style="padding: 10px 5px; width: 195px" /></a>
|
||||
|
||||
<a href="/file/811140545/2/CRzp8h8u8v4/ac163a6ce4803784b1" target="_blank"><img src="/file/811140545/2/CRzp8h8u8v4/ac163a6ce4803784b1" title="Tap on the reply to go to the original message" style="padding: 10px 5px; width: 195px" /></a>
|
||||
</center><br></div>
|
||||
|
||||
<p>The person you replied to will be notified about your message even if s/he muted the group chat — their notification settings for you <em>personally</em> apply in this case. </p>
|
||||
<p>Replies also make group chats much easier to navigate. If you tap on the quote, the app scrolls up to the original message.</p>
|
||||
<h4><a class="anchor" name="mentions" href="#mentions"><i class="anchor-icon"></i></a>Mentions</h4>
|
||||
<p>If you want several people within a group chat to get instantly involved in the conversation, you may now also mention them in a message, provided they have a username:</p>
|
||||
<div><center>
|
||||
<a href="/file/811140103/2/-Jq8E6y7EJA/cc144346a2bfbe7001" target="_blank"><img src="/file/811140103/2/-Jq8E6y7EJA/cc144346a2bfbe7001" title="Start typing the @ symbol to see a list of usernames in the group" style="padding: 10px; width: 250px" /></a>
|
||||
|
||||
<a href="/file/811140041/1/13RjZS7gAw4/cd15337682b58e3d3f" target="_blank"><img src="/file/811140041/1/13RjZS7gAw4/cd15337682b58e3d3f" title="Mentioned people will be notified" style="padding: 10px; width: 250px" /></a></center><br>
|
||||
</div>
|
||||
|
||||
<p>They will be notified about this message, even if they muted the group chat — unless they've muted you personally, of course!</p>
|
||||
<h4><a class="anchor" name="hashtags" href="#hashtags"><i class="anchor-icon"></i></a>Hashtags</h4>
|
||||
<p>Another new way of bringing structure to group chats is by using hashtags. Any word starting with a <strong>“#”</strong> will be clickable. Tap on a hashtag to get instant search results from your Telegram messages.</p>
|
||||
<div><center>
|
||||
<a href="/file/811140155/1/lwespwis1cI/1415692185a2368703" target="_blank"><img src="/file/811140155/1/lwespwis1cI/1415692185a2368703" title="Tap on a hashtag to go to search instantly" style="padding: 10px; width: 250px" /></a>
|
||||
|
||||
<a href="/file/811140527/1/z8Jo5zCAhyA/c5a702109f44407ee5" target="_blank"><img src="/file/811140527/1/z8Jo5zCAhyA/c5a702109f44407ee5" title="Instant search results in all your chats" style="padding: 10px; width: 250px" /></a></center>
|
||||
</div>
|
||||
|
||||
<h4><a class="anchor" name="forwarding-with-comments" href="#forwarding-with-comments"><i class="anchor-icon"></i></a>Forwarding with comments</h4>
|
||||
<p>On top of this, you can now add a comment to the stuff you forward. This comment will be shown before the forwarded messages.</p>
|
||||
<hr>
|
||||
<p>Group chats are becoming larger and livelier — a Telegram group may include up to 200 members that share thousands of messages daily. We hope that these new tools will help you bring order and clarity to the chaos of a thriving group chat.</p>
|
||||
<div><br></div>
|
||||
|
||||
<p><em>March 19, 2015<br>The Telegram Team</em></p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="tl_main_share clearfix">
|
||||
<a href="https://t.me/share/url?url=https%3A%2F%2Ftelegram.org%2Fblog%2Freplies-mentions-hashtags&text=Reinventing%20group%20chats%20in%20%23Telegram%3A%20Replies%2C%20Mentions%2C%20Hashtags%20and%20more" class="tl_telegram_share_btn" id="tl_telegram_share_btn" data-text="Reinventing group chats in #Telegram: Replies, Mentions, Hashtags and more" data-url="https://telegram.org/blog/replies-mentions-hashtags"><i class="tl_telegram_share_icon"></i><span class="tl_telegram_share_label" target="_blank">Forward</span></a>
|
||||
<a href="https://twitter.com/share" class="tl_twitter_share_btn" id="tl_twitter_share_btn" data-text="Reinventing group chats in #Telegram: Replies, Mentions, Hashtags and more" data-url="https://telegram.org/blog/replies-mentions-hashtags" data-via="Telegram">Tweet <span class="tl_twitter_share_cnt"></span></a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="tl_main_recent_news_wrap tlb_other_news_wrap tl_blog_list_page_wrap">
|
||||
<h3 class="tl_main_recent_news_header">
|
||||
<a href="/blog">Other News</a>
|
||||
</h3>
|
||||
<div class="tl_main_recent_news_cards clearfix">
|
||||
<a class="dev_blog_card_link_wrap" href="/blog/shared-media-scrolling-calendar-join-requests-and-more"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001930/3/yPTwxfusWZg.174275/3f847742c263cdae99" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests, Global Chat Themes on iOS and More</h4>
|
||||
<div class="dev_blog_card_lead">Today's update brings new ways to find memories in shared media with accelerated scrolling…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Nov 3, 2021</div>
|
||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/chat-themes-interactive-emoji-read-receipts"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001155/2/kLfFr4UDBdo.74223/58bec6bc2a18455c5f" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Chat Themes, Interactive Emoji, Read Receipts in Groups and Live Stream Recording</h4>
|
||||
<div class="dev_blog_card_lead">Today's update lets you set different themes for individual chats, share your feelings with…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Sep 19, 2021</div>
|
||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/live-streams-forwarding-next-channel"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001784/4/IlXX31YWz5U.92729/eabf233f3635354560" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Live Streams, Flexible Forwarding, Jump to Next Channel, Trending Stickers and More</h4>
|
||||
<div class="dev_blog_card_lead">Telegram 8.0 brings live streams with unlimited viewers to groups and channels, options to…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Aug 31, 2021</div>
|
||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/video-1000"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001574/3/Pqda66P2qCA.71942/56366f0bdd3630cab8" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Video Calls with up to 1000 Viewers, Video Messages 2.0, Video Playback Speed and More</h4>
|
||||
<div class="dev_blog_card_lead">This update takes video to the next level. Group video calls now have up to 1000 viewers,…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Jul 30, 2021</div>
|
||||
</div></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_wrap">
|
||||
<div class="footer_columns_wrap footer_desktop">
|
||||
<div class="footer_column footer_column_telegram">
|
||||
<h5>Telegram</h5>
|
||||
<div class="footer_telegram_description"></div>
|
||||
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
|
||||
</div>
|
||||
|
||||
<div class="footer_column">
|
||||
<h5><a href="/faq">About</a></h5>
|
||||
<ul>
|
||||
<li><a href="/faq">FAQ</a></li>
|
||||
<li><a href="/blog">Blog</a></li>
|
||||
<li><a href="/jobs">Jobs</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/apps#mobile-apps">Mobile Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="/dl/ios">iPhone/iPad</a></li>
|
||||
<li><a href="/dl/android">Android</a></li>
|
||||
<li><a href="/dl/wp">Windows Phone</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/apps#desktop-apps">Desktop Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
|
||||
<li><a href="//macos.telegram.org/">macOS</a></li>
|
||||
<li><a href="/dl/web">Web-browser</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column footer_column_platform">
|
||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
||||
<ul>
|
||||
<li><a href="//core.telegram.org/api">API</a></li>
|
||||
<li><a href="//translations.telegram.org/">Translations</a></li>
|
||||
<li><a href="//instantview.telegram.org/">Instant View</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_columns_wrap footer_mobile">
|
||||
<div class="footer_column">
|
||||
<h5><a href="/faq">About</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/blog">Blog</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/apps">Apps</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/js/main.js?42"></script>
|
||||
|
||||
<script>initScrollVideos(true);
|
||||
twitterCustomShareInit();
|
||||
blogSideImageInit();
|
||||
backToTopInit("Go up");
|
||||
removePreloadInit();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,228 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Telegram.me, Changing Numbers and PFS</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta property="og:title" content="Telegram.me, Changing Numbers and PFS">
|
||||
<meta property="og:image" content="https://telegram.org/img/tl_card_usernames.gif">
|
||||
<meta property="og:site_name" content="Telegram">
|
||||
<meta property="og:description" content="#Telegram got updated with PFS, phone number migration and telegram.me support">
|
||||
<meta property="article:published_time" content="2014-12-01T22:31:14+00:00"><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:image" content="https://telegram.org/img/tl_card_usernames.gif" />
|
||||
<meta property="fb:app_id" content="254098051407226">
|
||||
<meta property="vk:app_id" content="3782569">
|
||||
<meta name="apple-itunes-app" content="app-id=686449807">
|
||||
<meta name="telegram:channel" content="@telegram">
|
||||
<link rel="canonical" href="https://telegram.org/blog/telegram-me-change-number-and-pfs" />
|
||||
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
|
||||
<link rel="alternate icon" href="/favicon.ico?4" type="image/x-icon" />
|
||||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
||||
|
||||
<link href="/css/telegram.css?214" rel="stylesheet" media="screen">
|
||||
<style>
|
||||
</style>
|
||||
</head>
|
||||
<body class="preload">
|
||||
<div id="fb-root"></div>
|
||||
<div class="tl_page_wrap">
|
||||
<div class="tl_page_head navbar navbar-static-top navbar navbar-tg">
|
||||
<div class="navbar-inner">
|
||||
<div class="container clearfix">
|
||||
<ul class="nav navbar-nav navbar-right"><li class="dropdown top_lang_select"><a class="dropdown-toggle" onclick="return dropdownClick(this, event)" href="#"><i class="dev_top_lang_icon"></i> <b class="minicaret"></b></a>
|
||||
<ul class="dropdown-menu"><li class=""><a href="?setln=en">English</a></li><li class="long "><a href="?setln=id">Bahasa Indonesia</a></li><li class="long "><a href="?setln=ms">Bahasa Melayu</a></li><li class=""><a href="?setln=de">Deutsch</a></li><li class=""><a href="?setln=es">Español</a></li><li class=""><a href="?setln=fr">Français</a></li><li class=""><a href="?setln=it">Italiano</a></li><li class=""><a href="?setln=nl">Nederlands</a></li><li class=""><a href="?setln=uz">O‘zbek</a></li><li class=""><a href="?setln=pl">Polski</a></li><li class="long "><a href="?setln=pt-br">Português (Brasil)</a></li><li class=""><a href="?setln=tr">Türkçe</a></li><li class=""><a href="?setln=be">Беларуская</a></li><li class=""><a href="?setln=ru">Русский</a></li><li class=""><a href="?setln=uk">Українська</a></li><li class=""><a href="?setln=ar">العربية</a></li><li class=""><a href="?setln=fa">فارسی</a></li><li class=""><a href="?setln=ko">한국어</a></li></ul></li><li class="navbar-twitter hidden-xs"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i> Twitter</a></li></ul>
|
||||
<ul class="nav navbar-nav">
|
||||
<li class=""><a href="/">Home</a></li>
|
||||
<li class=""><a href="/faq">FAQ</a></li>
|
||||
<li class=""><a href="/apps">Apps</a></li>
|
||||
<li class="hidden-xs "><a href="//core.telegram.org/api">API</a></li>
|
||||
<li class="hidden-xs "><a href="//core.telegram.org/mtproto">Protocol</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container clearfix tl_page_container ">
|
||||
<div class="tl_page">
|
||||
<div class="tl_contest_page_wrap">
|
||||
<div class="tl_blog_side_blog"><div class="side_blog_wrap">
|
||||
<div class="side_blog">
|
||||
<a href="/blog" class="side_blog_header">Recent News</a>
|
||||
<div class="side_blog_entries">
|
||||
<a href="/blog/shared-media-scrolling-calendar-join-requests-and-more" class="side_blog_entry">
|
||||
<div class="side_blog_date">Nov 3</div>
|
||||
<div class="side_blog_title">Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests and More</div>
|
||||
</a><a href="/blog/chat-themes-interactive-emoji-read-receipts" class="side_blog_entry">
|
||||
<div class="side_blog_date">Sep 19</div>
|
||||
<div class="side_blog_title">Chat Themes, Interactive Emoji, Read Receipts in Groups and Live Stream Recording</div>
|
||||
</a><a href="/blog/live-streams-forwarding-next-channel" class="side_blog_entry">
|
||||
<div class="side_blog_date">Aug 31</div>
|
||||
<div class="side_blog_title">Live Streams, Flexible Forwarding and More</div>
|
||||
</a><a href="/blog/video-1000" class="side_blog_entry">
|
||||
<div class="side_blog_date">Jul 30</div>
|
||||
<div class="side_blog_title">Video Calls with up to 1000 Viewers, Video Playback Speed and More</div>
|
||||
</a><a href="/blog/group-video-calls" class="side_blog_entry">
|
||||
<div class="side_blog_date">Jun 25</div>
|
||||
<div class="side_blog_title">Group Video Calls</div>
|
||||
</a><a href="/blog/animated-backgrounds" class="side_blog_entry">
|
||||
<div class="side_blog_date">Jun 25</div>
|
||||
<div class="side_blog_title"> Animated Backgrounds</div>
|
||||
</a><a href="/blog/payments-2-0-scheduled-voice-chats" class="side_blog_entry">
|
||||
<div class="side_blog_date">Apr 26</div>
|
||||
<div class="side_blog_title">Payments 2.0, Scheduled Voice Chats, New Web Versions</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
<div id="dev_page_content_wrap" class=" ">
|
||||
<div class="dev_page_bread_crumbs"></div>
|
||||
<h1 id="dev_page_title">Telegram.me, Changing Numbers and PFS</h1>
|
||||
|
||||
<div id="dev_page_content"><div class="blog_side_image_wrap">
|
||||
<img src="/img/tl_card_usernames.gif" class="blog_side_image"/>
|
||||
</div>
|
||||
|
||||
<blockquote>
|
||||
<p>Our <a href="/dl/ios">iOS</a> and <a href="/dl/android">Android</a> apps got updated with three new features today.</p>
|
||||
</blockquote>
|
||||
<p>Opening a <strong><a href="https://telegram.me/YourUsernameHere">telegram.me/YourUsernameHere</a></strong> link on your phone will now automatically fire up your Telegram app and open a chat with that user. You can share username links with friends, write them on business cards or put them up on your website.</p>
|
||||
<div>
|
||||
<a href="/file/811140017/1/cy-qwbS5fMg/67abbc0f376b20bae1" target="_blank"><img src="/file/811140017/1/cy-qwbS5fMg/67abbc0f376b20bae1" title="Telegram.me page" class="dev_page_image" style="width: 300px" /></a>
|
||||
</div>
|
||||
|
||||
<center><i>Here's what people will see if they don't have Telegram yet</i></center>
|
||||
|
||||
<h4><a class="anchor" name="changing-your-phone-number" href="#changing-your-phone-number"><i class="anchor-icon"></i></a>Changing Your Phone Number</h4>
|
||||
<p>It is easy to switch to Telegram and retain your social graph, since it is based on phone numbers. But what if you need to change the phone number itself? As of today, you can change your number in Telegram — and keep <strong>everything</strong>, including <strong>all</strong> your contacts, messages and media from the Telegram cloud, as well as all your secret chats.</p>
|
||||
<div><center>
|
||||
<a href="/file/811140130/1/tCTi6Uk4zsg/c75df0be1059e2d727" target="_blank"><img src="/file/811140130/1/tCTi6Uk4zsg/c75df0be1059e2d727" title="Tap on your number in Setings" style="padding: 20px; width: 200px" /></a>
|
||||
|
||||
<a href="/file/811140000/1/o0mRniLoPYc/3fafe3a6d666588353" target="_blank"><img src="/file/811140000/1/o0mRniLoPYc/3fafe3a6d666588353" title="Then tap 'Change Number'" style="padding: 20px; width: 200px" /></a>
|
||||
</center>
|
||||
</div>
|
||||
|
||||
<p>Your mutual contacts (people in your contacts, who also have your number) will get your new number added to your contact in their address book unless you have blocked them in Telegram. This makes changing numbers even easier.</p>
|
||||
<h4><a class="anchor" name="perfect-forward-secrecy" href="#perfect-forward-secrecy"><i class="anchor-icon"></i></a>Perfect Forward Secrecy</h4>
|
||||
<p>Last but not least, Telegram's Secret Chats now support <a href="http://en.wikipedia.org/wiki/Forward_secrecy">Perfect Forward Secrecy</a>. What this means is that your Secret Chats will now automatically <a href="https://core.telegram.org/api/end-to-end/pfs">change encryption keys</a> after a period of time, in order to keep past communications safe. This way you no longer need to manually re-create Secret Chats to achieve this level of security.</p>
|
||||
<div><br></div>
|
||||
|
||||
<p>And that's it for today. Stay tuned for more updates coming your way on all platforms!</p>
|
||||
<hr>
|
||||
<p><em>December 1, 2014<br>The Telegram Team</em></p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="tl_main_share clearfix">
|
||||
<a href="https://t.me/share/url?url=https%3A%2F%2Ftelegram.org%2Fblog%2Ftelegram-me-change-number-and-pfs&text=%23Telegram%20got%20updated%20with%20PFS%2C%20phone%20number%20migration%20and%20telegram.me%20support" class="tl_telegram_share_btn" id="tl_telegram_share_btn" data-text="#Telegram got updated with PFS, phone number migration and telegram.me support" data-url="https://telegram.org/blog/telegram-me-change-number-and-pfs"><i class="tl_telegram_share_icon"></i><span class="tl_telegram_share_label" target="_blank">Forward</span></a>
|
||||
<a href="https://twitter.com/share" class="tl_twitter_share_btn" id="tl_twitter_share_btn" data-text="#Telegram got updated with PFS, phone number migration and telegram.me support" data-url="https://telegram.org/blog/telegram-me-change-number-and-pfs" data-via="Telegram">Tweet <span class="tl_twitter_share_cnt"></span></a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="tl_main_recent_news_wrap tlb_other_news_wrap tl_blog_list_page_wrap">
|
||||
<h3 class="tl_main_recent_news_header">
|
||||
<a href="/blog">Other News</a>
|
||||
</h3>
|
||||
<div class="tl_main_recent_news_cards clearfix">
|
||||
<a class="dev_blog_card_link_wrap" href="/blog/shared-media-scrolling-calendar-join-requests-and-more"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001930/3/yPTwxfusWZg.174275/3f847742c263cdae99" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests, Global Chat Themes on iOS and More</h4>
|
||||
<div class="dev_blog_card_lead">Today's update brings new ways to find memories in shared media with accelerated scrolling…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Nov 3, 2021</div>
|
||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/chat-themes-interactive-emoji-read-receipts"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001155/2/kLfFr4UDBdo.74223/58bec6bc2a18455c5f" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Chat Themes, Interactive Emoji, Read Receipts in Groups and Live Stream Recording</h4>
|
||||
<div class="dev_blog_card_lead">Today's update lets you set different themes for individual chats, share your feelings with…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Sep 19, 2021</div>
|
||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/live-streams-forwarding-next-channel"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001784/4/IlXX31YWz5U.92729/eabf233f3635354560" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Live Streams, Flexible Forwarding, Jump to Next Channel, Trending Stickers and More</h4>
|
||||
<div class="dev_blog_card_lead">Telegram 8.0 brings live streams with unlimited viewers to groups and channels, options to…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Aug 31, 2021</div>
|
||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/video-1000"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001574/3/Pqda66P2qCA.71942/56366f0bdd3630cab8" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Video Calls with up to 1000 Viewers, Video Messages 2.0, Video Playback Speed and More</h4>
|
||||
<div class="dev_blog_card_lead">This update takes video to the next level. Group video calls now have up to 1000 viewers,…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Jul 30, 2021</div>
|
||||
</div></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_wrap">
|
||||
<div class="footer_columns_wrap footer_desktop">
|
||||
<div class="footer_column footer_column_telegram">
|
||||
<h5>Telegram</h5>
|
||||
<div class="footer_telegram_description"></div>
|
||||
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
|
||||
</div>
|
||||
|
||||
<div class="footer_column">
|
||||
<h5><a href="/faq">About</a></h5>
|
||||
<ul>
|
||||
<li><a href="/faq">FAQ</a></li>
|
||||
<li><a href="/blog">Blog</a></li>
|
||||
<li><a href="/jobs">Jobs</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/apps#mobile-apps">Mobile Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="/dl/ios">iPhone/iPad</a></li>
|
||||
<li><a href="/dl/android">Android</a></li>
|
||||
<li><a href="/dl/wp">Windows Phone</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/apps#desktop-apps">Desktop Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
|
||||
<li><a href="//macos.telegram.org/">macOS</a></li>
|
||||
<li><a href="/dl/web">Web-browser</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column footer_column_platform">
|
||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
||||
<ul>
|
||||
<li><a href="//core.telegram.org/api">API</a></li>
|
||||
<li><a href="//translations.telegram.org/">Translations</a></li>
|
||||
<li><a href="//instantview.telegram.org/">Instant View</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_columns_wrap footer_mobile">
|
||||
<div class="footer_column">
|
||||
<h5><a href="/faq">About</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/blog">Blog</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/apps">Apps</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/js/main.js?42"></script>
|
||||
|
||||
<script>initScrollVideos(true);
|
||||
twitterCustomShareInit();
|
||||
blogSideImageInit();
|
||||
backToTopInit("Go up");
|
||||
removePreloadInit();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,224 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Winter Contest Ends</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta property="og:title" content="Winter Contest Ends">
|
||||
<meta property="og:image" content="https://telegram.org/img/tl_card_brick.png">
|
||||
<meta property="og:site_name" content="Telegram">
|
||||
<meta property="og:description" content="Our $200,000 contest ends, but there'll be a bigger one">
|
||||
<meta name="twitter:card" content="summary_large_image" /><meta name="twitter:image" content="https://telegram.org/img/tl_card_brick.png" />
|
||||
<meta property="fb:app_id" content="254098051407226">
|
||||
<meta property="vk:app_id" content="3782569">
|
||||
<meta name="apple-itunes-app" content="app-id=686449807">
|
||||
<meta name="telegram:channel" content="@telegram">
|
||||
<link rel="canonical" href="https://telegram.org/blog/winter-contest-ends" />
|
||||
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
|
||||
<link rel="alternate icon" href="/favicon.ico?4" type="image/x-icon" />
|
||||
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
||||
|
||||
<link href="/css/telegram.css?214" rel="stylesheet" media="screen">
|
||||
<style>
|
||||
</style>
|
||||
</head>
|
||||
<body class="preload">
|
||||
<div id="fb-root"></div>
|
||||
<div class="tl_page_wrap">
|
||||
<div class="tl_page_head navbar navbar-static-top navbar navbar-tg">
|
||||
<div class="navbar-inner">
|
||||
<div class="container clearfix">
|
||||
<ul class="nav navbar-nav navbar-right"><li class="dropdown top_lang_select"><a class="dropdown-toggle" onclick="return dropdownClick(this, event)" href="#"><i class="dev_top_lang_icon"></i> <b class="minicaret"></b></a>
|
||||
<ul class="dropdown-menu"><li class=""><a href="?setln=en">English</a></li><li class="long "><a href="?setln=id">Bahasa Indonesia</a></li><li class="long "><a href="?setln=ms">Bahasa Melayu</a></li><li class=""><a href="?setln=de">Deutsch</a></li><li class=""><a href="?setln=es">Español</a></li><li class=""><a href="?setln=fr">Français</a></li><li class=""><a href="?setln=it">Italiano</a></li><li class=""><a href="?setln=nl">Nederlands</a></li><li class=""><a href="?setln=uz">O‘zbek</a></li><li class=""><a href="?setln=pl">Polski</a></li><li class="long "><a href="?setln=pt-br">Português (Brasil)</a></li><li class=""><a href="?setln=tr">Türkçe</a></li><li class=""><a href="?setln=be">Беларуская</a></li><li class=""><a href="?setln=ru">Русский</a></li><li class=""><a href="?setln=uk">Українська</a></li><li class=""><a href="?setln=ar">العربية</a></li><li class=""><a href="?setln=fa">فارسی</a></li><li class=""><a href="?setln=ko">한국어</a></li></ul></li><li class="navbar-twitter hidden-xs"><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)"><i class="icon icon-twitter"></i> Twitter</a></li></ul>
|
||||
<ul class="nav navbar-nav">
|
||||
<li class=""><a href="/">Home</a></li>
|
||||
<li class=""><a href="/faq">FAQ</a></li>
|
||||
<li class=""><a href="/apps">Apps</a></li>
|
||||
<li class="hidden-xs "><a href="//core.telegram.org/api">API</a></li>
|
||||
<li class="hidden-xs "><a href="//core.telegram.org/mtproto">Protocol</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container clearfix tl_page_container ">
|
||||
<div class="tl_page">
|
||||
<div class="tl_contest_page_wrap">
|
||||
<div class="tl_blog_side_blog"><div class="side_blog_wrap">
|
||||
<div class="side_blog">
|
||||
<a href="/blog" class="side_blog_header">Recent News</a>
|
||||
<div class="side_blog_entries">
|
||||
<a href="/blog/shared-media-scrolling-calendar-join-requests-and-more" class="side_blog_entry">
|
||||
<div class="side_blog_date">Nov 3</div>
|
||||
<div class="side_blog_title">Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests and More</div>
|
||||
</a><a href="/blog/chat-themes-interactive-emoji-read-receipts" class="side_blog_entry">
|
||||
<div class="side_blog_date">Sep 19</div>
|
||||
<div class="side_blog_title">Chat Themes, Interactive Emoji, Read Receipts in Groups and Live Stream Recording</div>
|
||||
</a><a href="/blog/live-streams-forwarding-next-channel" class="side_blog_entry">
|
||||
<div class="side_blog_date">Aug 31</div>
|
||||
<div class="side_blog_title">Live Streams, Flexible Forwarding and More</div>
|
||||
</a><a href="/blog/video-1000" class="side_blog_entry">
|
||||
<div class="side_blog_date">Jul 30</div>
|
||||
<div class="side_blog_title">Video Calls with up to 1000 Viewers, Video Playback Speed and More</div>
|
||||
</a><a href="/blog/group-video-calls" class="side_blog_entry">
|
||||
<div class="side_blog_date">Jun 25</div>
|
||||
<div class="side_blog_title">Group Video Calls</div>
|
||||
</a><a href="/blog/animated-backgrounds" class="side_blog_entry">
|
||||
<div class="side_blog_date">Jun 25</div>
|
||||
<div class="side_blog_title"> Animated Backgrounds</div>
|
||||
</a><a href="/blog/payments-2-0-scheduled-voice-chats" class="side_blog_entry">
|
||||
<div class="side_blog_date">Apr 26</div>
|
||||
<div class="side_blog_title">Payments 2.0, Scheduled Voice Chats, New Web Versions</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
<div id="dev_page_content_wrap" class=" ">
|
||||
<div class="dev_page_bread_crumbs"></div>
|
||||
<h1 id="dev_page_title">Winter Contest Ends</h1>
|
||||
|
||||
<div id="dev_page_content"><div class="blog_side_image_wrap">
|
||||
<img src="/img/tl_card_brick.png" class="blog_side_image"/>
|
||||
</div>
|
||||
|
||||
<p>The <a href="/crypto_contest">contest</a> 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.</p>
|
||||
<pre><code>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</code></pre>
|
||||
<p><br/></p>
|
||||
|
||||
<p>We would like to use this opportunity to thank the users ABC, <a href="https://twitter.com/defusesec">@DefuseSec</a>, <a href="https://twitter.com/hackappcom">@hackappcom</a>, <a href="https://twitter.com/morj">@Morj</a> and <a href="https://telegram.org/blog/crowdsourcing-a-more-secure-future">x7mz</a> who helped us further improve security of the client apps and expand <a href="https://core.telegram.org/mtproto/security_guidelines">guidelines</a> for third-party developers.</p>
|
||||
<p>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 <a href="https://twitter.com/telegram">@telegram</a>!</p>
|
||||
<p>March 2, 2014<br><em>The Telegram Team</em></p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="tl_main_share clearfix">
|
||||
<a href="https://t.me/share/url?url=https%3A%2F%2Ftelegram.org%2Fblog%2Fwinter-contest-ends&text=Our%20%24200%2C000%20contest%20ends%2C%20but%20there%27ll%20be%20a%20bigger%20one" class="tl_telegram_share_btn" id="tl_telegram_share_btn" data-text="Our $200,000 contest ends, but there'll be a bigger one" data-url="https://telegram.org/blog/winter-contest-ends"><i class="tl_telegram_share_icon"></i><span class="tl_telegram_share_label" target="_blank">Forward</span></a>
|
||||
<a href="https://twitter.com/share" class="tl_twitter_share_btn" id="tl_twitter_share_btn" data-text="Our $200,000 contest ends, but there'll be a bigger one" data-url="https://telegram.org/blog/winter-contest-ends" data-via="Telegram">Tweet <span class="tl_twitter_share_cnt"></span></a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="tl_main_recent_news_wrap tlb_other_news_wrap tl_blog_list_page_wrap">
|
||||
<h3 class="tl_main_recent_news_header">
|
||||
<a href="/blog">Other News</a>
|
||||
</h3>
|
||||
<div class="tl_main_recent_news_cards clearfix">
|
||||
<a class="dev_blog_card_link_wrap" href="/blog/shared-media-scrolling-calendar-join-requests-and-more"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001930/3/yPTwxfusWZg.174275/3f847742c263cdae99" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Hyper-Speed Scrolling and Calendar View for Shared Media, Join Requests, Global Chat Themes on iOS and More</h4>
|
||||
<div class="dev_blog_card_lead">Today's update brings new ways to find memories in shared media with accelerated scrolling…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Nov 3, 2021</div>
|
||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/chat-themes-interactive-emoji-read-receipts"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001155/2/kLfFr4UDBdo.74223/58bec6bc2a18455c5f" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Chat Themes, Interactive Emoji, Read Receipts in Groups and Live Stream Recording</h4>
|
||||
<div class="dev_blog_card_lead">Today's update lets you set different themes for individual chats, share your feelings with…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Sep 19, 2021</div>
|
||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/live-streams-forwarding-next-channel"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001784/4/IlXX31YWz5U.92729/eabf233f3635354560" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Live Streams, Flexible Forwarding, Jump to Next Channel, Trending Stickers and More</h4>
|
||||
<div class="dev_blog_card_lead">Telegram 8.0 brings live streams with unlimited viewers to groups and channels, options to…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Aug 31, 2021</div>
|
||||
</div></a><a class="dev_blog_card_link_wrap" href="/blog/video-1000"><div class="dev_blog_card_wrap">
|
||||
<img class="dev_blog_card_image" src="https://telegram.org/file/464001574/3/Pqda66P2qCA.71942/56366f0bdd3630cab8" />
|
||||
<div class="dev_blog_card_alltext_wrap">
|
||||
<h4 class="dev_blog_card_title">Video Calls with up to 1000 Viewers, Video Messages 2.0, Video Playback Speed and More</h4>
|
||||
<div class="dev_blog_card_lead">This update takes video to the next level. Group video calls now have up to 1000 viewers,…</div>
|
||||
</div>
|
||||
<div class="dev_blog_card_date">Jul 30, 2021</div>
|
||||
</div></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_wrap">
|
||||
<div class="footer_columns_wrap footer_desktop">
|
||||
<div class="footer_column footer_column_telegram">
|
||||
<h5>Telegram</h5>
|
||||
<div class="footer_telegram_description"></div>
|
||||
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.
|
||||
</div>
|
||||
|
||||
<div class="footer_column">
|
||||
<h5><a href="/faq">About</a></h5>
|
||||
<ul>
|
||||
<li><a href="/faq">FAQ</a></li>
|
||||
<li><a href="/blog">Blog</a></li>
|
||||
<li><a href="/jobs">Jobs</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/apps#mobile-apps">Mobile Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="/dl/ios">iPhone/iPad</a></li>
|
||||
<li><a href="/dl/android">Android</a></li>
|
||||
<li><a href="/dl/wp">Windows Phone</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/apps#desktop-apps">Desktop Apps</a></h5>
|
||||
<ul>
|
||||
<li><a href="//desktop.telegram.org/">PC/Mac/Linux</a></li>
|
||||
<li><a href="//macos.telegram.org/">macOS</a></li>
|
||||
<li><a href="/dl/web">Web-browser</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer_column footer_column_platform">
|
||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
||||
<ul>
|
||||
<li><a href="//core.telegram.org/api">API</a></li>
|
||||
<li><a href="//translations.telegram.org/">Translations</a></li>
|
||||
<li><a href="//instantview.telegram.org/">Instant View</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer_columns_wrap footer_mobile">
|
||||
<div class="footer_column">
|
||||
<h5><a href="/faq">About</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/blog">Blog</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="/apps">Apps</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="//core.telegram.org/">Platform</a></h5>
|
||||
</div>
|
||||
<div class="footer_column">
|
||||
<h5><a href="https://twitter.com/telegram" target="_blank" data-track="Follow/Twitter" onclick="trackDlClick(this, event)">Twitter</a></h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/js/main.js?42"></script>
|
||||
|
||||
<script>initScrollVideos(true);
|
||||
twitterCustomShareInit();
|
||||
blogSideImageInit();
|
||||
backToTopInit("Go up");
|
||||
removePreloadInit();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
Loading…
Reference in a new issue