<metaproperty="description"content="Users can turn their Telegram account into a business account, gaining access to business features such as opening hours, location, quick replies, automated messages, custom start pages, chatbot support, and more.">
<metaproperty="og:title"content="Business">
<metaproperty="og:image"content="">
<metaproperty="og:description"content="Users can turn their Telegram account into a business account, gaining access to business features such as opening hours, location, quick replies, automated messages, custom start pages, chatbot support, and more.">
<p>Users can turn their Telegram account into a <strong>business account</strong>, gaining access to business features such as opening hours, location, quick replies, automated messages, custom start pages, chatbot support, and more.</p>
<p>For the moment, all Telegram Business features are available for free to <ahref="/api/premium">Premium</a> subscribers. </p>
<p>Businesses can display their hours of operation; this info will be contained in <ahref="/constructor/userFull">userFull</a>.<code>business_work_hours</code>.<br>
To set this information use <ahref="/method/account.updateBusinessWorkHours">account.updateBusinessWorkHours</a>, passing a <ahref="/constructor/businessWorkHours">businessWorkHours</a> constructor with:</p>
<ul>
<li>
<p><code>weekly_open</code> - A list of time intervals (max 28) represented by <ahref="/constructor/businessWeeklyOpen">businessWeeklyOpen</a>, indicating the opening hours of their business.<br>
The time intervals in <ahref="/constructor/businessWeeklyOpen">businessWeeklyOpen</a>.<code>start/end_minute</code> are specified in minutes of the week.<br>
For example, <code>61</code> is <code>Monday 01:01</code>, but can also be <code>7*24*60+61</code> for <code>end_minute</code> (see below). </p>
<p>When modifying these values, the client should validate them with the following actions (executed in the specified order):</p>
<ul>
<li>
<p>Sort intervals by <code>start_minute</code> before uploading, also to facilitate client-side validation.</p>
</li>
<li>
<p>All intervals that do not satisfy the following conditions must be removed:</p>
<ul>
<li><code>end_minute - start_minute</code> must be <code>>= 1</code></li>
<li><code>start_minute</code> must range from <code>0</code> to <code>7*24*60</code> inclusively</li>
<li><code>end_minute</code> must range from <code>1</code> to <code>8*24*60</code> inclusively (<code>8</code> and not <code>7</code> because this allows to specify intervals that, for example, start on <code>Sunday 21:00</code> and end on <code>Monday 04:00</code> (<code>6*24*60+21*60</code> to <code>7*24*60+4*60</code>) without violating the first condition)</li>
</ul>
</li>
<li>
<p>Intersecting intervals and intervals that start and end on the same minute of the day must be merged into a single interval before uploading, for example:</p>
<ul>
<li><code>Monday 00:00-Monday 00:01</code> and <code>Monday 00:01-Monday 00:10</code> =><code>Monday 00:00-Monday 00:10</code></li>
<li><code>Monday 00:00-Monday 00:05</code> and <code>Monday 00:01-Monday 00:10</code> =><code>Monday 00:00-Monday 00:10</code></li>
<li><code>Monday 00:00-Monday 01:00</code> and <code>Monday 00:01-Monday 00:10</code> =><code>Monday 00:00-Monday 01:00</code></li>
<li><code>Sunday 16:00-Monday 01:00</code> and <code>Monday 01:00-Monday 03:00</code> =><code>Sunday 16:00-Monday 03:00</code></li>
</ul>
<p>Note that in the last example, the first interval ended on <code>7*60*24+60</code> but the second interval started on <code>60</code>, and they were still merged (i.e., all intervals must be checked modulo <code>7*24*60</code>). </p>
<p>There is a special case where two such intersecting/adjacent intervals must still generate two distinct intervals instead of one, when:</p>
<ul>
<li>The starting minute of the original first interval is <code><= 7*24*60</code></li>
<li>AND the ending minute of the original second interval is <code>>= 1*24*60</code>. </li>
</ul>
<p>This special case cannot be merged into a single interval, as the resulting <code>end_minute</code> would be <code>>= 8*24*60</code>.<br>
Thus, the merge result of this special intersection case is two intervals, the first ending on <code>7*24*60</code> the second starting at <code>0</code>, splitting the first interval even if it originally spanned two or more days including Sunday and Monday. </p>
<p>Examples:</p>
<ul>
<li><code>Sunday 16:00-Monday 01:00</code> and <code>Monday 00:30-Thursday 03:00</code> =><code>Sunday 16:00-Sunday 23:59</code> and <code>Monday 00:00-Thursday 03:00</code></li>
<li><code>Sunday 16:00-Monday 01:00</code> and <code>Monday 01:00-Thursday 03:00</code> =><code>Sunday 16:00-Sunday 23:59</code> and <code>Monday 00:00-Thursday 03:00</code></li>
</ul>
</li>
<li>
<p>If <code>end_minute - start_minute</code> is <code>> 7*24*60</code>, <code>end_minute</code> must be set equal to <code>start_minute + 7*24*60</code> (there must be no intervals longer than 1 week). </p>
</li>
<li>
<p>Recursively repeat the last two steps until no more changes are made. </p>
</li>
</ul>
</li>
</ul>
<ul>
<li><code>timezone_id</code> - An ID of one of the timezones returned by <ahref="/method/help.getTimezonesList">help.getTimezonesList</a>.<br>
The timezone ID is contained <ahref="/constructor/timezone">timezone</a>.<code>id</code>, a human-readable, localized name of the timezone is available in <ahref="/constructor/timezone">timezone</a>.<code>name</code> and the <ahref="/constructor/timezone">timezone</a>.<code>utc_offset</code> field contains the UTC offset in seconds, which may be displayed in hh:mm format by the client together with the human-readable name (i.e. <code>$name UTC -01:00</code>).</li>
<li><code>open_now</code> - Ignored when passed by the client, only populated by the server in <ahref="/constructor/userFull">userFull</a>.<code>business_work_hours</code>, indicating whether the business is currently open according to the current time and the values in <code>weekly_open</code> and <code>timezone</code>. </li>
</ul>
<p>Changing the opening hours will emit an <ahref="/constructor/updateUser">updateUser</a>. </p>
<p>To remove all info about opening hours, invoke <ahref="/method/account.updateBusinessWorkHours">account.updateBusinessWorkHours</a> without populating the <code>business_work_hours</code> flag. </p>
<p>Businesses may advertise their location using <ahref="/method/account.updateBusinessLocation">account.updateBusinessLocation</a>; this information is then returned to users in <ahref="/constructor/userFull">userFull</a>.<code>business_location</code>. </p>
<p>The method takes two parameters:</p>
<ul>
<li><code>address</code> - Mandatory when setting/updating the location, contains a textual description of the address (max 96 UTF-8 chars).</li>
<li><code>geo_point</code> - Optional, contains a set of geographical coordinates.</li>
</ul>
<p>To remove business location information invoke the method without setting any of the parameters. </p>
<p>If a <code>geo_point</code> is set, the business' location will also be advertised to geographically close users using the nearby users feature, <ahref="/api/nearby/#fetching-nearby-users-and-geogroups">as described here»</a>. </p>
<p>Note that even if just the <code>address</code> is set (with or without a <code>geo_point</code>), the current geolocation of the user may not be changed using <ahref="/method/contacts.getLocated">contacts.getLocated</a> method (i.e. for the <ahref="/api/nearby#advertising-our-current-location">nearby users feature</a>): it will return a <code>BUSINESS_ADDRESS_ACTIVE</code> error, indicating that the location may only be changed (or removed) using <ahref="/method/account.updateBusinessLocation">account.updateBusinessLocation»</a>. </p>
<p>Changing the location will emit an <ahref="/constructor/updateUser">updateUser</a>. </p>
<p>Telegram Business allows you to create <strong>quick replies</strong>.<br>
Quick replies are shortcuts for sending preset messages that may contain several messages and support text formatting, links, stickers, media, and files. </p>
<p>A quick reply shortcut has a name (shown to the user), a numeric ID and a set of associated <ahref="/constructor/message">message</a>s. </p>
<p>To fetch basic info about all existing quick reply shortcuts, use <ahref="/method/messages.getQuickReplies">messages.getQuickReplies</a>. </p>
<p>The method will return the ID and name of each shortcut, along with the number of messages in the shortcut and the ID of (only) the last message of each shortcut (along with the message itself in <code>messages</code>). </p>
<p>Note that the <code>hash</code> is used for caching, and is generated <strong>not</strong> by using the message IDs, but rather the following set of integers, passed to the <ahref="/api/offsets#hash-generation">usual hashing algorithm</a>. </p>
<p>The method will return <ahref="/constructor/messages.quickRepliesNotModified">messages.quickRepliesNotModified</a> if the passed hash is equal to the server-side hash, meaning that the order, names and last messages of the quick replies haven't changed. </p>
<p>Editing some intermediate message in a quick reply will not change the hash, which is why <ahref="/method/messages.getQuickReplyMessages">messages.getQuickReplyMessages</a> should be used to fetch (a subset or all) messages in a quick reply shortcut, and its hash is generated as follows:</p>
<pre><code>hash_ints = [];
foreach (messages as message) {
hash_ints[] = message.id;
hash_ints[] = message.edit_date || 0;
}</code></pre>
<h4><aclass="anchor"href="#adding-a-message-to-a-quick-reply-shortcut"id="adding-a-message-to-a-quick-reply-shortcut"name="adding-a-message-to-a-quick-reply-shortcut"><iclass="anchor-icon"></i></a>Adding a message to a quick reply shortcut</h4>
<p>To add a message to a quick reply shortcut, use <ahref="/method/messages.sendMessage">messages.sendMessage</a>, <ahref="/method/messages.sendMedia">messages.sendMedia</a>, <ahref="/method/messages.sendMultiMedia">messages.sendMultiMedia</a>, <ahref="/method/messages.sendInlineBotResult">messages.sendInlineBotResult</a> or <ahref="/method/messages.forwardMessages">messages.forwardMessages</a> with <code>peer=</code><ahref="/constructor/inputPeerSelf">inputPeerSelf</a>, populating the <code>quick_reply_shortcut</code> flag with an <ahref="/type/InputQuickReplyShortcut">InputQuickReplyShortcut</a> constructor. </p>
<p>The <ahref="/type/InputQuickReplyShortcut">InputQuickReplyShortcut</a> constructor can be either:</p>
<ul>
<li><ahref="/constructor/inputQuickReplyShortcut">inputQuickReplyShortcut</a> to use the shortcut name (used to create a new shortcut)</li>
<li><ahref="/constructor/inputQuickReplyShortcut">inputQuickReplyShortcut</a> to use the shortcut ID (used to edit an existing shortcut)</li>
</ul>
<p>If the specified quick reply does not exist, it will be created when invoking the above methods, emitting an additional <ahref="/constructor/updateNewQuickReply">updateNewQuickReply</a> to all logged-in sessions. </p>
<p>The numeric ID of the (newly created or existing) shortcut will be contained in the <code>quick_reply_shortcut_id</code> field of the <ahref="/constructor/message">message</a>s contained in the <ahref="/constructor/updateQuickReplyMessage">updateQuickReplyMessage</a> updates returned by invoking the above methods.<br>
The returned messages will use a common message <code>id</code> sequence, unrelated to any other message ID sequence used in API. </p>
<p>A maximum of <ahref="/api/config#quick-replies-limit">appConfig.<code>quick_replies_limit</code></a> shortcuts may be created, otherwise a <code>400 QUICK_REPLIES_TOO_MUCH</code> error will be emitted by the methods above.</p>
<p>Each shortcut can contain a maximum of <ahref="/api/config#quick-reply-messages-limit">appConfig.<code>quick_reply_messages_limit</code></a> messages, otherwise a <code>400 REPLY_MESSAGES_TOO_MUCH</code> error will be emitted by the methods above.</p>
<p>Make sure to invoke <ahref="/method/messages.checkQuickReplyShortcut">messages.checkQuickReplyShortcut</a> passing the shortcut name before offering the user the choice to add a message to a quick reply shortcut, to make sure that none of the limits specified above were reached. </p>
<h4><aclass="anchor"href="#sending-a-quick-reply-shortcut"id="sending-a-quick-reply-shortcut"name="sending-a-quick-reply-shortcut"><iclass="anchor-icon"></i></a>Sending a quick reply shortcut</h4>
<p>To send a quick reply shortcut to a user, use <ahref="/method/messages.sendQuickReplyMessages">messages.sendQuickReplyMessages</a>, passing the shortcut ID. </p>
<p>Quick replies may only be sent by users, in private chats with other users.
The UI used to select quick replies should be similar to the one used for <ahref="/api/bots/commands">bot commands</a>, using the shortcut name instead of the bot command name. </p>
<p>You may specify a subset of the messages in the <code>id</code> field to send only some of the shortcut messages (if empty, defaults to all of them). </p>
<h4><aclass="anchor"href="#editing-a-quick-reply-shortcut-message"id="editing-a-quick-reply-shortcut-message"name="editing-a-quick-reply-shortcut-message"><iclass="anchor-icon"></i></a>Editing a quick reply shortcut message</h4>
<p>Use <ahref="/method/messages.editMessage">messages.editMessage</a> to edit a message in a quick reply shortcut, passing the message ID in <code>id</code> and the shortcut ID in <code>quick_reply_shortcut_id</code>.</p>
<p>This will emit a <ahref="/constructor/updateQuickReplyMessage">updateQuickReplyMessage</a> update.</p>
<h4><aclass="anchor"href="#deleting-a-quick-reply-shortcut-message"id="deleting-a-quick-reply-shortcut-message"name="deleting-a-quick-reply-shortcut-message"><iclass="anchor-icon"></i></a>Deleting a quick reply shortcut message</h4>
<p>To delete one or more messages from a quick reply shortcut, use <ahref="/method/messages.deleteQuickReplyMessages">messages.deleteQuickReplyMessages</a>, passing the shortcut ID, and the list of message IDs to delete.<br>
This will also emit an <ahref="/constructor/updateDeleteQuickReplyMessages">updateDeleteQuickReplyMessages</a> update. </p>
<h4><aclass="anchor"href="#renaming-a-quick-reply-shortcut"id="renaming-a-quick-reply-shortcut"name="renaming-a-quick-reply-shortcut"><iclass="anchor-icon"></i></a>Renaming a quick reply shortcut</h4>
<p>Use <ahref="/method/messages.reorderQuickReplies">messages.reorderQuickReplies</a> to reorder quick reply shortcuts (not the messages within them); pass in <code>order</code> the IDs of all created quick reply shortcuts, in the desired order.<br>
This will emit an <ahref="/constructor/updateQuickReplies">updateQuickReplies</a> update to other logged-in sessions. </p>
<h4><aclass="anchor"href="#deleting-a-quick-reply-shortcut"id="deleting-a-quick-reply-shortcut"name="deleting-a-quick-reply-shortcut"><iclass="anchor-icon"></i></a>Deleting a quick reply shortcut</h4>
<p>To completely delete a quick reply shortcut, use <ahref="/method/messages.deleteQuickReplyShortcut">messages.deleteQuickReplyShortcut</a>.<br>
This will also emit an <ahref="/constructor/updateDeleteQuickReply">updateDeleteQuickReply</a> update to other logged-in sessions (and <em>no</em><ahref="/constructor/updateDeleteQuickReplyMessages">updateDeleteQuickReplyMessages</a> updates, even if all the messages in the shortcut are also deleted by this method). </p>
<p>Telegram Business allows to configure a set of greeting messages, automatically sent to new users writing to us in private for the first time, or after a certain inactivity period. </p>
<p>Use <ahref="/method/account.updateBusinessGreetingMessage">account.updateBusinessGreetingMessage</a> to set a (list of) greeting messages in <code>message</code>; to disable greetings, call the method without populating the <code>message</code> field. </p>
<p>If populated, the <code>message</code> field must contain a <ahref="/constructor/inputBusinessGreetingMessage">inputBusinessGreetingMessage</a>, see <ahref="/constructor/inputBusinessGreetingMessage">the constructor page»</a> for a description of its contents and the length limits for the intro title and description. </p>
<p>The currently configured business greeting can be fetched by the current user through <ahref="/constructor/userFull">userFull</a>.<code>business_greeting_message</code>, represented by a <ahref="/constructor/businessGreetingMessage">businessGreetingMessage constructor»</a>, equivalent to the input counterpart. </p>
<p>Telegram Business allows to configure a set of "away" messages, automatically sent to users writing to us when we're offline, during closing hours, while we're on vacation, or in some other custom time period when we cannot immediately answer to the user. </p>
<p>Use <ahref="/method/account.updateBusinessAwayMessage">account.updateBusinessAwayMessage</a> to set a (list of) away messages in <code>message</code>; to disable greetings, call the method without populating the <code>message</code> field. </p>
<p>If populated, the <code>message</code> field must contain a <ahref="/constructor/inputBusinessAwayMessage">inputBusinessAwayMessage</a>, see <ahref="/constructor/inputBusinessAwayMessage">the constructor page»</a> for a description of its contents. </p>
<p>The currently configured business away message can be fetched by the current user through <ahref="/constructor/userFull">userFull</a>.<code>business_away_message</code>, represented by a <ahref="/constructor/businessAwayMessage">businessAwayMessage constructor»</a>, equivalent to the input counterpart. </p>
<p>Telegram Business allows to configure the message and sticker of the <ahref="/api/profile#introduction">profile introduction»</a>, shown to new users that don't have a private chat with us. </p>
<p>Use <ahref="/method/account.updateBusinessIntro">account.updateBusinessIntro</a> to set a custom business introduction; invoke the same method without setting the <code>intro</code> flag to remove the custom business introduction, defaulting to a randomly-chosen introduction message and sticker (see <ahref="/api/profile">here»</a> for more info on default profile introductions). </p>
<p>Changing the business introduction will emit an <ahref="/constructor/updateUser">updateUser</a>, and the business introduction will be contained in <ahref="/constructor/userFull">userFull</a>.<code>intro</code>. </p>
<p>Note that the greeting sticker selection UI should offer a list of categories to quickly filter results by a (list of) emojis, or by some other criteria, see <ahref="/api/emoji-categories">here»</a> for more info. </p>
<p><ahref="/api/links#business-chat-links">Business chat deep links</a> allow business owners to share pre-made links to their Telegram business account, optionally filling out the message input field with a pre-prepared message (with support for <ahref="/api/entities">styled text entities»</a>). </p>
<p>There is no additional limit (apart from the usual <ahref="/constructor/config">message_length_max</a>) on the prepared message length (because the message text is <em>not</em> present in the URL's query string, rather it's fetched from the server using the link slug); each created business chat deep link also has a view counter. </p>
<p>Use <ahref="/method/account.createBusinessChatLink">account.createBusinessChatLink</a> to create a business chat link, specifying in <ahref="/constructor/inputBusinessChatLink">inputBusinessChatLink</a> the message to pre-fill when users open the link, as well as a human-readable name for the link in <code>title</code>, useful when managing created links.<br>
The created <ahref="/api/links#business-chat-links">deep link</a> is returned in the <code>link</code> field, and may be shared directly or as a QR code. </p>
<p>Use <ahref="/method/account.getBusinessChatLinks">account.getBusinessChatLinks</a> to fetch info about all created business chat links (including the view counter, indicating the number of times a business chat link was resolved (clicked on, scanned) by a user). </p>
<p>Use <ahref="/method/account.editBusinessChatLink">account.editBusinessChatLink</a> to edit the information of a business chat link. </p>
<p>Use <ahref="/method/account.deleteBusinessChatLink">account.deleteBusinessChatLink</a> to delete a business chat link. </p>
<p>Use <ahref="/method/account.resolveBusinessChatLink">account.resolveBusinessChatLink</a> to open a business chat link, obtaining the peer to contact and (if set) the message to pre-fill, also increasing the link's view counter. </p>
<p>The last three methods listed above take a business chat link slug, which should be extracted from a business chat link as specified <ahref="/api/links#business-chat-links">here»</a>. </p>
<p>All listed methods except <ahref="/method/account.resolveBusinessChatLink">account.resolveBusinessChatLink</a> require a Telegram Business subscription (currently included in <ahref="/api/premium">Telegram Premium</a> subscriptions).</p>
<p>An account may create a maximum of <ahref="/api/config#business-chat-links-limit">business_chat_links_limit</a> business chat links: attempts to exceed this limit will emit a <code>CHATLINKS_TOO_MUCH</code> RPC error, prompting the user to delete older links. </p>
<p>Business users can connect Telegram bots that will process and answer messages <strong>on their behalf</strong>. This allows businesses to <strong>seamlessly integrate</strong> any existing tools and workflows, or add <strong>AI assistants</strong> that manage their chats. </p>
<p>Currently just one business bot may be connected to a user account.<br>
Bots which may be connected to user accounts have the <ahref="/constructor/user">user</a>.<code>bot_business</code> flag set; trying to connect a non-business bot will emit a <code>BOT_BUSINESS_MISSING</code> error. </p>
<p>Use <ahref="/method/account.updateConnectedBot">account.updateConnectedBot»</a> to connect a business bot to the current account, or to change the connection settings.<br>
Use <ahref="/method/account.updateConnectedBot">account.updateConnectedBot»</a> with the <code>deleted</code> flag set to disconnect a business bot from the current account.<br>
Use <ahref="/method/account.getConnectedBots">account.getConnectedBots»</a> list all currently connected business bots. </p>
<p>Use <ahref="/method/account.toggleConnectedBotPaused">account.toggleConnectedBotPaused»</a> to pause or unpause a specific chat, temporarily disconnecting it from all business bots (equivalent to temporarily specifying it in <code>recipients.exclude_users</code> during initial configuration with <ahref="/method/account.updateConnectedBot">account.updateConnectedBot»</a>).<br>
Use <ahref="/method/account.toggleConnectedBotPaused">account.disablePeerConnectedBot»</a> to permanently disconnect a specific chat from all business bots (equivalent to specifying it in <code>recipients.exclude_users</code> during initial configuration with <ahref="/method/account.updateConnectedBot">account.updateConnectedBot»</a>); to reconnect of a chat disconnected using this method the user must reconnect the entire bot by invoking <ahref="/method/account.updateConnectedBot">account.updateConnectedBot»</a>. </p>
<p>Note that invoking the above two methods will also add the peer to the <code>recipients.exclude_users</code> field of the related <ahref="/constructor/connectedBot">connectedBot</a> (or to <code>recipients.users</code>, if the inversion <code>recipients.exclude_selected</code> flag is set). </p>
<p>The above two methods should be invoked when pressing the appropriate buttons in the <ahref="/api/action-bar#manage-a-connected-business-bot">action bar, see here»</a> for more info on the business bot action bar that should be displayed on all peers currently managed by the bot, according to the <ahref="/api/action-bar#manage-a-connected-business-bot">action bar flags»</a>. </p>
<p>Connecting or disconnecting a business bot or changing the connection settings will emit an <ahref="/constructor/updateBotBusinessConnect">updateBotBusinessConnect</a> update to the bot, with the new settings and a <code>connection_id</code> that will be used by the bot to handle updates from and send messages as the user. </p>
<p>According to the specified settings, the bot will start receiving <ahref="/constructor/updateBotNewBusinessMessage">updateBotNewBusinessMessage</a>, <ahref="/constructor/updateBotEditBusinessMessage">updateBotEditBusinessMessage</a>, <ahref="/constructor/updateBotDeleteBusinessMessage">updateBotDeleteBusinessMessage</a> updates containing messages sent to the connected user via the business connection. </p>
<p>Bots may invoke <ahref="/method/account.getBotBusinessConnection">account.getBotBusinessConnection</a> to re-fetch the <ahref="/constructor/updateBotBusinessConnect">updateBotBusinessConnect</a> constructor associated with a specific <code>connection_id</code>.<br>
This is needed for example for freshly logged in bots that are receiving some <ahref="/constructor/updateBotNewBusinessMessage">updateBotNewBusinessMessage</a>, etc. updates because some users have already connected to the bot before it could login.<br>
In this case, the bot is receiving messages from the business connection, but it hasn't cached the associated <ahref="/constructor/updateBotBusinessConnect">updateBotBusinessConnect</a> with info about the connection (can it reply to messages? etc.) yet, and cannot receive the old ones because they were sent when the bot wasn't logged into the session yet.<br>
This method can be used to fetch info about a not-yet-cached business connection, and should not be invoked if the info is already cached or to fetch changes, as eventual changes will automatically be sent as new <ahref="/constructor/updateBotBusinessConnect">updateBotBusinessConnect</a> updates to the bot, using the usual <ahref="/api/updates">update delivery methods»</a>.</p>
<p>If the <code>can_reply</code> flag was set when connecting the bot, the bot will also be able to invoke the following methods on behalf of the user to interact with messages received via the business connection, by wrapping the query in a <ahref="/method/invokeWithBusinessConnection">invokeWithBusinessConnection»</a>, passing the connection ID: </p>
<p>Make sure to always send queries wrapped in an <code>invokeWithBusinessConnection</code> to the datacenter ID, specified in the <code>dc_id</code> field of the <ahref="/constructor/botBusinessConnection">botBusinessConnection</a> that is being used. </p>
<p><ahref="/method/messages.uploadMedia">messages.uploadMedia</a> may also be used in business connections, <em>not</em> by wrapping it in <ahref="/method/invokeWithBusinessConnection">invokeWithBusinessConnection»</a>, but rather by specifying the business connection ID in the <code>business_connection_id</code> parameter.</p>
<p><ahref="/constructor/message">Message</a>s sent by business bots on behalf of the user using this method will have the <code>via_business_connection</code> flag set, indicating that the message was sent by the business bot indicated in <ahref="/constructor/message">message</a>.<code>via_bot_id</code>. </p>
<p><ahref="/constructor/message">Message</a>s sent by business bots on behalf of the user may also contain <ahref="/api/bots/buttons">inline keyboards</a>, including <ahref="/api/bots/buttons#answering-a-callback-query">callback buttons</a>, which when pressed will emit an <ahref="/constructor/updateBusinessBotCallbackQuery">updateBusinessBotCallbackQuery</a> which should be handled as specified <ahref="/api/bots/buttons#answering-a-callback-query">here»</a> (<em>without</em> wrapping the query in an <code>invokeWithBusinessConnection</code>).</p>
<p>Since Telegram Business is currently included with the <ahref="/api/premium">Telegram Premium</a> subscription, and Telegram Premium subscribers do not see <ahref="/api/sponsored-messages">sponsored messages in channels</a>. </p>
<p>This may be problematic for business owners that may want to launch and view their own Telegram ads via the <ahref="https://ads.telegram.org">Telegram ad platform»</a>. </p>
<p>For this reason, the Telegram Business settings page should contain a toggle to re-enable Telegram ads for the current account, which should trigger a call to <ahref="/method/account.toggleSponsoredMessages">account.toggleSponsoredMessages</a>. </p>
<p>The current value of the toggle will be stored in <ahref="/constructor/userFull">userFull</a>.<code>sponsored_enabled</code>. </p>
<p>Telegram Business users can use <ahref="/api/folders#folder-tags">folder tags, see here»</a> for more info. </p>
<h3><aclass="anchor"href="#business-features-promo-page"id="business-features-promo-page"name="business-features-promo-page"><iclass="anchor-icon"></i></a>Business features promo page</h3>
<p>Telegram Business offers a set of additional features and raised limits: clients should be aware of the current subscription status to accordingly modify client behavior. </p>
<p>Clients should show a Telegram Business button in the settings.<br>
Clicking on this button in the settings should open a Telegram Business modal. </p>
<p><ahref="/method/help.getAppConfig">help.getAppConfig</a> to fetch info on how to build the Telegram Business modal, returning a list of Business feature identifiers in the <ahref="/api/config#business-promo-order"><code>business_promo_order</code> appConfig field</a>: the modal should contain a row for each returned feature, ordered as specified in the returned array. </p>
<p>Possible feature identifiers:</p>
<ul>
<li><code>business_location</code> - Business users can set a <ahref="#location">business location</a></li>
<li><code>business_hours</code> - Business users can set <ahref="#opening-hours">opening hours</a></li>
<li><code>quick_replies</code> - Business users can create and use <ahref="#quick-reply-shortcuts">quick reply shortcuts</a></li>
<li><code>greeting_message</code> - Business users can set a <ahref="#greeting-messages">greeting message</a></li>
<li><code>away_message</code> - Business users can set an <ahref="#away-messages">away message</a></li>
<li><code>business_links</code> - Business users can create <ahref="#business-chat-links">business chat links</a></li>
<li><code>business_intro</code> - Business users can set a custom <ahref="#business-introduction">business chat introduction</a></li>
<li><code>business_bots</code> - Business users can <ahref="#connected-bots">connect business bots to their account</a></li>
<li><code>emoji_status</code> - Business users can set a <ahref="/api/emoji-status">custom emoji status</a>. </li>
<li><code>folder_tags</code> - Business users can enable <ahref="/api/folders#folder-tags">folder tags</a>. </li>
<li><code>stories</code> - Business users can use <ahref="/api/stories">stories</a> to showcase products (i.e. no additional functionality neeeds to be implemented by clients, it's just another way to use stories).</li>
</ul></div>
</div>
</div>
</div>
<divclass="footer_wrap">
<divclass="footer_columns_wrap footer_desktop">
<divclass="footer_column footer_column_telegram">
<h5>Telegram</h5>
<divclass="footer_telegram_description"></div>
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.