脚本启动后无法从Telegram Bot获取更新的消息

时间:2016-07-23 15:36:28

标签: php telegram telegram-bot php-telegram-bot

我正在尝试创建一个脚本来通过Bot API操作我的机器人,我在我的服务器上使用简单的PHP文件,它有一个Webhook集,以便每次收到消息时Telegram都会引用此文件。但问题是,当脚本已经运行时,我无法获得新消息,如果我正在尝试获取并分配更新的消息以改变流程中的工作流程我只得到旧消息(这是出现在开始剧本的那一刻)

$update = file_get_contents('php://input');///get new data
$update = json_decode($update, TRUE);///decode data
$message = $update["message"]["text"];///assign message
switch($message) {////vary actions accordingly to first message
case "number1":
////send smth to user and wait for answer
$update = file_get_contents('php://input'); ////get new data with updated message
$update = json_decode($update, TRUE); ////decode
$message = $update["message"]["text"]; ////assign
switch($message) {////vary further actions accordingly to new message
    case "number2":
    ////further actions
    }
}
...

1 个答案:

答案 0 :(得分:1)

您无法从电报中多次获取数据{('php://input')}。你可能会问为什么?

让我描述一下会发生什么: 0-有人想向您的机器人VIA电报客户端发送消息

  

1-电报服务器获取该消息并运行您的预定义   脚本。(设置webhook时提供Telegram的脚本。

     

2-一次只使用('php://input')一次   数据(包括该消息)将被提供给您的脚本和现在   电报没有什么可以给你。

     

3-您的脚本在几毫秒内运行并处理该消息   少(在这个额外的小时间内,没有人可以输入和输入东西   更多在客户端)

     

4-你的脚本完成它JOB。

     

5-下次用户输入内容时(1秒后或1年后!),Telgram将再次使用新消息调用您的脚本。

正如您所看到的,('php://input')的第一次调用只有有用的数据(因为电报有适合您的数据并调用您的机器人脚本。('php://input')的其他调用对您没有任何帮助。

作为一种体验: 只在代码顶部获取一次数据(在处理消息之前),然后处理它。如果您需要以前的消息,可以在重新启动时将它们保存在数据库中。