0

我正在尝试创建一个脚本来通过 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
    }
}
...
4

1 回答 1

1

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

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

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

2-当您使用整个数据(包括该消息)时,一次且只有一次('php://input')将被提供给您的脚本,而现在 Telegram 没有什么可以给您的了。

3-您的脚本在几毫秒或更短的时间内运行并处理该消息(在这段额外的时间里,没有人可以在客户端输入更多内容)

4-您的脚本完成了它的工作。

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

如您所见,只有第一次调用 ('php://input')有有用的数据(因为电报有数据给你并调用你的机器人脚本。其他调用('php://input')什么都不给你。

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

于 2016-07-24T07:55:24.453 回答