botones en bot telegram php puro

hashimoto

Gold Member
Se incorporó
30 Julio 2006
Mensajes
2.386
PHP:
<?php
   $update = json_decode(file_get_contents('php://input'), TRUE);
    $botToken = "MI_TOKEN";
    $botAPI = "https://api.telegram.org/bot" . $botToken;
   // Check if callback is set
    if (isset($update['callback_query'])) {
  $data = http_build_query([
            'text' => 'Rango seleccionado: ' . $update['callback_query']['data'],
            'chat_id' => $update['callback_query']['from']['id']
        ]);
        file_get_contents($botAPI . "/sendMessage?{$data}");
    }
    // Check for normal command
    $msg = $update['message']['text'];
    if ($msg === "/buscar") {
        // Create keyboard
        $data = http_build_query([
            'text' => 'Por favor seleccione un rango de busqueda;',
            'chat_id' => $update['message']['from']['id']
        ]);
      $keyboard = json_encode([
            "inline_keyboard" => [
                [
                    [
                        "text" => "A-F",
                        "callback_data" => "af"
                    ],
                    [
                        "text" => "G-L",
                       "callback_data" => "gl"
                    ]
                ]
            ]
        ]);
        // Send keyboard
        file_get_contents($botAPI . "/sendMessage?{$data}&reply_markup={$keyboard}");
    }


el tema es que quiero agarrar el callback y usarlo para buscar en una tabla de base de datos y mostrar el resutados, la query no habria problemas ya que la variable se almacena en $update['callback_query']['data'],
 

Miguelwill

I am online
Miembro del Equipo
MOD
Se incorporó
23 Febrero 2004
Mensajes
12.271
podrias poner algo mas de contexto, para ver si se tiene suerte con alguien que haya pasado por eso
 
Upvote 0

atorrante

Miembro Activo
Se incorporó
24 Agosto 2021
Mensajes
17
Necesitas crear una función para realizar la búsqueda en la db y obtener los resultados.
Luego llamas la función cuando recibas el callback.
 
Upvote 0

hashimoto

Gold Member
Se incorporó
30 Julio 2006
Mensajes
2.386
despues de definir las conexiones a mariadb y despues del $token
function buscarsql($tabla,$variable,$busqueda) { $sql = "select '.$variable.' from '.$tabla.' where .'$variable.' = .'$busqueda.'"; }
 
Última modificación:
Upvote 0

hashimoto

Gold Member
Se incorporó
30 Julio 2006
Mensajes
2.386
podrias poner algo mas de contexto, para ver si se tiene suerte con alguien que haya pasado por eso
necesito ejecutar un comando en un bot que me va devolver botones, al presionar un bot me va indicar que boton presiones y realizar una funcion de busqueda sql con ese valor, y mostrarlo en pantalla
 
Upvote 0

ricm

Se incorporó
28 Agosto 2005
Mensajes
7.536
despues de definir las conexiones a mariadb y despues del $token
function buscarsql($tabla,$variable,$busqueda) { $sql = "select '.$variable.' from '.$tabla.' where .'$variable.' = .'$busqueda.'"; }
Recuerda usar prepared statements o al menos sanitizar variables.
 
Upvote 0

hashimoto

Gold Member
Se incorporó
30 Julio 2006
Mensajes
2.386
Recuerda usar prepared statements o al menos sanitizar variables.
si lo se fue ala rapida tengo que limpiar las variables

Muestranos el json que viene de cuando presionas cualquier botón.
esto?
{"ok":true,"result":{"url":"xxxxxx/bot_telegram.php","has_custom_certificate":false,"pending_update_count":0,"last_error_date":1710780147,"last_error_message":"Connection timed out","max_connections":40,"ip_address":"yyyyyy"}}


me parece raro que de un timeout
 
Upvote 0

ricm

Se incorporó
28 Agosto 2005
Mensajes
7.536
Honestamente la descripción de lo que quieres hacer podría ser mejor, pero pareciera que bastaría que hagas $variable= json decode(respuesta), filtrar la parte útil
Y después select from blah blah where palabra = $variable
 
Upvote 0

freishner

Capo
Se incorporó
16 Noviembre 2021
Mensajes
303
{"ok":true,"result":{"url":"xxxxxx/bot_telegram.php","has_custom_certificate":false,"pending_update_count":0,"last_error_date":1710780147,"last_error_message":"Connection timed out","max_connections":40,"ip_address":"yyyyyy"}}
¿Eso viene cuando presionas un botón?
¿Cual es la duda particular, tu codigo no funciona, no sabes como mandar botones, etc?

Podrías comentar un poco la idea general sobre lo que quieres hacer (un poco mas elaborada) para obtener feedback.
 
Upvote 0

hashimoto

Gold Member
Se incorporó
30 Julio 2006
Mensajes
2.386
tb se podría utilizar un paquete listo para que puedas dedicarte a programar la lógica de tu programa en vez de tener que preocuparte de cómo funciona el protocolo...

Si sólo hubiera un ejemplo de eso en internet de un paquete conocido, probado y estable. Ideal sería hasta una wiki pero difícil que exista...

Saludos.
llegue a tu codifo pero para ser honestos me marie

¿Eso viene cuando presionas un botón?
¿Cual es la duda particular, tu codigo no funciona, no sabes como mandar botones, etc?

Podrías comentar un poco la idea general sobre lo que quieres hacer (un poco mas elaborada) para obtener feedback.
no se como mandar botones y manejar el resultado si mando un 1, quiero hacer algo con ese 1, la idea la explique con miguel
 
Upvote 0

ricm

Se incorporó
28 Agosto 2005
Mensajes
7.536
Insisto en que debes refinar tu pregunta, y actualziar el codigo completo si hay cambios. En tu codigo no se ve ningun boton.

"mandar un boton" te refieres a hacer un request http?
 
Upvote 0

freishner

Capo
Se incorporó
16 Noviembre 2021
Mensajes
303
no se como mandar botones y manejar el resultado si mando un 1, quiero hacer algo con ese 1, la idea la explique con miguel
Leiste la documentación de la api de telegram al respecto de botones?

Si te complica el funcionamiento, te recomiendo lo siguiente:

Has un archivo PHP que volque el contenido del stream de entrada en un archivo de texto y se lo asignas al webhook del bot, lo puedes pasar por tu servicio de beautificado favorito en el proceso, para dejarlo legible, hay servicios y herramientas para online y offline.
Luego con algún cliente rest como boomerang (chrome), envía todo lo que tengas que enviar y prueba, así aprendí yo. Luego con las bases te devuelves a PHP.

Te dejo unos recursos

BOT de TELEGRAM con BOTONES (Inline Keyboard) | Parte 2
Telegram Bot API: KeyboardButton
Telegram Bot API: sendMessage

El ciclo de vida es así mas o menos:

Tu recibes un update en el hook seteado de algo (lo que sea), y ahí viene la repuesta del botón que tu elijas. Luego para enviar un mensaje, independiente de que tenga o no tenga botones, usas sendMessage y los botones los metes en reply_markup tal y como dice la descripción respetando los tipos de entidades que reply_markup puede recibir.

Aquí es donde entra en juego el archivo de texto con el volcado de los datos del hook, una vez que logres mandar tu botón con el cliente rest usando la bot api, recibirás en unos segundos la respuesta y podrás hacerte una idea general de todo, luego puedes trasladar todo eso a PHP.

Si te complica el server, usa ngrok, puedes habilitar un server php local con
Bash:
php -S localhost:PUERTO archivo.php

Y luego redireccionas todo con ngrok a internet con
Bash:
ngrok tcp PUERTO

Veras una ip con https, esa es la que debes setear en el hook. Así yo realizo todas mis pruebas.
 
Upvote 0
Subir