Здравствуйте. Я работаю со следующей библиотекой:
https://github.com/akalongman/php-telegram-bot
Как можно начать новую беседу (Conversation) в текущей? У меня есть StartCommand.php и в ней используется Conversation и меню в виде кнопок Keyboard. Когда пользователь выбирает кнопку, бот выдаёт какой-то текст. Так вот, нужно, чтобы после нажатия кнопки "Feedback" запускался новый Conversation, где пользователю будет предложено отправить сообщение для админов.
<?php
namespace Longman\TelegramBot\Commands\SystemCommands;
use Longman\TelegramBot\Conversation;
use Longman\TelegramBot\Commands\SystemCommand;
use Longman\TelegramBot\Entities\InlineKeyboard;
use Longman\TelegramBot\Entities\InlineKeyboardButton;
use Longman\TelegramBot\Entities\Keyboard;
use Longman\TelegramBot\Entities\KeyboardButton;
use Longman\TelegramBot\Entities\Chat;
use Longman\TelegramBot\Request;
class StartCommand extends SystemCommand
{
protected $name = 'start';
protected $description = 'Start command';
protected $usage = '/start';
protected $version = '1.1.0';
public function execute()
{
$message = $this->getMessage();
$chat = $message->getChat();
$user = $message->getFrom();
$text = trim($message->getText(true));
$chat_id = $chat->getId();
$user_id = $user->getId();
$data = [
'chat_id' => $chat_id,
];
if ($chat->isGroupChat() || $chat->isSuperGroup()) {
$data['reply_markup'] = Keyboard::forceReply(['selective' => true]);
}
// Conversation start
$this->conversation = new Conversation($user_id, $chat_id, $this->getName());
$notes = &$this->conversation->notes;
!is_array($notes) && $notes = [];
// cache data from the tracking session if any
$state = 0;
if (isset($notes['state'])) {
$state = $notes['state'];
}
$result = Request::emptyResponse();
switch ($state) {
case 0:
$keyboards = [];
$keyboards[] = new Keyboard(
['Information'],
['Books', 'Feedback'],
['Hide menu']
);
$keyboard = $keyboards[0]
->setResizeKeyboard(true)
->setOneTimeKeyboard(false)
->setSelective(false);
if ($text === '') {
$notes['state'] = 0;
$this->conversation->update();
$data['text'] = 'Please choose a section:';
$data['reply_markup'] = $keyboard;
$result = Request::sendMessage($data);
}
elseif ($text === 'Information') {
$this->conversation->update();
$data['text'] = file_get_contents(__DIR__ . '/../../other/texts/infrormation.txt');
$data['reply_markup'] = $keyboard;
$result = Request::sendMessage($data);
}
elseif ($text === 'Books') {
$this->conversation->update();
$data['text'] = file_get_contents(__DIR__ . '/../../other/texts/books.txt');
$data['reply_markup'] = $keyboard;
$result = Request::sendMessage($data);
}
elseif ($text === 'Feedback') {
/**
* HERE NEED START NEW CONSERVATION
* LIKE THESE (StartCommand or SurveyCommand)
*/
}
elseif ($text === 'Hide menu') {
$this->conversation->stop();
$data['text'] = 'Done!';
$data['reply_markup'] = Keyboard::remove();
$result = Request::sendMessage($data);
}
$notes['name'] = $text;
$text = '';
}
return $result;
}
}
Ни на github`е, ни на stackoverflow помощи не нашёл, но сама идея реальна для осуществления. Очень надеюсь на ответ. Заранее спасибо.