telegram-crawler/data/web/core.telegram.org/api/business.html
2024-09-23 18:02:35 +00:00

504 lines
86 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>Business</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="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.">
<meta property="og:title" content="Business">
<meta property="og:image" content="">
<meta property="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.">
<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/business" >Business</a></li></ul></div>
<h1 id="dev_page_title">Business</h1>
<div id="dev_page_content"><!-- scroll_nav -->
<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 <a href="/api/premium">Premium</a> subscribers. </p>
<h3><a class="anchor" href="#opening-hours" id="opening-hours" name="opening-hours"><i class="anchor-icon"></i></a>Opening hours</h3>
<pre><code><a href='/constructor/timezone'>timezone</a>#ff9289f5 id:<a href='/type/string'>string</a> name:<a href='/type/string'>string</a> utc_offset:<a href='/type/int'>int</a> = <a href='/type/Timezone'>Timezone</a>;
<a href='/constructor/help.timezonesListNotModified'>help.timezonesListNotModified</a>#970708cc = <a href='/type/help.TimezonesList'>help.TimezonesList</a>;
<a href='/constructor/help.timezonesList'>help.timezonesList</a>#7b74ed71 timezones:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/Timezone'>Timezone</a>&gt; hash:<a href='/type/int'>int</a> = <a href='/type/help.TimezonesList'>help.TimezonesList</a>;
<a href='/constructor/businessWeeklyOpen'>businessWeeklyOpen</a>#120b1ab9 start_minute:<a href='/type/int'>int</a> end_minute:<a href='/type/int'>int</a> = <a href='/type/BusinessWeeklyOpen'>BusinessWeeklyOpen</a>;
<a href='/constructor/businessWorkHours'>businessWorkHours</a>#8c92b098 flags:<a href='/type/%23'>#</a> open_now:flags.0?<a href='/constructor/true'>true</a> timezone_id:<a href='/type/string'>string</a> weekly_open:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/BusinessWeeklyOpen'>BusinessWeeklyOpen</a>&gt; = <a href='/type/BusinessWorkHours'>BusinessWorkHours</a>;
<a href='/constructor/userFull'>userFull</a>#cc997720 flags:<a href='/type/%23'>#</a> blocked:flags.0?<a href='/constructor/true'>true</a> phone_calls_available:flags.4?<a href='/constructor/true'>true</a> phone_calls_private:flags.5?<a href='/constructor/true'>true</a> can_pin_message:flags.7?<a href='/constructor/true'>true</a> has_scheduled:flags.12?<a href='/constructor/true'>true</a> video_calls_available:flags.13?<a href='/constructor/true'>true</a> voice_messages_forbidden:flags.20?<a href='/constructor/true'>true</a> translations_disabled:flags.23?<a href='/constructor/true'>true</a> stories_pinned_available:flags.26?<a href='/constructor/true'>true</a> blocked_my_stories_from:flags.27?<a href='/constructor/true'>true</a> wallpaper_overridden:flags.28?<a href='/constructor/true'>true</a> contact_require_premium:flags.29?<a href='/constructor/true'>true</a> read_dates_private:flags.30?<a href='/constructor/true'>true</a> flags2:<a href='/type/%23'>#</a> sponsored_enabled:flags2.7?<a href='/constructor/true'>true</a> id:<a href='/type/long'>long</a> about:flags.1?<a href='/type/string'>string</a> settings:<a href='/type/PeerSettings'>PeerSettings</a> personal_photo:flags.21?<a href='/type/Photo'>Photo</a> profile_photo:flags.2?<a href='/type/Photo'>Photo</a> fallback_photo:flags.22?<a href='/type/Photo'>Photo</a> notify_settings:<a href='/type/PeerNotifySettings'>PeerNotifySettings</a> bot_info:flags.3?<a href='/type/BotInfo'>BotInfo</a> pinned_msg_id:flags.6?<a href='/type/int'>int</a> common_chats_count:<a href='/type/int'>int</a> folder_id:flags.11?<a href='/type/int'>int</a> ttl_period:flags.14?<a href='/type/int'>int</a> theme_emoticon:flags.15?<a href='/type/string'>string</a> private_forward_name:flags.16?<a href='/type/string'>string</a> bot_group_admin_rights:flags.17?<a href='/type/ChatAdminRights'>ChatAdminRights</a> bot_broadcast_admin_rights:flags.18?<a href='/type/ChatAdminRights'>ChatAdminRights</a> premium_gifts:flags.19?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/PremiumGiftOption'>PremiumGiftOption</a>&gt; wallpaper:flags.24?<a href='/type/WallPaper'>WallPaper</a> stories:flags.25?<a href='/type/PeerStories'>PeerStories</a> business_work_hours:flags2.0?<a href='/type/BusinessWorkHours'>BusinessWorkHours</a> business_location:flags2.1?<a href='/type/BusinessLocation'>BusinessLocation</a> business_greeting_message:flags2.2?<a href='/type/BusinessGreetingMessage'>BusinessGreetingMessage</a> business_away_message:flags2.3?<a href='/type/BusinessAwayMessage'>BusinessAwayMessage</a> business_intro:flags2.4?<a href='/type/BusinessIntro'>BusinessIntro</a> birthday:flags2.5?<a href='/type/Birthday'>Birthday</a> personal_channel_id:flags2.6?<a href='/type/long'>long</a> personal_channel_message:flags2.6?<a href='/type/int'>int</a> = <a href='/type/UserFull'>UserFull</a>;
---functions---
<a href='/method/account.updateBusinessWorkHours'>account.updateBusinessWorkHours</a>#4b00e066 flags:<a href='/type/%23'>#</a> business_work_hours:flags.0?<a href='/type/BusinessWorkHours'>BusinessWorkHours</a> = <a href='/type/Bool'>Bool</a>;
<a href='/method/help.getTimezonesList'>help.getTimezonesList</a>#49b30240 hash:<a href='/type/int'>int</a> = <a href='/type/help.TimezonesList'>help.TimezonesList</a>;</code></pre>
<p>Businesses can display their hours of operation; this info will be contained in <a href="/constructor/userFull">userFull</a>.<code>business_work_hours</code>.<br>
To set this information use <a href="/method/account.updateBusinessWorkHours">account.updateBusinessWorkHours</a>, passing a <a href="/constructor/businessWorkHours">businessWorkHours</a> constructor with:</p>
<ul>
<li>
<p><code>weekly_open</code> - A list of time intervals (max 28) represented by <a href="/constructor/businessWeeklyOpen">businessWeeklyOpen</a>, indicating the opening hours of their business.<br>
The time intervals in <a href="/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>&gt;= 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> =&gt; <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> =&gt; <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> =&gt; <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> =&gt; <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>&lt;= 7*24*60</code></li>
<li>AND the ending minute of the original second interval is <code>&gt;= 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>&gt;= 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> =&gt; <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> =&gt; <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>&gt; 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 <a href="/method/help.getTimezonesList">help.getTimezonesList</a>.<br>
The timezone ID is contained <a href="/constructor/timezone">timezone</a>.<code>id</code>, a human-readable, localized name of the timezone is available in <a href="/constructor/timezone">timezone</a>.<code>name</code> and the <a href="/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 <a href="/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 <a href="/constructor/updateUser">updateUser</a>. </p>
<p>To remove all info about opening hours, invoke <a href="/method/account.updateBusinessWorkHours">account.updateBusinessWorkHours</a> without populating the <code>business_work_hours</code> flag. </p>
<h3><a class="anchor" href="#location" id="location" name="location"><i class="anchor-icon"></i></a>Location</h3>
<pre><code><a href='/constructor/businessLocation'>businessLocation</a>#ac5c1af7 flags:<a href='/type/%23'>#</a> geo_point:flags.0?<a href='/type/GeoPoint'>GeoPoint</a> address:<a href='/type/string'>string</a> = <a href='/type/BusinessLocation'>BusinessLocation</a>;
<a href='/constructor/userFull'>userFull</a>#cc997720 flags:<a href='/type/%23'>#</a> blocked:flags.0?<a href='/constructor/true'>true</a> phone_calls_available:flags.4?<a href='/constructor/true'>true</a> phone_calls_private:flags.5?<a href='/constructor/true'>true</a> can_pin_message:flags.7?<a href='/constructor/true'>true</a> has_scheduled:flags.12?<a href='/constructor/true'>true</a> video_calls_available:flags.13?<a href='/constructor/true'>true</a> voice_messages_forbidden:flags.20?<a href='/constructor/true'>true</a> translations_disabled:flags.23?<a href='/constructor/true'>true</a> stories_pinned_available:flags.26?<a href='/constructor/true'>true</a> blocked_my_stories_from:flags.27?<a href='/constructor/true'>true</a> wallpaper_overridden:flags.28?<a href='/constructor/true'>true</a> contact_require_premium:flags.29?<a href='/constructor/true'>true</a> read_dates_private:flags.30?<a href='/constructor/true'>true</a> flags2:<a href='/type/%23'>#</a> sponsored_enabled:flags2.7?<a href='/constructor/true'>true</a> id:<a href='/type/long'>long</a> about:flags.1?<a href='/type/string'>string</a> settings:<a href='/type/PeerSettings'>PeerSettings</a> personal_photo:flags.21?<a href='/type/Photo'>Photo</a> profile_photo:flags.2?<a href='/type/Photo'>Photo</a> fallback_photo:flags.22?<a href='/type/Photo'>Photo</a> notify_settings:<a href='/type/PeerNotifySettings'>PeerNotifySettings</a> bot_info:flags.3?<a href='/type/BotInfo'>BotInfo</a> pinned_msg_id:flags.6?<a href='/type/int'>int</a> common_chats_count:<a href='/type/int'>int</a> folder_id:flags.11?<a href='/type/int'>int</a> ttl_period:flags.14?<a href='/type/int'>int</a> theme_emoticon:flags.15?<a href='/type/string'>string</a> private_forward_name:flags.16?<a href='/type/string'>string</a> bot_group_admin_rights:flags.17?<a href='/type/ChatAdminRights'>ChatAdminRights</a> bot_broadcast_admin_rights:flags.18?<a href='/type/ChatAdminRights'>ChatAdminRights</a> premium_gifts:flags.19?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/PremiumGiftOption'>PremiumGiftOption</a>&gt; wallpaper:flags.24?<a href='/type/WallPaper'>WallPaper</a> stories:flags.25?<a href='/type/PeerStories'>PeerStories</a> business_work_hours:flags2.0?<a href='/type/BusinessWorkHours'>BusinessWorkHours</a> business_location:flags2.1?<a href='/type/BusinessLocation'>BusinessLocation</a> business_greeting_message:flags2.2?<a href='/type/BusinessGreetingMessage'>BusinessGreetingMessage</a> business_away_message:flags2.3?<a href='/type/BusinessAwayMessage'>BusinessAwayMessage</a> business_intro:flags2.4?<a href='/type/BusinessIntro'>BusinessIntro</a> birthday:flags2.5?<a href='/type/Birthday'>Birthday</a> personal_channel_id:flags2.6?<a href='/type/long'>long</a> personal_channel_message:flags2.6?<a href='/type/int'>int</a> = <a href='/type/UserFull'>UserFull</a>;
---functions---
<a href='/method/account.updateBusinessLocation'>account.updateBusinessLocation</a>#9e6b131a flags:<a href='/type/%23'>#</a> geo_point:flags.1?<a href='/type/InputGeoPoint'>InputGeoPoint</a> address:flags.0?<a href='/type/string'>string</a> = <a href='/type/Bool'>Bool</a>;</code></pre>
<p>Businesses may advertise their location using <a href="/method/account.updateBusinessLocation">account.updateBusinessLocation</a>; this information is then returned to users in <a href="/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, <a href="/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 <a href="/method/contacts.getLocated">contacts.getLocated</a> method (i.e. for the <a href="/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 <a href="/method/account.updateBusinessLocation">account.updateBusinessLocation »</a>. </p>
<p>Changing the location will emit an <a href="/constructor/updateUser">updateUser</a>. </p>
<h3><a class="anchor" href="#quick-reply-shortcuts" id="quick-reply-shortcuts" name="quick-reply-shortcuts"><i class="anchor-icon"></i></a>Quick reply shortcuts</h3>
<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 <a href="/constructor/message">message</a>s. </p>
<h4><a class="anchor" href="#fetch-existing-quick-reply-shortcuts" id="fetch-existing-quick-reply-shortcuts" name="fetch-existing-quick-reply-shortcuts"><i class="anchor-icon"></i></a>Fetch existing quick reply shortcuts</h4>
<pre><code><a href='/constructor/message'>message</a>#94345242 flags:<a href='/type/%23'>#</a> out:flags.1?<a href='/constructor/true'>true</a> mentioned:flags.4?<a href='/constructor/true'>true</a> media_unread:flags.5?<a href='/constructor/true'>true</a> silent:flags.13?<a href='/constructor/true'>true</a> post:flags.14?<a href='/constructor/true'>true</a> from_scheduled:flags.18?<a href='/constructor/true'>true</a> legacy:flags.19?<a href='/constructor/true'>true</a> edit_hide:flags.21?<a href='/constructor/true'>true</a> pinned:flags.24?<a href='/constructor/true'>true</a> noforwards:flags.26?<a href='/constructor/true'>true</a> invert_media:flags.27?<a href='/constructor/true'>true</a> flags2:<a href='/type/%23'>#</a> offline:flags2.1?<a href='/constructor/true'>true</a> id:<a href='/type/int'>int</a> from_id:flags.8?<a href='/type/Peer'>Peer</a> from_boosts_applied:flags.29?<a href='/type/int'>int</a> peer_id:<a href='/type/Peer'>Peer</a> saved_peer_id:flags.28?<a href='/type/Peer'>Peer</a> fwd_from:flags.2?<a href='/type/MessageFwdHeader'>MessageFwdHeader</a> via_bot_id:flags.11?<a href='/type/long'>long</a> via_business_bot_id:flags2.0?<a href='/type/long'>long</a> reply_to:flags.3?<a href='/type/MessageReplyHeader'>MessageReplyHeader</a> date:<a href='/type/int'>int</a> message:<a href='/type/string'>string</a> media:flags.9?<a href='/type/MessageMedia'>MessageMedia</a> reply_markup:flags.6?<a href='/type/ReplyMarkup'>ReplyMarkup</a> entities:flags.7?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/MessageEntity'>MessageEntity</a>&gt; views:flags.10?<a href='/type/int'>int</a> forwards:flags.10?<a href='/type/int'>int</a> replies:flags.23?<a href='/type/MessageReplies'>MessageReplies</a> edit_date:flags.15?<a href='/type/int'>int</a> post_author:flags.16?<a href='/type/string'>string</a> grouped_id:flags.17?<a href='/type/long'>long</a> reactions:flags.20?<a href='/type/MessageReactions'>MessageReactions</a> restriction_reason:flags.22?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/RestrictionReason'>RestrictionReason</a>&gt; ttl_period:flags.25?<a href='/type/int'>int</a> quick_reply_shortcut_id:flags.30?<a href='/type/int'>int</a> effect:flags2.2?<a href='/type/long'>long</a> factcheck:flags2.3?<a href='/type/FactCheck'>FactCheck</a> = <a href='/type/Message'>Message</a>;
<a href='/constructor/quickReply'>quickReply</a>#697102b shortcut_id:<a href='/type/int'>int</a> shortcut:<a href='/type/string'>string</a> top_message:<a href='/type/int'>int</a> count:<a href='/type/int'>int</a> = <a href='/type/QuickReply'>QuickReply</a>;
<a href='/constructor/messages.quickReplies'>messages.quickReplies</a>#c68d6695 quick_replies:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/QuickReply'>QuickReply</a>&gt; messages:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/Message'>Message</a>&gt; chats:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/Chat'>Chat</a>&gt; users:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/User'>User</a>&gt; = <a href='/type/messages.QuickReplies'>messages.QuickReplies</a>;
<a href='/constructor/messages.quickRepliesNotModified'>messages.quickRepliesNotModified</a>#5f91eb5b = <a href='/type/messages.QuickReplies'>messages.QuickReplies</a>;
---functions---
<a href='/method/messages.getQuickReplies'>messages.getQuickReplies</a>#d483f2a8 hash:<a href='/type/long'>long</a> = <a href='/type/messages.QuickReplies'>messages.QuickReplies</a>;
<a href='/method/messages.getQuickReplyMessages'>messages.getQuickReplyMessages</a>#94a495c3 flags:<a href='/type/%23'>#</a> shortcut_id:<a href='/type/int'>int</a> id:flags.0?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/int'>int</a>&gt; hash:<a href='/type/long'>long</a> = <a href='/type/messages.Messages'>messages.Messages</a>;</code></pre>
<p>To fetch basic info about all existing quick reply shortcuts, use <a href="/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 <a href="/api/offsets#hash-generation">usual hashing algorithm</a>. </p>
<pre><code>hash_ints = [];
foreach (quick_replies as quick_reply) {
hash_ints[] = quick_reply.shortcut_id;
hash_ints[] = hexdec(substr(md5(quick_reply.shortcut), 0, 16));
hash_ints[] = quick_reply.top_message;
hash_ints[] = top_message.edit_date || 0;
}</code></pre>
<p>The method will return <a href="/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 <a href="/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><a class="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"><i class="anchor-icon"></i></a>Adding a message to a quick reply shortcut</h4>
<pre><code><a href='/constructor/inputQuickReplyShortcut'>inputQuickReplyShortcut</a>#24596d41 shortcut:<a href='/type/string'>string</a> = <a href='/type/InputQuickReplyShortcut'>InputQuickReplyShortcut</a>;
<a href='/constructor/inputQuickReplyShortcutId'>inputQuickReplyShortcutId</a>#1190cf1 shortcut_id:<a href='/type/int'>int</a> = <a href='/type/InputQuickReplyShortcut'>InputQuickReplyShortcut</a>;
<a href='/constructor/message'>message</a>#94345242 flags:<a href='/type/%23'>#</a> out:flags.1?<a href='/constructor/true'>true</a> mentioned:flags.4?<a href='/constructor/true'>true</a> media_unread:flags.5?<a href='/constructor/true'>true</a> silent:flags.13?<a href='/constructor/true'>true</a> post:flags.14?<a href='/constructor/true'>true</a> from_scheduled:flags.18?<a href='/constructor/true'>true</a> legacy:flags.19?<a href='/constructor/true'>true</a> edit_hide:flags.21?<a href='/constructor/true'>true</a> pinned:flags.24?<a href='/constructor/true'>true</a> noforwards:flags.26?<a href='/constructor/true'>true</a> invert_media:flags.27?<a href='/constructor/true'>true</a> flags2:<a href='/type/%23'>#</a> offline:flags2.1?<a href='/constructor/true'>true</a> id:<a href='/type/int'>int</a> from_id:flags.8?<a href='/type/Peer'>Peer</a> from_boosts_applied:flags.29?<a href='/type/int'>int</a> peer_id:<a href='/type/Peer'>Peer</a> saved_peer_id:flags.28?<a href='/type/Peer'>Peer</a> fwd_from:flags.2?<a href='/type/MessageFwdHeader'>MessageFwdHeader</a> via_bot_id:flags.11?<a href='/type/long'>long</a> via_business_bot_id:flags2.0?<a href='/type/long'>long</a> reply_to:flags.3?<a href='/type/MessageReplyHeader'>MessageReplyHeader</a> date:<a href='/type/int'>int</a> message:<a href='/type/string'>string</a> media:flags.9?<a href='/type/MessageMedia'>MessageMedia</a> reply_markup:flags.6?<a href='/type/ReplyMarkup'>ReplyMarkup</a> entities:flags.7?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/MessageEntity'>MessageEntity</a>&gt; views:flags.10?<a href='/type/int'>int</a> forwards:flags.10?<a href='/type/int'>int</a> replies:flags.23?<a href='/type/MessageReplies'>MessageReplies</a> edit_date:flags.15?<a href='/type/int'>int</a> post_author:flags.16?<a href='/type/string'>string</a> grouped_id:flags.17?<a href='/type/long'>long</a> reactions:flags.20?<a href='/type/MessageReactions'>MessageReactions</a> restriction_reason:flags.22?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/RestrictionReason'>RestrictionReason</a>&gt; ttl_period:flags.25?<a href='/type/int'>int</a> quick_reply_shortcut_id:flags.30?<a href='/type/int'>int</a> effect:flags2.2?<a href='/type/long'>long</a> factcheck:flags2.3?<a href='/type/FactCheck'>FactCheck</a> = <a href='/type/Message'>Message</a>;
<a href='/constructor/quickReply'>quickReply</a>#697102b shortcut_id:<a href='/type/int'>int</a> shortcut:<a href='/type/string'>string</a> top_message:<a href='/type/int'>int</a> count:<a href='/type/int'>int</a> = <a href='/type/QuickReply'>QuickReply</a>;
<a href='/constructor/updateNewQuickReply'>updateNewQuickReply</a>#f53da717 quick_reply:<a href='/type/QuickReply'>QuickReply</a> = <a href='/type/Update'>Update</a>;
<a href='/constructor/updateQuickReplyMessage'>updateQuickReplyMessage</a>#3e050d0f message:<a href='/type/Message'>Message</a> = <a href='/type/Update'>Update</a>;
---functions---
<a href='/method/messages.sendMessage'>messages.sendMessage</a>#983f9745 flags:<a href='/type/%23'>#</a> no_webpage:flags.1?<a href='/constructor/true'>true</a> silent:flags.5?<a href='/constructor/true'>true</a> background:flags.6?<a href='/constructor/true'>true</a> clear_draft:flags.7?<a href='/constructor/true'>true</a> noforwards:flags.14?<a href='/constructor/true'>true</a> update_stickersets_order:flags.15?<a href='/constructor/true'>true</a> invert_media:flags.16?<a href='/constructor/true'>true</a> peer:<a href='/type/InputPeer'>InputPeer</a> reply_to:flags.0?<a href='/type/InputReplyTo'>InputReplyTo</a> message:<a href='/type/string'>string</a> random_id:<a href='/type/long'>long</a> reply_markup:flags.2?<a href='/type/ReplyMarkup'>ReplyMarkup</a> entities:flags.3?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/MessageEntity'>MessageEntity</a>&gt; schedule_date:flags.10?<a href='/type/int'>int</a> send_as:flags.13?<a href='/type/InputPeer'>InputPeer</a> quick_reply_shortcut:flags.17?<a href='/type/InputQuickReplyShortcut'>InputQuickReplyShortcut</a> effect:flags.18?<a href='/type/long'>long</a> = <a href='/type/Updates'>Updates</a>;
<a href='/method/messages.sendMedia'>messages.sendMedia</a>#7852834e flags:<a href='/type/%23'>#</a> silent:flags.5?<a href='/constructor/true'>true</a> background:flags.6?<a href='/constructor/true'>true</a> clear_draft:flags.7?<a href='/constructor/true'>true</a> noforwards:flags.14?<a href='/constructor/true'>true</a> update_stickersets_order:flags.15?<a href='/constructor/true'>true</a> invert_media:flags.16?<a href='/constructor/true'>true</a> peer:<a href='/type/InputPeer'>InputPeer</a> reply_to:flags.0?<a href='/type/InputReplyTo'>InputReplyTo</a> media:<a href='/type/InputMedia'>InputMedia</a> message:<a href='/type/string'>string</a> random_id:<a href='/type/long'>long</a> reply_markup:flags.2?<a href='/type/ReplyMarkup'>ReplyMarkup</a> entities:flags.3?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/MessageEntity'>MessageEntity</a>&gt; schedule_date:flags.10?<a href='/type/int'>int</a> send_as:flags.13?<a href='/type/InputPeer'>InputPeer</a> quick_reply_shortcut:flags.17?<a href='/type/InputQuickReplyShortcut'>InputQuickReplyShortcut</a> effect:flags.18?<a href='/type/long'>long</a> = <a href='/type/Updates'>Updates</a>;
<a href='/method/messages.sendMultiMedia'>messages.sendMultiMedia</a>#37b74355 flags:<a href='/type/%23'>#</a> silent:flags.5?<a href='/constructor/true'>true</a> background:flags.6?<a href='/constructor/true'>true</a> clear_draft:flags.7?<a href='/constructor/true'>true</a> noforwards:flags.14?<a href='/constructor/true'>true</a> update_stickersets_order:flags.15?<a href='/constructor/true'>true</a> invert_media:flags.16?<a href='/constructor/true'>true</a> peer:<a href='/type/InputPeer'>InputPeer</a> reply_to:flags.0?<a href='/type/InputReplyTo'>InputReplyTo</a> multi_media:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/InputSingleMedia'>InputSingleMedia</a>&gt; schedule_date:flags.10?<a href='/type/int'>int</a> send_as:flags.13?<a href='/type/InputPeer'>InputPeer</a> quick_reply_shortcut:flags.17?<a href='/type/InputQuickReplyShortcut'>InputQuickReplyShortcut</a> effect:flags.18?<a href='/type/long'>long</a> = <a href='/type/Updates'>Updates</a>;
<a href='/method/messages.sendInlineBotResult'>messages.sendInlineBotResult</a>#3ebee86a flags:<a href='/type/%23'>#</a> silent:flags.5?<a href='/constructor/true'>true</a> background:flags.6?<a href='/constructor/true'>true</a> clear_draft:flags.7?<a href='/constructor/true'>true</a> hide_via:flags.11?<a href='/constructor/true'>true</a> peer:<a href='/type/InputPeer'>InputPeer</a> reply_to:flags.0?<a href='/type/InputReplyTo'>InputReplyTo</a> random_id:<a href='/type/long'>long</a> query_id:<a href='/type/long'>long</a> id:<a href='/type/string'>string</a> schedule_date:flags.10?<a href='/type/int'>int</a> send_as:flags.13?<a href='/type/InputPeer'>InputPeer</a> quick_reply_shortcut:flags.17?<a href='/type/InputQuickReplyShortcut'>InputQuickReplyShortcut</a> = <a href='/type/Updates'>Updates</a>;
<a href='/method/messages.forwardMessages'>messages.forwardMessages</a>#d5039208 flags:<a href='/type/%23'>#</a> silent:flags.5?<a href='/constructor/true'>true</a> background:flags.6?<a href='/constructor/true'>true</a> with_my_score:flags.8?<a href='/constructor/true'>true</a> drop_author:flags.11?<a href='/constructor/true'>true</a> drop_media_captions:flags.12?<a href='/constructor/true'>true</a> noforwards:flags.14?<a href='/constructor/true'>true</a> from_peer:<a href='/type/InputPeer'>InputPeer</a> id:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/int'>int</a>&gt; random_id:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/long'>long</a>&gt; to_peer:<a href='/type/InputPeer'>InputPeer</a> top_msg_id:flags.9?<a href='/type/int'>int</a> schedule_date:flags.10?<a href='/type/int'>int</a> send_as:flags.13?<a href='/type/InputPeer'>InputPeer</a> quick_reply_shortcut:flags.17?<a href='/type/InputQuickReplyShortcut'>InputQuickReplyShortcut</a> = <a href='/type/Updates'>Updates</a>;
<a href='/method/messages.checkQuickReplyShortcut'>messages.checkQuickReplyShortcut</a>#f1d0fbd3 shortcut:<a href='/type/string'>string</a> = <a href='/type/Bool'>Bool</a>;</code></pre>
<p>To add a message to a quick reply shortcut, use <a href="/method/messages.sendMessage">messages.sendMessage</a>, <a href="/method/messages.sendMedia">messages.sendMedia</a>, <a href="/method/messages.sendMultiMedia">messages.sendMultiMedia</a>, <a href="/method/messages.sendInlineBotResult">messages.sendInlineBotResult</a> or <a href="/method/messages.forwardMessages">messages.forwardMessages</a> with <code>peer=</code><a href="/constructor/inputPeerSelf">inputPeerSelf</a>, populating the <code>quick_reply_shortcut</code> flag with an <a href="/type/InputQuickReplyShortcut">InputQuickReplyShortcut</a> constructor. </p>
<p>The <a href="/type/InputQuickReplyShortcut">InputQuickReplyShortcut</a> constructor can be either:</p>
<ul>
<li><a href="/constructor/inputQuickReplyShortcut">inputQuickReplyShortcut</a> to use the shortcut name (used to create a new shortcut)</li>
<li><a href="/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 <a href="/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 <a href="/constructor/message">message</a>s contained in the <a href="/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 <a href="/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 <a href="/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 <a href="/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><a class="anchor" href="#sending-a-quick-reply-shortcut" id="sending-a-quick-reply-shortcut" name="sending-a-quick-reply-shortcut"><i class="anchor-icon"></i></a>Sending a quick reply shortcut</h4>
<pre><code>---functions---
<a href='/method/messages.sendQuickReplyMessages'>messages.sendQuickReplyMessages</a>#6c750de1 peer:<a href='/type/InputPeer'>InputPeer</a> shortcut_id:<a href='/type/int'>int</a> id:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/int'>int</a>&gt; random_id:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/long'>long</a>&gt; = <a href='/type/Updates'>Updates</a>;</code></pre>
<p>To send a quick reply shortcut to a user, use <a href="/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 <a href="/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><a class="anchor" href="#editing-a-quick-reply-shortcut-message" id="editing-a-quick-reply-shortcut-message" name="editing-a-quick-reply-shortcut-message"><i class="anchor-icon"></i></a>Editing a quick reply shortcut message</h4>
<pre><code><a href='/constructor/updateQuickReplyMessage'>updateQuickReplyMessage</a>#3e050d0f message:<a href='/type/Message'>Message</a> = <a href='/type/Update'>Update</a>;
---functions---
<a href='/method/messages.editMessage'>messages.editMessage</a>#dfd14005 flags:<a href='/type/%23'>#</a> no_webpage:flags.1?<a href='/constructor/true'>true</a> invert_media:flags.16?<a href='/constructor/true'>true</a> peer:<a href='/type/InputPeer'>InputPeer</a> id:<a href='/type/int'>int</a> message:flags.11?<a href='/type/string'>string</a> media:flags.14?<a href='/type/InputMedia'>InputMedia</a> reply_markup:flags.2?<a href='/type/ReplyMarkup'>ReplyMarkup</a> entities:flags.3?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/MessageEntity'>MessageEntity</a>&gt; schedule_date:flags.15?<a href='/type/int'>int</a> quick_reply_shortcut_id:flags.17?<a href='/type/int'>int</a> = <a href='/type/Updates'>Updates</a>;</code></pre>
<p>Use <a href="/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 <a href="/constructor/updateQuickReplyMessage">updateQuickReplyMessage</a> update.</p>
<h4><a class="anchor" href="#deleting-a-quick-reply-shortcut-message" id="deleting-a-quick-reply-shortcut-message" name="deleting-a-quick-reply-shortcut-message"><i class="anchor-icon"></i></a>Deleting a quick reply shortcut message</h4>
<pre><code><a href='/constructor/updateDeleteQuickReplyMessages'>updateDeleteQuickReplyMessages</a>#566fe7cd shortcut_id:<a href='/type/int'>int</a> messages:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/int'>int</a>&gt; = <a href='/type/Update'>Update</a>;
---functions---
<a href='/method/messages.deleteQuickReplyMessages'>messages.deleteQuickReplyMessages</a>#e105e910 shortcut_id:<a href='/type/int'>int</a> id:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/int'>int</a>&gt; = <a href='/type/Updates'>Updates</a>;</code></pre>
<p>To delete one or more messages from a quick reply shortcut, use <a href="/method/messages.deleteQuickReplyMessages">messages.deleteQuickReplyMessages</a>, passing the shortcut ID, and the list of message IDs to delete.<br>
This will also emit an <a href="/constructor/updateDeleteQuickReplyMessages">updateDeleteQuickReplyMessages</a> update. </p>
<h4><a class="anchor" href="#renaming-a-quick-reply-shortcut" id="renaming-a-quick-reply-shortcut" name="renaming-a-quick-reply-shortcut"><i class="anchor-icon"></i></a>Renaming a quick reply shortcut</h4>
<pre><code><a href='/constructor/updateQuickReplies'>updateQuickReplies</a>#f9470ab2 quick_replies:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/QuickReply'>QuickReply</a>&gt; = <a href='/type/Update'>Update</a>;
---functions---
<a href='/method/messages.editQuickReplyShortcut'>messages.editQuickReplyShortcut</a>#5c003cef shortcut_id:<a href='/type/int'>int</a> shortcut:<a href='/type/string'>string</a> = <a href='/type/Bool'>Bool</a>;</code></pre>
<p>Use <a href="/method/messages.editQuickReplyShortcut">messages.editQuickReplyShortcut</a> to rename a shortcut.<br>
This will emit an <a href="/constructor/updateQuickReplies">updateQuickReplies</a> update to other logged-in sessions. </p>
<h4><a class="anchor" href="#reordering-quick-reply-shortcuts" id="reordering-quick-reply-shortcuts" name="reordering-quick-reply-shortcuts"><i class="anchor-icon"></i></a>Reordering quick reply shortcuts</h4>
<pre><code><a href='/constructor/updateQuickReplies'>updateQuickReplies</a>#f9470ab2 quick_replies:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/QuickReply'>QuickReply</a>&gt; = <a href='/type/Update'>Update</a>;
---functions---
<a href='/method/messages.reorderQuickReplies'>messages.reorderQuickReplies</a>#60331907 order:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/int'>int</a>&gt; = <a href='/type/Bool'>Bool</a>;</code></pre>
<p>Use <a href="/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 <a href="/constructor/updateQuickReplies">updateQuickReplies</a> update to other logged-in sessions. </p>
<h4><a class="anchor" href="#deleting-a-quick-reply-shortcut" id="deleting-a-quick-reply-shortcut" name="deleting-a-quick-reply-shortcut"><i class="anchor-icon"></i></a>Deleting a quick reply shortcut</h4>
<pre><code><a href='/constructor/updateDeleteQuickReply'>updateDeleteQuickReply</a>#53e6f1ec shortcut_id:<a href='/type/int'>int</a> = <a href='/type/Update'>Update</a>;
---functions---
<a href='/method/messages.deleteQuickReplyShortcut'>messages.deleteQuickReplyShortcut</a>#3cc04740 shortcut_id:<a href='/type/int'>int</a> = <a href='/type/Bool'>Bool</a>;</code></pre>
<p>To completely delete a quick reply shortcut, use <a href="/method/messages.deleteQuickReplyShortcut">messages.deleteQuickReplyShortcut</a>.<br>
This will also emit an <a href="/constructor/updateDeleteQuickReply">updateDeleteQuickReply</a> update to other logged-in sessions (and <em>no</em> <a href="/constructor/updateDeleteQuickReplyMessages">updateDeleteQuickReplyMessages</a> updates, even if all the messages in the shortcut are also deleted by this method). </p>
<h3><a class="anchor" href="#greeting-messages" id="greeting-messages" name="greeting-messages"><i class="anchor-icon"></i></a>Greeting messages</h3>
<pre><code><a href='/constructor/inputBusinessRecipients'>inputBusinessRecipients</a>#6f8b32aa flags:<a href='/type/%23'>#</a> existing_chats:flags.0?<a href='/constructor/true'>true</a> new_chats:flags.1?<a href='/constructor/true'>true</a> contacts:flags.2?<a href='/constructor/true'>true</a> non_contacts:flags.3?<a href='/constructor/true'>true</a> exclude_selected:flags.5?<a href='/constructor/true'>true</a> users:flags.4?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/InputUser'>InputUser</a>&gt; = <a href='/type/InputBusinessRecipients'>InputBusinessRecipients</a>;
<a href='/constructor/inputBusinessGreetingMessage'>inputBusinessGreetingMessage</a>#194cb3b shortcut_id:<a href='/type/int'>int</a> recipients:<a href='/type/InputBusinessRecipients'>InputBusinessRecipients</a> no_activity_days:<a href='/type/int'>int</a> = <a href='/type/InputBusinessGreetingMessage'>InputBusinessGreetingMessage</a>;
<a href='/constructor/businessRecipients'>businessRecipients</a>#21108ff7 flags:<a href='/type/%23'>#</a> existing_chats:flags.0?<a href='/constructor/true'>true</a> new_chats:flags.1?<a href='/constructor/true'>true</a> contacts:flags.2?<a href='/constructor/true'>true</a> non_contacts:flags.3?<a href='/constructor/true'>true</a> exclude_selected:flags.5?<a href='/constructor/true'>true</a> users:flags.4?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/long'>long</a>&gt; = <a href='/type/BusinessRecipients'>BusinessRecipients</a>;
<a href='/constructor/businessGreetingMessage'>businessGreetingMessage</a>#e519abab shortcut_id:<a href='/type/int'>int</a> recipients:<a href='/type/BusinessRecipients'>BusinessRecipients</a> no_activity_days:<a href='/type/int'>int</a> = <a href='/type/BusinessGreetingMessage'>BusinessGreetingMessage</a>;
<a href='/constructor/userFull'>userFull</a>#cc997720 flags:<a href='/type/%23'>#</a> blocked:flags.0?<a href='/constructor/true'>true</a> phone_calls_available:flags.4?<a href='/constructor/true'>true</a> phone_calls_private:flags.5?<a href='/constructor/true'>true</a> can_pin_message:flags.7?<a href='/constructor/true'>true</a> has_scheduled:flags.12?<a href='/constructor/true'>true</a> video_calls_available:flags.13?<a href='/constructor/true'>true</a> voice_messages_forbidden:flags.20?<a href='/constructor/true'>true</a> translations_disabled:flags.23?<a href='/constructor/true'>true</a> stories_pinned_available:flags.26?<a href='/constructor/true'>true</a> blocked_my_stories_from:flags.27?<a href='/constructor/true'>true</a> wallpaper_overridden:flags.28?<a href='/constructor/true'>true</a> contact_require_premium:flags.29?<a href='/constructor/true'>true</a> read_dates_private:flags.30?<a href='/constructor/true'>true</a> flags2:<a href='/type/%23'>#</a> sponsored_enabled:flags2.7?<a href='/constructor/true'>true</a> id:<a href='/type/long'>long</a> about:flags.1?<a href='/type/string'>string</a> settings:<a href='/type/PeerSettings'>PeerSettings</a> personal_photo:flags.21?<a href='/type/Photo'>Photo</a> profile_photo:flags.2?<a href='/type/Photo'>Photo</a> fallback_photo:flags.22?<a href='/type/Photo'>Photo</a> notify_settings:<a href='/type/PeerNotifySettings'>PeerNotifySettings</a> bot_info:flags.3?<a href='/type/BotInfo'>BotInfo</a> pinned_msg_id:flags.6?<a href='/type/int'>int</a> common_chats_count:<a href='/type/int'>int</a> folder_id:flags.11?<a href='/type/int'>int</a> ttl_period:flags.14?<a href='/type/int'>int</a> theme_emoticon:flags.15?<a href='/type/string'>string</a> private_forward_name:flags.16?<a href='/type/string'>string</a> bot_group_admin_rights:flags.17?<a href='/type/ChatAdminRights'>ChatAdminRights</a> bot_broadcast_admin_rights:flags.18?<a href='/type/ChatAdminRights'>ChatAdminRights</a> premium_gifts:flags.19?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/PremiumGiftOption'>PremiumGiftOption</a>&gt; wallpaper:flags.24?<a href='/type/WallPaper'>WallPaper</a> stories:flags.25?<a href='/type/PeerStories'>PeerStories</a> business_work_hours:flags2.0?<a href='/type/BusinessWorkHours'>BusinessWorkHours</a> business_location:flags2.1?<a href='/type/BusinessLocation'>BusinessLocation</a> business_greeting_message:flags2.2?<a href='/type/BusinessGreetingMessage'>BusinessGreetingMessage</a> business_away_message:flags2.3?<a href='/type/BusinessAwayMessage'>BusinessAwayMessage</a> business_intro:flags2.4?<a href='/type/BusinessIntro'>BusinessIntro</a> birthday:flags2.5?<a href='/type/Birthday'>Birthday</a> personal_channel_id:flags2.6?<a href='/type/long'>long</a> personal_channel_message:flags2.6?<a href='/type/int'>int</a> = <a href='/type/UserFull'>UserFull</a>;
---functions---
<a href='/method/account.updateBusinessGreetingMessage'>account.updateBusinessGreetingMessage</a>#66cdafc4 flags:<a href='/type/%23'>#</a> message:flags.0?<a href='/type/InputBusinessGreetingMessage'>InputBusinessGreetingMessage</a> = <a href='/type/Bool'>Bool</a>;</code></pre>
<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 <a href="/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 <a href="/constructor/inputBusinessGreetingMessage">inputBusinessGreetingMessage</a>, see <a href="/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 <a href="/constructor/userFull">userFull</a>.<code>business_greeting_message</code>, represented by a <a href="/constructor/businessGreetingMessage">businessGreetingMessage constructor »</a>, equivalent to the input counterpart. </p>
<h3><a class="anchor" href="#away-messages" id="away-messages" name="away-messages"><i class="anchor-icon"></i></a>Away messages</h3>
<pre><code><a href='/constructor/inputBusinessRecipients'>inputBusinessRecipients</a>#6f8b32aa flags:<a href='/type/%23'>#</a> existing_chats:flags.0?<a href='/constructor/true'>true</a> new_chats:flags.1?<a href='/constructor/true'>true</a> contacts:flags.2?<a href='/constructor/true'>true</a> non_contacts:flags.3?<a href='/constructor/true'>true</a> exclude_selected:flags.5?<a href='/constructor/true'>true</a> users:flags.4?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/InputUser'>InputUser</a>&gt; = <a href='/type/InputBusinessRecipients'>InputBusinessRecipients</a>;
<a href='/constructor/businessAwayMessageScheduleAlways'>businessAwayMessageScheduleAlways</a>#c9b9e2b9 = <a href='/type/BusinessAwayMessageSchedule'>BusinessAwayMessageSchedule</a>;
<a href='/constructor/businessAwayMessageScheduleOutsideWorkHours'>businessAwayMessageScheduleOutsideWorkHours</a>#c3f2f501 = <a href='/type/BusinessAwayMessageSchedule'>BusinessAwayMessageSchedule</a>;
<a href='/constructor/businessAwayMessageScheduleCustom'>businessAwayMessageScheduleCustom</a>#cc4d9ecc start_date:<a href='/type/int'>int</a> end_date:<a href='/type/int'>int</a> = <a href='/type/BusinessAwayMessageSchedule'>BusinessAwayMessageSchedule</a>;
<a href='/constructor/inputBusinessAwayMessage'>inputBusinessAwayMessage</a>#832175e0 flags:<a href='/type/%23'>#</a> offline_only:flags.0?<a href='/constructor/true'>true</a> shortcut_id:<a href='/type/int'>int</a> schedule:<a href='/type/BusinessAwayMessageSchedule'>BusinessAwayMessageSchedule</a> recipients:<a href='/type/InputBusinessRecipients'>InputBusinessRecipients</a> = <a href='/type/InputBusinessAwayMessage'>InputBusinessAwayMessage</a>;
<a href='/constructor/businessRecipients'>businessRecipients</a>#21108ff7 flags:<a href='/type/%23'>#</a> existing_chats:flags.0?<a href='/constructor/true'>true</a> new_chats:flags.1?<a href='/constructor/true'>true</a> contacts:flags.2?<a href='/constructor/true'>true</a> non_contacts:flags.3?<a href='/constructor/true'>true</a> exclude_selected:flags.5?<a href='/constructor/true'>true</a> users:flags.4?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/long'>long</a>&gt; = <a href='/type/BusinessRecipients'>BusinessRecipients</a>;
<a href='/constructor/businessAwayMessage'>businessAwayMessage</a>#ef156a5c flags:<a href='/type/%23'>#</a> offline_only:flags.0?<a href='/constructor/true'>true</a> shortcut_id:<a href='/type/int'>int</a> schedule:<a href='/type/BusinessAwayMessageSchedule'>BusinessAwayMessageSchedule</a> recipients:<a href='/type/BusinessRecipients'>BusinessRecipients</a> = <a href='/type/BusinessAwayMessage'>BusinessAwayMessage</a>;
<a href='/constructor/userFull'>userFull</a>#cc997720 flags:<a href='/type/%23'>#</a> blocked:flags.0?<a href='/constructor/true'>true</a> phone_calls_available:flags.4?<a href='/constructor/true'>true</a> phone_calls_private:flags.5?<a href='/constructor/true'>true</a> can_pin_message:flags.7?<a href='/constructor/true'>true</a> has_scheduled:flags.12?<a href='/constructor/true'>true</a> video_calls_available:flags.13?<a href='/constructor/true'>true</a> voice_messages_forbidden:flags.20?<a href='/constructor/true'>true</a> translations_disabled:flags.23?<a href='/constructor/true'>true</a> stories_pinned_available:flags.26?<a href='/constructor/true'>true</a> blocked_my_stories_from:flags.27?<a href='/constructor/true'>true</a> wallpaper_overridden:flags.28?<a href='/constructor/true'>true</a> contact_require_premium:flags.29?<a href='/constructor/true'>true</a> read_dates_private:flags.30?<a href='/constructor/true'>true</a> flags2:<a href='/type/%23'>#</a> sponsored_enabled:flags2.7?<a href='/constructor/true'>true</a> id:<a href='/type/long'>long</a> about:flags.1?<a href='/type/string'>string</a> settings:<a href='/type/PeerSettings'>PeerSettings</a> personal_photo:flags.21?<a href='/type/Photo'>Photo</a> profile_photo:flags.2?<a href='/type/Photo'>Photo</a> fallback_photo:flags.22?<a href='/type/Photo'>Photo</a> notify_settings:<a href='/type/PeerNotifySettings'>PeerNotifySettings</a> bot_info:flags.3?<a href='/type/BotInfo'>BotInfo</a> pinned_msg_id:flags.6?<a href='/type/int'>int</a> common_chats_count:<a href='/type/int'>int</a> folder_id:flags.11?<a href='/type/int'>int</a> ttl_period:flags.14?<a href='/type/int'>int</a> theme_emoticon:flags.15?<a href='/type/string'>string</a> private_forward_name:flags.16?<a href='/type/string'>string</a> bot_group_admin_rights:flags.17?<a href='/type/ChatAdminRights'>ChatAdminRights</a> bot_broadcast_admin_rights:flags.18?<a href='/type/ChatAdminRights'>ChatAdminRights</a> premium_gifts:flags.19?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/PremiumGiftOption'>PremiumGiftOption</a>&gt; wallpaper:flags.24?<a href='/type/WallPaper'>WallPaper</a> stories:flags.25?<a href='/type/PeerStories'>PeerStories</a> business_work_hours:flags2.0?<a href='/type/BusinessWorkHours'>BusinessWorkHours</a> business_location:flags2.1?<a href='/type/BusinessLocation'>BusinessLocation</a> business_greeting_message:flags2.2?<a href='/type/BusinessGreetingMessage'>BusinessGreetingMessage</a> business_away_message:flags2.3?<a href='/type/BusinessAwayMessage'>BusinessAwayMessage</a> business_intro:flags2.4?<a href='/type/BusinessIntro'>BusinessIntro</a> birthday:flags2.5?<a href='/type/Birthday'>Birthday</a> personal_channel_id:flags2.6?<a href='/type/long'>long</a> personal_channel_message:flags2.6?<a href='/type/int'>int</a> = <a href='/type/UserFull'>UserFull</a>;
---functions---
<a href='/method/account.updateBusinessAwayMessage'>account.updateBusinessAwayMessage</a>#a26a7fa5 flags:<a href='/type/%23'>#</a> message:flags.0?<a href='/type/InputBusinessAwayMessage'>InputBusinessAwayMessage</a> = <a href='/type/Bool'>Bool</a>;</code></pre>
<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 <a href="/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 <a href="/constructor/inputBusinessAwayMessage">inputBusinessAwayMessage</a>, see <a href="/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 <a href="/constructor/userFull">userFull</a>.<code>business_away_message</code>, represented by a <a href="/constructor/businessAwayMessage">businessAwayMessage constructor »</a>, equivalent to the input counterpart. </p>
<h3><a class="anchor" href="#business-introduction" id="business-introduction" name="business-introduction"><i class="anchor-icon"></i></a>Business introduction</h3>
<pre><code><a href='/constructor/inputBusinessIntro'>inputBusinessIntro</a>#09c469cd flags:<a href='/type/%23'>#</a> title:<a href='/type/string'>string</a> description:<a href='/type/string'>string</a> sticker:flags.0?<a href='/type/InputDocument'>InputDocument</a> = <a href='/type/InputBusinessIntro'>InputBusinessIntro</a>;
<a href='/constructor/businessIntro'>businessIntro</a>#5a0a066d flags:<a href='/type/%23'>#</a> title:<a href='/type/string'>string</a> description:<a href='/type/string'>string</a> sticker:flags.0?<a href='/type/Document'>Document</a> = <a href='/type/BusinessIntro'>BusinessIntro</a>;
<a href='/constructor/userFull'>userFull</a>#cc997720 flags:<a href='/type/%23'>#</a> blocked:flags.0?<a href='/constructor/true'>true</a> phone_calls_available:flags.4?<a href='/constructor/true'>true</a> phone_calls_private:flags.5?<a href='/constructor/true'>true</a> can_pin_message:flags.7?<a href='/constructor/true'>true</a> has_scheduled:flags.12?<a href='/constructor/true'>true</a> video_calls_available:flags.13?<a href='/constructor/true'>true</a> voice_messages_forbidden:flags.20?<a href='/constructor/true'>true</a> translations_disabled:flags.23?<a href='/constructor/true'>true</a> stories_pinned_available:flags.26?<a href='/constructor/true'>true</a> blocked_my_stories_from:flags.27?<a href='/constructor/true'>true</a> wallpaper_overridden:flags.28?<a href='/constructor/true'>true</a> contact_require_premium:flags.29?<a href='/constructor/true'>true</a> read_dates_private:flags.30?<a href='/constructor/true'>true</a> flags2:<a href='/type/%23'>#</a> sponsored_enabled:flags2.7?<a href='/constructor/true'>true</a> id:<a href='/type/long'>long</a> about:flags.1?<a href='/type/string'>string</a> settings:<a href='/type/PeerSettings'>PeerSettings</a> personal_photo:flags.21?<a href='/type/Photo'>Photo</a> profile_photo:flags.2?<a href='/type/Photo'>Photo</a> fallback_photo:flags.22?<a href='/type/Photo'>Photo</a> notify_settings:<a href='/type/PeerNotifySettings'>PeerNotifySettings</a> bot_info:flags.3?<a href='/type/BotInfo'>BotInfo</a> pinned_msg_id:flags.6?<a href='/type/int'>int</a> common_chats_count:<a href='/type/int'>int</a> folder_id:flags.11?<a href='/type/int'>int</a> ttl_period:flags.14?<a href='/type/int'>int</a> theme_emoticon:flags.15?<a href='/type/string'>string</a> private_forward_name:flags.16?<a href='/type/string'>string</a> bot_group_admin_rights:flags.17?<a href='/type/ChatAdminRights'>ChatAdminRights</a> bot_broadcast_admin_rights:flags.18?<a href='/type/ChatAdminRights'>ChatAdminRights</a> premium_gifts:flags.19?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/PremiumGiftOption'>PremiumGiftOption</a>&gt; wallpaper:flags.24?<a href='/type/WallPaper'>WallPaper</a> stories:flags.25?<a href='/type/PeerStories'>PeerStories</a> business_work_hours:flags2.0?<a href='/type/BusinessWorkHours'>BusinessWorkHours</a> business_location:flags2.1?<a href='/type/BusinessLocation'>BusinessLocation</a> business_greeting_message:flags2.2?<a href='/type/BusinessGreetingMessage'>BusinessGreetingMessage</a> business_away_message:flags2.3?<a href='/type/BusinessAwayMessage'>BusinessAwayMessage</a> business_intro:flags2.4?<a href='/type/BusinessIntro'>BusinessIntro</a> birthday:flags2.5?<a href='/type/Birthday'>Birthday</a> personal_channel_id:flags2.6?<a href='/type/long'>long</a> personal_channel_message:flags2.6?<a href='/type/int'>int</a> = <a href='/type/UserFull'>UserFull</a>;
---functions---
<a href='/method/account.updateBusinessIntro'>account.updateBusinessIntro</a>#a614d034 flags:<a href='/type/%23'>#</a> intro:flags.0?<a href='/type/InputBusinessIntro'>InputBusinessIntro</a> = <a href='/type/Bool'>Bool</a>;</code></pre>
<p>Telegram Business allows to configure the message and sticker of the <a href="/api/profile#introduction">profile introduction »</a>, shown to new users that don't have a private chat with us. </p>
<p>Use <a href="/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 <a href="/api/profile">here »</a> for more info on default profile introductions). </p>
<p>Changing the business introduction will emit an <a href="/constructor/updateUser">updateUser</a>, and the business introduction will be contained in <a href="/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 <a href="/api/emoji-categories">here »</a> for more info. </p>
<h3><a class="anchor" href="#business-chat-links" id="business-chat-links" name="business-chat-links"><i class="anchor-icon"></i></a>Business chat links</h3>
<pre><code><a href='/constructor/inputBusinessChatLink'>inputBusinessChatLink</a>#11679fa7 flags:<a href='/type/%23'>#</a> message:<a href='/type/string'>string</a> entities:flags.0?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/MessageEntity'>MessageEntity</a>&gt; title:flags.1?<a href='/type/string'>string</a> = <a href='/type/InputBusinessChatLink'>InputBusinessChatLink</a>;
<a href='/constructor/businessChatLink'>businessChatLink</a>#b4ae666f flags:<a href='/type/%23'>#</a> link:<a href='/type/string'>string</a> message:<a href='/type/string'>string</a> entities:flags.0?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/MessageEntity'>MessageEntity</a>&gt; title:flags.1?<a href='/type/string'>string</a> views:<a href='/type/int'>int</a> = <a href='/type/BusinessChatLink'>BusinessChatLink</a>;
<a href='/constructor/account.businessChatLinks'>account.businessChatLinks</a>#ec43a2d1 links:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/BusinessChatLink'>BusinessChatLink</a>&gt; chats:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/Chat'>Chat</a>&gt; users:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/User'>User</a>&gt; = <a href='/type/account.BusinessChatLinks'>account.BusinessChatLinks</a>;
<a href='/constructor/account.resolvedBusinessChatLinks'>account.resolvedBusinessChatLinks</a>#9a23af21 flags:<a href='/type/%23'>#</a> peer:<a href='/type/Peer'>Peer</a> message:<a href='/type/string'>string</a> entities:flags.0?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/MessageEntity'>MessageEntity</a>&gt; chats:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/Chat'>Chat</a>&gt; users:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/User'>User</a>&gt; = <a href='/type/account.ResolvedBusinessChatLinks'>account.ResolvedBusinessChatLinks</a>;
---functions---
<a href='/method/account.createBusinessChatLink'>account.createBusinessChatLink</a>#8851e68e link:<a href='/type/InputBusinessChatLink'>InputBusinessChatLink</a> = <a href='/type/BusinessChatLink'>BusinessChatLink</a>;
<a href='/method/account.getBusinessChatLinks'>account.getBusinessChatLinks</a>#6f70dde1 = <a href='/type/account.BusinessChatLinks'>account.BusinessChatLinks</a>;
<a href='/method/account.editBusinessChatLink'>account.editBusinessChatLink</a>#8c3410af slug:<a href='/type/string'>string</a> link:<a href='/type/InputBusinessChatLink'>InputBusinessChatLink</a> = <a href='/type/BusinessChatLink'>BusinessChatLink</a>;
<a href='/method/account.deleteBusinessChatLink'>account.deleteBusinessChatLink</a>#60073674 slug:<a href='/type/string'>string</a> = <a href='/type/Bool'>Bool</a>;
<a href='/method/account.resolveBusinessChatLink'>account.resolveBusinessChatLink</a>#5492e5ee slug:<a href='/type/string'>string</a> = <a href='/type/account.ResolvedBusinessChatLinks'>account.ResolvedBusinessChatLinks</a>;</code></pre>
<p><a href="/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 <a href="/api/entities">styled text entities »</a>). </p>
<p>There is no additional limit (apart from the usual <a href="/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 <a href="/method/account.createBusinessChatLink">account.createBusinessChatLink</a> to create a business chat link, specifying in <a href="/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 <a href="/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 <a href="/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 <a href="/method/account.editBusinessChatLink">account.editBusinessChatLink</a> to edit the information of a business chat link. </p>
<p>Use <a href="/method/account.deleteBusinessChatLink">account.deleteBusinessChatLink</a> to delete a business chat link. </p>
<p>Use <a href="/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 <a href="/api/links#business-chat-links">here »</a>. </p>
<p>All listed methods except <a href="/method/account.resolveBusinessChatLink">account.resolveBusinessChatLink</a> require a Telegram Business subscription (currently included in <a href="/api/premium">Telegram Premium</a> subscriptions).</p>
<p>An account may create a maximum of <a href="/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>
<h3><a class="anchor" href="#connected-bots" id="connected-bots" name="connected-bots"><i class="anchor-icon"></i></a>Connected bots</h3>
<pre><code><a href='/constructor/inputBusinessBotRecipients'>inputBusinessBotRecipients</a>#c4e5921e flags:<a href='/type/%23'>#</a> existing_chats:flags.0?<a href='/constructor/true'>true</a> new_chats:flags.1?<a href='/constructor/true'>true</a> contacts:flags.2?<a href='/constructor/true'>true</a> non_contacts:flags.3?<a href='/constructor/true'>true</a> exclude_selected:flags.5?<a href='/constructor/true'>true</a> users:flags.4?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/InputUser'>InputUser</a>&gt; exclude_users:flags.6?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/InputUser'>InputUser</a>&gt; = <a href='/type/InputBusinessBotRecipients'>InputBusinessBotRecipients</a>;
<a href='/constructor/businessBotRecipients'>businessBotRecipients</a>#b88cf373 flags:<a href='/type/%23'>#</a> existing_chats:flags.0?<a href='/constructor/true'>true</a> new_chats:flags.1?<a href='/constructor/true'>true</a> contacts:flags.2?<a href='/constructor/true'>true</a> non_contacts:flags.3?<a href='/constructor/true'>true</a> exclude_selected:flags.5?<a href='/constructor/true'>true</a> users:flags.4?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/long'>long</a>&gt; exclude_users:flags.6?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/long'>long</a>&gt; = <a href='/type/BusinessBotRecipients'>BusinessBotRecipients</a>;
<a href='/constructor/connectedBot'>connectedBot</a>#bd068601 flags:<a href='/type/%23'>#</a> can_reply:flags.0?<a href='/constructor/true'>true</a> bot_id:<a href='/type/long'>long</a> recipients:<a href='/type/BusinessBotRecipients'>BusinessBotRecipients</a> = <a href='/type/ConnectedBot'>ConnectedBot</a>;
<a href='/constructor/account.connectedBots'>account.connectedBots</a>#17d7f87b connected_bots:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/ConnectedBot'>ConnectedBot</a>&gt; users:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/User'>User</a>&gt; = <a href='/type/account.ConnectedBots'>account.ConnectedBots</a>;
<a href='/constructor/botBusinessConnection'>botBusinessConnection</a>#896433b4 flags:<a href='/type/%23'>#</a> can_reply:flags.0?<a href='/constructor/true'>true</a> disabled:flags.1?<a href='/constructor/true'>true</a> connection_id:<a href='/type/string'>string</a> user_id:<a href='/type/long'>long</a> dc_id:<a href='/type/int'>int</a> date:<a href='/type/int'>int</a> = <a href='/type/BotBusinessConnection'>BotBusinessConnection</a>;
<a href='/constructor/updateBotBusinessConnect'>updateBotBusinessConnect</a>#8ae5c97a connection:<a href='/type/BotBusinessConnection'>BotBusinessConnection</a> qts:<a href='/type/int'>int</a> = <a href='/type/Update'>Update</a>;
<a href='/constructor/updateBotNewBusinessMessage'>updateBotNewBusinessMessage</a>#9ddb347c flags:<a href='/type/%23'>#</a> connection_id:<a href='/type/string'>string</a> message:<a href='/type/Message'>Message</a> reply_to_message:flags.0?<a href='/type/Message'>Message</a> qts:<a href='/type/int'>int</a> = <a href='/type/Update'>Update</a>;
<a href='/constructor/updateBotEditBusinessMessage'>updateBotEditBusinessMessage</a>#7df587c flags:<a href='/type/%23'>#</a> connection_id:<a href='/type/string'>string</a> message:<a href='/type/Message'>Message</a> reply_to_message:flags.0?<a href='/type/Message'>Message</a> qts:<a href='/type/int'>int</a> = <a href='/type/Update'>Update</a>;
<a href='/constructor/updateBotDeleteBusinessMessage'>updateBotDeleteBusinessMessage</a>#a02a982e connection_id:<a href='/type/string'>string</a> peer:<a href='/type/Peer'>Peer</a> messages:<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/int'>int</a>&gt; qts:<a href='/type/int'>int</a> = <a href='/type/Update'>Update</a>;
<a href='/constructor/updateBusinessBotCallbackQuery'>updateBusinessBotCallbackQuery</a>#1ea2fda7 flags:<a href='/type/%23'>#</a> query_id:<a href='/type/long'>long</a> user_id:<a href='/type/long'>long</a> connection_id:<a href='/type/string'>string</a> message:<a href='/type/Message'>Message</a> reply_to_message:flags.2?<a href='/type/Message'>Message</a> chat_instance:<a href='/type/long'>long</a> data:flags.0?<a href='/type/bytes'>bytes</a> = <a href='/type/Update'>Update</a>;
---functions---
<a href='/method/account.updateConnectedBot'>account.updateConnectedBot</a>#43d8521d flags:<a href='/type/%23'>#</a> can_reply:flags.0?<a href='/constructor/true'>true</a> deleted:flags.1?<a href='/constructor/true'>true</a> bot:<a href='/type/InputUser'>InputUser</a> recipients:<a href='/type/InputBusinessBotRecipients'>InputBusinessBotRecipients</a> = <a href='/type/Updates'>Updates</a>;
<a href='/method/account.getConnectedBots'>account.getConnectedBots</a>#4ea4c80f = <a href='/type/account.ConnectedBots'>account.ConnectedBots</a>;
<a href='/method/account.toggleConnectedBotPaused'>account.toggleConnectedBotPaused</a>#646e1097 peer:<a href='/type/InputPeer'>InputPeer</a> paused:<a href='/type/Bool'>Bool</a> = <a href='/type/Bool'>Bool</a>;
<a href='/method/account.disablePeerConnectedBot'>account.disablePeerConnectedBot</a>#5e437ed9 peer:<a href='/type/InputPeer'>InputPeer</a> = <a href='/type/Bool'>Bool</a>;
<a href='/method/account.getBotBusinessConnection'>account.getBotBusinessConnection</a>#76a86270 connection_id:<a href='/type/string'>string</a> = <a href='/type/Updates'>Updates</a>;
invokeWithBusinessConnection#dd289f8e {X:Type} connection_id:string query:!X = X;</code></pre>
<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 <a href="/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 <a href="/method/account.updateConnectedBot">account.updateConnectedBot »</a> to connect a business bot to the current account, or to change the connection settings.<br>
Use <a href="/method/account.updateConnectedBot">account.updateConnectedBot »</a> with the <code>deleted</code> flag set to disconnect a business bot from the current account.<br>
Use <a href="/method/account.getConnectedBots">account.getConnectedBots »</a> list all currently connected business bots. </p>
<p>Use <a href="/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 <a href="/method/account.updateConnectedBot">account.updateConnectedBot »</a>).<br>
Use <a href="/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 <a href="/method/account.updateConnectedBot">account.updateConnectedBot »</a>); to reconnect of a chat disconnected using this method the user must reconnect the entire bot by invoking <a href="/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 <a href="/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 <a href="/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 <a href="/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 <a href="/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 <a href="/constructor/updateBotNewBusinessMessage">updateBotNewBusinessMessage</a>, <a href="/constructor/updateBotEditBusinessMessage">updateBotEditBusinessMessage</a>, <a href="/constructor/updateBotDeleteBusinessMessage">updateBotDeleteBusinessMessage</a> updates containing messages sent to the connected user via the business connection. </p>
<p>Bots may invoke <a href="/method/account.getBotBusinessConnection">account.getBotBusinessConnection</a> to re-fetch the <a href="/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 <a href="/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 <a href="/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 <a href="/constructor/updateBotBusinessConnect">updateBotBusinessConnect</a> updates to the bot, using the usual <a href="/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 <a href="/method/invokeWithBusinessConnection">invokeWithBusinessConnection »</a>, passing the connection ID: </p>
<ul>
<li><a href="/method/messages.sendMessage">messages.sendMessage</a></li>
<li><a href="/method/messages.editMessage">messages.editMessage</a></li>
<li><a href="/method/messages.sendMedia">messages.sendMedia</a></li>
<li><a href="/method/messages.sendMultiMedia">messages.sendMultiMedia</a></li>
<li><a href="/method/messages.setTyping">messages.setTyping</a></li>
<li><a href="/method/messages.updatePinnedMessage">messages.updatePinnedMessage</a></li>
</ul>
<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 <a href="/constructor/botBusinessConnection">botBusinessConnection</a> that is being used. </p>
<p><a href="/method/messages.uploadMedia">messages.uploadMedia</a> may also be used in business connections, <em>not</em> by wrapping it in <a href="/method/invokeWithBusinessConnection">invokeWithBusinessConnection »</a>, but rather by specifying the business connection ID in the <code>business_connection_id</code> parameter.</p>
<p><a href="/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 <a href="/constructor/message">message</a>.<code>via_bot_id</code>. </p>
<p><a href="/constructor/message">Message</a>s sent by business bots on behalf of the user may also contain <a href="/api/bots/buttons">inline keyboards</a>, including <a href="/api/bots/buttons#answering-a-callback-query">callback buttons</a>, which when pressed will emit an <a href="/constructor/updateBusinessBotCallbackQuery">updateBusinessBotCallbackQuery</a> which should be handled as specified <a href="/api/bots/buttons#answering-a-callback-query">here »</a> (<em>without</em> wrapping the query in an <code>invokeWithBusinessConnection</code>).</p>
<h3><a class="anchor" href="#re-enable-ads" id="re-enable-ads" name="re-enable-ads"><i class="anchor-icon"></i></a>Re-enable ads</h3>
<pre><code><a href='/constructor/userFull'>userFull</a>#cc997720 flags:<a href='/type/%23'>#</a> blocked:flags.0?<a href='/constructor/true'>true</a> phone_calls_available:flags.4?<a href='/constructor/true'>true</a> phone_calls_private:flags.5?<a href='/constructor/true'>true</a> can_pin_message:flags.7?<a href='/constructor/true'>true</a> has_scheduled:flags.12?<a href='/constructor/true'>true</a> video_calls_available:flags.13?<a href='/constructor/true'>true</a> voice_messages_forbidden:flags.20?<a href='/constructor/true'>true</a> translations_disabled:flags.23?<a href='/constructor/true'>true</a> stories_pinned_available:flags.26?<a href='/constructor/true'>true</a> blocked_my_stories_from:flags.27?<a href='/constructor/true'>true</a> wallpaper_overridden:flags.28?<a href='/constructor/true'>true</a> contact_require_premium:flags.29?<a href='/constructor/true'>true</a> read_dates_private:flags.30?<a href='/constructor/true'>true</a> flags2:<a href='/type/%23'>#</a> sponsored_enabled:flags2.7?<a href='/constructor/true'>true</a> id:<a href='/type/long'>long</a> about:flags.1?<a href='/type/string'>string</a> settings:<a href='/type/PeerSettings'>PeerSettings</a> personal_photo:flags.21?<a href='/type/Photo'>Photo</a> profile_photo:flags.2?<a href='/type/Photo'>Photo</a> fallback_photo:flags.22?<a href='/type/Photo'>Photo</a> notify_settings:<a href='/type/PeerNotifySettings'>PeerNotifySettings</a> bot_info:flags.3?<a href='/type/BotInfo'>BotInfo</a> pinned_msg_id:flags.6?<a href='/type/int'>int</a> common_chats_count:<a href='/type/int'>int</a> folder_id:flags.11?<a href='/type/int'>int</a> ttl_period:flags.14?<a href='/type/int'>int</a> theme_emoticon:flags.15?<a href='/type/string'>string</a> private_forward_name:flags.16?<a href='/type/string'>string</a> bot_group_admin_rights:flags.17?<a href='/type/ChatAdminRights'>ChatAdminRights</a> bot_broadcast_admin_rights:flags.18?<a href='/type/ChatAdminRights'>ChatAdminRights</a> premium_gifts:flags.19?<a href='/type/Vector%20t'>Vector</a>&lt;<a href='/type/PremiumGiftOption'>PremiumGiftOption</a>&gt; wallpaper:flags.24?<a href='/type/WallPaper'>WallPaper</a> stories:flags.25?<a href='/type/PeerStories'>PeerStories</a> business_work_hours:flags2.0?<a href='/type/BusinessWorkHours'>BusinessWorkHours</a> business_location:flags2.1?<a href='/type/BusinessLocation'>BusinessLocation</a> business_greeting_message:flags2.2?<a href='/type/BusinessGreetingMessage'>BusinessGreetingMessage</a> business_away_message:flags2.3?<a href='/type/BusinessAwayMessage'>BusinessAwayMessage</a> business_intro:flags2.4?<a href='/type/BusinessIntro'>BusinessIntro</a> birthday:flags2.5?<a href='/type/Birthday'>Birthday</a> personal_channel_id:flags2.6?<a href='/type/long'>long</a> personal_channel_message:flags2.6?<a href='/type/int'>int</a> = <a href='/type/UserFull'>UserFull</a>;
---functions---
<a href='/method/account.toggleSponsoredMessages'>account.toggleSponsoredMessages</a>#b9d9a38d enabled:<a href='/type/Bool'>Bool</a> = <a href='/type/Bool'>Bool</a>;</code></pre>
<p>Since Telegram Business is currently included with the <a href="/api/premium">Telegram Premium</a> subscription, and Telegram Premium subscribers do not see <a href="/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 <a href="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 <a href="/method/account.toggleSponsoredMessages">account.toggleSponsoredMessages</a>. </p>
<p>The current value of the toggle will be stored in <a href="/constructor/userFull">userFull</a>.<code>sponsored_enabled</code>. </p>
<h3><a class="anchor" href="#folder-tags" id="folder-tags" name="folder-tags"><i class="anchor-icon"></i></a>Folder tags</h3>
<p>Telegram Business users can use <a href="/api/folders#folder-tags">folder tags, see here »</a> for more info. </p>
<h3><a class="anchor" href="#business-features-promo-page" id="business-features-promo-page" name="business-features-promo-page"><i class="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>
<pre><code>---functions---
<a href='/method/help.getAppConfig'>help.getAppConfig</a>#61e3f854 hash:<a href='/type/int'>int</a> = <a href='/type/help.AppConfig'>help.AppConfig</a>;</code></pre>
<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><a href="/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 <a href="/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 <a href="#location">business location</a></li>
<li><code>business_hours</code> - Business users can set <a href="#opening-hours">opening hours</a></li>
<li><code>quick_replies</code> - Business users can create and use <a href="#quick-reply-shortcuts">quick reply shortcuts</a></li>
<li><code>greeting_message</code> - Business users can set a <a href="#greeting-messages">greeting message</a></li>
<li><code>away_message</code> - Business users can set an <a href="#away-messages">away message</a></li>
<li><code>business_links</code> - Business users can create <a href="#business-chat-links">business chat links</a></li>
<li><code>business_intro</code> - Business users can set a custom <a href="#business-introduction">business chat introduction</a></li>
<li><code>business_bots</code> - Business users can <a href="#connected-bots">connect business bots to their account</a></li>
<li><code>emoji_status</code> - Business users can set a <a href="/api/emoji-status">custom emoji status</a>. </li>
<li><code>folder_tags</code> - Business users can enable <a href="/api/folders#folder-tags">folder tags</a>. </li>
<li><code>stories</code> - Business users can use <a href="/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>
<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>