# Оплата в Telegram

## Как подключить платёжную систему

Платёжная система встроена в Telegram. Чтобы принимать платежи внутри мессенджера, вам нужно:

* Подключить платёжную систему к вашему боту с помощью **BotFather**.
* Перейдите в настройки нужного бота и выберите **«Платежи»** в меню.

<div data-with-frame="true"><figure><img src="/files/13c51a2b59514d33d26923972da524766aa33d5c" alt="" width="375"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/2846b49919306c5ea8520c6025ee6f56895e5bed" alt="" width="375"><figcaption></figcaption></figure></div>

Следуйте инструкциям, чтобы подключить доступную платёжную систему и скопировать предоставленный токен.

<div data-with-frame="true"><figure><img src="/files/30c475619724fa4a7a7e43c0a83fedce7dfe1d6a" alt="" width="375"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/ea4fc0f17d337453dd3a4ad14f9b19a55cef9848" alt="" width="375"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/86cd2ad96f45354afd63397306e589f0feb31c94" alt="" width="375"><figcaption></figcaption></figure></div>

## **Как выставить счёт клиенту**

Чтобы отправить счёт в Telegram, используйте метод и укажите необходимые параметры.

**tg\_send\_invoice(provider\_token, platform\_id, title, description, currency, prices, photo\_url, payload, protect\_content, disable\_notification, need\_name, need\_phone\_number, need\_email, reply\_to\_message\_id, reply\_markup, message\_thread\_id, provider\_data)**

<table><thead><tr><th width="270">Параметры функции</th><th>Описание параметра</th></tr></thead><tbody><tr><td><mark style="color:красный;"><strong>!</strong></mark> provider_token </td><td>(обязательный параметр) токен, полученный от BotFather после подключения платёжной системы</td></tr><tr><td><mark style="color:красный;"><strong>!</strong></mark> platform_id </td><td>(обязательный параметр) ID получателя — идентификатор пользователя, группы или канала</td></tr><tr><td><mark style="color:красный;"><strong>!</strong></mark> title </td><td>(обязательный параметр) название товара, 1–32 символа</td></tr><tr><td><mark style="color:красный;"><strong>!</strong></mark> description </td><td>(обязательный параметр) описание товара, 1–255 символов</td></tr><tr><td><mark style="color:красный;"><strong>!</strong></mark> currency </td><td>(обязательный параметр) валюта платежа (<mark style="color:по умолчанию;background-color:red;"><strong>EUR</strong></mark>, USD, UAH и т. д.; подробнее<a href="https://core.telegram.org/bots/payments#supported-currencies"> https://core.telegram.org/bots/payments#supported-currencies</a> )</td></tr><tr><td>prices</td><td><p>Массив массивов, содержащий сведения о ценах на товар и дополнительные услуги (доставка, упаковка и т. д.). Отображается на странице оплаты. Сумма может быть указана либо как целое число (например, 125), либо как десятичное число через точку (например, 120.25).<br></p><p>Например: [["product", 2000], ["VAT", 20.75], ["packaging", 100]]</p></td></tr><tr><td>photo_url</td><td>URL изображения товара</td></tr><tr><td>payload </td><td>Первая часть callback для оплаты, по умолчанию <strong>tg_payment</strong></td></tr><tr><td>protect_content</td><td>1 — защищать от копирования и скриншотов, 0 — без защиты</td></tr><tr><td>disable_notification </td><td>1 — отправить с уведомлением, 0 — без уведомления</td></tr><tr><td>need_name</td><td>1 — запросить полное имя пользователя для завершения заказа, 0 — не запрашивать имя</td></tr><tr><td>need_phone_number</td><td>1 — запросить номер телефона пользователя для завершения заказа, 0 — не запрашивать номер телефона</td></tr><tr><td>need_email </td><td>1 — запросить email пользователя для завершения заказа, 0 — не запрашивать email</td></tr><tr><td>reply_to_message_id</td><td>ID сообщения, на которое нужно ответить; если вы хотите отправить счёт как отдельное сообщение, используйте две одинарные кавычки ('')</td></tr><tr><td>reply_markup</td><td>Клавиатура с первой кнопкой типа <strong>pay</strong></td></tr><tr><td>message_thread_id </td><td>ID темы (доступно для супергрупп с включённой функцией форумов)</td></tr><tr><td>provider_data </td><td>Данные счёта в <strong>JSON</strong> формате, которые будут отправлены поставщику платёжных услуг. Платёжная система должна предоставить подробные описания необходимых полей.</td></tr></tbody></table>

{% hint style="warning" %}
**ВАЖНО!** Все параметры должны передаваться в порядке, указанном в функции. Если вам нужно указать конкретный параметр и опустить остальные, оставьте пустые значения или значения, как указано в документации для параметров, которые вам не нужны.
{% endhint %}

Пример:

<div data-with-frame="true"><figure><img src="/files/1a6b2d36b04664050729ed6ec94418845bfa526d" alt=""><figcaption></figcaption></figure></div>

Если любой из параметров `need_name`, `need_phone_number`, или `need_email` включён, пользователю будет предложено предоставить эту информацию перед завершением оплаты. После успешной оплаты данные сохраняются в соответствующих переменных клиента.

Пример:

<div data-with-frame="true"><figure><img src="/files/c7fab7e5d7fe02d6e257701799bdac67a6048a24" alt=""><figcaption></figcaption></figure></div>

Результат: данные запрашиваются до оплаты.

## Платежный callback

Если платёж успешен, в чат пользователя будет отправлен callback со следующим содержимым:

tg\_payment 1372995196 120.75 <mark style="color:красный;">**USD**</mark> 2ff747b9-000f-5000-b000-16d7e3517aa&#x39;**,** где&#x20;

1. course\_pay - payload - payload из исходного запроса на создание счёта;&#x20;
2. 1372995196 - ID чата, в который изначально был отправлен счёт;
3. 120.75 - общая сумма платежа;
4. <mark style="color:красный;">**USD**</mark> - валюта;
5. 2ff747b9-000f-5000-b000-16d7e3517aa9 - ID платежа в системе продавца.

<div data-with-frame="true"><figure><img src="/files/9dfa5b62bcd8755fb99799729e98bd60314a85a6" alt="" width="563"><figcaption></figcaption></figure></div>

Кроме того, если были запрошены имя, номер телефона и/или email пользователя, соответствующие переменные будут присвоены клиенту:

**tg\_payment\_name**, **tg\_payment\_phone** и **tg\_payment\_email**

<div data-with-frame="true"><figure><img src="/files/48306184c9ec29736a6ffbc8ba1b079b929dbaad" alt="" width="375"><figcaption></figcaption></figure></div>

{% hint style="info" %}
Пользователю будет отправлен callback об успешной оплате в **личные сообщения** с ботом.

У пользователя **должен быть существующий чат** с ботом (то есть он должен был запустить бота или подписаться на него) **до** до совершения оплаты. В противном случае бот не сможет отправить ему личное сообщение.
{% endhint %}

{% hint style="info" %}
После получения webhook об оплате платёж будет автоматически подтверждён через метод answerPreCheckoutQuery. <https://core.telegram.org/bots/api#answerprecheckoutquery>
{% endhint %}

## Закреплённое сообщение с кнопкой оплаты

Вам нужно использовать функцию закрепления сообщения после подключения платёжной системы.

**tg\_pin\_chat\_message(platform\_id, message\_id, disable\_notification)**

<table><thead><tr><th width="271">Параметры функции</th><th>Описание</th></tr></thead><tbody><tr><td><mark style="color:красный;"><strong>!</strong></mark><strong> platform_id</strong></td><td>ID чата Telegram <a href="#gde-vzyat-platform_id-dlya-otpravki-uvedomlenii"><strong>*</strong></a></td></tr><tr><td><strong>message_id</strong> </td><td>ID сообщения, которое нужно закрепить</td></tr><tr><td><strong>disable_notification</strong> </td><td>Этот параметр определяет, должно ли быть отправлено уведомление всем участникам чата о новом закреплённом сообщении. Уведомления всегда отключены в каналах и личных чатах.<br>Чтобы отключить уведомления, установите параметр <strong>disable_notification</strong> в 1; в противном случае используйте 0.</td></tr></tbody></table>

Пример:

Шаг 1:\
prices = \[\["course", 100], \["VAT", 20.75]]

result=tg\_send\_invoice('381764678:TEST:129736', platform\_id, 'Курс о курсах', 'Создавать курсы легко', '<mark style="color:красный;">**USD**</mark>', prices, '<mark style="color:красный;">**<https://salebot.pro/promo.png>'**</mark>', 'course\_pay','0', '0', '1', '1', '1', '', '{"inline\_keyboard": \[\[{"text":"Pay", "pay":"True"}]]}')

Шаг 2:\
В результате первого шага вы получите ответ, из которого нужно извлечь **message\_id** значение с помощью функции **get()** .\
res=get(result,'result')\
m\_id=get(res,'message\_id')

<div data-with-frame="true"><figure><img src="/files/7d4e488443761d0728d40166ac34b898cf7b3de3" alt="" width="246"><figcaption></figcaption></figure></div>

Далее закрепите сообщение: tg\_pin\_chat\_message(#{platform\_id}, #{m\_id}, 1)

### Пример: минимальный набор параметров

prices = \[\["super course", 100]]

result= tg\_send\_invoice('381764678:TEST:129736', platform\_id, 'Курс о курсах', 'Создавать курсы очень легко', '<mark style="color:красный;">**USD**</mark>', prices)

<div data-with-frame="true"><figure><img src="/files/61826b2b7ffb43602140e8051618e258b90bfa01" alt=""><figcaption></figcaption></figure></div>

### **Пример: клавиатура**

prices = \[\["course", 100], \["VAT", 20.75]]

tg\_send\_invoice('381764678:TEST:129736', platform\_id, 'Курс о курсах', 'Создавать курсы легко, '<mark style="color:красный;">**USD**</mark>', prices, <mark style="color:красный;">**'<https://mavibot.ai/promo.png>**</mark>', 'course\_pay','0', '0', '1', '1', '1', '', '{"inline\_keyboard": \[\[{"text":"Pay", "pay":"True"}], \[{"text":"Another button", "callback\_data": "Another button"}]]}')

<div data-with-frame="true"><figure><img src="/files/69a0f0c71f6aa8ae74d44dc1c2bad6540cf91f1b" alt=""><figcaption></figcaption></figure></div>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mavibot.ai/doc/ru/chatbot/messendzhery/telegram/api/payment.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
