Я начал программировать бот телеграммы, и у меня проблема. когда я отправляю/запускаю команду, он отправляет мне приветственное сообщение (как я его запрограммировал), но он не отправляет его один раз! он продолжает посылать его бесконечно, как цикл!
это источник:
‘); function makereq($method,$datas=[]) < $url = «https://api.telegram.org/bot».API_KEY.»/».$method; $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($datas)); $res = curl_exec($ch); if(curl_error($ch))< var_dump(curl_error($ch)); >else < return json_decode($res); >> $website = «https://api.telegram.org/bot».API_KEY; $update = json_decode(file_get_contents(‘php://input’)); $chat_id = $update->message->chat->id; $message_id = $update->message->message_id; $from_id = $update->message->from->id; $name = $update->message->from->first_name; $username = $update->message->from->username; $textmessage = isset($update->message->text)?$update->message->text:»; $reply = $update->message->reply_to_message->forward_from->id; $stickerid = $update->message->reply_to_message->sticker->file_id; $messageEntity = $update->messageentity->type; function SendMessage($ChatId, $TextMsg) < makereq(‘sendMessage’,[ ‘chat_id’=>$ChatId, ‘text’=>$TextMsg, ‘parse_mode’=>»MarkDown»] ); > if($textmessage == ‘/start’) < SendMessage($chat_id,»); > ?>
Лучший ответ:
Возможно, вы используете webhook. Если вы не отвечаете с http-статусом 200, телеграмма bot api думает, что с вашим сервером что-то не так, и запрашивает снова каждые несколько секунд (как указано в документации api: “В случае неудачного запроса мы сдадимся после разумное количество попыток.” ).
Почему чат-бот не отвечает. ТОП 10 советов
Поэтому просто добавьте header(«HTTP/1.1 200 OK»); в ваш script и voilà! (Если ваша версия php больше 5.4, вы можете использовать http_response_code(200); )
Если вы polling с getUpdates , вам нужно увеличить свой смещение.
offset = 1 + latest_update_id
ЕСЛИ вы используете WebHooks … https://core.telegram.org/bots/api#update update_id
Уникальный идентификатор обновления. Идентификаторы обновлений начинаются с определенное положительное число и увеличиваться последовательно. Этот идентификатор становится особенно удобно, если вы используете Webhooks, поскольку он позволяет вам игнорировать повторяющиеся обновления или восстановить правильную последовательность обновления, если они выйдут из строя.
Как сказал Yoily L, вам нужно вернуться 200 до того, как телеграмма подумает, что запрос провалился.
Вы можете использовать fastcgi_finish_request() для сброса данных ответа клиенту.
http://php.net/manual/en/function.fastcgi-finish-request.php
http_response_code(200); fastcgi_finish_request(); // continue execution, send messages and whatever
Также обратите внимание на то, что tuxrampage прокомментировала в документах:
script будет по-прежнему занимать FPM-процесс после fastcgi_finish_request() . Так что чрезмерно использовать его для длительной работы задачи могут занимать все ваши потоки FPM до pm.max_children . Это будет приводят к ошибкам шлюза на веб-сервере.
Еще одна важная вещь – обработка сеанса.
Сеансы заблокированы как если они активны (см. документацию для session_write_close() ). Это означает, что последующие запросы блокируют пока сеанс не будет закрыт.
Поэтому вы должны позвонить session_write_close() как можно скорее (даже до fastcgi_finish_request() ), чтобы разрешить последующие запросы и хороший пользовательский интерфейс.
Это также относится ко всем другим методам блокировки как стая или например, блокировки базы данных. Пока блокировка активна после запросы могут быть bock.
Вероятно, вы захотите проверить
if (is_callable(‘fastcgi_finish_request’))
Источник: techarks.ru
Telegram webhook php бот не отвечает
Я пытаюсь настроить бот-телеграмму с помощью веб-крючка. Я могу заставить его работать с getUpdates, но я хочу, чтобы он работал с webhook.
На моем сайте (на котором размещен скрипт php бота) работает SSL-сертификат (я получаю зеленую блокировку в адресной строке):
Я настроил веб-крючок с
https://api.telegram.org/bot/setwebhook?url=https://www.example.com/bot/bot.php
(Я не знаю, имеет ли это значение, но я дал права rwx и папке, и сценарию)
; $website = «https://api.telegram.org/bot».$botToken; #$update = url_get_contents(‘php://input’); $update = file_get_contents(‘php://input’); $update = json_decode($update, TRUE); $chatId = $update[«message»][«chat»][«id»]; $message = $update[«message»][«text»]; switch($message) < case «/test»: sendMessage($chatId, «test»); break; case «/hi»: sendMessage($chatId, «hi there!»); break; default: sendMessage($chatId, «default»); >function sendMessage ($chatId, $message) < $url = $GLOBALS[website].»/sendMessage?chat_id=».$chatId.»>2 phptelegramtelegram-botwebhooks
Решение
По твоему вопросу не понятно местоположение скрипта. Видя ваш код, кажется, что вы пытаетесь загрузить запрос через url_get_contents получить ответ сервера телеграммы. Это правильный метод, если ваш бот работает без webhook. В противном случае, после настройки webhook, вы должны обработать входящий Запросы.
Т.е., если вы установите webhook в https://example.com/mywebhook.php, в вашем https://example.com/mywebhook.php Сценарий вы должны написать что-то вроде этого:
elseif( !isset($request[‘update_id’]) || !isset($request[‘message’]) ) < // Some Error output (request has not message) >else < $chatId = $request[‘message’][‘chat’][‘id’]; $message = $request[‘message’][‘text’]; switch( $message ) < // Process your message here >>
Другие решения
Других решений пока нет …
Источник: web-answers.ru
Что делать если бот в телеграмме не отвечает?
Итак, если бот не выдает никакой реакции на ваши команды, причин может быть много. Например, неверная формулировка команды, наличие ошибок в коде бота, устаревшая версия мессенджера, блокировка или удаление профиля бота в сервисном центре самого Телеграмма и многое другое.
Как сделать чтобы бот отвечал в телеграмме?
Как запустить бота в телеграмме?
Что делать если Controller Bot не работает?
В итоге помогло следующее: нужно зайти в controllerbot. Ввести команду: управление каналами: /mychannels. Выбрать канал и нажать кнопку «обновить данные». Потом зайти в бот, привязанный к controllerbot и попробовать что-нибудь запостить в канале, где обновили данные.
Как обойти блокировку бота в телеграмме?
- Откройте бот Telegram Proxy Bot.
- Нажмите Запустить.
- Выберите язык.
- Нажмите на ссылку, которую прислал бот.
- Примите настройки бота.
- Готово.
Как узнать команды бота в телеграмме?
Чтобы определить функционал бота, в личной переписке нужно ввести символ «/», после чего пользователю предоставится список поддерживаемых команд и их описание.
Как настроить чат бот в телеграмм?
Что может делать бот в телеграмме?
Через Telegram API боты могут получать по запросу сообщения в любом чате по их id. id сообщений в супергруппах и каналах уникальны для чата: первое сообщение в чате имеет номер 1, второе имеет номер 2 и так далее.
Кто такой бот в чате?
Чат-боты — это программы, которые автоматизируют общение с пользователями. Например, человек делает заявку на заказ, а бот отвечает по заданному сценарию.
Как запустить бота Телеграм Python?
Как общаться с ботом в телеграмме?
Какие есть боты в телеграмме?
- Yandex. Translate. Инструмент, интегрированный с переводчиком Яндекса .
- Voicy. Переводчик голосовых сообщений в текстовые .
- SaveAsBot. Загрузчик любого контента из Instagram и TikTok. .
- Remind me. Инструмент для быстрых напоминаний .
- Meming Bot. Инструмент для создания мемов в чатах
Как добавить канал в Контроллер бот?
Как добавить бот в канал Телеграм?
В меню ищите «Управление каналом» или Manage Channel. Нажимайте Добавить администратора. Далее щелкните на значок лупы (поиск) и вводите название своего бота. Щелкайте по найденному и устанавливайте для него права.
Источник: dmcagency.ru