Бот не пересылает сообщения в группу Телеграмм

Я начал программировать бот телеграммы, и у меня проблема. когда я отправляю/запускаю команду, он отправляет мне приветственное сообщение (как я его запрограммировал), но он не отправляет его один раз! он продолжает посылать его бесконечно, как цикл!
это источник:

‘); 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: “В случае неудачного запроса мы сдадимся после разумное количество попыток.” ).
Поэтому просто добавьте 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 из PowerShell

Уведомления, получаемые от систем мониторинга, стали неотъемлемой частью специалистов занимающихся сопровождением информационных систем. Однако, мир не стоит на месте и все чаще появляются новые способы оповещения. К традиционным средствам оповещения о состоянии информационных систем: электронная почта и SMS добавились новые средства доставки уведомлений, такие как мессенджеры. Наибольшей популярностью, для этой цели, у системных администраторов стал мессенджер Telegram. А в системах мониторинга появилась возможность настраивать интеграцию с мессенджерами, с целью оперативной рассылки уведомлений.
Но что делать если централизованной системы мониторинга нет, или в ней нет особой необходимости, а потребность получать уведомления в Telegram есть.
Ниже описан один из способов пошаговой настройки для отправки сообщений в Telegram используя PowerShell.

Допустим наш бот будет называться UserMan.ru и иметь идентификатор UserManRu_bot.

В ответ придет уникальный token для созданного бота, который будет использоваться при отправке сообщений.
Например боту UserManRu_bot был присвоен токен: 819090298:AAGjXP6QLPMkem9t2LflIHOAiE_Q58bA43g

2. Создать группу в Telegram и получить ее идентификатор
Для получения идентификатора группы необходимо создать новую группу в Telegram (или использовать имеющуюся группу) и добавить туда созданного бота UserManRu_bot. А для получения идентификатор учетной записи следует отправить боту UserManRu_bot сообщение /Start и любое тестовое сообщение.

Затем необходимо проверить историю обращений которые были к боту, используя запрос ниже:

https://api.telegram.org/bot/getUpdates
В случае с ботом UserManRu_bot это будет:
https://api.telegram.org/bot819090298:AAGjXP6QLPMkem9t2LflIHOAiE_Q58bA43g/getUpdates

В результате мы увидим уникальный идентификатор пользователя (наш идентификатор), он нам понадобится при отправке сообщений
А также уникальный идентификатор группы

<«ok»:true,»result»:[<«update_id»:146972760, «message»:<«message_id»:2,»from»:172489755,»is_bot»:false,»first_name»:»Test»,»last_name»:»Test»,»username»:»mynick»,»language_code»:»en»>,»chat»:,»date»:1553259454,»text»:»Test»>>,,»chat»:-347310642,»title»:»UserMan.ru»,»type»:»group»,»all_members_are_administrators»:true>,»date»:1553257968,»group_chat_created»:true>>]>

Из этого набора символов в формате JSON определяем ID пользователя, который отправил сообщение «Test»: 172489755
и Id группы в которую добавили бота: -347310642

  • token — Уникальный идентификатор, который был получен при создании бота
  • chat_id — уникальный идентификатор пользователя или группы. Он определяется запросом getUpdates
  • text — текст сообщения, которое необходимо направить
Еще по теме:  Телеграмм сохраняет все в телефоне

https://api.telegram.org/bot/sendMessage?chat_id=text=Hello

Вставляем этот запрос в адресную строку браузера и переходим по ссылке. Сообщение Hello должно прийти сообщение в группу.

4. Сформировать скрипт для отправки сообщения
Чтобы сформировать и выполнить Web запрос выше, используя PowerShell, потребуется небольшой скрипт. Пример скрипта показан ниже:

$token = «819090298:AAGjXP6QLPMkem9t2LflIHOAiE_Q58bA43g» $chat_id = «-347310642» $text = «Hello World!» $URI = «https://api.telegram.org/bot» + $token + «/sendMessage?chat_id=» + $chat_id + «>ID чата всегда начинается со знака минус, а ID пользователя всегда без знака минус
5. Использование Proxy для отправки запроса
Если вы используете в своей сети прокси сервер или ваш провайдер запрещает доступ к telegram, то можно добавить к PowerShell командлету Invoke-WebRequest параметр -Proxy с указанием прокси сервера и порта, с которых разрешен доступ к Telegram. В этом случае скрипт будет иметь вид:
$token = «819090298:AAGjXP6QLPMkem9t2LflIHOAiE_Q58bA43g» $chat_id = «-347310642» $text = «Hello World!» $URI = «https://api.telegram.org/bot» + $token + «/sendMessage?chat_id=» + $chat_id + » + $text $Request = Invoke-WebRequest -URI ($URI) -Proxy «http://134.19.218.94:3128»

Где, 134.19.218.94:3128 — это один из примеров открытого прокси сервера.

Источник: userman.ru

Отправка сообщений в Telegram из PHP с обычного аккаунта в обход ограничений Bot API

Отправлять сообщения в Телеграм от бота очень просто, но есть крайне неудобная проблема: из-за ограничений Telegram Bot API бот не может писать первым. То есть, сначала пользователь, которому вы собрались что-нибудь отправить, должен первым написать вашему боту любое сообщение. Это ограничение вполне разумно и предотвращает спам сообщениями от ботов, но очень мешает честным людям. Например, отправлять сервисные сообщения с информацией о заказе в интернет-магазине.

Решение этой проблемы только одно: не использовать ботов. Придётся всё делать с обычного аккаунта.

Копаться в подробностях телеграмовского протокола MTProto не нужно, как оказалось, всё уже сделано до нас. Для PHP существует чудесная библиотека MadelineProto. Её мы и будем использовать, ниже пошаговая инструкция.

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

2. Нужно зарегистрировать приложение. Просто формальная процедура. Для этого идём на сайт https://my.telegram.org/, логинимся через ваш аккаунт в Телеграме. Лучше всего, чтобы этот аккаунт не совпадал с акаунтом из пункта 1. Далее переходим на страницу https://my.telegram.org/apps, заполняем поля (платформа — Web, остальное не так важно), отправляем форму. Всё готово — приложение создано. Вас перенаправит на страницу настроек, запоминаем оттуда поля App api_id и App api_hash, остальное не нужно.

Еще по теме:  Как найте человека Телеграм груп по номер телефон

3. Теперь нужно установить библиотеку MadelineProto. Делается это очень легко. Создаём на веб-сервере папку, в неё помещаем php-файл (например, index.php) со следующим содержимым:

include ‘madeline.php’; $MP = new danogMadelineProtoAPI(‘session.madeline’); $MP->start();

Созданный скрипт должен иметь права на запись в папку. Библиотека требует PHP 7, но у меня всё завелось на PHP 5.6.

4. Запускаем созданный php-файл из браузера. На первом шаге выбираем Manually, затем вставляем значения полей App api_id и App api_hash из пункта 2, ждём, выбираем User, указываем телефонный номер акаунта из пункта 1, получаем на него смс, вводим код, готово — вы залогинились в Телеграме из вашего веб-приложения.

5. Переходим непосредственно к программированию. Весь код мы будем дописывать в имеющийся php-файл из пункта 3. У библиотеки MadelineProto есть хорошая документация, но некоторые моменты не очень понятны с первого раза.

Для отправки сообщений нужно использовать метод sendMessage :
$MP->messages->sendMessage([‘peer’ => », ‘message’ => »]);

Здесь peer — ID получателя, message — текст сообщения. И вот тут есть загвоздка: а где, собственно, взять айдишник пользователя, которому мы будем слать сообщения, если мы знаем только номер телефона?

Для этого проще всего добавить телефон получателя во внутренний список контактов. Делается это так:
$contact = [‘_’ => ‘inputPhoneContact’, ‘client_id’ => 0, ‘phone’ => ‘+79xxxxxxxxx’, ‘first_name’ => », ‘last_name’ => »]; $import = $MP->contacts->importContacts([‘contacts’ => [$contact]]); // $import[‘imported’][0][‘user_id’] — ID пользователя

Здесь мы указываем phone — номер телефона, first_name и last_name — имя и фамилия (можно указать любые, это не важно). В переменной $import[’imported’][0][’user_id’] будет содержаться ID нашего получателя. Хорошо бы его куда-нибудь сохранить у себя, чтобы можно было использовать дальше.

Использовать данный метод для рассылки спама бесполезно — аккаунт довольно быстро заблокируют по жалобам пользователей.

Источник: kirkizh.ru

Рейтинг
( Пока оценок нет )
Загрузка ...