Задать вопрос

Telegram Bot API (PHP). Как начать новую беседу в существующей?

Здравствуйте. Я работаю со следующей библиотекой: 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 помощи не нашёл, но сама идея реальна для осуществления. Очень надеюсь на ответ. Заранее спасибо.
  • Вопрос задан
  • 3058 просмотров
Подписаться 8 Сложный 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@sx66627
И не решится такое. Потому что, вы не понимаете как работает телеграм. Ботам запрещено самим создавать чаты и писать первым. Что правильно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы