mirror of
https://github.com/MarshalX/telegram-crawler.git
synced 2024-11-28 19:23:11 +01:00
212 lines
24 KiB
HTML
212 lines
24 KiB
HTML
<!DOCTYPE html>
|
|
<html class="">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Giveaways</title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta property="description" content="Telegram channel administrators may launch giveaways to randomly distribute Telegram Premium subscriptions and other gifts among their followers, in exchange for boosts.">
|
|
<meta property="og:title" content="Giveaways">
|
|
<meta property="og:image" content="">
|
|
<meta property="og:description" content="Telegram channel administrators may launch giveaways to randomly distribute Telegram Premium subscriptions and other gifts among their followers, in exchange for boosts.">
|
|
<link rel="icon" type="image/svg+xml" href="/img/website_icon.svg?4">
|
|
<link rel="apple-touch-icon" sizes="180x180" href="/img/apple-touch-icon.png">
|
|
<link rel="icon" type="image/png" sizes="32x32" href="/img/favicon-32x32.png">
|
|
<link rel="icon" type="image/png" sizes="16x16" href="/img/favicon-16x16.png">
|
|
<link rel="alternate icon" href="/img/favicon.ico" type="image/x-icon" />
|
|
<link href="/css/bootstrap.min.css?3" rel="stylesheet">
|
|
|
|
<link href="/css/telegram.css?237" 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/giveaways" >Giveaways</a></li></ul></div>
|
|
<h1 id="dev_page_title">Giveaways</h1>
|
|
|
|
<div id="dev_page_content"><!-- scroll_nav -->
|
|
|
|
<p>Telegram <a href="/api/channel">channel</a> administrators may launch giveaways to randomly distribute <a href="/api/premium">Telegram Premium</a> subscriptions and other gifts among their followers, in exchange for <a href="/api/boost">boosts</a>.</p>
|
|
<p>This functionality should only be enabled if the <a href="/api/config#giveaway-gifts-purchase-available">giveaway_gifts_purchase_available</a> config value is set to true. </p>
|
|
<p>Note that the flow described below can also be used to gift a Premium subscriptions to multiple friends, and is different from the <a href="/api/premium#gifting-telegram-premium">old gift flow</a>, which allowed gifting only one subscription with some extra limitations, not present in this flow. </p>
|
|
<p>Note that <a href="/api/links#premium-multigift-links">premium multigift links</a> lead to a page that uses the new gift flow described below. </p>
|
|
<p>Schema:</p>
|
|
<pre><code><a href='/constructor/premiumGiftCodeOption'>premiumGiftCodeOption</a>#257e962b flags:<a href='/type/%23'>#</a> users:<a href='/type/int'>int</a> months:<a href='/type/int'>int</a> store_product:flags.0?<a href='/type/string'>string</a> store_quantity:flags.1?<a href='/type/int'>int</a> currency:<a href='/type/string'>string</a> amount:<a href='/type/long'>long</a> = <a href='/type/PremiumGiftCodeOption'>PremiumGiftCodeOption</a>;
|
|
|
|
<a href='/constructor/inputStorePaymentPremiumGiveaway'>inputStorePaymentPremiumGiveaway</a>#160544ca flags:<a href='/type/%23'>#</a> only_new_subscribers:flags.0?<a href='/constructor/true'>true</a> winners_are_visible:flags.3?<a href='/constructor/true'>true</a> boost_peer:<a href='/type/InputPeer'>InputPeer</a> additional_peers:flags.1?<a href='/type/Vector%20t'>Vector</a><<a href='/type/InputPeer'>InputPeer</a>> countries_iso2:flags.2?<a href='/type/Vector%20t'>Vector</a><<a href='/type/string'>string</a>> prize_description:flags.4?<a href='/type/string'>string</a> random_id:<a href='/type/long'>long</a> until_date:<a href='/type/int'>int</a> currency:<a href='/type/string'>string</a> amount:<a href='/type/long'>long</a> = <a href='/type/InputStorePaymentPurpose'>InputStorePaymentPurpose</a>;
|
|
<a href='/constructor/inputStorePaymentPremiumGiftCode'>inputStorePaymentPremiumGiftCode</a>#a3805f3f flags:<a href='/type/%23'>#</a> users:<a href='/type/Vector%20t'>Vector</a><<a href='/type/InputUser'>InputUser</a>> boost_peer:flags.0?<a href='/type/InputPeer'>InputPeer</a> currency:<a href='/type/string'>string</a> amount:<a href='/type/long'>long</a> = <a href='/type/InputStorePaymentPurpose'>InputStorePaymentPurpose</a>;
|
|
|
|
<a href='/constructor/inputInvoicePremiumGiftCode'>inputInvoicePremiumGiftCode</a>#98986c0d purpose:<a href='/type/InputStorePaymentPurpose'>InputStorePaymentPurpose</a> option:<a href='/type/PremiumGiftCodeOption'>PremiumGiftCodeOption</a> = <a href='/type/InputInvoice'>InputInvoice</a>;
|
|
|
|
<a href='/constructor/prepaidGiveaway'>prepaidGiveaway</a>#b2539d54 id:<a href='/type/long'>long</a> months:<a href='/type/int'>int</a> quantity:<a href='/type/int'>int</a> date:<a href='/type/int'>int</a> = <a href='/type/PrepaidGiveaway'>PrepaidGiveaway</a>;
|
|
|
|
<a href='/constructor/premium.boostsStatus'>premium.boostsStatus</a>#4959427a flags:<a href='/type/%23'>#</a> my_boost:flags.2?<a href='/constructor/true'>true</a> level:<a href='/type/int'>int</a> current_level_boosts:<a href='/type/int'>int</a> boosts:<a href='/type/int'>int</a> gift_boosts:flags.4?<a href='/type/int'>int</a> next_level_boosts:flags.0?<a href='/type/int'>int</a> premium_audience:flags.1?<a href='/type/StatsPercentValue'>StatsPercentValue</a> boost_url:<a href='/type/string'>string</a> prepaid_giveaways:flags.3?<a href='/type/Vector%20t'>Vector</a><<a href='/type/PrepaidGiveaway'>PrepaidGiveaway</a>> my_boost_slots:flags.2?<a href='/type/Vector%20t'>Vector</a><<a href='/type/int'>int</a>> = <a href='/type/premium.BoostsStatus'>premium.BoostsStatus</a>;
|
|
|
|
<a href='/constructor/messageMediaGiveaway'>messageMediaGiveaway</a>#daad85b0 flags:<a href='/type/%23'>#</a> only_new_subscribers:flags.0?<a href='/constructor/true'>true</a> winners_are_visible:flags.2?<a href='/constructor/true'>true</a> channels:<a href='/type/Vector%20t'>Vector</a><<a href='/type/long'>long</a>> countries_iso2:flags.1?<a href='/type/Vector%20t'>Vector</a><<a href='/type/string'>string</a>> prize_description:flags.3?<a href='/type/string'>string</a> quantity:<a href='/type/int'>int</a> months:<a href='/type/int'>int</a> until_date:<a href='/type/int'>int</a> = <a href='/type/MessageMedia'>MessageMedia</a>;
|
|
|
|
<a href='/constructor/messageActionGiveawayLaunch'>messageActionGiveawayLaunch</a>#332ba9ed = <a href='/type/MessageAction'>MessageAction</a>;
|
|
<a href='/constructor/messageActionGiveawayResults'>messageActionGiveawayResults</a>#2a9fadc5 winners_count:<a href='/type/int'>int</a> unclaimed_count:<a href='/type/int'>int</a> = <a href='/type/MessageAction'>MessageAction</a>;
|
|
|
|
<a href='/constructor/messageActionGiftCode'>messageActionGiftCode</a>#678c2e09 flags:<a href='/type/%23'>#</a> via_giveaway:flags.0?<a href='/constructor/true'>true</a> unclaimed:flags.2?<a href='/constructor/true'>true</a> boost_peer:flags.1?<a href='/type/Peer'>Peer</a> months:<a href='/type/int'>int</a> slug:<a href='/type/string'>string</a> currency:flags.2?<a href='/type/string'>string</a> amount:flags.2?<a href='/type/long'>long</a> crypto_currency:flags.3?<a href='/type/string'>string</a> crypto_amount:flags.3?<a href='/type/long'>long</a> = <a href='/type/MessageAction'>MessageAction</a>;
|
|
|
|
<a href='/constructor/payments.giveawayInfo'>payments.giveawayInfo</a>#4367daa0 flags:<a href='/type/%23'>#</a> participating:flags.0?<a href='/constructor/true'>true</a> preparing_results:flags.3?<a href='/constructor/true'>true</a> start_date:<a href='/type/int'>int</a> joined_too_early_date:flags.1?<a href='/type/int'>int</a> admin_disallowed_chat_id:flags.2?<a href='/type/long'>long</a> disallowed_country:flags.4?<a href='/type/string'>string</a> = <a href='/type/payments.GiveawayInfo'>payments.GiveawayInfo</a>;
|
|
<a href='/constructor/payments.giveawayInfoResults'>payments.giveawayInfoResults</a>#00cd5570 flags:<a href='/type/%23'>#</a> winner:flags.0?<a href='/constructor/true'>true</a> refunded:flags.1?<a href='/constructor/true'>true</a> start_date:<a href='/type/int'>int</a> gift_code_slug:flags.0?<a href='/type/string'>string</a> finish_date:<a href='/type/int'>int</a> winners_count:<a href='/type/int'>int</a> activated_count:<a href='/type/int'>int</a> = <a href='/type/payments.GiveawayInfo'>payments.GiveawayInfo</a>;
|
|
|
|
<a href='/constructor/payments.checkedGiftCode'>payments.checkedGiftCode</a>#284a1096 flags:<a href='/type/%23'>#</a> via_giveaway:flags.2?<a href='/constructor/true'>true</a> from_id:flags.4?<a href='/type/Peer'>Peer</a> giveaway_msg_id:flags.3?<a href='/type/int'>int</a> to_id:flags.0?<a href='/type/long'>long</a> date:<a href='/type/int'>int</a> months:<a href='/type/int'>int</a> used_date:flags.1?<a href='/type/int'>int</a> chats:<a href='/type/Vector%20t'>Vector</a><<a href='/type/Chat'>Chat</a>> users:<a href='/type/Vector%20t'>Vector</a><<a href='/type/User'>User</a>> = <a href='/type/payments.CheckedGiftCode'>payments.CheckedGiftCode</a>;
|
|
|
|
---functions---
|
|
|
|
<a href='/method/payments.getPremiumGiftCodeOptions'>payments.getPremiumGiftCodeOptions</a>#2757ba54 flags:<a href='/type/%23'>#</a> boost_peer:flags.0?<a href='/type/InputPeer'>InputPeer</a> = <a href='/type/Vector%20t'>Vector</a><<a href='/type/PremiumGiftCodeOption'>PremiumGiftCodeOption</a>>;
|
|
|
|
<a href='/method/payments.getPaymentForm'>payments.getPaymentForm</a>#37148dbb flags:<a href='/type/%23'>#</a> invoice:<a href='/type/InputInvoice'>InputInvoice</a> theme_params:flags.0?<a href='/type/DataJSON'>DataJSON</a> = <a href='/type/payments.PaymentForm'>payments.PaymentForm</a>;
|
|
|
|
<a href='/method/premium.getBoostsStatus'>premium.getBoostsStatus</a>#042f1f61 peer:<a href='/type/InputPeer'>InputPeer</a> = <a href='/type/premium.BoostsStatus'>premium.BoostsStatus</a>;
|
|
|
|
<a href='/method/payments.launchPrepaidGiveaway'>payments.launchPrepaidGiveaway</a>#5ff58f20 peer:<a href='/type/InputPeer'>InputPeer</a> giveaway_id:<a href='/type/long'>long</a> purpose:<a href='/type/InputStorePaymentPurpose'>InputStorePaymentPurpose</a> = <a href='/type/Updates'>Updates</a>;
|
|
|
|
<a href='/method/payments.getGiveawayInfo'>payments.getGiveawayInfo</a>#f4239425 peer:<a href='/type/InputPeer'>InputPeer</a> msg_id:<a href='/type/int'>int</a> = <a href='/type/payments.GiveawayInfo'>payments.GiveawayInfo</a>;
|
|
|
|
<a href='/method/payments.checkGiftCode'>payments.checkGiftCode</a>#8e51b4c1 slug:<a href='/type/string'>string</a> = <a href='/type/payments.CheckedGiftCode'>payments.CheckedGiftCode</a>;
|
|
<a href='/method/payments.applyGiftCode'>payments.applyGiftCode</a>#f6e26854 slug:<a href='/type/string'>string</a> = <a href='/type/Updates'>Updates</a>;</code></pre>
|
|
<p>First of all, invoke <a href="/method/payments.getPremiumGiftCodeOptions">payments.getPremiumGiftCodeOptions</a> to obtain a list of <a href="/constructor/premiumGiftCodeOption">premiumGiftCodeOption</a> constructors, containing a list of giveaway options that may be chosen by the admin, indicating the number and duration of the of <a href="/api/premium">Telegram Premium</a> subscriptions that will be gifted in the giveaway, along with their price (<code>amount</code>) in the specified <code>currency</code> (see the <a href="/constructor/premiumGiftCodeOption">constructor page »</a> for more info on these fields). </p>
|
|
<p>Once the admin has chosen a specific gift code option, invoke <a href="/method/payments.getPaymentForm">payments.getPaymentForm</a>, passing an <a href="/constructor/inputInvoicePremiumGiftCode">inputInvoicePremiumGiftCode</a>, with the chosen <a href="/constructor/premiumGiftCodeOption">premiumGiftCodeOption</a> in <code>option</code> and a <code>purpose</code> containing either:</p>
|
|
<ul>
|
|
<li><a href="/constructor/inputStorePaymentPremiumGiveaway">inputStorePaymentPremiumGiveaway</a> to create a giveaway, where Telegram will randomly select <code>option.users</code> subscribers to the channel specified in <code>purpose.boost_peer</code> (only new subscribers starting from the giveaway creation date if the <code>purpose.only_new_subscribers</code> field is set).<br>
|
|
Additional channels that the user must join to participate to the giveaway can be specified in <code>additional_peers</code>.<br>
|
|
The set of users that can participate to the giveaway can be restricted by passing an explicit whitelist of up to <a href="/api/config#giveaway-countries-max">giveaway_countries_max</a> countries, specified as two-letter ISO 3166-1 alpha-2 country codes in <code>countries_iso2</code>.<br>
|
|
The end date of the giveaway must be specified in <code>until_date</code>, and it must be at most <a href="/api/config#giveaway-period-max">giveaway_period_max</a> seconds in the future; at that date, Telegram will randomly choose <code>option.users</code> subscribers according to the conditions specified above, and send them a Telegram Premium giftcode as a <a href="/constructor/messageActionGiftCode">messageActionGiftCode</a> constructor, that should be used client-side to generate a <a href="/api/links#premium-giftcode-links">giftcode link</a>.<br>
|
|
The channel specified in <code>boost_peer</code> will receive <a href="/api/config#giveaway-boosts-per-premium">giveaway_boosts_per_premium</a> <a href="/api/boost">boosts</a> from each user, that cannot be reassigned to another channel for the duration of the gifted subscription. </li>
|
|
<li>or <a href="/constructor/inputStorePaymentPremiumGiftCode">inputStorePaymentPremiumGiftCode</a>, to gift <a href="/api/premium">Telegram Premium</a> subscriptions only to some specific subscribers (<code>purpose.users</code>, max <a href="/api/config#giveaway-add-peers-max">giveaway_add_peers_max</a> users) of the channel specified in <code>purpose.boost_peer</code>, which will receive <a href="/api/config#giveaway-boosts-per-premium">giveaway_boosts_per_premium</a> <a href="/api/boost">boosts</a> from each user, that cannot be reassigned to another channel for the duration of the gifted subscription.<br>
|
|
Users may also use this method to simply gift subscriptions to contacts by <strong>not</strong> setting the <code>boost_peer</code> field: in this case, gifting a <a href="/api/premium">Telegram Premium</a> subscription to another user will create <a href="/api/config#boosts-per-sent-gift">boosts_per_sent_gift</a> <a href="/api/boost">boost slots »</a> for us, and one boost slot for the destination user. </li>
|
|
</ul>
|
|
<p>Then, follow the <a href="/api/payments#22-getting-invoice-info-about-the-product">invoice payment flow as described in the payments documentation »</a>. </p>
|
|
<p>More alternative payment flows are also available:</p>
|
|
<ul>
|
|
<li>The Premium Bot flow, by contacting <a href="/api/config#premium-bot-username">premium_bot_username</a>, and following the inline keyboard payment flow for giveaways (the final keyboard with the prices will contain buttons with <a href="/api/links#invoice-links">invoice deep links »</a> that should be used to make the payment).</li>
|
|
<li>Payment via <a href="https://fragment.com">Fragment</a>, which also allows making larger purchases.</li>
|
|
<li>The store-based subscription flow based on <a href="/method/payments.assignAppStoreTransaction">payments.assignAppStoreTransaction</a>/<a href="/method/payments.assignPlayMarketTransaction">payments.assignPlayMarketTransaction</a>, currently not available to third-party apps. </li>
|
|
</ul>
|
|
<p>Then:</p>
|
|
<ul>
|
|
<li>
|
|
<p>If the payment was made using the <a href="/method/payments.getPaymentForm">payments.getPaymentForm</a> or <a href="/method/payments.assignAppStoreTransaction">payments.assignAppStoreTransaction</a>/<a href="/method/payments.assignPlayMarketTransaction">payments.assignPlayMarketTransaction</a> payment flows, the giveaway will launch as soon as the payment is complete.</p>
|
|
</li>
|
|
<li>
|
|
<p>Otherwise, if the <a href="/api/config#premium-bot-username">Premium bot</a> or <a href="https://fragment.com">Fragment</a> flows were used, once the payment for the giveaway is made, invoke <a href="/method/premium.getBoostsStatus">premium.getBoostsStatus</a>, passing to <code>peer</code> the ID of the channel that we selected when paying for the giveaway, to obtain a <a href="/constructor/prepaidGiveaway">prepaidGiveaway</a> constructor in <a href="/constructor/premium.boostsStatus">premium.boostsStatus</a>.<code>prepaid_giveaways</code>, containing info about the prepaid giveaway. </p>
|
|
<p>To actually launch the giveaway for the Fragment and bot flows, invoke <a href="/method/payments.launchPrepaidGiveaway">payments.launchPrepaidGiveaway</a>, passing <a href="/constructor/prepaidGiveaway">prepaidGiveaway</a>.<code>id</code> to <code>giveaway_id</code>, the ID of the channel to <code>peer</code> and giveaway settings in <code>purpose</code> (populated as specified above). </p>
|
|
</li>
|
|
</ul>
|
|
<p>Finally:</p>
|
|
<ul>
|
|
<li>
|
|
<p>If the payment succeeds and we're launching a giveaway using <a href="/constructor/inputStorePaymentPremiumGiveaway">inputStorePaymentPremiumGiveaway</a>: a <a href="/constructor/messageActionGiveawayLaunch">messageActionGiveawayLaunch</a> service message and a media message containing a <a href="/constructor/messageMediaGiveaway">messageMediaGiveaway</a> will be sent to the channel. </p>
|
|
<p>Once the giveaway is over, a <a href="/constructor/messageActionGiveawayResults">messageActionGiveawayResults</a> will be sent to the channel and the winners will automatically receive a <a href="/constructor/messageActionGiftCode">messageActionGiftCode</a> service message from Telegram's service user, containing the <code>slug</code> that can be used to generate a <a href="/api/links#premium-giftcode-links">giftcode link</a> to redeem the Premium subscription.<br>
|
|
The <a href="/constructor/messageActionGiftCode">messageActionGiftCode</a>.<code>via_giveaway</code> flag will be set. </p>
|
|
</li>
|
|
<li>
|
|
<p>If the payment succeeds and we're simply gifting some subscriptions to specific users <a href="/constructor/inputStorePaymentPremiumGiftCode">inputStorePaymentPremiumGiftCode</a>: the specified users will automatically receive a <a href="/constructor/messageActionGiftCode">messageActionGiftCode</a> service message from Telegram's service user, containing the <code>slug</code> that can be used to generate a <a href="/api/links#premium-giftcode-links">giftcode link</a> to redeem the Premium subscription.<br>
|
|
The <a href="/constructor/messageActionGiftCode">messageActionGiftCode</a>.<code>via_giveaway</code> flag will not be set. </p>
|
|
<p>Note that if the payment was made on behalf of the user (i.e. if <code>boost_peer</code> was <strong>not</strong> set), then the users to which the gift was sent will instead receive a <a href="/constructor/messageService">messageService</a> from the user that sent the gift, containing a <a href="/constructor/messageActionGiftPremium">messageActionGiftPremium</a> constructor with further info about the price and duration of the gifted Telegram Premium subscription.<br>
|
|
Clients should display this message, along with a sticker from the <a href="/constructor/inputStickerSetPremiumGifts">inputStickerSetPremiumGifts</a> <a href="/api/stickers">stickerset</a>: here's an <a href="https://telegram.org/blog/custom-emoji#gifting-telegram-premium">example</a>. </p>
|
|
</li>
|
|
</ul>
|
|
<p>The <a href="/constructor/messageActionGiftCode">messageActionGiftCode</a>.<code>slug</code> should be used to generate a <a href="/api/links#premium-giftcode-links">giftcode link</a>, that the user can use to redeem the subscription, or re-gift it to someone else. </p>
|
|
<p>If <code>winners_are_visible</code> flag is set while starting a giveaway, giveaway winners are public and will be listed in a <a href="/constructor/messageMediaGiveawayResults">messageMediaGiveawayResults</a> message that will be automatically sent to the channel once the giveaway ends. </p>
|
|
<p>Any user can invoke <a href="/method/payments.checkGiftCode">payments.checkGiftCode</a> with the link's slug to obtain info about the giveaway, such as the channel that gifted the subscription (<code>from_id</code>), and the user that originally received the gift (<code>to_id</code>).<br>
|
|
This can also be useful to channel administrators to precisely determine the winners of a giveaway, for example if the giveaway also included some extra gifts apart from Premium subscriptions (<em>like Teslas</em>): the winners can simply send their link as undisputable proof that they won the giveaway, because the user that received the gift can be viewed in the <code>to_id</code> field returned by Telegram when invoking <a href="/method/payments.checkGiftCode">payments.checkGiftCode</a> on the slug.<br>
|
|
Another way for admins to check who received the gifts is to simply use <a href="/method/premium.getBoostsList">premium.getBoostsList</a> while the boosts received by the gifts are still active. </p>
|
|
<p>To claim the <a href="/api/premium">Telegram Premium</a> subscription, simply invoke <a href="/method/payments.applyGiftCode">payments.applyGiftCode</a>, passing the link's <code>slug</code>.</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/privacy">Privacy</a></li>
|
|
<li><a href="//telegram.org/press">Press</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/android">Android</a></li>
|
|
<li><a href="//telegram.org/dl/web">Mobile Web</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="//telegram.org/press">Press</a></h5>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script src="/js/main.js?47"></script>
|
|
<script src="/js/jquery.min.js?1"></script>
|
|
<script src="/js/bootstrap.min.js?1"></script>
|
|
|
|
<script>window.initDevPageNav&&initDevPageNav();
|
|
backToTopInit("Go up");
|
|
removePreloadInit();
|
|
</script>
|
|
</body>
|
|
</html>
|
|
|