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

Очень полезный помощник для администратора канал в Telegram. Позволяет общаться с подписчиками канала. Все диалоги в одном окне. Возможность использовать весь функционал Телеграм для получения обратной связи.

Вариант бота на Node.js описан в отдельной статье

Начинаем работать

Данные от Bot API приходят в формате application/json, поэтому доступа к ним через массив $_POST нет, и брать их будем в «сыром», необработанном виде через ‘php://input’ используя встроенную функцию PHP file_get_contents(). В работе мы будем использовать кодировку UTF-8, это требование Telegram Bot API. Определим ее в начале скрипта index.php. Создадим класс Bot, для начала добавим ему два приватных свойства и один публичный метод. Очень часто я в коде буду использовать в качестве условного оператора тернарный оператор.

init(‘php://input’); // Класс Bot class Bot < // токен API private $botToken = «34069ХХХХ:XXXXXXXXXXXX-XXXXXXXXXXXXKVW3qILFpY»; // Ваш ID Telegram private $adminId = 123456789; // инициализируем объект класса public function init($data) < >> ?>

Создадим еще один метод, сделаем его приватным т.к. он нужен нам только внутри класса, вызываться из вне как публичный метод init() он не будет. Его задача будет преобразовывать через функцию json_decode() преданные ему данные из JSON в ассоциативный массив, назовем его getData() .

Телеграмм бот для отправки анонимных сообщений. Исходный код в закрепе #python #programming #coding

Для отладки можно создать метод, который будет записывать в файл все результаты работы метода getData(). Это очень удобно, ведь можно посмотреть какую информацию отправляет нам Bot API. На входе он принимает результат метода getData(). Вызывать метод можно вот так: $this->setFileLog($data);

Находим наш бот в Telegram и запускаем его. Бот примет нашу команду Strat/Старт, обработает и запишет результат в файл. Теперь мы можем рассмотреть содержимое файла.

Array ( [update_id] => 22918823 [message] => Array ( [message_id] => 1 [from] => Array ( [id] => 123456789 [is_bot] => [first_name] => Name [last_name] => Surname [language_code] => ru ) [chat] => Array ( [id] => 123456789 [first_name] => Name [last_name] => Surname [type] => private ) [date] => 1512554545 [text] => /start [entities] => Array ( [0] => Array ( [offset] => 0 [length] => 6 [type] => bot_command ) ) ) )

Как видно из содержимого, приходит много служебной информации. Сейчас нас интересует элемент массива $data[‘message’] , который тоже является массивом и содержит в себе информацию, с которой предстоит работать. Проверяя наличие нужных нам ключей в массиве, мы можем определить какой тип данных был отправлен боту. Для данного бота важно определить кто написал, ведь от этого зависит куда направлять сообщение. У нас предусмотрено две роли: администратор и пользователь. Есть еще один участник — это сам бот. Мы его будет определять по специальному флагу, но это чуть позже. * * *

Мои первые ошибки

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

Еще по теме:  Настройка уведомлений Андроид Телеграмм

Решение пришло из официальной документации

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

Три простых шага для отправки сообщения в Telegram используя Python

Отправлять сообщение в телеграмм может оказаться полезным при запуске ресурсоемких операций. Например скрипт который отработал один час, должен отправить вам сообщение о статусе завершившейся операций. Вам вероятно, понадобится простой скрипт, чтобы отправить сообщение, когда ваша операция завершит работу. Для этого мы можем легко написать функцию Python, которая отправляет вам сообщение Telegram всякий раз, когда вы ее вызываете.

Создание Telegram-бота с помощью BotFather

  1. Откройте приложение Telegram и найдите BotFather. (Встроенный бот Telegram, который помогает пользователям создавать собственных ботов Telegram)
  2. Введите /newbot, чтобы создать нового бота.
  3. Дайте вашему боту название.
  4. Скопируйте токен Telegram для вашего нового бота.

Примечание: не загружайте свой токен онлайн, так как любой, у кого есть ваш токен, получит полный контроль над вашим ботом Telegram.

Получение идентификатора chat ID

В Telegram у каждого чата есть идентификатор чата. Нам нужен этот идентификатор для отправки сообщений в Telegram с использованием Python.

  1. Отправьте своему боту в Telegram сообщение (любое)
  2. Запустите этот скрипт Python, чтобы найти свой chat ID

import requests TOKEN = «YOUR TELEGRAM BOT TOKEN» url = f»https://api.telegram.org/bot/getUpdates» print(requests.get(url).json())

Этот скрипт вызывает функцию getUpdates, которая проверяет наличие новых сообщений в чатах. Мы можем найти наш chat ID из возвращенного JSON (тот, что выделен красным)

Note: Если вы не отправите сообщение своему боту в Telegram, ваши результаты могут быть пустыми.

  1. Скопируйте и вставьте идентификатор чата в следующий шаг.

Отправка сообщения Telegram с помощью Python

Скопируйте и вставьте 1) ваш токен бота Telegram и 2) ваш chat ID из предыдущих 2 шагов в следующий скрипт Python. (И также настройте свое сообщение)

import requests TOKEN = «YOUR TELEGRAM BOT TOKEN» chat_id = «YOUR CHAT ID» message = «hello from your telegram bot» url = f»https://api.telegram.org/bot/sendMessage?chat_id= print(requests.get(url).json()) # this sends the message

Запустите скрипт и проверьте свой Telegram!

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

Как настроить push-уведомления в боте Telegram

Telegram — отличная платформа с множеством замечательных пользователей (я сам пользуюсь Telegram). И как лучше всего пользователям Telegram получать уведомления? Мы не можем знать наверняка. Может, им нравится электронная почта или что-то еще. Но можно догадаться, что отправлять уведомления в Telegram было бы довольно удобно.

Если вы хотите отправлять уведомления Telegram из своего приложения, вы попали в нужное место. Я добавил эту функцию в свое приложение, и она мне очень нравится.

Одно небольшое примечание. В этой статье я привожу примеры кода на Python. Но эти идеи не относятся к Python и могут быть без проблем переведены на другой язык.

Итак, без лишних слов, давайте рассмотрим, как это сделать.

Создайте бота Telegram

Прежде всего, вам необходимо создать бота Telegram. Для этого вам понадобится еще один Telegram-бот — BotFather. Просто поговорите с ним (нажмите старт).

Теперь вы видите, на что он способен. Но нас интересует создание нового бота, поэтому мы и выберем именно его ( /newbot ).

Вы быстро обнаружите, что имя бота должно оканчиваться на «бот». А поскольку вы похожи на меня и приходите в игру слишком поздно, большинство имен ботов уже заняты.

Еще по теме:  Что значит кит в Телеграмме

Но в конце концов вы найдете имя для своего бота и получите токен доступа, который нам понадобится.

Теперь, когда у вас есть бот, пользователи Telegram могут его найти и использовать. Но есть одна проблема — вы не можете связать пользователей, пришедших из Telegram, с пользователями в вашем приложении. Позвольте мне показать вам, почему.

Как только пользователь нажмет кнопку «Пуск» на вашем боте, вы получите «обновление». Вы можете проверить все обновления бота даже в браузере, посетив следующий URL https://api.telegram.org/bot/getUpdates (не забудьте использовать свой токен доступа в URL). Вот что у меня получилось:

Ничего не умеете читать? Не волнуйся. Вы можете исправить это, установив в браузере какое-нибудь расширение JSON prettifier. Я использую JSON Formatter для Chrome. Выглядит намного лучше.

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

Еще одна информация, которую мы получаем, — это имя пользователя. Это более полезно, поскольку оно уникально для всех пользователей Telegram. Но, скорее всего, в ваших приложениях этого нет. Поэтому нам нужно попросить пользователя ввести свое имя пользователя где-нибудь в приложении. Это слишком много работы, и я не уверен, что кто-то ее сделает.

Другой вариант связать пользователя — попросить его предоставить боту адрес электронной почты, который они использовали в вашем приложении. Но в этом слишком много недостатков: пользователь может сделать опечатку при вводе электронной почты, пользователь может ввести адрес электронной почты другого пользователя и использовать систему. Это очень плохо.

Можем ли мы сделать лучше?

Связывание пользователя

Конечно можем. Чтобы связать пользователя, мы воспользуемся методом, который называется глубинная ссылка.

Во-первых, вам нужно создать случайный уникальный токен для каждого пользователя. Я использовал следующий код для создания токена с помощью Python:

from secrets import token_urlsafe token = token_urlsafe(8) token # => ‘uEDbtJFHxKc’

Затем вам нужно сохранить этот токен, чтобы впоследствии можно было найти пользователя с ним. Вы можете сохранить его в своей базе данных или использовать другое место, например, кеш. У меня Notification модель, поэтому я добавил поле в таблицу модели.

class Notification(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) # . connect_token = models.CharField(max_length=64, null=True)

Итак, мы создали токен uEDbtJFHxKc и сохранили его. Теперь нам нужно использовать этот токен в URL-адресе бота Telegram, который пользователь должен щелкнуть, чтобы все заработало:

telegram_url = ‘https://www.telegram.me’ bot_name = ‘music_notification_bot’ token = ‘uEDbtJFHxKc’ url = f’/?start=’

Теперь, когда у нас есть URL-адрес ‘https://telegram.me/music_notification_bot?start=uEDbtJFHxKc’ , пора показать его пользователю. Просто отобразите его в любом месте вашего приложения и дождитесь, пока пользователь щелкнет по нему.

Как только пользователь поймает наживку и нажмет «Старт», вы должны получить еще одно обновление:

< «ok»: true, «result»: [ // . // previous updates // . < «update_id»: 599162365, «message»: < «message_id»: 174, «from»: < . >, «chat»: < . >, «date»: 1549788357, «text»: «/start uEDbtJFHxKc», «entities»: [ . ] > > ] >

Наконец-то мы можем идентифицировать нашего пользователя. Поле text теперь содержит наш токен пользователя. Давайте возьмем это из этого поля:

Еще по теме:  Как я подписан в Телеграмме у других

bot_token = ‘your_bot_token’ updates_url = f’https://api.telegram.org/bot/getUpdates’ import requests response = requests.get(updates_url).json() text = response[‘result’][0][‘message’][‘text’] text # => ‘/start uEDbtJFHxKc’ splitted_text = text.split(‘ ‘) # => [‘/start’, ‘uEDbtJFHxKc’] token = splitted_text[-1] # => ‘uEDbtJFHxKc’

Этот токен можно использовать для поиска пользователя. Ваша реализация зависит от того, как вы изначально сохранили токен. Но вот как я это делаю:

notification = Notification.objects.get(channel=’telegram’, connect_token=token) user = notification.user

Итак, пользователь нажал кнопку «Пуск». Но они видят, что ничего не произошло. Давай хотя бы поприветствуем их.

Чтобы поприветствовать пользователя, нам нужно обнаружить, что пользователь начал разговор с нашим ботом. Есть два варианта, как это сделать: опрос и веб-перехватчики.

Вы уже знаете, что такое опрос. Вы уже это сделали. Или, по крайней мере, видел, как я это делаю. Проверив https://api.telegram.org/bot/getUpdates страницу, мы провели один опрос. Опрос проверяет наличие обновлений постоянно, например, каждые 2 секунды. Таким образом, мы всегда можем узнать, когда кто-то взаимодействовал с ботом.

Веб-перехватчики идут немного в другом направлении. Вместо того, чтобы проверять обновления каждые 2 секунды, мы просто ждем обновления. И когда это произойдет, Telegram отправит запрос с данными обновления на указанный нами URL. Таким образом, мы можем дать немного отдохнуть как нашему серверу, так и серверу Telegram и просто дождаться обновления.

Опрос может быть лучше, если у вас большой трафик, но, к сожалению, это скорее исключение, поэтому я решил использовать веб-перехватчик.

Вебхуки

Установить веб-перехватчик в Telegram очень просто. Вам просто нужно отправить запрос на https://api.telegram.org/bot/setWebhook?url= . Открытие этой ссылки в вашем браузере тоже работает. your_server_url — это URL-адрес, на который Telegram будет отправлять обновления. Вот что вы должны получить в ответ:

Если вы не доверяете себе, посетите https://api.telegram.org/bot/getWebhookInfo , чтобы еще раз убедиться, что все в порядке. Вы должны увидеть что-то вроде этого:

Теперь. Если что-то не так (например, вы указали неправильный URL), вы всегда можете удалить веб-перехватчик, посетив https://api.telegram.org/bot/deleteWebhook , а затем снова настроив веб-перехватчик.

Местное развитие

Прежде чем продолжить, я хотел бы сказать несколько слов о местном развитии. Вебхуки для этого не очень подходят. Веб-перехватчики отправляются на URL-адрес, и, скорее всего, вы не знаете URL-адрес своего компьютера. Кроме того, веб-перехватчик Telegram требует, чтобы URL-адрес был безопасным (HTTPS).

Но есть решение этой проблемы: ngrok. ngrok — это инструмент, который открывает миру вашу локальную среду. Загрузите ngrok, установите его и запустите с того порта, на котором работает ваш сервер. Мой сервер работает на 8000 порту, поэтому мне нужно запустить консоль

/path/to/ngrok http 8000

Затем ngrok должен предоставить вам URL-адрес, который вы можете использовать для установки веб-перехватчика.

Приветствуя пользователя

Теперь, когда вы готовы к разработке, давайте поприветствуем наших пользователей — они этого ждут.

После того, как пользователь нажмет «Пуск», ваш Telegram отправит обновление на URL-адрес вашего сервера. Интересные части обновления должны выглядеть так:

< «message»: < «chat»: < «id»: 457 >, «text»: «/start uEDbtJFHxKc», > >

Это идеальное время, чтобы связать пользователя с помощью текста сообщения. Также есть интересная информация, идентификатор чата. Идентификатор чата — это то, что нам нужно, чтобы отправить сообщение этому пользователю. В Telegram есть конечная точка API для отправки сообщения следующего вида https://api.telegram.org/bot/sendMessage?chat_id=Welcome!» send_message_url = f’https://api.telegram.org/bot/sendMessage?chat_id=https://skine.ru/articles/373918/» target=»_blank»]skine.ru[/mask_link]

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