- 听到和回退都很好:
use AppHttpControllersBotManController;
use BotManBotManMessagesConversationsConversation;
$botman = resolve('botman');
$botman->hears('Начать', function($bot) {
$bot->startConversation(new OnboardingConversation);
}); //this works
$botman->fallback(function($bot) {
$bot->startConversation(new OnboardingConversation);
}); //this works
- 组内VK驱动程序听到不工作,但回退工作:
use AppHttpControllersBotManController;
use BotManBotManMessagesConversationsConversation;
$botman = resolve('botman');
$botman->group(['driver' => [VkCommunityCallbackDriver::class]], function($botman) {
$botman->hears('Начать', function($bot) {
$bot->startConversation(new OnboardingConversation);
}); //this NOT works
$botman->fallback(function($bot) {
$bot->startConversation(new OnboardingConversation);
}); //this works
});
我想做的就是-例如VK和Telegram的通用机器人,但我需要检查目标平台中黑名单中的用户,所以如果";驱动程序";与";MatchingMiddleware;来自botman-我不明白为什么听到不在里面工作;组";,这是网站上的官方示例:官方僵尸视频教程截图
这个例子也不起作用:https://botman.io/2.0/receiving#command-组驱动程序
在VK Driver网站上没有关于";组":https://github.com/yageorgiy/botman-vk-community-callback-driver
更新:我检查了Marcel的视频和他的工作流程,在Botman视频中,他很多次在Sublime Text编辑器中使用了一些神奇的键,所以我在谷歌上搜索了它,它是PHP Companion,所以我通过Tools安装了Sublime Text和PHP Companion->命令Pallete,然后单击VkCommunityCallbackDriver,然后再次单击Tools->命令Pallete与命令PHP Companion:查找使用,并显示以下代码:
use BotManDriversVKVkCommunityCallbackDriver;
use BotManDriversTelegramTelegramDriver;
魔术奏效了,现在带驱动程序的分组方法也奏效了,我仍然不明白为什么文档或视频课程中没有提到这一点,就好像分组方法不是主要的方法一样。
我仍然不明白为什么它不是从";盒子";,因为我一直认为程序员使用这种复杂的解决方案可以轻松生活。但经过两天的空搜索,我很累了,所以我写了自定义中间件到"听到";仅限VK驱动程序,基于Botman的官方视频教程https://beyondco.de/course/build-a-chatbot/middleware-system/matching-middleware:
App\Middleware\VkMatchingMiddleware.php
<?php
namespace AppMiddleware;
use BotManBotManBotMan;
use BotManBotManInterfacesMiddlewareMatching;
use BotManBotManMessagesIncomingIncomingMessage;
class VkMatchingMiddleware implements Matching
{
/**
* Handle a captured message.
*
* @param IncomingMessage $message
* @param callable $next
* @param BotMan $bot
*
* @return mixed
*/
public function matching(IncomingMessage $message, $pattern, $regexMatched)
{
return $regexMatched && isset($message->getExtras()["client_info"]);
}
}
Routes\botman.php:
<?php
use AppHttpControllersBotManController;
use BotManBotManMessagesConversationsConversation;
use AppMiddlewareVkMatchingMiddleware;
$VkMatchingMiddleware = new VkMatchingMiddleware();
$botman = resolve('botman');
$botman->hears('Begin', function($bot) {
$extras = $bot->getMessage()->getExtras();
$bot->reply(print_r($extras, 1));
})->middleware($VkMatchingMiddleware);
$botman->fallback(function($bot) {
$bot->reply('fallback');
});
如果有人知道为什么它能以这种方式工作,但不能从香草中工作,我会很高兴看到解释。