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

Как принимать ответ пользователя на вопрос от Telegram Bot?

Всем привет. У меня такая загвоздка. Нужно получить ответ от пользователя и сохранить его в базе данных. Загвоздка в том, что я не понимаю как перехватить ответ. Я создал вот такой класс.
<?php
class BotMain 
{
	protected $access_token;
	protected $api_link;
	
	public $IncInfo = array();
	public $CallBack = array();
	
	function __construct($set = array())
	{
		$this -> access_token = $set['access_token'];
		$this -> api_link = $set['api_link'];
        $this -> status = 0;
    }
	/*
	all incoming messages from telegram
	*/
	function SetIncInfo()
	{
		$output = json_decode(file_get_contents('php://input'), TRUE);
		$this -> IncInfo ['chat_id'] = $output['message']['chat']['id'];
		$this -> IncInfo ['message'] = $output['message']['text'];
		$this -> IncInfo ['first_name'] = $output['message']['chat']['first_name'];
		$this -> IncInfo ['last_name'] = $output['message']['chat']['last_name'];
		$this -> IncInfo ['username'] = $output['message']['chat']['username'];
				
	}
	 /*
	all  incoming answers form telegram inline_keyboard 
	*/
	function SetCallBack()
	{
		$this -> CallBack ['callback_query'] =  $output['callback_query'];
		$this -> CallBack ['data'] =  $callback_query['data'];
		//$this -> CallBack ['message_id'] =  ['callback_query']['message']['message_id'];
		$this -> CallBack ['chat_id_callback'] =  $callback_query['message']['chat']['id'];
	}
		
	/*
	sends message according to chat_id + may include reply_markup
	*/
	function SendMessage ($chat_id, $message, $replyMarkup) 
	{
		file_get_contents($this -> api_link . '/sendMessage?chat_id=' . $chat_id . '&text=' . urlencode($message) . '&reply_markup=' . $replyMarkup);
	}
}
?>


Сама логика бота обрабатывается в другом файле. WebHook настроен на него, соответственно.
<?php
  require_once 'bot.settings.php'; //token, url
  require_once 'BotMain.class.php'; //main class of the bot
  
  $bot = new BotMain($set); 
  $bot -> SetIncInfo();   //get incoming message
//  $bot -> SetCallBack();  //get reply from inline keyboard

switch($bot->IncInfo['message']) {
    case '/start':
       $bot -> SendMessage($bot -> IncInfo['chat_id'], "You are wellcome! Please enter your name: ");
	/*
	???
	*/	
    break;  	
 }
 
?>


Допустим, если в класс прописать переменную status, то все равно не получится выхватить ответ, потому что скрипт завершит свое выполнение, и ответ будет воспринят заново и создан новый экземпляр класса.
Файлы создавать не вариант. Как тогда можно решить данную проблему?
P.S. Я новичок в программировании, если что не так, дайте мне знать, пожалуйста.
  • Вопрос задан
  • 1273 просмотра
Подписаться 5 Оценить Комментировать
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Чтобы понять, к чему относится ответ пользователя, нужно в БД сохранить статус диалога, например "задан вопрос №3" и при приходе сообщения проверять этот статус.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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