Ответы пользователя по тегу PHP
  • Почему отправка csv файла в Телеграм не работает?

    @ambal245 Автор вопроса
    Решением было в Python файле печатать json, а в PHP файле декодировать строку.
    Строки из файлов может кто столкнется с этой проблемой
    #python файл 
    rt = {"file":str(name) + ".csv"}
    print(json.dumps(rt, ensure_ascii = 'False'))

    // php файл 
    $filename = json_decode($output, true);
    $document = new CURLFile($filename['file']);
    Ответ написан
    Комментировать
  • Не выводятся кнопки в ряд php?

    @ambal245
    $url = "https://qna.habr.com/q/1093980";
    $buttons[] = $this->buildInlineKeyBoardButton('Кнопка 1', '1');
    $buttons[] = $this->buildInlineKeyBoardButton('Кнопка 2', '2');
    $buttons[] = $this->buildInlineKeyBoardButton('Кнопка 3', '3');
    $buttons[] = $this->buildInlineKeyBoardButton('Кнопка 4', '', $url );
    $buttons[] = $this->buildInlineKeyBoardButton('Кнопка 5', '5');
    // разбиваем кнопки по рядам
    array_chunk($buttons, 3); // 3 кнопки в ряду
    
    public function buildInlineKeyboardButton($text, $callback_data = '', $url = '')  {
            // рисуем кнопке текст
            $replyMarkup = [  'text' => $text,  ];
            // пишем одно из обязательных дополнений кнопке
            if ($url != '') { 
                 $replyMarkup['url'] = $url;
            } elseif ($callback_data != '') {
                 $replyMarkup['callback_data'] = $callback_data;
            }
            // возвращаем кнопку
            return $replyMarkup;
        }
        public function buildInlineKeyBoard(array $options)  {
            // собираем кнопки
            $replyMarkup = [
                'inline_keyboard' => $options,  ];
            // преобразуем в JSON объект
            $encodedMarkup = json_encode($replyMarkup, true);
            // возвращаем клавиатуру
            return $encodedMarkup;
        }
    Ответ написан
    Комментировать
  • Как использовать editMessageMedia в телеграмм боте для изменения изображёний?

    @ambal245
    Формулирование все также, только фото нужно передавать в JSON-сериализованном ввиде.
    $photo = [  'type'=> 'photo',
                       'media' => 'здесь параметры картинки file_id или url',
                       'caption' => 'ТЕКСТ',
                       'parse_mode' => 'html'
                            ]
    $fields = ['chat_id' => 'id чата ', 
                    'message_id' => 'message_id',  //id сообщения 
                    'media' => json_encode($photo), 
                    'reply_markup' => json_encode($buttons)]; // если есть кнопки
    // отправляем методом CURL
    $ch = curl_init('https://api.telegram.org/bot' . $token . '/editMessageMedia');
            curl_setopt_array($ch, array(
                CURLOPT_POST => count($fields),
                CURLOPT_POSTFIELDS => http_build_query($fields),
                CURLOPT_SSL_VERIFYPEER => 0,
                CURLOPT_RETURNTRANSFER => 1,
                CURLOPT_TIMEOUT => 10
            ));
            $r = json_decode(curl_exec($ch), true);
            curl_close($ch);
            return $r;
    Ответ написан
    Комментировать
  • Как сделать бота в телеграм для приема сообщений с сайта на PHP?

    @ambal245
    1 регистрируем нового бота и получаем токен.
    2 в поиске вводим @name_bot (name - название бота ) запускаем бота и тут же отправляем любое сообщение
    3 переходим по ссылке с токеном бота (===>>>https://api.telegram.org/bot"TOKEN"/getUpdates)и в поле chat получаем свой id

    $botToken="Токен бота";
        $website="https://api.telegram.org/bot".$botToken;
        $chatId=000000000;  //свой ID в телеграм
        $params=[
          'chat_id'=> $chatId, 
          'text'=> "Имя = {$posted_data["your-name"]} // Данные с формы
    Email = {$posted_data["your-email"]}
    Сообщение = {$posted_data["message"]}"
      ];
      $ch = curl_init($website . '/sendMessage');
      curl_setopt($ch, CURLOPT_HEADER, false);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, ($params));
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
      $result = curl_exec($ch);
      curl_close($ch);
    Ответ написан
    Комментировать
  • Кнопка в телеграм боте на php?

    @ambal245
    Перед отправки сообщения нужно проверить существования юзера, после распарсить полученную команду /start. При запуске бота по вашей ссылке в переменную $data['message']['text'] передается следующие параметры: /start worksheet3de89191
    $data['message']['text'] => '/start worksheet3de89191'

    Удалив командой str_replace параметр (/start ) получите данные которые можете использовать в дальнейшем для перенаправления на заполнения анкеты.
    Ответ написан
    Комментировать
  • Отправить команду с inline keyboard TELEGRAM?

    @ambal245
    Никак. Пользователь должен сам нажать на кнопку START. То что вы передаете (UTM метка) - для отслеживания откуда перешли в бота.
    Ответ написан
    1 комментарий
  • Как правильно обрабатывать нажатие inline-keyboard telegram bot api?

    @ambal245
    Для выполнения действий нужно использовать следующие параметры
    if (isset($data['callback_query'])) {
    $chat_id = $data['callback_query']['from']['id']; // Чат куда отправлять ответ
    $a = $data['callback_query']['data']; // Здесь указано что было передано в кнопке (callback_data) у нажатой кнопки
    $text = $data['callback_query']['message']['text']; // Переданное сообщение
    }
    Ответ написан
    Комментировать
  • Как в текст вставить значение переменной first_name в телеграмм боте?

    @ambal245
    Для начало нужно разобрать на переменные то что пришло, а после использовать. Примерная реализация выглядит так:
    $data = json_decode(file_get_contents('php://input'),true);
    $text = $data['message']['text'];
    $chat = $data['message']['chat']['id'];
    $first_name = $data['message']['from']['first_name'];
      if ($text){
             if (strtolower($text) == "/start") $bot->reply($chat, " Здравствуй {$first_name} ");
    }
    Ответ написан
    Комментировать
  • При подключении api telegram отдает 500 ошибку?

    @ambal245
    Попробуйте поставить знак минус "-" в параметр id чата.
    // сюда нужно вписать ваш внутренний айдишник
                        define('TELEGRAM_CHATID', '-1142225465');
    Ответ написан
  • Не отправляет форму в телеграм и гугл таблицу?

    @ambal245
    Для отправки данных в Google таблицу нужно задавать данные в таком виде
    $post_data = array (
     "entry.2053498632" => $_POST['name_project']
    );
    Ответ написан
    7 комментариев
  • Как получить статистику бота в Телеграмме или как перевести с python на php?

    @ambal245
    Статистику Google Analytics можно подключить при помощи Measurement Protocol.
    Прописать на каждую команду бота такую функцию пример на php:
    $analytics = file_get_contents("https://www.google-analytics.com/collect?v=1&tid=UA-XXXXXXX&t=pageview&dp=%2Fstart")

    параметр dp это команда в вашем боте.

    Но на использование этого протокола лежит ограничение. Если к вашему боту будет большое обращение к командам (от пользователей), то статистика собираться не будет. 500 обращений за сеанс и 200 000 обращений на пользователя в день. Так как бот расположен на определенном сервере с одним IP, то израсходовать лимит не составит большого труда.

    Лучший вариант собрать статистику и отобразить ее - это Mysql.
    Ответ написан