我正在尝试使用php-telegram-bot在Laravel上创建电报机器人。我已经安装了webhook,现在收到消息:
{"ok": true,
"result": {
"url": "https://.../api/telegram/hook/",
"has_custom_certificate": true,
"pending_update_count": 15,
"last_error_date": 1549043620,
"last_error_message": "Wrong response from the webhook: 301 Moved Permanently",
"max_connections": 40
}
}
是什么意思?我知道301错误的含义是什么,但无法理解解决此问题所需的步骤。
我的控制器:
public function hook()
{
$commands_paths = [
app_path() . '/Services/Telegram/Bots/Bitbd_BOT/Commands',
];
try {
// Create Telegram API object
$telegram = new Telegram($this->bot_api_key, $this->bot_username);
TelegramLog::initErrorLog(storage_path() . "/{$this->bot_username}_error.log");
TelegramLog::initDebugLog(storage_path() . "/{$this->bot_username}_debug.log");
TelegramLog::initUpdateLog(storage_path() . "/{$this->bot_username}_update.log");
// Add commands paths containing your custom commands
$telegram->addCommandsPaths($commands_paths);
$telegram->enableLimiter();
// Handle telegram webhook request
$handle = $telegram->handle();
} catch (TelegramException $e) {
echo $e->getMessage();
}
}
API路由:
Route::group(['prefix' => 'telegram'], function () {
Route::get('hook/set', 'TelegramController@setWebhook');
Route::any('hook','TelegramController@hook');
});
一些有趣的东西:/ api / telegram / hook仅适用于ANY或GET选项,POST方法返回带有vue的空页面,我不知道为什么。
答案 0 :(得分:0)
在app / Http / Middleware / PreflightResponse.php中创建中间件
并粘贴以下代码:
<?php
namespace App\Http\Middleware;
use Closure;
class PreflightResponse
{
public function handle($request, Closure $next )
{
if ($request->getMethod() === "OPTIONS") {
return response('');
}
return $next($request);
}
}
然后在app / Http / Kernel.php中,添加全局变量$ middleware:
protected $middleware = [
Middleware\PreflightResponse::class,
];
这是一个常规解决方案,但是您可以将其指定为命名中间件并在您的路由中使用。
发生这种情况是因为CORS及其安全措施。 希望对您有帮助:D
答案 1 :(得分:0)
您的webhook URL可能有问题,请再次检查,并确保正确无误并存在于服务器中。
即使https://example.com/folder/
与https://example.com/folder
也不同,并且您必须在地址末尾使用/
(在我的情况下,由于/
导致了该错误)