首页 > 解决方案 > 带有 PHP artisan 和 ngrok 的 Botman Studio 本地图像附件

问题描述

我使用 php artisan serve 将 Botman Studio 与 XAMPP 捆绑包中的 PHP 7.4.22 一起使用。

我想要使​​用Image Intervention进行图像处理,并使用web.php作为jpg响应来路由它。

适用于浏览器:

Route::get('img/{img_url}.jpg',function($img_url){
$img = ImageManagerStatic::make(base64_decode($img_url));
return $img->response();
});

但是在 Botman(VK 和 Telegram)中不起作用(说而不是回复,因为它在对话中):

$photo_url = "http://*.ngrok.io/img/***.jpg";
$attachment = new Image( $photo_url );
$message = OutgoingMessage::create('')->withAttachment($attachment);
$this->say($message);

例如,如果我使用公共文件夹中的真实图像文件,则也不起作用

$photo_url = "http://*.ngrok.io/REAL_IMAGE.jpg";
$attachment = new Image( $photo_url );
$message = OutgoingMessage::create('')->withAttachment($attachment);
$this->say($message);

唯一在 PowerShell 中以某种方式直接解决此响应的问题:

致命错误:第 59 行的 E:\YandexDisk\www\vapebot\vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\HandleExceptions.php 中的最大执行时间超过了 60 秒

我认为有些东西会阻止 VK 或 Telegram 对图像的请求,但我不知道是什么阻止了它(VerifyCsrfToken * in $except - 也无济于事)。

如果我在机器人执行附件时尝试打开与图片相同的链接,那么浏览器也会进入“无限加载”状态。

我试图用谷歌搜索关于这个问题的任何东西,但没有运气,因为代码本身没有什么奇怪的。

这方面的证据是,例如,如果我附上来自 imgur 的图片(或没有 botman studio 的干净文件夹,以及来自 ampps 下的另一个 ngrok 的图像文件),那么就没有问题,这很有效

$photo_url = "https://i.imgur.com/b6MY9f8.jpeg";
$attachment = new Image( $photo_url );
$message = OutgoingMessage::create('')->withAttachment($attachment);
$this->say($message);

在 tinker 中,一切正常: 使用 $img->save() 进行响应预览 使用带有 *.jpg 的路由进行响应预览

我什至尝试安装新的 Laravel,然后需要 Botman(没有工作室)和 Image Intervention - 结果相同:(

我还发现了来自 VkCommunityCallbackDriver.php 的代码(可能是 Telegram 使用相同的代码)可能与此问题相关,并且尝试在公共目录中模拟它也不起作用

    $data = file_get_contents("https://***.ngrok.io/img/***.jpg");
    // ^ failed to open stream: HTTP request failed! ^
    file_put_contents(__DIR__."/image.jpg",$data);
    echo '<img src="image.jpg" />';

标签: phplaraveltelegramvkbotman

解决方案


推荐阅读