Créer un BOT Telegram

Par Jean-François GAZET le 29 avril 2017

Telegram est une application de messagerie instantanée. Outre les conversations avec vos amis, vous avez la possibilité de créer des BOTS. Ces programmes, avec lesquels vous pouvez dialoguer, peuvent rendre de nombreux services :

  • vous envoyer une notification sur l’état de votre serveur ou PC.
  • vous envoyer la température de votre salon.
  • vous informer d’une demande de contact sur votre site web.
  • vous envoyer le dernier GIF populaire sur Reddit.
  • vous envoyez un fichier et obtenez un résultat après traitement.
  • il est également possible d’écrire des jeux (échecs, poker…).
  • etc.

Je vous propose d’écrire un BOT qui vous enverra sur demande, les coordonnées GPS d’une commune. Je ne sais pas si c’est utile mais c’est pour l’exemple.

Pré-requis

Dans tous les cas il vous faut un site web avec le HTTPS activé. En effet, Telegram ne communique qu’avec ce protocole.

Créez votre BOT

Pour commencer, dans l’application Telegram, cherchez le BOT BotFather et cliquez sur START. Tapez /newbot puis entrez le nom de profil que vous souhaitez donner à votre BOT, par exemple “Mon bot”. On vous demande ensuite son nom d’utilisateur. Il doit impérativement se terminer par “bot” ou “Bot”.

Notez la clé d’API qui vous est donnée et qui ressemble à ceci :
123456789:AAA_A1-aaaaaaaaaaaaaaaaaaaaaaaaaaaa

Le WebHook

Notre BOT doit recevoir les messages que l’utilisateur lui envoie via l’application.

Cela se fait via un webhook (crochet web), c’est-à-dire une page de votre site internet qui va traiter les messages. Disons par exemple : https://monsite.com/webhook.php.

Pour indiquer cette adresse à Télégram, il suffit de copier-coller le lien suivant dans votre navigateur :
https://api.telegram.org/botCLEAPI/setWebhook?url=https://monsite.com/webhook.php

Vous aurez bien sûr remplacé CLEAPI par celle obtenue au paragraphe précédent, et modifié la page de monsite.com par celle qui vous convient.
On obtient la réponse suivante :

{"ok":true,"result":true,"description":"Webhook was set"}

Ainsi, quand quelqu’un écrira à votre BOT, Telegram enverra instantanément le message à l’adresse https://monsite.com/webhook.php.

Que contient cette page webhook.php ?

Voyons ce que Telegram nous envoie. Le code suivant lit les données transmises par Telegram est les écrit dans le fichier message.txt.

<?php
$content = file_get_contents('php://input');
file_put_contents('message.txt', $content);

Placez ce script sur votre site web, pour rappel à l’adresse https://monsite.com/webhook.php.

Ensuite, dans l’application Telegram, cherchez votre BOT via le nom que vous lui avez donné. Cliquez sur START et tapez un message.

Un fichier message.txt est créé sur votre site, à côté de votre script webhook.php. Il contient toutes les informations utiles pour répondre et notamment le chat id :

{
	"update_id": 11111111,
	"message": {
		"message_id": 3,
		"from": {
			"id": 123456789,
			"first_name": "Vincent",
			"last_name": "TIM",
			"username": "bibidu95"
		},
		"chat": {
			"id": 123456789,
			"first_name": "Vincent",
			"last_name": "TIM",
			"username": "bibidu95",
			"type": "private"
		},
		"date": 1493483431,
		"text": "coucou"
	}
}

Il ne reste plus qu’à écrire le code pour répondre aux commandes de l’utilisateur.

Voici le code final du script webhook.php qui retourne les coordonnées GPS d’une commune. Remplacez les étoiles par votre clé API :

<?php
// clé API du Bot à modifier
define('TOKEN', '***************');

// récupération des données envoyées par Telegram
$content = file_get_contents('php://input');
$update = json_decode($content, true);

// l'utilisateur contacte le bot
if(preg_match('/^\/start/', $update['message']['text'])) {
    sendMessage($update['message']['chat']['id'], 'Bonjour '.$update['message']['from']['username'].' !');
    }

// l'utilisateur envoie la commande : /gps Paris
else if(preg_match('/^\/gps/', $update['message']['text'])) {
    $ville = preg_replace('/^\/gps /', '', $update['message']['text']);
    $jsonOSM = file_get_contents('http://nominatim.openstreetmap.org/search?format=json&q='.urlencode($ville));
    $jsonOSM = json_decode($jsonOSM, true);
    $gps = $jsonOSM[0]['display_name'].' : '.$jsonOSM[0]['lat'].','.$jsonOSM[0]['lon'];
    sendMessage($update['message']['chat']['id'], $gps);
    }

// l'utilisateur envoie n'importe nawak
else {
    sendMessage($update['message']['chat']['id'], 'Je n\'ai pas compris.');
    }

// fonction qui envoie un message à l'utilisateur
function sendMessage($chat_id, $text) {
    $q = http_build_query([
        'chat_id' => $chat_id,
        'text' => $text
        ]);
    file_get_contents('https://api.telegram.org/bot'.TOKEN.'/sendMessage?'.$q);
    }

Il ne vous reste plus qu’à adapter ce programme selon les besoins de votre service web. Et en orienté objet c’est mieux.

Pour information, votre BOT peut afficher un message d’accueil et les commandes disponibles. Pour cela dialoguez avec BotFather, allez dans Edit Bot puis Edit Description et Edit Commands.

Sachez également que vous pouvez envoyer des images, des zip, des gifs, des adresses web…

Références

Telegram Bot API


Partagez cet article


A lire également Tous les articles