使用Telegram bot

时间:2016-07-31 17:22:29

标签: telegram-bot

主要问题是如何获取与机器人进行的所有对话的聊天ID?

想象一下,在执行僵尸程序时,会与用户A进行对话。

现在我停止僵尸程序并再次启动它。

如何获取与用户A的过去聊天的聊天ID?

我知道当用户向您发送消息时您会收到聊天ID,并且您使用该ID进行回复,但如果用户A在当前执行期间不再向僵尸程序发送消息,该怎么办?如何获得过去的会话ID?

是唯一一个存储id并在第二次执行时检索它们的选项吗?

更新

看起来当前的解决方案是将聊天ID存储在安全的地方,正如@Tick Tock所回答。

1 个答案:

答案 0 :(得分:5)

我的问题不清楚,但正如我从你的问题中所理解的那样,我写了一些东西给你,希望对你有帮助。您可以检索chat_id并使用它向chat发送内容。我会给出一个示例代码,但在让我解释之前。

  

在Telegram Bot API中有两个定义:chat_idfrom_id

     

1 - 当我们在private聊天时,某个人chat_idfrom_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并将其添加到你的数据库。现在你可以每次发送给他/她。