Как получить Telegram bot api

Author's picture

Возникла идея простого бота, который будет отправлять переданные ему файлы в облако. Однако для аутентификации сейчас практически везде используется OAuth2. Если в web-приложениях пользоваться OAuth2 все уже научились, то с telegram у меня возникли вопросы.

В этой заметке будет минимальный пример telegram-бота, который работает с box.com через API с аутентификацией через OAuth2.

disclaimer #1: В статье не будет подробного описания работы OAuth2 — только необходимый минимум информации для понимания процесса.

disclaimer #2: Для примера использую облачное хранилище box.com, так как именно в нём лежит моя библиотека электронных книг. При реализации аналогичной функциональности для других облаков проблем возникнуть не должно.

Какой сценарий с точки зрения пользователя получим в конце текущей статьи:

  1. Пользователь добавляет бота в telegram
  2. По команде /login пользователь получает ссылку на аутентификацию
  3. Пользователь переходит по ссылке в браузере на box.com
  4. Пользователь аутентифицируется на box.com
  5. Открывается страница бота https://t.me/?start= с предложением отправить ему сообщение по кнопке Send message
  6. Пользователь нажимает на кнопку Send message
  7. В telegram открывается диалог с ботом с активной кнопкой Start
  8. Пользователь нажимает на кнопку Start
  9. Бот отправляет пользователю его login в box.com

Добавить остальную функциональность — дело техники.

How to remove background using Telegram Bot

Необходимый минимум об OAuth2

Для реализация аутентификации через OAuth2 необходимо выполнить несколько пунктов:

  1. Получить client_id и client_secret в консоли разработчика box.com. Подробно процесс описан в приложении в конце статьи
  2. Сформировать ссылку для аутентификации пользователя https://account.box.com/api/oauth2/authorize?client_id=response_type=code . client_id и redirect_url необходимо скопировать из настроек созданного ранее приложения в консоли box.com
  3. На адресе redirect_url (по-умолчанию в этой статье — это localhost:8000 ) поднять веб-сервер, который сможет получить код для аутентификации в box.com
  4. С полученным в п.3 кодом и параметрами client_id и client_secret из п.1 обратиться к endpoint box.com API для получения access_token и refresh_token . access_token в дальнейшем необходимо добавлять во все запросы к API.

Реализация

Шаг 1. Подготовка

Для работы понадобятся три внешних библиотеки:

  • python-telegram-bot — для работы с Telegram Bot API
  • requests — для выполнения запросов к API
  • boxsdk — для работы с API box.com

Библиотеки и их версии прописаны в requirements.txt. Установить всё через pip install -r requirements.txt — ничего необычного. Но лучше для этого создать отдельное виртуальное окружение.

How to get Telegram Bot Token

Шаг 2. Продолжаем подготовку

Теперь надо получить токен для бота. Я уже писал об этом ранее.

Шаг 3. Веб-сервис для получения OAuth2-кода

Нужен простой веб-сервис. На URI этого веб-сервиса будет происходить перенаправление со страницы аутентификации box.com. Адрес перенаправления будет содержать параметр code в строке запроса. Этот код используется для получения access_token и refresh_token дальше.

Веб-сервис будет без использования внешних зависимостей. Реализован на встроенном simple http server. Код позаимоствован из gist, но немного модифицирован:

Использовать код выше в настоящем боевом production я бы, конечно, не стал, но для демонстрации идеи подойдёт.

Шаг 4. Минимально работающий бот

Простейший бот с использованием библиотеки python-telegram-bot выглядит так:

from telegram.ext import Updater from telegram.update import Update from telegram.ext.callbackcontext import CallbackContext from telegram.ext import CommandHandler token = ‘TG_BOT_TOKEN’ updater = Updater(token=token, use_context=True) dispatcher = updater.dispatcher def start(update: Update, context: CallbackContext): context.

bot.send_message(chat_id=update.effective_chat.id, text=»I’m a bot, please talk to me!») start_handler = CommandHandler(‘start’, start) dispatcher.add_handler(start_handler) updater.

start_polling()

Этот бот не делает ничего полезного — только отправляет сообщение «I’m a bot, please talk to me!» по команде /start .

Теперь надо добавить самое важное — аутентификацию через OAuth2.

Шаг 4.1. OAuth2-аутентификация

Для аутентификации необходимо перейти по сформированной особым образом ссылке: https://account.box.com/api/oauth2/authorize?client_id=response_type=code , где client_id и redirect_url параметры из настроек созданного ранее приложения в консоли разработчика box.com.

login-page

На этой странице будет стандартная форма логина в box.com .

После ввода логина и пароля произойдёт перенаправление на redirect_url . На этом адресе сервис, получив GET-запрос, вычленит из строки запроса code . После чего перенаправит запрос на страницу старта работы с telegram-ботом. В адрес будет добавлен полученный код. Далее должен открыться диалог с ботом с активной кнопкой Start . По клику на кнопку в обработчике команды /start можно будет получить переданный код.

Простейший код как proof of concept:

from telegram.ext import Updater from telegram.update import Update from telegram.ext.callbackcontext import CallbackContext from telegram.ext import CommandHandler import requests import json import boxsdk client_secret: str = ‘CLIENT_SECRET’ client_id: str = ‘CLIENT_ID’ redirect_url: str = ‘REDIRECT_URL’ token = ‘TG_BOT_TOKEN’ updater = Updater(token=token, use_context=True) dispatcher = updater.dispatcher # Обработчик команды /start def start(update: Update, context: CallbackContext): message_text: str = update.message.text # В deep linking параметры из url передаются в сообщении в виде строки «/start code», # где code — строка из url https://t.me/?start=code. message_parts: list[str] = message_text.split(‘ ‘) if len(message_parts) == 2: # Во втором элементе будет содержаться переданный код, # который необходим для получения access_token и refresh_token code: str = message_parts[1] # Формируем запрос к API box.com для получения access_token и refresh_token access_token_url = ‘https://api.box.com/oauth2/token’ headers = ‘Content-Type’: ‘application/x-www-form-urlencoded’> params = < ‘client_id’: client_id, ‘client_secret’: client_secret, ‘code’: code, ‘grant_type’: ‘authorization_code’ > req = requests.post(access_token_url, data=params, headers=headers) data = json.loads(req.text) # Полученный JSON содержит необходимые данные. # Используя их можно инициализировать клиент boxsdk # и начать обращаться к его API. oauth: boxsdk.OAuth2 = boxsdk.OAuth2( client_id, client_secret, access_token=data[‘access_token’], refresh_token=data[‘refresh_token’]) box_client = boxsdk.Client(oauth) # Например, можно получить информацию об аутентифицированном пользователе. user = box_client.user().get() context.bot.send_message(chat_id=update.effective_chat.id, text=user.login) else: show_welcome_message(update, context) # Обработчик команды /login def login(update: Update, context: CallbackContext): context.bot.send_message(chat_id=update.effective_chat.id, text=f’response_type=code»>Connect to Box.com’, parse_mode=’HTML’) def show_welcome_message(update: Update, context: CallbackContext): context.bot.send_message(chat_id=update.effective_chat.id, text=»I’m a bot, please talk to me!») start_handler = CommandHandler(‘start’, start) login_handler = CommandHandler(‘login’, login) dispatcher.add_handler(start_handler) dispatcher.add_handler(login_handler) updater.start_polling()

Еще по теме:  Как подключить Телеграмм премиум на год

Что дальше

  1. Привести код бота в порядок: выделить классы, методы,
  2. Сделать конфигурирование бота более удобным,
  3. Реализовать загрузку файлов в облако.

О чём-то из этого постараюсь написать позже.

Исходники для этой заметки можно найти на github.

Приложение

Получить client_id и client_secret необходимо в консоли разработчика box.com:

  1. Cоздать новое приложение с типом Custom appcreate-app
  2. В настройках приложения выбрать User Authentication (OAuth2) и указывать App Namesetup-app
  3. В разделе Configuration созданного приложения:
  1. в секции OAuth 2.0 Credentials забрать client_id и client_secret ,
  2. в секции OAuth 2.0 Redirect URI указать localhost:8000 (или другой адрес, если есть понимание, что это и зачем)
  3. поставить галочку в чекбоксе Write all files and folders stored in Boxcredentials(в этой статье про это говорить не буду)

Если вам понравилась статья, то можете зайти в мой telegram-канал. В канал попадают небольшие заметки о Python, .NET, Go.

Источник: makesomecode.me

[PHP] Создание простого Telegram-бота на простой библиотеке.

Здравствуйте, жители KotOFF.NET!
Как-то меня заинтересовала тема ботов на Телеграм и я удивился, насколько это можно просто сделать даже тому, кто мало разбирается в PHP. Соответственно, я принялся за это дело и готов поделится с вами этой вещью, чтобы вы точно знали, как такое делается.

Создание бота у BotFather.
Исток истоков — это регистрация бота у BotFather.
Ничего страшного нет. Просто следуйте простой инструкции.

1. Начинаем диалог с t.me/botfather.

2. Пишем /newbot, а следом имя боту.

3. Пишем айди боту. Заметьте, он должен обязательно оканчиваться на bot.

Всё. Регистрация окончена!
По желанию можно добавить аватарку боту через /setuserpic, описание через /setdescription или/и краткое «О боте» через /setabouttext. Совершенно сложного тут нет, поддерживается кириллица, кстати, как и у имени бота.

Главное «но» при создании бота на Телеграм.
Читаешь себе документацию, всё тебе ясно, пытаешься сам вебхук установить и видишь, что вебхуки-то проходят лишь с SSL-сертификатами! Что делать-то? Без паники. Тут есть два пути, или даже больше решению этого вопроса.
Можно взять да просто платить за хостинг, а к любому современному хостингу сейчас идёт SSL-сертификат. Но платить не хочется, верно?
Тогда можно подключиться к CloudFlare, если получится, однако я вам дам спойлер: мало где это получится. Так что и этот вариант не наш.
Значит, надо искать бесплатные хостинги с SSL, и таких я знаю два: darkhost.pro и 000webhost.com. Последний вариант я терпеть не могу — медленный, что жуть, хотя SSL есть, и домен тоже бесплатный… Но из-за медленности второго варианта буду использовать первый. И нет, это не реклама — я никак не управляю ни тем, ни тем хостом.

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

АХТУНГ! Сейчас хост условно бесплатный! Чтобы его далее держать, каждые 90 дней надо писать о просьбе продлить вам хост или платить определённую сумму в месяц!

1. Заходим на darkhost.pro, регистрируем себе аккаунт и подтверждаем его через подтверждение e-mail. Данные можно указывать не свои, но старайтесь вводить их похожими на правду, ладно? Чтобы вопросов никаких не было уже тут.

2. После регистрации и входа в кабинет личный, нажимаем на «Услуги»->«Заказать новую услугу», а на появившейся странице заказываем тариф «Light-MINI».

3. Выбираем «субдомен darkhost.pro» и вводим в свободное поле что угодно на латинице, после чего на следующей странцие просто жмём «Оформить», а далее уж жмём «Завершить заказ».
После этого вам на почту придут данные для входа в панель управления и FTP-сервер.
4. Нажимаем на «Услуги» и выбираем «Продукты/услуги». Там ищем свой сайт, что вы только что создали и нажимаете по нему. На открывшейся странице выбираем «Вход в панель управления» и ждём, пока нас перекинет и авторизирует в ISPmanager-е.


5. Слева есть панель. Там выбираем «SSL-сертификаты». В открывшейся странице нажимаем «Let’s Encrypt» и просто нажимаем далее.

6. Пока ставится сертификат Let’s Encrypt, который работает, кстати, три месяца, настроим PHP. Просто заходим в «WWW-домены», находим свой сайт там, двойным кликом открываем его (или нажимаем на «Изменить») и выбираем версию PHP, промотав ниже. Желательно ставить PHP или 7.0, или выше.
Если сайт ваш выдаёт ошибку после того, как поменяли версию PHP — подождите. Заработает само.

Вот и всё. Мы настроили хостинг для работы с ним.

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

А теперь как бота написать-то?!
Всё просто. Скачайте архив и просто перекиньте через FTP или на через ISPmanager файлы на ваш хостинг.
telelibon-master.zip
Нам же там надо файлик «tgLib.php» и именно его вкладывать в ваш основной файл бота.
А вот как загружать файлы через ISPmanager:
(1 — перейти в Менеджер файлов; 2 — пройти по этому пути (последняя папка будет вашим доменом); 3 — нажать на закачать (далее надо будет просто выбрать файлы. также можно сделать папку через «Создать», если вам надо))

Разбор самого кода главного файла: bot.php.

reply($chat, «*Привет.* Я — обычный бот Телеграма. Можешь посмотреть команды, нажав на кнопку »рамка со слэшем в центре».»); //reply — это просто отсылка сообщения if (strtolower(mb_substr($text,0,5)) == «/kick») < if ($reply_author)< $bot->kick($chat,$reply_author); //kick тут работает именно так, да. если что, он выдаст ошибку и закончит скрипт. $bot->reply($chat,»[Предатель](tg://user?id=) выгнан, [](tg://user?id=).»); // [](tg://user?id=) есть упоминание того, кто выполнил команду. > else < //получить айди пользователя сложно, так что работаем с ответом на сообщение. $bot->reply($chat, «Ответь на сообщение предателя этой команды и выгони его.»); > > if(strtolower($text) == «/picture») $bot->pictureReply($chat,»Держи *картин очку*, [](tg://user?id=).», «http://pm1.narvii.com/7360/5109a4d976422ebdcdbfa23563d6b37a10a27966r1-736-1104v2_hq.jpg»); //а так отправляются картинки. url можно свой, но и file_id, кстати, не отменяли. если что, отпишитесь, как оно. if(strtolower($text) == «/video») $bot->videoReply($chat,»Держи *видяшку*, [](tg://user?id=).», «http://f0329289.xsph.ru/tg/videoplayback.mp4»); //такой же принцип как и с фото, только видео. if(strtolower($text) == «/gif») $bot->gifReply($chat,»Держи *гифку*, [](tg://user?id=).», «https://media.giphy.com/media/ifAxq0ON2i5fcjeOdR/giphy.gif»); //аналогично. if(strtolower($text) == «/audio») $bot->audioReply($chat,»Держи *песенку*, [](tg://user?id=).», «https://mp3star.ru/mp3/Ly9tb29zaWMubXkubWFpbC5ydS9maWxlLzA0YjQ5NDBiNzg5ZDRmNjVhMzVkM2MwMDE5NjU2ZGUyLm1wMw==/МАЛЬЧУГЕНГ%20-%20Том%20и%20Джерри.mp3»); //аналогично.. кстати, так только mp3 читаются if(strtolower($text) == «/voice») $bot->voiceReply($chat,»Держи *голосовуху*, [](tg://user?id=).», «http://f0329289.xsph.ru/tg/МАЛЬЧУГЕНГ+-+ТУДА-СЮДА.ogg»); //это отсылка аудиосообщений. у меня не сработало, хотя всё верно, НО ЧТОБЫ ЗАРАБОТАЛО НУЖЕН .ogg В КОДЕКЕ OPUS И ТОЛЬКО. if(strtolower($text) == «/videonote») $bot->videoNoteReply($chat, «https://cs564500.vkuservideo.net/8/e03PD46MT80MTU-/videos/a000a322a2.360.mp4»); //это отсылка видеосообщений. так должно работать, но на время написания это пока не поддерживается. однако заработает file_id 😉 if(strtolower(mb_substr($text,0,9)) == «/newtitle») < $bot->setChatTitle($chat,mb_substr($text,10)); //эта команда меняет название чата $bot->reply($chat,»*Имя чата поменялось.* Всё же верно, [](tg://user?id=)?»); > if(strtolower($text) == «/invitelink» or strtolower($text) == «/chatlink») $bot->reply($chat,»*Ссылка на эту беседу:* chatInviteLink($chat)[‘result’]>»); //chatInviteLink даёт ссылку на беседу. зачем [‘result’]? мне лень исправлять там кое-что в библиотеке, но зато вы можете. if(strtolower($text) == «/pin») < if (!$reply_message_id) die($bot->reply($chat,»Ответьте на сообщение, что хотите закрепить, этой командой и оно будет закреплено.»)); //это вам не вк, где боты не могут получить айди сообщений любых в беседах! $bot->pinMessage($chat,$reply_message_id); //прикрепление сообщений. ноу-хао будто $bot->reply($chat,»Сообщение успешно закреплено, [](tg://user?id=).»); > if(strtolower($text) == «/unpin») < $bot->unpinMessage($chat); //ну открепление поняятно, даа $bot->reply($chat,»Всё, что было закреплено, я открепил, [](tg://user?id=).»); > if(strtolower(mb_substr($text,0,8)) == «/tempban») < if ($reply_author)< $tempban = $bot->tempban($chat,$reply_author,mb_substr($text,9)); die($bot->reply($chat,»[Предатель](tg://user?id=) выгнан на toUnix(mb_substr($text,9))> секунд, [](tg://user?id=). Если он выгнан на 31622400 секунд, то он навеки выгнан.»)); //toUnix конвертирует время типа 1m, 3w, 3y в unix-время. секунд нет, они сломались 🙂 кстати, а вы знали, что в телеграме уже есть поддержка времени бана заранее? 😀 и да, это возможно не работает пока что. > else < die($bot->reply($chat, «Ответь на сообщение предателя этой команды и выгони его.»)); //команда по итогу прст должна выглядеть так: /tempban 1m [ответ на сообщение]. и да, я использую die, чтобы сразу завершался скрипт. вы можете это не делать. > > >

А как вообще прикрепить вебхук-то к боту? Ты нам не сказал!
Да, я дико извиняюсь, что это пишу под конец, конечно, поста, но я просто хотел сперва показать, как это всё делается, чтобы вы определились, надо ли вам это.
А так, просто выполните запрос какой-то такой:

https://api.telegram.org/bot/setWebhook?url=https://

Удачного денька.
Пост подходит к концу. Если что — задавайте вопросы. Отвечу на них по возможности.
P. S. Если ответа нет довольно долго, значит либо не заметил, либо нет времени, но вероятен сценарий банальности ошибки вашей или вопроса.

Архив с библиотекой и исходным кодом:
telelibon-master.zip

  • Нео Метал
  • 02.12.2019
  • 20 164
  • 17
  • 10

Источник: kotoff.net

Еще по теме:  Как сделать так что бы приходила заявка в ТГ канал

Как создать своего бота для Telegram за 10 минут

Favorite

Как создать своего бота для Telegram за 10 минут

Без единой строчки кода!

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

  • Игра Что? Где? Когда?
  • Поиск паролей от Wi-Fi
  • Проверка штрафов ГИБДД
  • Бот экспертно-поисковой системы Wolfram Alpha
  • MyCookBot (вводите продукты, которые у вас есть и получаете рецепты блюд, которые можно из них приготовить)

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

Есть два пути создания ботов. Первый — написать приложение с помощью Telegram API, а второй — воспользоваться сервисом для создания ботов. Один из таких, manybot.io, мы будем использовать в статье.

Устанавливаем Telegram

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

  • Android
  • iOS
  • Windows Phone
  • Windows/Linux/OS X (по ссылке откроется версия для операционной системы с которой сидите)
  • Веб-приложение

Сама я буду использовать версию для OS X, так как без полноценной клавиатуры создавать бота не совсем удобно.

Создаем бота

1. Набираем в поиске Manybot, кликаем на значок бота и нажимаем на кнопку Start:

start_many_bot

add_new_bot

2. Нажимаем на кнопку Добавить нового бота:

6. Вводим имя бота, которое будет отображаться при поиске и техническое имя бота, копируем полученный API-токен:

botfather_copy_api_token

end_create_bot

manybot_description

8. Указываем описание бота:

bot_is_ready

9. Бот готов:

start_using_bot

10. Находим свой бот через поиск и начинаем пользоваться:

Создаем свою команду

В хорошем боте должны быть команды. Чтобы пользователь вводил запрос, а в ответ ему приходило что-то интересное/полезное. Вот инструкция, как создать простейшую команду:

1. Набираем /commands:
commands_insert
2. Набираем имя новой команды и текст, который она будет выдавать в ответ (при желании к тексту можно прикрепить файлы):
command_and_answer
3. Нажимаем кнопку Сохранить и дожидаемся завершения создания команды:
save_command

telegram_edit_command

Для того, чтобы отредактировать команду /hello надо набрать /commands, /hello:

test_telegram_in_other_account

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

Добавляем пункт в меню

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

commands_menu

1. Набираем /commands:

add_menu

2. Нажимаем на кнопку Настроить главное меню, а затем на кнопку Добавить пункт меню:

test_add_menu

3. Выбираем из списка команду, которую хотим добавить в меню и указываем название для кнопки:

Включаем автопостинг из соцсетей

В ботах можно настроить трансляцию новостей из Twitter, Youtube, VK или RSS.

1. Набираем команду /autoposting:
autoposting_start
2. Нажимаем кнопку с нужной соцсетью и указываем ссылку на страницу:
add_link

Создаем отложенный пост

В ботах Telegram можно отправлять сообщения, которые будут приходить всем его подписчикам. Вот инструкция, как создать такое сообщение и запланировать его отправку на определенное время:

1. Набираем команду /newpost:
start_new_post
2. Вводим текст поста и нажимаем на кнопку Отложить пост, указываем текущее время:
create_new_post
3. Указываем время поста и сохраняем пост:
set_post_time

Собираем данные

Еще с помощью ботов можно проводить опросы среди подписчиков:

create_new_commands

1. Набираем /commands, выбираем пункт меню Создать команду и вводим имя для новой команды:

create_question

2. Нажимаем на кнопку Добавить вопрос, выбираем тип ответа и вводим текст вопроса:

create_command

3. Нажимаем на кнопку Сохранить и получаем уведомление об успешном создании команды:

forms_answers

4. Ответы на вопрос можно посмотреть в Главное меню-> Ответы на формы -> название команды:

Вот и все, что нужно знать, чтобы создать простейшего бота. Больше информации о функциях, которые может добалять manybot.io можно узнать, если набрать в своем боте команды /help.

Если нужно что-то посложнее

Возможности ботов Telegram гораздо шире, чем те которые есть у ботов, созданных на платформе code.telegram.org можно почитать подробнее о Telegram API и создании приложений на его основе.

Кстати, для расширения кругозора рекомендую статью 10 фактов о Telegram, которые ты не знаешь.

(22 голосов, общий рейтинг: 4.59 из 5)
Хочешь больше? Подпишись на наш Telegram.

Favorite

Без единой строчки кода! Telegram — мессенджер, созданный Павлом Дуровым в 2013 году, которым пользуется свыше 100 миллионов человек во всем мире. Помимо переписки с живыми людьми в нем можно общаться с ботами, программами которые в ответ на запросы пользователя выдают какую-либо информацию. Примеры интересных ботов: Игра Что? Где?

Когда? Поиск паролей от Wi-Fi Проверка.

  • Telegram,
  • полезный в быту софт

Источник: www.iphones.ru

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