Les bots Telegram sont prêts maintenant.
Si nous utilisons l'analogie du navigateur Web et des sites Web, les applications client de télégramme sont comme les clients navigateur.
Les Telegram Chatrooms sont comme des sites Web.
Supposons que nous ayons des informations que nous ne voulons restreindre qu'à certains utilisateurs, sur les sites Web, nous aurons une authentification.
Comment obtenir le même effet sur les Telegram Bots?
On m'a dit que je pouvais utiliser le lien profond. Voir description ici
Je vais le reproduire ci-dessous:
- Créez un bot avec un nom d'utilisateur approprié, par ex. @ExampleComBot
- Configurer un webhook pour les messages entrants
- Générez une chaîne aléatoire d'une longueur suffisante, par ex. $ memcache_key = "vCH1vGWJxfSeofSAs0K5PA"
- Mettez la valeur 123 avec la clé $ memcache_key dans Memcache pendant 3600 secondes (une heure)
- Montrez à notre utilisateur le bouton https://telegram.me/ExampleComBot?start=vCH1vGWJxfSeofSAs0K5PA
- Configurez le processeur de webhook pour interroger Memcached avec le paramètre transmis dans les messages entrants commençant par/start. Si la clé existe, enregistrez le chat_id transmis au webhook en tant que telegram_chat_id pour l'utilisateur 123. Supprimez la clé de Memcache.
- Maintenant, lorsque nous voulons envoyer une notification à l'utilisateur 123, vérifiez s'il a le champ telegram_chat_id. Si oui, utilisez la méthode sendMessage dans l'API Bot pour leur envoyer un message dans Telegram.
Je sais comment faire l'étape 1.
Je veux comprendre le reste.
C'est l'image que j'ai en tête lorsque j'essaie de déchiffrer l'étape 2.
Ainsi, les différents clients de télégramme communiquent avec le serveur de télégramme lorsqu'ils parlent à ExampleBot sur leurs applications. La communication est bidirectionnelle.
L'étape 2 suggère que le serveur Telegram mettra à jour le serveur ExampleBot via un webhook. Un webhook n'est qu'une URL.
Jusqu'à présent, ai-je raison?
Quelle est la prochaine étape vers l'utilisation de ceci pour l'authentification?
Mise à jour : J'ai créé un référentiel GitHub avec une application PHP PHP très simple pour illustrer le concept expliqué ci-dessous:
https://github.com/pevdh/telegram-auth-example
Que vous utilisiez un webhook ou non n'est pas pertinent . Le "lien profond" a expliqué:
Maintenant, lorsque votre bot reçoit un autre message, il peut interroger message.chat.id dans la base de données pour vérifier si le message provient de cet utilisateur spécifique. (Et gérer en conséquence)
Du code (en utilisant pyTelegramBotAPI ):
import telebot
import time
bot = telebot.TeleBot('TOKEN')
def extract_unique_code(text):
# Extracts the unique_code from the sent /start command.
return text.split()[1] if len(text.split()) > 1 else None
def in_storage(unique_code):
# Should check if a unique code exists in storage
return True
def get_username_from_storage(unique_code):
# Does a query to the storage, retrieving the associated username
# Should be replaced by a real database-lookup.
return "ABC" if in_storage(unique_code) else None
def save_chat_id(chat_id, username):
# Save the chat_id->username to storage
# Should be replaced by a real database query.
pass
@bot.message_handler(commands=['start'])
def send_welcome(message):
unique_code = extract_unique_code(message.text)
if unique_code: # if the '/start' command contains a unique_code
username = get_username_from_storage(unique_code)
if username: # if the username exists in our database
save_chat_id(message.chat.id, username)
reply = "Hello {0}, how are you?".format(username)
else:
reply = "I have no clue who you are..."
else:
reply = "Please visit me via a provided URL from the website."
bot.reply_to(message, reply)
bot.polling()
while True:
time.sleep(0)
Remarque: le code_unique ne sera pas affiché comme '/ start code_unique', seulement '/ start', dans le client Telegram, mais votre bot recevra toujours '/ start code_unique'.
Vous avez raison jusqu'à présent.
Cependant, vos exigences sont un peu vagues. Regardons cela d'une autre manière. Si vous souhaitez envoyer des informations restreintes à des utilisateurs spéciaux, vous devez demander à l'utilisateur de démarrer une conversation directe avec votre bot ou simplement utiliser les utilisateurs chat_id dans groupchat pour commencer à leur envoyer un message.
Veuillez noter que vous n'aurez accès à l'utilisateur chat_id que lorsque l'utilisateur communique avec le bot en "mode de confidentialité" qui est le mode par défaut pour les bots.
Depuis février 2018, vous pouvez utiliser Telegram Login Widget pour autoriser les personnes sur votre site Web via Telegram.
Je viens d'implémenter ne solution d'authentification en utilisant un lien profond pour Django .
Cette solution génère des jetons d'authentification pour associer les chats Telegram et les utilisateurs Django. Lorsque certains utilisateurs de télégrammes souhaitent accéder à une zone restreinte, ils reçoivent un message de télégramme avec un lien pour se connecter au Web. Un site Web connecté fournit un lien pour démarrer une nouvelle conversation authentifiée en utilisant un lien profond.
Il y a aussi ne démo pour un exemple de sondage que seul l'utilisateur connecté ne peut pas voter par télégramme.