テレグラムボットの準備ができました。
WebブラウザとWebサイトの類似性を使用する場合、電報クライアントアプリケーションはブラウザクライアントのようなものです。
テレグラムチャットルームはウェブサイトのようなものです。
特定のユーザーのみに制限したい情報があり、ウェブサイトで認証があるとします。
Telegram Botsで同じ効果を得るにはどうすればよいですか?
ディープリンクを使用できると言われました。説明を参照してください こちら
以下に再現します。
- 適切なユーザー名でボットを作成します。 @ExampleComBot
- 着信メッセージ用のWebhookをセットアップします
- 十分な長さのランダムな文字列を生成します。 $ memcache_key = "vCH1vGWJxfSeofSAs0K5PA"
- キー$ memcache_keyの値123をMemcacheに3600秒(1時間)入れます
- ユーザーにボタンを表示 https://telegram.me/ExampleComBot?start=vCH1vGWJxfSeofSAs0K5PA
- / startで始まる着信メッセージで渡されるパラメーターでMemcachedを照会するようにwebhookプロセッサーを構成します。キーが存在する場合、web123に渡されたchat_idをユーザー123のtelegram_chat_idとして記録します。Memcacheからキーを削除します。
- ここで、ユーザー123に通知を送信するときに、フィールドtelegram_chat_idがあるかどうかを確認します。はいの場合、Bot APIのsendMessageメソッドを使用して、Telegramでメッセージを送信します。
ステップ1の方法を知っています。
残りを理解したいです。
これは、ステップ2を解読しようとするときに心に留めておくイメージです。
そのため、さまざまなテレグラムクライアントは、アプリケーションでExampleBotと通信するときにテレグラムサーバーと通信します。通信は双方向です。
ステップ2は、Telegram Serverがwebhookを介してExampleBotサーバーを更新することを示唆しています。 webhookは単なるURLです。
これまでのところ、私は正しいですか?
これを認証に使用するための次のステップは何ですか?
Update:非常に簡単なPHPアプリケーションを使用してGitHubリポジトリを作成し、以下に説明する概念を示します。
https://github.com/pevdh/telegram-auth-example
Webhookを使用するかどうかは、無関係です。「ディープリンク」の説明:
これで、ボットが別のメッセージを受信すると、データベース内のmessage.chat.idを照会して、メッセージがこの特定のユーザーからのものかどうかを確認できます。 (それに応じて処理します)
いくつかのコード( 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)
注:unique_codeは、Telegramクライアントでは「/ start unique_code」として表示されず、「/ start」のみが表示されますが、ボットは引き続き「/ start unique_code」を受信します。
あなたは今のところ正しいです。
ただし、要件は少しあいまいです。別の方法で見てみましょう。制限された情報を特別なユーザーに送信する場合は、ユーザーにボットとの直接チャットを開始するか、単にgroupchatのユーザーchat_idを使用してメッセージの送信を開始するように依頼する必要があります。
ユーザーがボットのデフォルトモードである「プライバシーモード」でボットと通信する場合にのみ、ユーザーchat_idにアクセスできることに注意してください。
2018年2月の時点で、 Telegram Login Widget を使用して、Telegramを介してWebサイトのユーザーを認証できます。