TelegramBot / Api

Native PHP Wrapper for Telegram BOT API
MIT License
1.09k stars 324 forks source link

answerCallbackQuery для чего он нужен? #243

Closed ExsyDev closed 4 years ago

ExsyDev commented 4 years ago

Здравствуйте, помогите разобраться, для чего необходимо вызывать метод answerCallbackQuery в обработчике callback?

$bot->on(function($update) use ($bot){ $callback = $update->getCallbackQuery(); $bot->sendMessage(...); $bot->answerCallbackQuery($callback->getId()); });

Без него сообщение не отправляется, а если добавляю answerCallbackQuery, то все работает.

jenokizm commented 4 years ago

Вы точно чтото делаете неправильно, потому как callback нужен для инлайн кнопок в сообщениях, но никак не для самих сообщений или же обычных клавиатурных кнопок.

ExsyDev commented 4 years ago

Вы точно чтото делаете неправильно, потому как callback нужен для инлайн кнопок в сообщениях, но никак не для самих сообщений или же обычных клавиатурных кнопок.

Как тогда проверять и создавать диалоги между ботом и пользователем?

jenokizm commented 4 years ago

ну для команд у вас есть обработчики типа

$bot->command('echo', function ($message) use ($bot) {

    $text = 'Привет, вы выполнили команду /echo';
    $bot->sendMessage($message->getChat()->getId(), $text);
});

а если получаете просто ввод текста, то так

try {
    $bot = new \TelegramBot\Api\Client($tbotkey);

    $bot->on(function ($Update) use ($bot) {

        $msg_text = $message->getText();
        $bot->sendMessage($message->getChat()->getId(), 'Вы написали мне: '.$msg_text);

    }, function () { return true; });

    //Webhook handler
    $bot->run();

} catch (Exception $e) {
    echo $e->getMessage();
}

если у вас сложные диалоги то вы можете сохранять ввод в базу mysql и потом на основе каких то данных формировать ответы или рассылки

ExsyDev commented 4 years ago

ну для команд у вас есть обработчики типа

$bot->command('echo', function ($message) use ($bot) {

    $text = 'Привет, вы выполнили команду /echo';
    $bot->sendMessage($message->getChat()->getId(), $text);
});

а если получаете просто ввод текста, то так

try {
    $bot = new \TelegramBot\Api\Client($tbotkey);

    $bot->on(function ($Update) use ($bot) {

        $msg_text = $message->getText();
        $bot->sendMessage($message->getChat()->getId(), 'Вы написали мне: '.$msg_text);

    }, function () { return true; });

    //Webhook handler
    $bot->run();

} catch (Exception $e) {
    echo $e->getMessage();
}

если у вас сложные диалоги то вы можете сохранять ввод в базу mysql и потом на основе каких то данных формировать ответы или рассылки

Благодарю, а как это удобнее всего можно сделать с точки зрения паттернов? Например в BotMan есть классы диалогов, при помощи которых можно легко создавать диалоги. Я использую Laravel, и хотелось бы чтобы это не было все в одном файле

jenokizm commented 4 years ago

Благодарю, а как это удобнее всего можно сделать с точки зрения паттернов? Например в BotMan есть классы диалогов, при помощи которых можно легко создавать диалоги. Я использую Laravel, и хотелось бы чтобы это не было все в одном файле

По паттернам и фреймворкам у меня вообще знаний нет, все пишу руками как мне удобно. Вероятно вам нужна какая нибудь другая библиотека которая будет является расширением Laravel, скорее всего такие уже есть.