web-dev-qa-db-ja.com

Telegramボットを使用してすべてのチャットIDを取得する

主な質問は、ボットとこれまでに行われたすべての会話のチャットIDを取得するにはどうすればよいですか?

ボットの実行中にユーザーAとの会話があると想像してください。

ここで、ボットプロセスを停止し、再開します。

ユーザーAとの過去のチャットのチャットIDを取得するにはどうすればよいですか?

ユーザーがメッセージを送信したときにチャットIDを取得し、そのIDを使用して返信することを理解しましたが、現在の実行中にユーザーAがボットにメッセージを送信しなくなった場合はどうなりますか?過去の会話IDを取得する方法は?

2番目の実行の開始時にIDを保存して取得する唯一のオプションはありますか?

更新:

@Tick Tockが回答したように、現在の解決策はチャットIDを安全な場所に保存することのようです。

11
Cristian T

あなたの質問は私にはわかりませんが、あなたの質問から理解できるように、私はあなたに何かを書きました。 chat_idsを取得し、それを使用してそのchatに何かを送信できます。サンプルコードを提供しますが、その前に何かを説明します。

Telegram Bot APIには、chat_idfrom_idの2つの定義があります。

1-私たちがprivateチャットをしているとき、chat_idfrom_idは同じです。

2-ボットがgroupメンバーである場合、chat_idはそのグループのIDであり、その人とは異なりますid(from_id)はグループに何かを送信する可能性があります(ボットもそれを受信する可能性があります-privacy_modeがオフの場合)

ボットがプライベートチャットにあると仮定します。ユーザーがボットに何かを送信すると、TelegramがそのメッセージをBOTに送信し(スクリプトを呼び出します)、このサンプルコードは「Hellochat_id」をそのユーザーに送信します(PHPの場合)

define('BOT_TOKEN','12345:abcde');//replace with your bot token
$command_prefix_url='https://api.telegram.org/bot' . BOT_TOKEN ;

$update = json_decode(file_get_contents('php://input')); //retrieves data sent by telegram

$chat_id=$update->message->chat->id; //retrives `chat_id`

$rep = json_decode(file_get_contents($command_prefix_url . '/SendMessage?chat_id=' .
    $chat_id    . '&text=' . urldecode('Hello '.(string)$chat_id))); //send something to that `chat_id` (sender)

更新:(問題のエディションのため)

まず、chat_idは一意であり、ボットのユーザーがボットを離れて再び参加した場合でも、そのユーザーに対して(プライベートチャットで)常に永続的です。 Telegramがbot全体にユーザーにchat_idを伝える方法を提供していることを今まで聞いたり読んだりしていません。したがって、ユーザーについて知る最良の方法は、chat_idやその他の情報(データベース内の)から受信したメッセージからのユーザーからの時間。

少なくとも彼らのchat_idを単純なデータベースに保存すると、ボットのサブスクライブされたユーザーのリストが得られます。また、chat_idは永続的であるため、ユーザーに必要なものを何でも送信できます。

そして、あなたの質問から理解できるように、データベースを持っていないが、ユーザーAがボットのサブスクライブユーザーである場合、私が知っているように、彼女/彼があなたに単一のメッセージを送信するまで待ってから、彼女/彼をつかむ必要がありますchat_idそれをデータベースに追加します。今、あなたはいつでも彼女/彼を送ることができます。

7
Seyfi