114 комментариев
Страница 1 из 1
    seoonly.ru

    Коммуникабельный бот-)

    Александра

    Спасибо огромное! Реально круто! тоже вчера на эти кнопки полдня убила, но так и не дошла до логичного завершения, а сегодня с вашей помощью все ок! Сейчас пробую методы editMessageCaption и editMessageReplyMarkup, чтоб не новые сообщения отправлялись, а перезатирались старые (особенно полезно для клавиатур). Еще раз спасибо

    Ваше слово, товарищ Браузер

    Ебааааать! Ты Штокман? Троцкач, которого еще когда соцсети были молодыми и рулили форумы, банили повсюду. Чур, меня, чур. Форум РКСМ(б) помнишь, форум ревфронта загорска? Какие срачи были, эх….

    Хасан

    Привет, было бы здорово если бы написал статью про интернет магазинов или доставка еды. Щас такие боты актуальная тема помоэму!

    Виктор

    Здарова, а как подключиться к БД?
    я попробовал так, но не сработал..

    $mysqli = new mysqli(«localhost», «*****», «***********», «*****_db»);
    if ($mysqli->connect_errno) {
    echo «Не удалось подключиться к MySQL: (» . $mysqli->connect_errno . «) » . $mysqli->connect_error;
    }
    $bot->command(‘pip’, function ($message) use ($bot) {
    $res = $mysqli->query(«SELECT name FROM stopwatch Where id=1»);
    $row = $res->fetch_assoc();
    $bot->sendMessage($message->getChat()->getId(), $row);
    });

    Али

    Добрый вечер aftamat4ik!
    как можно обработать InlineKeyboard и ReplyKeyboard в методе on()??

    Mixa

    Скажите, а можно как то отправлять в канал в бдном сообщении и текст, и изображение, да так, чтобы урл изображения не отображался. Пробовал в режиме HTML. но там тег <img не поддерживается

    Роман

    Привет. Пытаюсь по крону запустить файл, чтоб каждые 10 мин слал сообщение в чат, приходят ошибки, хотя если вручную запускать все работает:
    PHP Fatal error: Uncaught exception ‘TelegramBot\Api\HttpException’ with message ‘Bad Request’ in /telegramMonitor/vendor/telegram-bot/api/src/BotApi.php:261

    Подскажите, из-за чего может быть такое?

    Balumba

    Доброго времени суток. Подскажите пожалуйста. Как получить id пользователя, отправившего запрос боту?
    Например:
    $bot->command(‘start’, function ($message) use ($bot) {

    });
    Я не силён в ооп. Поэтому задаю этот, может глупый, вопрос.

    DLC

    Здравствуйте! а можете скинуть пример какова нибудь бота! с использованием этой библиотеки! т.е где используются большинства
    функций и как правильно реализовывать функционал этой библиотеки! если есть уже у вас готовые боты с данной библиотекой!

    DLC

    А как сделать чтобы бот мог читать html теги? при отправке сообщения!

      DLC

      Всё сам разобрался!
      $bot->sendMessage($message->getChat()->getId(), ‘Раздел продукция!’, ‘HTML’);

    DLC

    А можете дать примеры использования: (editMessageText) (editMessageCaption) (editMessageReplyMarkup) и объяснить всём из отличие!

    Fadnier

    Не работает пример с Inline кнопками. Я так подозреваю из за того что функции getCallbackQuery в коде бота нет вообще.

    Gopher

    Александр, спасибо за шикарные статьи! Ваши маны в закладки однозначно! )) Вопросик есть небольшой, как сделать что-бы при нажатии на кнопку (ReplyKeyboardMarkup) наша кастомная клава не пропадала с экрана? делал как у вас в примерах. Заранее благодарен.

      Gopher

      Разобрался короче, может кому пригодится, чтобы кнопки не пропадали, секрет в комментарии
      $keyboard = new \TelegramBot\Api\Types\ReplyKeyboardMarkup(array(array(«one», «two», «three»)), true); // true for one-time keyboard

    Gopher

    Александр, а вы не пробовали менять кнопки ReplyKeyboard например в зависимости от полученного ответа? Такое вообще возможно?

    Gopher

    в обработчике команды start создаю $keyboard, вывожу sendMessage-м, всё нормально. Потом создаю таким-же способом $keyboard2, сообщение с разметкой меняется, а кнопки нет ((

    $keyset = [
    [[«text» => «Today»],[«text» => «Вчера»]],
    [[«text» => «Текущий месяц»],[«text» => «Прошлый месяц»]]
    ];
    $keyboard2 = new \TelegramBot\Api\Types\ReplyKeyboardMarkup($keyset, false, true);
    $bot->sendMessage($Update->getMessage()->getChat()->getId(), $answer, ‘HTML’, false, false, null, $keyboard2);

    Gopher

    не нужен там второй объект клавиатуры ($keyboard2), такое впечатление, как-то с первым нужно работать мне кажется, но пока решения нет.

      Gopher

      Да братка, как ты говоришь тоже работает, но лишнее сообщение приходится отсылать. Это я перемудрил с параметрами, лишний false передал. Можно клаву менять и не скрывая, просто новый объект сразу слать и всё.

      вот так НЕ ПРАВИЛЬНО:
      $bot->sendMessage($Update->getMessage()->getChat()->getId(), $answer, ‘HTML’, false, false, null, $keyboard2);

      а вот так ПРАВИЛЬНО:
      $bot->sendMessage($Update->getMessage()->getChat()->getId(), $answer, ‘HTML’, false, null, $keyboard2);

    Gopher

    А сессии кто нибудь юзал в ботах? Вычитал такую штуку, что вроде как их не получается использовать в ботах. Как вариант, один немчик свой класс запилил и в мускуле хранит переменные. https://pius-ladenburger.de/blog/2016/03/14/a-session-with-a-telegram-bot/ Может кто лучше выход нашел?

    Иван

    Нужна помощь, уже второй день не могу понять как тут реализовать казалось бы очень простую задачу: диалоговый ввод?
    Например нужно получить 3 строки от пользователя
    нажимаем на кнопку ввести данные и бот нас последовательно спрашивает 3 вопроса и запоминает на них ответы, спрашиваю именно про вложенный цикл и последовательный структурированный ввод, что бы можно было либо принять данные(проверить через рег выражение) или отклонить их, что бы нельзя было уйдти в другое меню(кроме /start) просто вбив команду в чат.

    Вот так:
    1: Как к вам обращаться? (Ответ либо имя либо /start)
    Ответ: Иван
    2: Сколько вам лет? (Ответ либо число либо /start)
    Ответ: 19
    3: Введите вашу почту (Ответ либо почта либо /start)
    Ответ: [email protected]

    Ну и на выходе получить эти 3 значения.

    Alex

    Александр, извиняюсь, случайно не встречались с такой ошибкой?

    Fatal error: Uncaught exception ‘TelegramBot\Api\HttpException’ with message ‘couldn’t open file «sitename»‘ in /home/u/upswee4g/sitename.ru/public_html/test/revcom_bot/vendor/telegram-bot/api/src/BotApi.php:245 Stack trace: #0 /home/u/upswee4g/sitename.ru/public_html/test/revcom_bot/vendor/telegram-bot/api/src/BotApi.php(212): TelegramBot\Api\BotApi->executeCurl(Array) #1 /home/u/upswee4g/sitename.ru/public_html/test/revcom_bot/vendor/telegram-bot/api/src/BotApi.php(321): TelegramBot\Api\BotApi->call(‘sendMessage’, Array) #2 [internal function]: TelegramBot\Api\BotApi->sendMessage(‘@sitename’, ‘\xD0\xA2\xD0\xB5\xD1\x81\xD1\x82’) #3 /home/u/upswee4g/sitename.ru/public_html/test/revcom_bot/vendor/telegram-bot/api/src/Client.php(405): call_user_func_array(Array, Array) #4 /home/u/upswee4g/sitename.ru/public_html/test/revcom_bot/index.php(24): TelegramBot\Api\Client->__call(‘sendMessage’, Array) #5 /home/u/upswee4g/sitename.ru/public_html/test/revcom_bot/index.php(24): TelegramBot\Api\Client->sendMess in /home/u/upswee4g/sitename.ru/public_html/test/revcom_bot/vendor/telegram-bot/api/src/BotApi.php on line 245

    Виталий

    а в этой библиотеке тип https://core.telegram.org/bots/api#keyboardbutton не поддерживается, как я понял?

    Killian

    Спасибо за исходники! Я новичок в написании ботов. Как я понял нужно загрузить на хостинг с https. Я так и сделал. но у меня не сработало ничего. Шел по инструкции но не получается. Буду благодарен помощи. Спасибо.

    Killian

    У меня такая же ошибка выдается

    Fatal error: Uncaught Error: Call to undefined function TelegramBot\Api\json_decode() in /home/lessivet/public_html/vladislavgoffman.com/bot/vendor/telegram-bot/api/src/BotApi.php:276 Stack trace: #0 /home/lessivet/public_html/vladislavgoffman.com/bot/vendor/telegram-bot/api/src/BotApi.php(210): TelegramBot\Api\BotApi::jsonValidate(‘{«ok»:true,»res…’, true) #1 /home/lessivet/public_html/vladislavgoffman.com/bot/vendor/telegram-bot/api/src/BotApi.php(415): TelegramBot\Api\BotApi->call(‘setWebhook’, Array) #2 [internal function]: TelegramBot\Api\BotApi->setWebhook(‘https://vladisl…’) #3 /home/lessivet/public_html/vladislavgoffman.com/bot/vendor/telegram-bot/api/src/Client.php(196): call_user_func_array(Array, Array) #4 /home/lessivet/public_html/vladislavgoffman.com/bot/index.php(34): TelegramBot\Api\Client->__call(‘setWebhook’, Array) #5 {main} thrown in /home/lessivet/public_html/vladislavgoffman.com/bot/vendor/telegram-bot/api/src/BotApi.php on line 276

    юзер

    Привет я могу залить этот скрипт в хост и он сразу начинает работать да? после замены токна или сертификат и прочие надо получить?

    Артём

    Отличные статьи. Нашёл всё что нужно.
    Вопрос.
    Есть ли готовый вариант скипта кнопок «лайк» и «дизлайк»?
    Очень помогло бы

    Александр

    Привет, не могу понять, какой командой удалить кнопку под сообщением. Т.е. я показал юзеру кнопку под сообщением и при определенном событии мне нужно её убрать. Так можно сделать вообще? )

    Дмитрий

    Здрасте подскажите, а как можно построить диалог, т.е. есть кнопки они отлавливаются, после нажатия идет уточнение в сообщении как его словить ((, пробовал вот таким кодом
    $bot->on(function($Update) use ($bot){

    $message = $Update->getMessage();
    $mtext = $message->getText();
    $cid = $message->getChat()->getId();

    if(mb_stripos($mtext,’Информация’) !== false){

    $bot->sendMessage($cid, ‘Введите текст для поиска’);

    $bot->on(function($Update) use ($bot){
    $messageInfo = $Update->getMessage();
    $mtextInfo = $message->getText();
    $cidInfo = $message->getChat()->getId();
    $bot->sendMessage($cidInfo, $mtextInfo);
    }, function($messageInfo) use ($name){
    return true;
    });
    }
    if(mb_stripos($mtext,’Услуги’) !== false){

    $bot->sendMessage($cid, ‘Услуги!’);

    }

    if(mb_stripos($mtext,’Магазин’) !== false){

    $bot->sendMessage($cid, ‘Магазин!’);

    }

    }, function($message) use ($name){
    return true;
    });

    Дмитрий

    решено :

    $bot->on(function($Update) use ($bot){
    
    $message = $Update->getMessage();
    $mtext = $message->getText();
    $cid = $message->getChat()->getId();
    
    if(file_exists($_SERVER[‘DOCUMENT_ROOT’].’/bot/ctrigger.data’)){ // если есть триггер
    
    unlink($_SERVER[‘DOCUMENT_ROOT’].’/bot/ctrigger.data’);// удаляем триггер
    
    if(empty($mtext)){ // ошибка
    $bot->sendMessage($message->getChat()->getId(), "ашипке, начальника");
    } else {
    // работаем
    $answer = ‘Спасибо’.$mtext;
    $bot->sendMessage($message->getChat()->getId(), $answer);
    }
    }
    
    if(mb_stripos($mtext,’Информация’) !== false){
    
    file_put_contents($_SERVER[‘DOCUMENT_ROOT’].’/bot/ctrigger.data’,’1′);
    
    $bot->sendMessage($cid, ‘Введите текст для поиска’);
    
    }
    if(mb_stripos($mtext,’Услуги’) !== false){
    
    $bot->sendMessage($cid, ‘Услуги!’);
    
    }
    
    if(mb_stripos($mtext,’Магазин’) !== false){
    
    $bot->sendMessage($cid, ‘Магазин!’);
    
    }
    
    }, function($message) use ($name){
    return true;
    });
    Сергей

    А нету ли у Вас расширенного примера как производить оплату при помощи данной библиотеки?
    Что-то не получается у меня обработать answerPreCheckoutQuery

    NaDejDa_2016

    Привет, извините, что отвлекаю, но не подскажите как организовать сбор данных о пользователе через телеграмм бот? Нужно собрать username или телефон пользователя и занести в базу данных. Я PHP начала осваивать недавно, прошу сильно не пинать.

      NaDejDa_2016

      Уже не надо, разобралась сама)

    Владимир

    Здравствуйте. Спасибо за замечательный пример. Это мой первый опыт в «бото-написании» причем со скромным опытом в ООП, но получилось установить и настроить с первого раза!
    Сам пробую на базе вашего примера написать мини бот для опроса (с ответами типа Да Нет). Опрос — это дерево вопросов, по которому пользователь добирается к результату по одной из веток. Вопросов может быть до 10. Используется анализ ответов в том числе с помощью оператора switch в цикле. Цикл создается внутри блока
    $bot->on(function($Update) use ($bot){
    ….
    }, function($message) use ($name){
    return true; // когда тут true — команда проходит
    });
    Проблема в том, что при каждом новом ответе, переменные цикла сбрасываются в начальное значение т.е. проходит только 1 вопрос, который потом постоянно повторяется.
    Что вы можете посоветовать.
    Прошу прощения за много букв и если отвлекаю от важных дел.

    Да, и WM нету. Какие еще варианты для доната?

    Василиса

    Здравствуйте. Прошу вашей помощи. Мне нужно сделать InlineKeyboardMarkup вида: http://site.com/cash?table=. Number занесен в таблицу mysql. Не понимаю как правильно нужно составить запрос…

    Дмитрий

    Здравствуйте. Очень хорошие примеры реализации. Если Вас не затруднит есть два вопроса: как реализовать отправку карты по координатам и возможна ли реализация галереи с загрузкой фотографий постранично (стрелочками вправо-влево).

    Александр

    Простите пожалуйста, уже месяц бьюсь но никак не могу сделать подключение БД корректно, да так что бы еще пользователям разсылать сообщения 🙁
    Например в txt пишем текст, и при вызове он по всем пользователям у кого бот авторизован отсылал…
    Заранее огромное спасибо за помощь и долгих лет жизни!

    Иван

    А получится сделать с помощью такого бота голосование?
    Ну типа 10 вопросов, каждый дает баллы, в конце результат в зависимости от баллов выдается, результатов 5…
    Если можно помогите плиз

    Иван

    Тогда еще вопрос, может быть поможете прикрутить к нему онлайн оплату? 🙂 не могу сообразить никак

    Aganim

    Всем добрый вечер )
    Мог бы кто помочь с отложенным постингом сообщения юзеру?
    Суть дилемы такова, что не знаю как все разрешить относительно команд бота.
    Прилагаю кусок который нужно засунуть в какую-то функцию бота, что бы он проверял его время от времени.

    $query_time_post = $conn->query(‘SELECT timetopost FROM post WHERE timetopost IS NOT NULL’);
    $text_query = $conn->query(«SELECT textpost FROM post WHERE WHERE timetopost = ‘$query_time_post'»);
    $text_post = $text_query->fetch_row();
    $posting_in_channel = $query_time_post->fetch_row();
    $time_in_db = gmdate(‘h:i:s’,time());

    if($time_in_db == reset($posting_in_channel)){
    $bot->sendMessage($message->getChat->getId(),reset($text_post));
    }

    Марина

    Уважаемый Автор!
    Выше вы писали как отправлять сообщения пользователям, с помощью id в файле uids
    Так вот вопрос, как к этому прикрутить Реакции? (лайк и пр.), но так что бы у всех обновлялось кол-во?

    Например мини опрос и тп.
    Спасибо за труды 🙂

    TakeLawliet

    подскажите пожалуйста какой цикл жизни у chat_ID? нето при попытке рассылки сообщений ботом людям которые к нему не обращались больше 7 дней получаю ошибку:

    Fatal error: Uncaught exception ‘TelegramBot\Api\HttpException’ with message ‘Forbidden’ in /home/bzzwuser/public_html/vendor/telegram-bot/api/src/BotApi.php:261 Stack trace: #0 /home/bzzwuser/public_html/vendor/telegram-bot/api/src/BotApi.php(241): TelegramBot\Api\BotApi::curlValidate(Resource id #9) #1 /home/bzzwuser/public_html/vendor/telegram-bot/api/src/BotApi.php(210): TelegramBot\Api\BotApi->executeCurl(Array) #2 /home/bzzwuser/public_html/vendor/telegram-bot/api/src/BotApi.php(317): TelegramBot\Api\BotApi->call(‘sendMessage’, Array) #3 [internal function]: TelegramBot\Api\BotApi->sendMessage(‘204769608’, ‘\xD0\x92\xD1\x8B \xD0\xB7\xD0\xB0\xD0\xBD\xD1\x8F\xD0\xBB…’) #4 /home/bzzwuser/public_html/vendor/telegram-bot/api/src/Client.php(196): call_user_func_array(Array, Array) #5 /home/bzzwuser/public_html/daily_reward.php(69): TelegramBot\Api\Client->__call(‘sendMessage’, Array) #6 /home/bzzwuser/public_html/daily_reward.php(69): TelegramBot\Api\Client->sendMessage(‘204769608’, ‘\xD0\x92\xD1\x8B \xD0\xB7\xD0\xB0\xD in /home/bzzwuser/public_html/vendor/telegram-bot/api/src/BotApi.php on line 261

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

      TakeLawliet

      все разобрался. просто эти пользователи выключили бота… а как делать обработку чтобы проверить без фатал эррора таких пользователей?

        TakeLawliet

        try {
        $bot->sendchataction(336269625,’typing’);
        }
        catch (Exception $e) {
        echo $e->getmessage();
        }
        if (mb_stripos($e,»Forbidden») !== false) {
        echo «в топку эту запись!»;
        }

        Ифом обрабатываем запись и и где получаем ошибку или удаляем из базы данных или ставим метку что человек выключил бота, вдруг потом включит обратно и его данные пригодятся ему в будущем. Периодически хроном или вручную запускаем эту проверку чтобы отфильтровать мертвых пользователей из базы.

    Иван

    Доброго времени суток, Aftamat4ik.
    Так и не нашёл метод возвращающий имя пользователя, который подключился к боту.
    Есть ли вообще такая возможность в данной библиотеке, если нет, то какой лучше использовать?

    Карл

    Привет! Полезная статья, спасибо!

    А как сделать кнопки с emoji (http://www.unicode.org/emoji/charts/full-emoji-list.html)
    И как их потом отлавливать?

    Balumba

    Добрый вечер. Подскажите пожалуйста. Можно ли в сообщении от бота слать отформатированный html ем текст, картинки, ссылки и прочее. Хочу красиво оформить постинг в канале, но бот не понимает разметку и шлёт текстом.
    Отправлял с помощью
    if($_POST[‘ver’]){
    $soobshen = ‘…….’;
    $bot->sendMessage($id, «$soobshen»);
    };

    Заранее спасибо!

    TakeLawliet

    Здравствуйте еще раз. не могу наладить замену инлайн кнопок. получаю ошибку:
    [11-Apr-2018 08:56:32 UTC] PHP Fatal error: Uncaught exception ‘TelegramBot\Api\HttpException’ with message ‘Bad Request’ in /home/bzzwuser/public_html/vendor/telegram-bot/api/src/BotApi.php:261
    Stack trace:
    #0 /home/bzzwuser/public_html/vendor/telegram-bot/api/src/BotApi.php(241): TelegramBot\Api\BotApi::curlValidate(Resource id #11)
    #1 /home/bzzwuser/public_html/vendor/telegram-bot/api/src/BotApi.php(210): TelegramBot\Api\BotApi->executeCurl(Array)
    #2 /home/bzzwuser/public_html/vendor/telegram-bot/api/src/BotApi.php(1002): TelegramBot\Api\BotApi->call(‘editMessageText’, Array)
    #3 [internal function]: TelegramBot\Api\BotApi->editMessageReplyMarkup(336269625, 26400, Object(TelegramBot\Api\Types\Inline\InlineKeyboardMarkup))
    #4 /home/bzzwuser/public_html/vendor/telegram-bot/api/src/Client.php(196): call_user_func_array(Array, Array)
    #5 /home/bzzwuser/public_html/index.php(303): TelegramBot\Api\Client->__call(‘editMessageRepl…’, Array)
    #6 /home/bzzwuser/public_html/index.php(303): TelegramBot\Api\Client->editMessageReplyMarkup(336269625, 26400, Object( in /home/bzzwuser/public_html/vendor/telegram-bot/api/src/BotApi.php on line 261

    код выдающий ошибку взят из статьи и просто добавлены две строчки:
    $keyboard = new \TelegramBot\Api\Types\Inline\InlineKeyboardMarkup(
    [[[‘callback_data’ => ‘data_test2’, ‘text’ => ‘ОтветЪ’],[‘callback_query’ => ‘data_test’, ‘text’ => ‘новая кнопка!!!!!’]]]);
    $bot->editMessageReplyMarkup($chatId, $message->getMessageId(),$keyboard);

      TakeLawliet

      все разобрался) нужно было обновить с гитхаба апи.

    ali-baba

    Ребят помогите как сделать request_contact добавить кнопку в бот, чтобы клиент мог отправить мне свои контакт!

    igor

    Был один бот работал все норм, сменил токен, теперь не тот и не тот не работает
    Помогите

Добавить Комментарий