telegram-crawler/data/web/blogfork.telegram.org/api/push-updates.html
2024-09-23 18:02:35 +00:00

1214 lines
40 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html class="">
<head>
<meta charset="utf-8">
<title>Handling PUSH-notifications</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="description" content="How to subscribe to and handle PUSH notifications">
<meta property="og:title" content="Handling PUSH-notifications">
<meta property="og:image" content="f171b7d56879c20c22">
<meta property="og:description" content="How to subscribe to and handle PUSH notifications">
<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?241" 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/push-updates" >Handling PUSH-notifications</a></li></ul></div>
<h1 id="dev_page_title">Handling PUSH-notifications</h1>
<div id="dev_page_content"><!-- scroll_nav -->
<h3><a class="anchor" href="#configuring-the-application" id="configuring-the-application" name="configuring-the-application"><i class="anchor-icon"></i></a>Configuring the application</h3>
<p>To be able to send APNS notifications to Apple servers or GCM notifications to Google servers, application certificates (APNS) or an application key (GCM) must be specified in the <a href="/myapp">application settings</a>.</p>
<h3><a class="anchor" href="#subscribing-to-notifications" id="subscribing-to-notifications" name="subscribing-to-notifications"><i class="anchor-icon"></i></a>Subscribing to notifications</h3>
<p>To subscribe to notifications, the client must invoke the <a href="/method/account.registerDevice">account.registerDevice</a> query, passing in <strong>token_type</strong> and <strong>token</strong> as parameters that identify the current device. It is useful to repeat this query at least once every 24 hours or when restarting the application. Use <a href="/method/account.unregisterDevice">account.unregisterDevice</a> to unsubscribe.</p>
<p>The following <strong>token_type</strong>s are supported:</p>
<ul>
<li><code>1</code> - APNS (device token for apple push)</li>
<li><code>2</code> - FCM (firebase token for google firebase)</li>
<li><code>3</code> - MPNS (channel URI for microsoft push)</li>
<li><code>4</code> - Simple push (endpoint for firefox's deprecated simple push API): note that this push type can also be used by an open source push notification spec like <a href="https://unifiedpush.org/">UnifiedPush »</a>.<br>
Simple push works by sending a simple PUT request with a <code>version=number</code> payload to the specified HTTPS endpoint every time a relevant message is received: upon receiving such a notification, clients should connect to the MTProto API and fetch <a href="/api/updates">updates</a>.<br>
(Note that the <code>number</code> won't necessarily be incremental in Telegram's implementation, just treat each distinct request as a signal that a new message is waiting to be fetched via MTProto).</li>
<li><code>5</code> - Ubuntu phone (token for ubuntu push)</li>
<li><code>6</code> - Blackberry (token for blackberry push)</li>
<li><code>7</code> - MTProto separate session</li>
<li><code>8</code> - WNS (windows push)</li>
<li><code>9</code> - APNS VoIP (token for apple push VoIP)</li>
<li><code>10</code> - Web push (web push, see below)</li>
<li><code>11</code> - MPNS VoIP (token for microsoft push VoIP)</li>
<li><code>12</code> - Tizen (token for tizen push)</li>
<li><code>13</code> - Huawei push</li>
</ul>
<p>For <code>10</code> web push, the token must be a JSON-encoded object with the following keys:</p>
<ul>
<li><code>endpoint</code>: Absolute URL exposed by the push service where the application server can send push messages</li>
<li><code>keys</code>: P-256 elliptic curve Diffie-Hellman parameters in the following object<ul>
<li><code>p256dh</code>: Base64url-encoded P-256 elliptic curve Diffie-Hellman public key</li>
<li><code>auth</code>: Base64url-encoded authentication secret</li>
</ul>
</li>
</ul>
<h3><a class="anchor" href="#notification-encryption" id="notification-encryption" name="notification-encryption"><i class="anchor-icon"></i></a>Notification encryption</h3>
<p>For FCM and APNS VoIP, an optional encryption key used to encrypt push notifications can be passed to <a href="/method/account.registerDevice">account.registerDevice</a> (<code>secret</code>). This key (<code>auth_key</code>) is used to encrypt the payloads using <a href="/mtproto/description">MTProto v2</a>.</p>
<p>The FCM payload will be a JSON payload, containing a <code>p</code> field with the base64url-encoded encrypted <a href="/mtproto/description">MTProto payload</a>. After decryption, the result will be a JSON object, prefixed by a 32-bit little-endian integer with the length of the JSON payload. As usual, make sure to follow all security checks as described in the <a href="/mtproto/description#important-checks">MTProto docs</a>.</p>
<p><a href="https://github.com/DrKLO/Telegram/blob/3708e9847a96ed681ff811d391749cc4535b03f2/TMessagesProj/src/main/java/org/telegram/messenger/GcmPushListenerService.java#L56">Example implementation</a>.</p>
<p>As mentioned <a href="#subscribing-to-notifications">above</a>, payloads can also be encrypted using <a href="https://tools.ietf.org/html/rfc8291">P-256 Elliptic Curve Diffie-Hellman when using web push</a>.</p>
<h3><a class="anchor" href="#notification-structure" id="notification-structure" name="notification-structure"><i class="anchor-icon"></i></a>Notification structure</h3>
<p>An (<a href="#notification-encryption">optionally encrypted</a>) notification is provided as a JSON object in the following format:</p>
<pre><code>{
"data": {
"loc_key": "CHAT_MESSAGE_CONTACT",
"loc_args": ["John Doe", "My magical group", "Contact Exchange"],
"user_id": 14124122,
"custom": {
"chat_id": 241233,
"msg_id": 123
},
"sound": "sound1.mp3",
}
}</code></pre>
<p>Each notification has several parameters that describe it.</p>
<ul>
<li>loc_key - Notification type: a string literal in the form <code>/[A-Z_0-9]+/</code>, which summarizes the notification. For example, <code>CHAT_MESSAGE_TEXT</code>.</li>
<li>loc_args - Notification placeholder arguments: a list or arguments which, when inserted into a template, produce a readable notification.</li>
<li>custom - Custom parameters to be passed into the application when a notification is opened. Possible fields:<ul>
<li>attachb64 - For notifications about media, base64url-encoded TL-serialization of the corresponding <a href="/type/Photo">Photo</a> / <a href="/type/Document">Document</a> object</li>
<li>updates - base64url-encoded TL-serialization of the <a href="/type/Updates">Updates</a> object, currently sent only for PHONE_CALL_REQUEST (with <a href="/constructor/updatePhoneCall">updatePhoneCall</a> inside)</li>
<li>call_id - Call ID, used in PHONE_CALL_REQUEST</li>
<li>call_ah - Call access hash, used in PHONE_CALL_REQUEST</li>
<li>encryption_id - Secret chat id for ENCRYPTION_REQUEST, ENCRYPTION_ACCEPT, ENCRYPTED_MESSAGE</li>
<li>random_id - Random id for message in ENCRYPTED_MESSAGE</li>
<li>contact_id - Telegram user identifier of contact that joined Telegram in CONTACT_JOINED</li>
<li>msg_id - Message ID for new message event or reaction event</li>
<li>channel_id - Identifier of the <a href="/api/channel">channel/supergroup</a> where the event occurred</li>
<li>chat_id - Identifier of the <a href="/api/channel#basic-groups">basic group</a> where the event occurred</li>
<li>from_id - User ID where the event occurred</li>
<li>chat_from_broadcast_id - If the group message was sent as a channel, this field will contain the sender channel ID</li>
<li>chat_from_group_id - If the group message was sent as a supergroup, this field will contain the sender supergroup ID</li>
<li>chat_from_id - Groups only, message author identifier (ignore if any of chat_from_broadcast_id / chat_from_group_id was present)</li>
<li>mention - Whether the current user was mentioned/replied to in this new message</li>
<li>silent - Whether the message was posted silently (no sound should be played for this notification)</li>
<li>schedule - Whether the message is outgoing and was sent via <a href="/api/scheduled-messages">scheduled messages</a></li>
<li>edit_date - When was the message last edited</li>
<li>top_msg_id - thread_id for new mentions/replies in <a href="/api/threads">threads</a></li>
</ul>
</li>
<li>sound - The name of an audio file to be played.</li>
<li>user_id - ID of the account to which the PUSH notification should be delivered, in case of clients with multiple accounts active and running.</li>
<li>announcement - Roughly equivalent to a message received from the service notifications (Telegram Notifications, id <code>777000</code>) user, but must be delivered via push notifications, without contacting the API.</li>
</ul>
<h3><a class="anchor" href="#processing-notifications" id="processing-notifications" name="processing-notifications"><i class="anchor-icon"></i></a>Processing notifications</h3>
<p>In principle, <strong>data.loc_key</strong>, <strong>data.custom</strong>, and an Internet connection are sufficient to generate a notification. Obviously, if possible, when generating a visual notification you need not use all of the transmitted data and may rely on the information already stored on the client. But if a user or a chat is not cached locally, the values passed in loc_args may also be used. <strong>data.user_id</strong> is the ID of the account to which the PUSH notification should be delivered, in case of clients with multiple accounts active and running.</p>
<h3><a class="anchor" href="#service-notifications" id="service-notifications" name="service-notifications"><i class="anchor-icon"></i></a>Service notifications</h3>
<p>The following notifications can be used to update app settings.</p>
<table class="table">
<thead>
<tr>
<th>Type</th>
<th>Extra custom arguments</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>DC_UPDATE</td>
<td><strong>data.custom.dc</strong> - number of the data-center<br><strong>data.custom.addr</strong> - server address with port number in the format <code>111.112.113.114:443</code></td>
<td>In case the client gets this notification, it is necessary to add the received server address to the list of possible addresses. In case the address of the first DC was passed (<code>dc=1</code>), it is recommended to call it immediately using <a href="/method/help.getConfig">help.getConfig</a> to update dc-configuration.</td>
</tr>
<tr>
<td>MESSAGE_DELETED</td>
<td><strong>data.custom.channel_id</strong>: For <a href="/api/channel">channels and supergroups</a>, <a href="/api/channel">Channel/supergroup</a> identifier<br><strong>data.custom.chat_id</strong>: For <a href="/api/channel">chats</a>, <a href="/api/channel">Chat</a> identifier<br><strong>data.custom.from_id</strong>: For PMs, Author identifier<br><strong>data.custom.messages</strong>: Comma-separated IDs of messages that were deleted</td>
<td>Messages were deleted, remove multiple notifications for this chat</td>
</tr>
<tr>
<td>READ_REACTION</td>
<td><strong>data.custom.channel_id</strong>: For <a href="/api/channel">channels and supergroups</a>, <a href="/api/channel">Channel/supergroup</a> identifier<br><strong>data.custom.chat_id</strong>: For <a href="/api/channel">chats</a>, <a href="/api/channel">Chat</a> identifier<br><strong>data.custom.from_id</strong>: For PMs, Author identifier<br><strong>data.custom.messages</strong>: Comma-separated IDs of messages whose reactions were read</td>
<td>Reactions were read on messages, remove reaction-related notifications for those messages</td>
</tr>
<tr>
<td>READ_HISTORY</td>
<td><strong>data.custom.channel_id</strong>: For <a href="/api/channel">channels and supergroups</a>, <a href="/api/channel">Channel/supergroup</a> identifier<br><strong>data.custom.chat_id</strong>: For <a href="/api/channel">chats</a>, <a href="/api/channel">Chat</a> identifier<br><strong>data.custom.from_id</strong>: For PMs, Author identifier<br><strong>data.custom.max_id</strong>: Maximum ID of read messages</td>
<td>Message history was read, remove multiple notifications for this chat</td>
</tr>
<tr>
<td>READ_STORIES</td>
<td><strong>data.custom.channel_id</strong>: For <a href="/api/channel">channels and supergroups</a>, <a href="/api/channel">Channel/supergroup</a> identifier<br><strong>data.custom.from_id</strong>: For user-sent stories, Author identifier<br><strong>data.custom.max_id</strong>: Maximum ID of read story</td>
<td>Notifications from stories were read, remove story-related notifications for this chat</td>
</tr>
<tr>
<td>STORY_DELETED</td>
<td><strong>data.custom.channel_id</strong>: For <a href="/api/channel">channels and supergroups</a>, <a href="/api/channel">Channel/supergroup</a> identifier<br><strong>data.custom.from_id</strong>: For user-sent stories, Author identifier<br><strong>data.custom.story_id</strong>: ID of deleted story</td>
<td>A story was deleted, remove notifications for this story</td>
</tr>
<tr>
<td>GEO_LIVE_PENDING</td>
<td> </td>
<td>Any of the live locations currently being shared should be updated</td>
</tr>
<tr>
<td>SESSION_REVOKE</td>
<td> </td>
<td>Logout and remove DB for specified session by <strong>data.user_id</strong>, only apply if coming from an <a href="#notification-encryption">MTProto-encrypted payload</a></td>
</tr>
<tr>
<td>MESSAGE_MUTED</td>
<td> </td>
<td>Sent rarely, every 10th message in chats or once per 15 sec in PM, to update badge or download messages</td>
</tr>
<tr>
<td>MESSAGE_ANNOUNCEMENT</td>
<td><strong>data.announcement</strong>: Announcement</td>
<td>Roughly equivalent to a message received from the service notifications (Telegram Notifications, id <code>777000</code>) user, but must be delivered via push notifications, without contacting the API.</td>
</tr>
</tbody>
</table>
<h3><a class="anchor" href="#possible-notifications" id="possible-notifications" name="possible-notifications"><i class="anchor-icon"></i></a>Possible Notifications</h3>
<table class="table">
<thead>
<tr>
<th>Type</th>
<th>Template example</th>
<th>Arguments</th>
</tr>
</thead>
<tbody>
<tr>
<td>AUTH_REGION</td>
<td>New login from unrecognized device {1}, location: {2}</td>
<td>1. Device name<br>2. Location</td>
</tr>
<tr>
<td>AUTH_UNKNOWN</td>
<td>New login from unrecognized device {1}</td>
<td>1. Device name</td>
</tr>
<tr>
<td>CHANNEL_MESSAGES</td>
<td>{1} posted an album</td>
<td>1. Message author</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_AUDIO</td>
<td>{1} posted a voice message</td>
<td>1. Message author</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_CONTACT</td>
<td>{1} posted a contact {2}</td>
<td>1. Message author<br>2. Contact name</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_DOC</td>
<td>{1} posted a file</td>
<td>1. Message author</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_DOCS</td>
<td>{1} posted {2} files</td>
<td>1. Channel name<br>2. Number of documents that were posted</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_FWDS</td>
<td>{1} posted {2} forwarded messages</td>
<td>1. Message author<br>2. Number of forwarded messages</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_GAME</td>
<td>{1} invited you to play {2}</td>
<td>1. Message author<br>2. Game name</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_GAME_SCORE</td>
<td>{1} scored {3} in game {2}</td>
<td>1. User<br>2. Game name<br>3. Score</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_GEO</td>
<td>{1} posted a location</td>
<td>1. Channel name</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_GEOLIVE</td>
<td>{1} posted a live location</td>
<td>1. Channel name</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_GIF</td>
<td>{1} posted a GIF</td>
<td>1. Channel name</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_GIVEAWAY</td>
<td>{1} posted a giveaway of {2}x {3}m Premium subscriptions</td>
<td>1. Channel name<br>2. Number of Telegram Premium subscriptions in the giveaway<br>3. Duration in months of each Telegram Premium subscription in the giveaway</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_NOTEXT</td>
<td>{1} posted a message</td>
<td>1. Channel name</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_PAID_MEDIA</td>
<td>{1} posted a paid post for {2} star</td>
<td>1. Channel name<br>2. <a href="/api/stars">Stars</a></td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_PHOTO</td>
<td>{1} posted a photo</td>
<td>1. Channel name</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_PHOTOS</td>
<td>{1} posted {2} photos</td>
<td>1. Channel name<br>2. Number of photos that was sent</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_PLAYLIST</td>
<td>{1} posted {2} music files</td>
<td>1. Channel name<br>2. Number of audio files that were posted</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_POLL</td>
<td>{1} posted a poll {2}</td>
<td>1. Channel name<br>2. Poll name</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_QUIZ</td>
<td>{1} posted a quiz {2}</td>
<td>1. Channel name<br>2. Quiz name</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_ROUND</td>
<td>{1} posted a video message</td>
<td>1. Channel name</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_STICKER</td>
<td>{1} posted a {2} sticker</td>
<td>1. Channel name<br>2. Sticker emoji</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_STORY</td>
<td>{1} shared a story</td>
<td>1. Channel name</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_TEXT</td>
<td>{1}: {2}</td>
<td>1. Channel name<br>2. Message body</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_VIDEO</td>
<td>{1} posted a video</td>
<td>1. Channel name</td>
</tr>
<tr>
<td>CHANNEL_MESSAGE_VIDEOS</td>
<td>{1} posted {2} videos</td>
<td>1. Channel name<br>2. Number of videos that were posted</td>
</tr>
<tr>
<td>CHAT_ADD_MEMBER</td>
<td>{1} invited {3} to the group {2}</td>
<td>1. Message author<br>2. Chat name<br>3. New participant name</td>
</tr>
<tr>
<td>CHAT_ADD_YOU</td>
<td>{1} invited you to the group {2}</td>
<td>1. User name<br>2. Group name</td>
</tr>
<tr>
<td>CHAT_CREATED</td>
<td>{1} invited you to the group {2}</td>
<td>1. Message author<br>2. Chat name</td>
</tr>
<tr>
<td>CHAT_DELETE_MEMBER</td>
<td>{1} removed {3} from the group {2}</td>
<td>1. Message author<br>2. Chat name<br>3. Dropped participant name</td>
</tr>
<tr>
<td>CHAT_DELETE_YOU</td>
<td>{1} removed you from the group {2}</td>
<td>1. Message author<br>2. Chat name</td>
</tr>
<tr>
<td>CHAT_JOINED</td>
<td>{1} joined the group {2}</td>
<td>1. User name<br>2. Group name</td>
</tr>
<tr>
<td>CHAT_LEFT</td>
<td>{1} left the group {2}</td>
<td>1. Message author<br>2. Chat name</td>
</tr>
<tr>
<td>CHAT_MESSAGES</td>
<td>{1} sent an album to the group {2}</td>
<td>1. User name<br>2. Group name</td>
</tr>
<tr>
<td>CHAT_MESSAGE_AUDIO</td>
<td>{1} sent a voice message to the group {2}</td>
<td>1. Message author<br>2. Chat name</td>
</tr>
<tr>
<td>CHAT_MESSAGE_CONTACT</td>
<td>{1} shared a contact {3} in the group {2}</td>
<td>1. User name<br>2. Group name<br>3. Contact name</td>
</tr>
<tr>
<td>CHAT_MESSAGE_DOC</td>
<td>{1} sent a file to the group {2}</td>
<td>1. User name<br>2. Group name</td>
</tr>
<tr>
<td>CHAT_MESSAGE_DOCS</td>
<td>{1} sent {3} files to the group {2}</td>
<td>1. User name<br>2. Group name<br>3. Number of documents that were sent</td>
</tr>
<tr>
<td>CHAT_MESSAGE_FWDS</td>
<td>{1} forwarded {3} messages to the group {2}</td>
<td>1. User name<br>2. Group name<br>3. Number of messages that were forwarded</td>
</tr>
<tr>
<td>CHAT_MESSAGE_GAME</td>
<td>{1} invited the group {2} to play {3}</td>
<td>1. User name<br>2. Group name<br>3. Game name</td>
</tr>
<tr>
<td>CHAT_MESSAGE_GAME_SCORE</td>
<td>{1} scored {4} in game {3} in the group {2}</td>
<td>1. User name<br>2. Group name<br>3. Game name<br>4. Score</td>
</tr>
<tr>
<td>CHAT_MESSAGE_GEO</td>
<td>{1} sent a location to the group {2}</td>
<td>1. Message author<br>2. Chat name</td>
</tr>
<tr>
<td>CHAT_MESSAGE_GEOLIVE</td>
<td>{1} shared a live location with the group {2}</td>
<td>1. User name<br>2. Group name</td>
</tr>
<tr>
<td>CHAT_MESSAGE_GIF</td>
<td>{1} sent a GIF to the group {2}</td>
<td>1. User name<br>2. Group name</td>
</tr>
<tr>
<td>CHAT_MESSAGE_GIVEAWAY</td>
<td>{1} sent a giveaway of {3}x {4}m Premium subscriptions to the group {2}</td>
<td>1. User name<br>2. Group name<br>3. Number of Telegram Premium subscriptions in the giveaway<br>4. Duration in months of each Telegram Premium subscription in the giveaway</td>
</tr>
<tr>
<td>CHAT_MESSAGE_INVOICE</td>
<td>{1} sent an invoice to the group {2} for {3}</td>
<td>1. User name<br>2. Group name<br>3. Product name</td>
</tr>
<tr>
<td>CHAT_MESSAGE_NOTEXT</td>
<td>{1} sent a message to the group {2}</td>
<td>1. Message author<br>2. Chat name</td>
</tr>
<tr>
<td>CHAT_MESSAGE_PAID_MEDIA</td>
<td>{1} posted a paid post in {2} group for {3} star</td>
<td>1. Message author<br>2. Chat name<br>3. <a href="/api/stars">Stars</a></td>
</tr>
<tr>
<td>CHAT_MESSAGE_PHOTO</td>
<td>{1} sent a photo to the group {2}</td>
<td>1. Message author<br>2. Chat name</td>
</tr>
<tr>
<td>CHAT_MESSAGE_PHOTOS</td>
<td>{1} sent {3} photos to the group {2}</td>
<td>1. User name<br>2. Group name<br>3. Number of photos that were sent</td>
</tr>
<tr>
<td>CHAT_MESSAGE_PLAYLIST</td>
<td>{1} sent {3} music files to the group {2}</td>
<td>1. User name<br>2. Group name<br>3. Number of audio files that were sent</td>
</tr>
<tr>
<td>CHAT_MESSAGE_POLL</td>
<td>{1} sent a poll {3} to the group {2}</td>
<td>1. User name<br>2. Group name<br>3. Poll name</td>
</tr>
<tr>
<td>CHAT_MESSAGE_QUIZ</td>
<td>{1} sent a quiz {3} to the group {2}</td>
<td>1. User name<br>2. Group name<br>3. Quiz name</td>
</tr>
<tr>
<td>CHAT_MESSAGE_ROUND</td>
<td>{1} sent a video message to the group {2}</td>
<td>1. User name<br>2. Group name</td>
</tr>
<tr>
<td>CHAT_MESSAGE_STICKER</td>
<td>{1} sent a {3} sticker to the group {2}</td>
<td>1. User name<br>2. Group name<br>3. Sticker emoji</td>
</tr>
<tr>
<td>CHAT_MESSAGE_STORY</td>
<td>{1} shared a story to the group</td>
<td>1. Group name</td>
</tr>
<tr>
<td>CHAT_MESSAGE_TEXT</td>
<td>{1} @ {2}: {3}</td>
<td>1. Message author<br>2. Chat name<br>3. Message body</td>
</tr>
<tr>
<td>CHAT_MESSAGE_VIDEO</td>
<td>{1} sent a video to the group {2}</td>
<td>1. Message author<br>2. Chat name</td>
</tr>
<tr>
<td>CHAT_MESSAGE_VIDEOS</td>
<td>{1} sent {3} videos to the group {2}</td>
<td>1. User name<br>2. Group name<br>3. Number of videos that were sent</td>
</tr>
<tr>
<td>CHAT_PHOTO_EDITED</td>
<td>{1} changed the group photo for {2}</td>
<td>1. Message author<br>2. Chat name</td>
</tr>
<tr>
<td>CHAT_REACT_AUDIO</td>
<td>{1}: {3} to your voice message in {2}</td>
<td>1. User name<br>2. Group name<br>3. Reaction</td>
</tr>
<tr>
<td>CHAT_REACT_CONTACT</td>
<td>{1}: {3} to your contact {4} in {2}</td>
<td>1. User name<br>2. Group name<br>3. Reaction<br>4. Contact name</td>
</tr>
<tr>
<td>CHAT_REACT_DOC</td>
<td>{1}: {3} to your file in {2}</td>
<td>1. User name<br>2. Group name<br>3. Reaction</td>
</tr>
<tr>
<td>CHAT_REACT_GAME</td>
<td>{1}: {3} to your game in {2}</td>
<td>1. User name<br>2. Group name<br>3. Reaction</td>
</tr>
<tr>
<td>CHAT_REACT_GEO</td>
<td>{1}: {3} to your map in {2}</td>
<td>1. User name<br>2. Group name<br>3. Reaction</td>
</tr>
<tr>
<td>CHAT_REACT_GEOLIVE</td>
<td>{1}: {3} to your live location in {2}</td>
<td>1. User name<br>2. Group name<br>3. Reaction</td>
</tr>
<tr>
<td>CHAT_REACT_GIF</td>
<td>{1}: {3} to your GIF in {2}</td>
<td>1. User name<br>2. Group name<br>3. Reaction</td>
</tr>
<tr>
<td>CHAT_REACT_GIVEAWAY</td>
<td>{1} reacted {3} in group {2} to your giveaway</td>
<td>1. User name<br>2. Group name<br>3. Reaction</td>
</tr>
<tr>
<td>CHAT_REACT_INVOICE</td>
<td>{1}: {3} to your invoice in {2}</td>
<td>1. User name<br>2. Group name<br>3. Reaction</td>
</tr>
<tr>
<td>CHAT_REACT_NOTEXT</td>
<td>{1}: {3} to your message in {2}</td>
<td>1. User name<br>2. Group name<br>3. Reaction</td>
</tr>
<tr>
<td>CHAT_REACT_PAID_MEDIA</td>
<td>{1} reacted {3} in group {2} to your paid post for {4} star</td>
<td>1. User name<br>2. Group name<br>3. Reaction<br>4. <a href="/api/stars">Stars</a></td>
</tr>
<tr>
<td>CHAT_REACT_PHOTO</td>
<td>{1}: {3} to your photo in {2}</td>
<td>1. User name<br>2. Group name<br>3. Reaction</td>
</tr>
<tr>
<td>CHAT_REACT_POLL</td>
<td>{1}: {3} to your poll {4} in {2}</td>
<td>1. User name<br>2. Group name<br>3. Reaction<br>4. Poll name</td>
</tr>
<tr>
<td>CHAT_REACT_QUIZ</td>
<td>{1}: {3} to your quiz {4} in {2}</td>
<td>1. User name<br>2. Group name<br>3. Reaction<br>4. Quiz name</td>
</tr>
<tr>
<td>CHAT_REACT_ROUND</td>
<td>{1}: {3} to your video message in {2}</td>
<td>1. User name<br>2. Group name<br>3. Reaction</td>
</tr>
<tr>
<td>CHAT_REACT_STICKER</td>
<td>{1}: {3} to your {4} sticker in {2}</td>
<td>1. User name<br>2. Group name<br>3. Reaction<br>4. Sticker emoji</td>
</tr>
<tr>
<td>CHAT_REACT_TEXT</td>
<td>{1}: {3} in {2} to your "{4}"</td>
<td>1. User name<br>2. Group name<br>3. Reaction<br>4. Message body</td>
</tr>
<tr>
<td>CHAT_REACT_VIDEO</td>
<td>{1}: {3} to your video in {2}</td>
<td>1. User name<br>2. Group name<br>3. Reaction</td>
</tr>
<tr>
<td>CHAT_REQ_JOINED</td>
<td>{2}|{1} was accepted into the group</td>
<td>1. User name<br>2. Chat name</td>
</tr>
<tr>
<td>CHAT_RETURNED</td>
<td>{1} returned to the group {2}</td>
<td>1. Message author<br>2. Chat name</td>
</tr>
<tr>
<td>CHAT_TITLE_EDITED</td>
<td>{1} renamed the group {2}</td>
<td>1. User name<br>2. Group name</td>
</tr>
<tr>
<td>CHAT_VOICECHAT_END</td>
<td>{1} ended a voice chat in the group {2}</td>
<td>1. User name<br>2. Chat name</td>
</tr>
<tr>
<td>CHAT_VOICECHAT_INVITE</td>
<td>{1} invited {3} to a voice chat in the group {2}</td>
<td>1. User name<br>2. Chat name<br>3. Invited users</td>
</tr>
<tr>
<td>CHAT_VOICECHAT_INVITE_YOU</td>
<td>{1} invited you to a voice chat in the group {2}</td>
<td>1. User name<br>2. Chat name</td>
</tr>
<tr>
<td>CHAT_VOICECHAT_START</td>
<td>{1} started a voice chat in the group {2}</td>
<td>1. User name<br>2. Chat name</td>
</tr>
<tr>
<td>CONTACT_JOINED</td>
<td>{1} joined Telegram!</td>
<td>1. Contact name</td>
</tr>
<tr>
<td>ENCRYPTED_MESSAGE</td>
<td>You have a new message</td>
<td> </td>
</tr>
<tr>
<td>ENCRYPTION_ACCEPT</td>
<td>You have a new message</td>
<td> </td>
</tr>
<tr>
<td>ENCRYPTION_REQUEST</td>
<td>You have a new message</td>
<td> </td>
</tr>
<tr>
<td>LOCKED_MESSAGE</td>
<td>You have a new message</td>
<td> </td>
</tr>
<tr>
<td>MESSAGES</td>
<td>{1} sent you an album</td>
<td>1. User name</td>
</tr>
<tr>
<td>MESSAGE_AUDIO</td>
<td>{1} sent you a voice message</td>
<td>1. Message author</td>
</tr>
<tr>
<td>MESSAGE_CONTACT</td>
<td>{1} shared a contact {2} with you</td>
<td>1. User name<br>2. Contact name</td>
</tr>
<tr>
<td>MESSAGE_DOC</td>
<td>{1} sent you a file</td>
<td>1. User name</td>
</tr>
<tr>
<td>MESSAGE_DOCS</td>
<td>{1} sent you {2} files</td>
<td>1. User name<br>2. Number of documents that were sent</td>
</tr>
<tr>
<td>MESSAGE_FWDS</td>
<td>{1} forwarded you {2} messages</td>
<td>1. User name<br>2. Number of messages that were forwarded</td>
</tr>
<tr>
<td>MESSAGE_GAME</td>
<td>{1} invited you to play {2}</td>
<td>1. User name<br>2. Game name</td>
</tr>
<tr>
<td>MESSAGE_GAME_SCORE</td>
<td>{1} scored {3} in game {2}</td>
<td>1. User name<br>2. Game name<br>3. Score</td>
</tr>
<tr>
<td>MESSAGE_GEO</td>
<td>{1} sent you a location</td>
<td>1. Message author</td>
</tr>
<tr>
<td>MESSAGE_GEOLIVE</td>
<td>{1} sent you a live location</td>
<td>1. User name</td>
</tr>
<tr>
<td>MESSAGE_GIF</td>
<td>{1} sent you a GIF</td>
<td>1. User name</td>
</tr>
<tr>
<td>MESSAGE_GIFTCODE</td>
<td>{1} sent you a Gift Code for {2} of Telegram Premium</td>
<td>1. User name<br>2. Duration of Telegram Premium subscription</td>
</tr>
<tr>
<td>MESSAGE_GIVEAWAY</td>
<td>{1} sent you a giveaway of {2}x {3}m Premium subscriptions</td>
<td>1. User name<br>2. Number of Telegram Premium subscriptions in the giveaway<br>3. Duration in months of each Telegram Premium subscription in the giveaway</td>
</tr>
<tr>
<td>MESSAGE_INVOICE</td>
<td>{1} sent you an invoice for {2}</td>
<td>1. User name<br>2. Product</td>
</tr>
<tr>
<td>MESSAGE_NOTEXT</td>
<td>{1} sent you a message</td>
<td>1. Message author</td>
</tr>
<tr>
<td>MESSAGE_PAID_MEDIA</td>
<td>{1} sent you a paid post for {2} star</td>
<td>1. Message author<br>2. <a href="/api/stars">Stars</a></td>
</tr>
<tr>
<td>MESSAGE_PHOTO</td>
<td>{1} sent you a photo</td>
<td>1. Message author</td>
</tr>
<tr>
<td>MESSAGE_PHOTOS</td>
<td>{1} sent you {2} photos</td>
<td>1. User name<br>2. Number of photos that were sent</td>
</tr>
<tr>
<td>MESSAGE_PHOTO_SECRET</td>
<td>{1} sent you a self-destructing photo</td>
<td>1. User name</td>
</tr>
<tr>
<td>MESSAGE_PLAYLIST</td>
<td>{1} sent you {2} music files</td>
<td>1. User name<br>2. Number of audio files that were sent</td>
</tr>
<tr>
<td>MESSAGE_POLL</td>
<td>{1} sent you a poll {2}</td>
<td>1. User name<br>2. Poll name</td>
</tr>
<tr>
<td>MESSAGE_QUIZ</td>
<td>{1} sent you a quiz {2}</td>
<td>1. User name<br>2. Quiz name</td>
</tr>
<tr>
<td>MESSAGE_RECURRING_PAY</td>
<td>You were charged {2} by {1}</td>
<td>1. The entity to which money was sent for a recurring subscription<br>2. The amount of money charged for a recurring subscription</td>
</tr>
<tr>
<td>MESSAGE_ROUND</td>
<td>{1} sent you a video message</td>
<td>1. User name</td>
</tr>
<tr>
<td>MESSAGE_SAME_WALLPAPER</td>
<td>{1} set a same wallpaper for this chat</td>
<td>1. User name</td>
</tr>
<tr>
<td>MESSAGE_SCREENSHOT</td>
<td>{1} took a screenshot</td>
<td>1. User name</td>
</tr>
<tr>
<td>MESSAGE_STICKER</td>
<td>{1} sent you a {2} sticker</td>
<td>1. User name<br>2. Sticker emoji</td>
</tr>
<tr>
<td>MESSAGE_STORY</td>
<td>{1} shared a story with you</td>
<td>1. User name</td>
</tr>
<tr>
<td>MESSAGE_STORY_MENTION</td>
<td>{1} mentioned you in a story</td>
<td>1. User name</td>
</tr>
<tr>
<td>MESSAGE_TEXT</td>
<td>{1}: {2}</td>
<td>1. Message author<br>2. Message body</td>
</tr>
<tr>
<td>MESSAGE_VIDEO</td>
<td>{1} sent you a video</td>
<td>1. Message author</td>
</tr>
<tr>
<td>MESSAGE_VIDEOS</td>
<td>{1} sent you {2} videos</td>
<td>1. User name<br>2. Number of videos that were sent</td>
</tr>
<tr>
<td>MESSAGE_VIDEO_SECRET</td>
<td>{1} sent you a self-destructing video</td>
<td>1. User name</td>
</tr>
<tr>
<td>MESSAGE_WALLPAPER</td>
<td>{1} set a new wallpaper for this chat</td>
<td>1. User name</td>
</tr>
<tr>
<td>PHONE_CALL_MISSED</td>
<td>You missed a call from {1}</td>
<td>1. User name</td>
</tr>
<tr>
<td>PHONE_CALL_REQUEST</td>
<td>{1} is calling you!</td>
<td>1. User name</td>
</tr>
<tr>
<td>PINNED_AUDIO</td>
<td>{1} pinned a voice message</td>
<td>1. User name</td>
</tr>
<tr>
<td>PINNED_AUDIO</td>
<td>{1} pinned a voice message in the group {2}</td>
<td>1. User name<br>2. Group name</td>
</tr>
<tr>
<td>PINNED_CONTACT</td>
<td>{1} pinned a contact {2}</td>
<td>1. User name<br>2. Contact name</td>
</tr>
<tr>
<td>PINNED_CONTACT</td>
<td>{1} pinned a contact {3} in the group {2}</td>
<td>1. User name<br>2. Group name<br>3. Contact name</td>
</tr>
<tr>
<td>PINNED_DOC</td>
<td>{1} pinned a file</td>
<td>1. User name</td>
</tr>
<tr>
<td>PINNED_DOC</td>
<td>{1} pinned a file in the group {2}</td>
<td>1. User name<br>2. Group name</td>
</tr>
<tr>
<td>PINNED_GAME</td>
<td>{1} pinned a game</td>
<td>1. User name</td>
</tr>
<tr>
<td>PINNED_GAME</td>
<td>{1} pinned a game in the group {2}</td>
<td>1. User name<br>2. Group name</td>
</tr>
<tr>
<td>PINNED_GAME_SCORE</td>
<td>{1} pinned a game score</td>
<td>1. User name</td>
</tr>
<tr>
<td>PINNED_GAME_SCORE</td>
<td>{1} pinned a game score in the group {2}</td>
<td>1. User name<br>2. Group name</td>
</tr>
<tr>
<td>PINNED_GEO</td>
<td>{1} pinned a map</td>
<td>1. User name</td>
</tr>
<tr>
<td>PINNED_GEO</td>
<td>{1} pinned a map in the group {2}</td>
<td>1. User name<br>2. Group name</td>
</tr>
<tr>
<td>PINNED_GEOLIVE</td>
<td>{1} pinned a live location</td>
<td>1. User name</td>
</tr>
<tr>
<td>PINNED_GEOLIVE</td>
<td>{1} pinned a live location in the group {2}</td>
<td>1. User name<br>2. Group name</td>
</tr>
<tr>
<td>PINNED_GIF</td>
<td>{1} pinned a GIF</td>
<td>1. User name</td>
</tr>
<tr>
<td>PINNED_GIF</td>
<td>{1} pinned a GIF in the group {2}</td>
<td>1. User name<br>2. Group name</td>
</tr>
<tr>
<td>PINNED_GIVEAWAY</td>
<td>{1} pinned a giveaway</td>
<td>1. User name</td>
</tr>
<tr>
<td>PINNED_GIVEAWAY</td>
<td>{1} pinned a giveaway in the group {2}</td>
<td>1. User name<br>2. Group name</td>
</tr>
<tr>
<td>PINNED_INVOICE</td>
<td>{1} pinned an invoice</td>
<td>1. User name</td>
</tr>
<tr>
<td>PINNED_INVOICE</td>
<td>{1} pinned an invoice in the group {2}</td>
<td>1. User name<br>2. Group name</td>
</tr>
<tr>
<td>PINNED_NOTEXT</td>
<td>{1} pinned a message</td>
<td>1. User name</td>
</tr>
<tr>
<td>PINNED_NOTEXT</td>
<td>{1} pinned a message in the group {2}</td>
<td>1. User name<br>2. Group name</td>
</tr>
<tr>
<td>PINNED_PAID_MEDIA</td>
<td>{1} pinned a paid post for {2} star</td>
<td>1. User name<br>2. <a href="/api/stars">Stars</a></td>
</tr>
<tr>
<td>PINNED_PAID_MEDIA</td>
<td>{1} pinned a paid post for {3} star in the group {2}</td>
<td>1. User name<br>2. Group name<br>3. <a href="/api/stars">Stars</a></td>
</tr>
<tr>
<td>PINNED_PHOTO</td>
<td>{1} pinned a photo</td>
<td>1. User name</td>
</tr>
<tr>
<td>PINNED_PHOTO</td>
<td>{1} pinned a photo in the group {2}</td>
<td>1. User name<br>2. Group name</td>
</tr>
<tr>
<td>PINNED_POLL</td>
<td>{1} pinned a poll {2}</td>
<td>1. User name<br>2. Poll name</td>
</tr>
<tr>
<td>PINNED_POLL</td>
<td>{1} pinned a poll {3} in the group {2}</td>
<td>1. User name<br>2. Group name<br>3. Poll name</td>
</tr>
<tr>
<td>PINNED_QUIZ</td>
<td>{1} pinned a quiz {2}</td>
<td>1. User name<br>2. Quiz name</td>
</tr>
<tr>
<td>PINNED_QUIZ</td>
<td>{1} pinned a quiz {3} in the group {2}</td>
<td>1. User name<br>2. Group name<br>3. Quiz name</td>
</tr>
<tr>
<td>PINNED_ROUND</td>
<td>{1} pinned a video message</td>
<td>1. User name</td>
</tr>
<tr>
<td>PINNED_ROUND</td>
<td>{1} pinned a video message in the group {2}</td>
<td>1. User name<br>2. Group name</td>
</tr>
<tr>
<td>PINNED_STICKER</td>
<td>{1} pinned a {2} sticker</td>
<td>1. User name<br>2. Sticker emoji</td>
</tr>
<tr>
<td>PINNED_STICKER</td>
<td>{1} pinned a {3} sticker in the group {2}</td>
<td>1. User name<br>2. Group name<br>3. Sticker emoji</td>
</tr>
<tr>
<td>PINNED_TEXT</td>
<td>{1} pinned "{2}"</td>
<td>1. User name<br>2. Message body</td>
</tr>
<tr>
<td>PINNED_TEXT</td>
<td>{1} pinned "{3}" in the group {2}</td>
<td>1. User name<br>2. Group name<br>3. Message body</td>
</tr>
<tr>
<td>PINNED_VIDEO</td>
<td>{1} pinned a video</td>
<td>1. User name</td>
</tr>
<tr>
<td>PINNED_VIDEO</td>
<td>{1} pinned a video in the group {2}</td>
<td>1. User name<br>2. Group name</td>
</tr>
<tr>
<td>REACT_AUDIO</td>
<td>{1}: {2} to your voice message</td>
<td>1. User name<br>2. Reaction</td>
</tr>
<tr>
<td>REACT_CONTACT</td>
<td>{1}: {2} to your contact {3}</td>
<td>1. User name<br>2. Reaction<br>3. Contact name</td>
</tr>
<tr>
<td>REACT_DOC</td>
<td>{1}: {2} to your file</td>
<td>1. User name<br>2. Reaction</td>
</tr>
<tr>
<td>REACT_GAME</td>
<td>{1}: {2} to your game</td>
<td>1. User name<br>2. Reaction</td>
</tr>
<tr>
<td>REACT_GEO</td>
<td>{1}: {2} to your map</td>
<td>1. User name<br>2. Reaction</td>
</tr>
<tr>
<td>REACT_GEOLIVE</td>
<td>{1}: {2} to your live location</td>
<td>1. User name<br>2. Reaction</td>
</tr>
<tr>
<td>REACT_GIF</td>
<td>{1}: {2} to your GIF</td>
<td>1. User name<br>2. Reaction</td>
</tr>
<tr>
<td>REACT_GIVEAWAY</td>
<td>{1} reacted {2} to your giveaway</td>
<td>1. User name<br>2. Reaction</td>
</tr>
<tr>
<td>REACT_HIDDEN</td>
<td>New reaction to your message</td>
<td> </td>
</tr>
<tr>
<td>REACT_INVOICE</td>
<td>{1}: {2} to your invoice</td>
<td>1. User name<br>2. Reaction</td>
</tr>
<tr>
<td>REACT_NOTEXT</td>
<td>{1}: {2} to your message</td>
<td>1. User name<br>2. Reaction</td>
</tr>
<tr>
<td>REACT_PHOTO</td>
<td>{1}: {2} to your photo</td>
<td>1. User name<br>2. Reaction</td>
</tr>
<tr>
<td>REACT_POLL</td>
<td>{1}: {2} to your poll {3}</td>
<td>1. User name<br>2. Reaction<br>3. Poll name</td>
</tr>
<tr>
<td>REACT_QUIZ</td>
<td>{1}: {2} to your quiz {3}</td>
<td>1. User name<br>2. Reaction<br>3. Quiz name</td>
</tr>
<tr>
<td>REACT_ROUND</td>
<td>{1}: {2} to your video message</td>
<td>1. User name<br>2. Reaction</td>
</tr>
<tr>
<td>REACT_STICKER</td>
<td>{1}: {2} to your {3} sticker</td>
<td>1. User name<br>2. Reaction<br>3. Sticker emoji</td>
</tr>
<tr>
<td>REACT_STORY</td>
<td>{1}: {2} to your story</td>
<td>1. Peer where the story was posted<br>2. Reaction</td>
</tr>
<tr>
<td>REACT_STORY_HIDDEN</td>
<td>New reaction to your story</td>
<td> </td>
</tr>
<tr>
<td>REACT_TEXT</td>
<td>{1}: {2} to your "{3}"</td>
<td>1. User name<br>2. Reaction<br>3. Message body</td>
</tr>
<tr>
<td>REACT_VIDEO</td>
<td>{1}: {2} to your video</td>
<td>1. User name<br>2. Reaction</td>
</tr>
<tr>
<td>STORY_HIDDEN_AUTHOR</td>
<td>A new story was posted</td>
<td> </td>
</tr>
<tr>
<td>STORY_NOTEXT</td>
<td>{1} posted a story</td>
<td>1. Peer name</td>
</tr>
</tbody>
</table></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>