# Pago en Telegram

## Cómo conectar un sistema de pago

El sistema de pago está integrado en Telegram. Para aceptar pagos dentro del mensajero, necesitas:

* Conectar un sistema de pago a tu bot usando **BotFather**.
* Ve a la configuración del bot deseado y selecciona **"Pagos"** en el menú.

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

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

Sigue las instrucciones para conectar un sistema de pago disponible y copia el token proporcionado.

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

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

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

## **Cómo facturar a un cliente**

Para enviar una factura en Telegram, usa el método y especifica los parámetros requeridos.

**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">Parámetros de la función</th><th>Descripción del parámetro</th></tr></thead><tbody><tr><td><mark style="color:rojo;"><strong>!</strong></mark> provider_token </td><td>(parámetro requerido) token obtenido de BotFather después de conectar el sistema de pago</td></tr><tr><td><mark style="color:rojo;"><strong>!</strong></mark> platform_id </td><td>(parámetro requerido) ID del destinatario: identificador de usuario, grupo o canal</td></tr><tr><td><mark style="color:rojo;"><strong>!</strong></mark> title </td><td>(parámetro requerido) título del producto, de 1 a 32 caracteres</td></tr><tr><td><mark style="color:rojo;"><strong>!</strong></mark> description </td><td>(parámetro requerido) descripción del producto, de 1 a 255 caracteres</td></tr><tr><td><mark style="color:rojo;"><strong>!</strong></mark> currency </td><td>(parámetro requerido) moneda de pago (<mark style="color:predeterminado;background-color:red;"><strong>EUR</strong></mark>, USD, UAH, etc.; para más detalles<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>Una matriz de matrices que contiene los detalles de precios del producto y servicios adicionales (entrega, embalaje, etc.). Se muestra en la página de pago. El importe puede especificarse como un entero (por ejemplo, 125) o como un número decimal usando un punto (por ejemplo, 120.25).<br></p><p>Por ejemplo: [["product", 2000], ["VAT", 20.75], ["packaging", 100]]</p></td></tr><tr><td>photo_url</td><td>URL de la imagen del producto</td></tr><tr><td>payload </td><td>La primera parte de la devolución de llamada de pago, el valor predeterminado es <strong>tg_payment</strong></td></tr><tr><td>protect_content</td><td>1 - proteger de copias y capturas de pantalla, 0 - sin protección</td></tr><tr><td>disable_notification </td><td>1 - enviar con notificación, 0 - sin notificación</td></tr><tr><td>need_name</td><td>1 - requerir el nombre completo del usuario para completar el pedido, 0 - no solicitar nombre</td></tr><tr><td>need_phone_number</td><td>1 - requerir el número de teléfono del usuario para completar el pedido, 0 - no solicitar teléfono</td></tr><tr><td>need_email </td><td>1 - requerir el correo electrónico del usuario para completar el pedido, 0 - no solicitar correo electrónico</td></tr><tr><td>reply_to_message_id</td><td>ID del mensaje al que responder; si quieres enviar la factura como un mensaje separado, usa dos comillas simples ('')</td></tr><tr><td>reply_markup</td><td>Teclado con el primer botón configurado como tipo <strong>pagar</strong></td></tr><tr><td>message_thread_id </td><td>ID del tema (disponible para supergrupos con la funcionalidad de foro habilitada)</td></tr><tr><td>provider_data </td><td>Datos de la factura en <strong>JSON</strong> formato que se enviará al proveedor del servicio de pago. El sistema de pago debe proporcionar descripciones detalladas de los campos requeridos.</td></tr></tbody></table>

{% hint style="warning" %}
**¡IMPORTANTE!** Todos los parámetros deben pasarse en el orden especificado en la función. Si necesitas especificar un parámetro concreto y omitir otros, deja valores vacíos o valores tal como se indica en la documentación para los parámetros que no necesites.
{% endhint %}

Ejemplo:

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

Si alguno de los parámetros `need_name`, `need_phone_number`, o `need_email` está habilitado, se pedirá al usuario que proporcione esa información antes de completar el pago. Tras un pago exitoso, los datos se guardan en las variables correspondientes del cliente.

Ejemplo:

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

El resultado: se solicitan datos antes del pago.

## Callback de pago

Si el pago se realiza correctamente, se enviará una devolución de llamada con el siguiente contenido al chat del usuario:

tg\_payment 1372995196 120.75 <mark style="color:rojo;">**USD**</mark> 2ff747b9-000f-5000-b000-16d7e3517aa&#x39;**,** donde&#x20;

1. course\_pay - payload - la carga útil de la solicitud original de creación de la factura;&#x20;
2. 1372995196 - el ID del chat donde se envió originalmente la factura;
3. 120.75 - el importe total del pago;
4. <mark style="color:rojo;">**USD**</mark> - la moneda;
5. 2ff747b9-000f-5000-b000-16d7e3517aa9 - el ID del pago en el sistema del comerciante.

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

Además, si se solicitaron el nombre, el número de teléfono y/o el correo electrónico del usuario, las variables correspondientes se asignarán al cliente:

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

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

{% hint style="info" %}
Se enviará una devolución de llamada de pago exitoso a los **mensajes directos** del usuario con el bot.

El usuario **debe tener un chat existente** con el bot (es decir, debe haber iniciado o suscrito al bot) **antes** cuando se realiza el pago. De lo contrario, el bot no puede enviarle el mensaje directo.
{% endhint %}

{% hint style="info" %}
Una vez recibida la webhook del pago, el pago se confirmará automáticamente mediante el método answerPreCheckoutQuery. <https://core.telegram.org/bots/api#answerprecheckoutquery>
{% endhint %}

## Mensaje fijado con un botón de pago

Debes usar la función de fijar mensajes después de conectar el sistema de pago.

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

<table><thead><tr><th width="271">Parámetros de la función</th><th>Descripción</th></tr></thead><tbody><tr><td><mark style="color:rojo;"><strong>!</strong></mark><strong> platform_id</strong></td><td>ID del chat de Telegram <a href="#gde-vzyat-platform_id-dlya-otpravki-uvedomlenii"><strong>*</strong></a></td></tr><tr><td><strong>message_id</strong> </td><td>ID del mensaje que se fijará</td></tr><tr><td><strong>disable_notification</strong> </td><td>Este parámetro define si se debe enviar una notificación a todos los miembros del chat sobre el nuevo mensaje fijado. Las notificaciones siempre están desactivadas en canales y chats privados.<br>Para desactivar las notificaciones, establece el <strong>disable_notification</strong> parámetro en 1; de lo contrario, usa 0.</td></tr></tbody></table>

Ejemplo:

Paso 1:\
prices = \[\["course", 100], \["VAT", 20.75]]

result=tg\_send\_invoice('381764678:TEST:129736', platform\_id, 'Curso sobre cursos', 'Crear cursos es fácil', '<mark style="color:rojo;">**USD**</mark>', prices, '<mark style="color:rojo;">**<https://salebot.pro/promo.png>'**</mark>, 'course\_pay','0', '0', '1', '1', '1', '', '{"inline\_keyboard": \[\[{"text":"Pagar", "pay":"True"}]]}')

Paso 2:\
Como resultado del primer paso, recibirás una respuesta de la que debes extraer el **message\_id** valor usando la **función get().** res=get(result,'result')\
m\_id=get(res,'message\_id')

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

Luego, fija el mensaje: tg\_pin\_chat\_message(#{platform\_id}, #{m\_id}, 1)

### Ejemplo: conjunto mínimo de parámetros

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

result= tg\_send\_invoice('381764678:TEST:129736', platform\_id, 'Curso sobre cursos', 'Crear cursos es super fácil', '<mark style="color:rojo;">**USD**</mark>', prices)

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

### **Ejemplo: teclado**

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

tg\_send\_invoice('381764678:TEST:129736', platform\_id, 'Curso sobre cursos', 'Crear cursos es fácil, '<mark style="color:rojo;">**USD**</mark>', prices, <mark style="color:rojo;">**'<https://mavibot.ai/promo.png>**</mark>', 'course\_pay','0', '0', '1', '1', '1', '', '{"inline\_keyboard": \[\[{"text":"Pagar", "pay":"True"}], \[{"text":"Otro botón", "callback\_data": "Another button"}]]}')

<div data-with-frame="true"><figure><img src="/files/36468c6f620bb95de097b23b3303331ee15f4f04" 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/es/chatbot/mensajeros/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.
