Seguimos con la serie de bots y Telegram que empezó aquí.
En el post anterior nos quedamos con este código:
<?php
require __DIR__ . '/vendor/autoload.php';
require 'config.php';
use SergiX44\Nutgram\Nutgram;
use SergiX44\Nutgram\Configuration;
$config = new Configuration(
clientTimeout: 10,
);
$botToken = BOT_TOKEN;
$bot = new Nutgram($botToken, $config);
$updates = $bot->getUpdates();
foreach($updates as $update) {
echo "Mensaje recibido: {$update->getMessage()->text}\n";
}
¿y qué hace este código?
Pues básicamente se conecta a la API de Telegram y con «getUpdates» se trae todos los mensajes que haya recibido el bot.
Los mensajes los muestra con el foreach y se acabó.
Es decir, lo que tenemos mola porque podemos comunicarnos con Telegram pero no vale para nada.
Digo que no vale para nada porque tendríamos que estar ejecutándolo a cada rato para ir respondiendo a los mensajes.
Necesitamos que el script se quede escuchando todo el rato. Pero esto lo veremos más adelante. Vamos paso a paso. Empezemos por responder a los mensajes.
Este post es posible gracias a Urlan Heat – empresa de desarrollo especializada en PHP.
Enviar un mensaje
Enviar un mensaje a un chat de Telegram es fácil. Basta con hacer:
$bot->sendMessage(
chat_id: [el id del chat],
text: "Hola, holita, hola"
);
Facil ¿no?
Pues no, porque ¿cuál es el id de los millones de chats que hay en Telegram?
Porque lo que queremos es responder al mensaje que nos han escrito.
Vale, pues no es complicado sacar el id del chat. Podemos sacarlo del propio mensaje que nos ha llegado:
$update->getChat()->id
El método getChat() nos devuelve un objeto Chat del que podemos sacar el id.
Pues si ponemos todo esto junto tendremos:
<?php
require __DIR__ . '/vendor/autoload.php';
require 'config.php';
use SergiX44\Nutgram\Nutgram;
use SergiX44\Nutgram\Configuration;
$config = new Configuration(
clientTimeout: 10,
);
$botToken = BOT_TOKEN;
$bot = new Nutgram($botToken, $config);
$updates = $bot->getUpdates();
foreach($updates as $update) {
echo "Mensaje recibido: {$update->getMessage()->text}\n";
$response = "Yo sé que tú me hablas... pero yo no te entiendo nada. Por ahora soy un poco tonto. Esto que has dicho no significa nada para mí: {\"$update->getMessage()->text}\"}";
$bot->sendMessage(
chat_id: $update->getChat()->id,
text: $response
);
}
Escuchar todo el rato a Telegram
Hemos visto antes que tenemos que lanzar manualmente nuestro programa. El programa escuchará a los mensajes y responderá.
Pero esto es muy poco práctico.
Lo mejor es usar el modo «polling» que escuchará todo el rato a los mensajes. Algo así:
<?php
require __DIR__ . '/vendor/autoload.php';
require 'config.php';
use SergiX44\Nutgram\Nutgram;
use SergiX44\Nutgram\Configuration;
use SergiX44\Nutgram\RunningMode\Polling;
$config = new Configuration(
clientTimeout: 10,
);
$botToken = BOT_TOKEN;
$bot = new Nutgram($botToken, $config);
$bot->setRunningMode(Polling::class);
$bot->run();
Si ejecutas este script verás algo así:
$ php index.php
Listening…
El programa se queda escuchando… pero no hace nada ni responde a los mensajes.
Para eso tenemos que decirle al bot qué hacer ante un mensaje nuevo. Por ejemplo:
<?php
require __DIR__ . '/vendor/autoload.php';
require 'config.php';
use SergiX44\Nutgram\Nutgram;
use SergiX44\Nutgram\Configuration;
use SergiX44\Nutgram\RunningMode\Polling;
$config = new Configuration(
clientTimeout: 10,
);
$botToken = BOT_TOKEN;
$bot = new Nutgram($botToken, $config);
$bot->setRunningMode(Polling::class);
$bot->onMessage(function (Nutgram $bot) {
$bot->sendMessage('Me encanta que me escribas aunque no te entienda');
});
$bot->run();
Para el programa y vuelve a lanzarlo (porque no te va a aplicar los cambios que has hecho hasta que lo pares).
Y ahora sí:

La magia está aquí:
$bot->onMessage(function (Nutgram $bot) {
$bot->sendMessage('Me encanta que me escribas aunque no te entienda');
});
Aquí es donde le decimos qué debe hacer cuando reciba un mensaje.
Si te fijas, aquí no tenemos que preocuparnos del id del chat al que mandar la respuesta. Eso es porque el parámetro $bot de la función anónima ya recibe esta información de forma automática.
Bueno, pues con esto ya tienes con qué entretenerte un rato.
En la próxima entrega veremos cómo poner los mensajes más elegantes en Telegram.
No te pierdas las novedades, apúntate a nuestra newsletter o síguenos en Linkedin.