在电报机器人中发送消息

时间:2015-12-06 20:36:13

标签: php telegram telegram-bot

我用php编写电报机器人。我保存用户chatid发送消息;使用此命令发送消息:

 /admin sendall:hellow 

并在php应用程序中使用此代码:

 case '/admin':
                if ($chat_id == 'my chatid') {
                    $array = str_replace('/admin', '', $message);
                    $array = trim($array);
                    $array = explode(':', $array);
                    $Admin = new AdminCommand();
                    $Admin->getCommand($array[0], $array[1]);
                } else {
                    sendMessage($chat_id, 'block ');
                }
                break;

AdminCommand类:

class AdminCommand extends Database {

    public function getCommand($command, $action = null) {
        switch ($command) {
            case 'sendall':
                $this->sendall($action);
                break;
            default:
                # code...
                break;
        }
    }

    public function sendall($message) {
        $sql = $this->con->prepare('SELECT * FROM `users`');
        $sql->execute();
        $res = $sql->fetchAll();
        foreach ($res as $row) {
            sendMessage($row['chatid'], $message);
        }
        exit();
    }

}

sendMessage函数:

function sendMessage($chatId, $message) {

    $url = WEBSITE . "/sendMessage?chat_id=" . $chatId . "&text=" . urlencode($message);
    file_get_contents($url);
}

大多数情况下,它的工作正常,但有时在向所有用户发送消息之后,一次又一次地重复并且不会停止只要我删除数据库。 问题是什么?

1 个答案:

答案 0 :(得分:1)

正如我在电报网站的answerBots FAQ页面中所解释的那样:

  

如何立即向我的机器人订阅者发送消息?
  很遗憾,目前我们还没有发送批量邮件的方法,,例如通知。我们将来可能会在这些方面添加一些内容   为了避免在发送群发通知时达到我们的限制,请考虑在较长的时间间隔内传播它们,例如8-12小时。 API每秒不允许超过30条消息给不同的用户,如果你重新开始,你将开始收到429个错误。   您不能以这种方式向所有用户发送消息。

和Bots常见问题解答页面中的解决方案:

  

我的机器人达到极限,我该如何避免这种情况?
  在特定聊天内发送消息时,请避免每秒发送多条消息。我们可能会允许超过此限制的短暂爆发,但最终您将开始收到429个错误   如果您要向多个用户发送批量通知,则API每秒不会允许超过30封邮件。考虑在8-12小时的大间隔内分发通知,以获得最佳效果   另请注意,您的机器人无法每分钟向同一组发送超过20条消息。