主要问题是如何获取与机器人进行的所有对话的聊天ID?
想象一下,在执行僵尸程序时,会与用户A进行对话。
现在我停止僵尸程序并再次启动它。
如何获取与用户A的过去聊天的聊天ID?
我知道当用户向您发送消息时您会收到聊天ID,并且您使用该ID进行回复,但如果用户A在当前执行期间不再向僵尸程序发送消息,该怎么办?如何获得过去的会话ID?
是唯一一个存储id并在第二次执行时检索它们的选项吗?
更新
看起来当前的解决方案是将聊天ID存储在安全的地方,正如@Tick Tock所回答。
答案 0 :(得分:5)
我的问题不清楚,但正如我从你的问题中所理解的那样,我写了一些东西给你,希望对你有帮助。您可以检索chat_id
并使用它向chat
发送内容。我会给出一个示例代码,但在让我解释之前。
在Telegram Bot API中有两个定义:
chat_id
和from_id
。1 - 当我们在
private
聊天时,某个人chat_id
与from_id
相同。2 - 当我们的机器人是
group
成员时,chat_id
是该组的ID,与该人ID不同(from_id
)可能会将某些内容发送到组(和也许我们的机器人也会收到它 - 当privacy_mode
关闭时)
我认为您的机器人正在私聊: 当用户向您的机器人发送任何内容时,Telegram会将该消息发送给您的BOT(调用您的脚本),此示例代码发送" Hello chat_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
并将其添加到你的数据库。现在你可以每次发送给他/她。