Как получить qr код в telegram
Перейти к содержимому

Как получить qr код в telegram

  • автор:

Разработка Telegram-бота на JAVA для генерации и считывания QR-кодов

Разработка Telegram-бота для работы с QR-кодами

Разработка Telegram-бота для работы с QR-кодами

Разработка Telegram-бота на JAVA для генерации и считывания QR-кодов

Введение

С недавнего времени QR-коды всерьез, и похоже, надолго вошли в нашу жизнь. QR-код – это простой по своей сути, но при этом чрезвычайно полезный в прикладном плане механизм графического кодирования информации. Мать-прародительница (компания DENSO) внедрила использование QR-кодов с целью оптимизации временных издержек в производственных процессах. К сожалению, на сегодняшний день с введением ограничений со стороны властей на посещение общественных заведений, понятие «QR-код» приобрело негативный окрас, заставляя многих вздрагивать при его упоминании, от чего даже становится немного грустно, ведь не для ограничений были созданы эти черно-белые квадраты.

О QR-кодах я не так давно писал в своей первой публикации Почему введение проверки QR-кодов не имеет смысла в общественном транспорте и торговых центрах?, не смотря на сравнительно небольшой объем технических подробностей, данный материал получил множество положительных откликов, что на время позволило мне войти в первую сотню авторов. Не скрою, это было неожиданным и приятным сюрпризом, большое спасибо всем тем, кто плюсовал в карму, конструктивно критиковал и дискутировал в комментариях.

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

Плюсы использования Telegram-бота в сравнении с традиционными приложениями-сканерами это: отсутствие необходимости ставить дополнительный софт (при наличии телеги, естественно), возможность чтения цифровых изображений без использования камеры (например, из галереи или с web-сайта) и кроссплатформенность.

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

Логика работы бота проста – отправляешь боту QR-код, в ответе получаешь расшифрованную информацию, отправляешь текст – в ответе получаешь QR-код. Просто? Да! Удобно? Несомненно!

Целевая аудитория

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

Если вы еще не разработали своего первого Telegram-бота, либо вам хочется понять, как работают механизмы отправки/приема файлов или же познакомиться с работой одной из самых популярных библиотек для работы с QR-кодами в JAVA ­– ZXING, то этот пост для вас.

Получение имени и токена бота

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

Итак, у нас имеется имя бота (в моем случае – @QRVisorBot) и токен, по понятным причинам значение токена не выкладываю, т.к. это конфиденциальная информация, важно понимать, что лица, имеющие доступ к токену, имеют максимальные полномочия на управление ботом, так что держите токен при себе, если не хотите, чтобы доступ к управлению вашим ботом получили третьи лица.

Создание проекта

Создаем JAVA-проект, лично я работаю в IDE JETBRAINS IDEA, для сборки использую сборщик проектов MAVEN, поэтому буду указывать список зависимостей для данного сборщика.

Настройки бота

Дабы не хардкодить настроечную информацию, выносим ее в файл настроек, для этого в папке ресурсов (resources) создаем текстовый файл с именем «config.properties», в котором прописываем полученные имя и токен чат-бота:
token = 0000000000:XXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
username = QRVisor
, где:
token – значение токена;
username – имя бота.

Чтобы настройки были доступны в рантайме, я создал класс BotSettings (код ниже), который считывает значения настроек из файла config.properties. Здесь и далее я использую плагин LOMBOK, он служит для уменьшения количества типового кода, не думаю, что программируя на JAVA вы могли пройти мимо него, но если так, то настоятельно рекомендую ознакомиться с его функционалом. Также стоит обозначить, что в классе BotSettings используется порождающий шаблон проектирования СИНГЛТОН, служит он для того, чтобы не было возможности создать несколько экземпляров класса в одном потоке.

Основная логика чат-бота

Основная логика бота размещена в классе BotProcessor (код ниже). Несмотря на то, что бот имеет достаточно простой алгоритм работы, пара команд ему все-таки потребуется. Для возможности работы с командами необходимо основной класс бота унаследовать от TelegramLongPollingCommandBot. TelegramLongPollingCommandBot – содержит методы обработки команд.

Переопределяемые методы базового класса (TelegramLongPollingCommandBot):

getBotUsername – возвращает имя пользователя, на которого зарегистрирован бот;

getBotToken – возвращает токен;

onRegister – действие после регистрации бота (в нашем случае просто вызываем метод класса-родителя);

processNonCommandUpdate – обрабатывает сообщение, которое не является зарегистрированной командой;

processInvalidCommandUpdate – действие при отправке боту некорректной команды.

Методы обработки сообщений:

getMessageType – определяет тип сообщения (типы сообщений бота перечислены в MessageType).

sendMessage – отправляет сообщение в заданный чат.

sendImage – отправляет изображение в заданный чат.

sendQRImage – отправляет QR-код в заданный чат (отличается от sendImage тем, что отправленное изображение QR-кода необходимо удалить).

processImage – обрабатывает полученное от пользователя изображение. TELEGRAM API хранит несколько размеров изображений, получить которые можно с помощью метода getPhoto, каждый файл имеет собственный идентификатор, список сохраняем в коллекцию photoSizes, наибольший размер изображения соответствует максимальному индексу коллекции (нам нужен именно он). Ссылку для скачивания файла получаем с помощью метода getFileUrl (описан ниже).

setRegisteredCommands – регистрирует команды бота. Для того, чтобы чат-бот мог распознавать команды, их необходимо зарегистрировать. Но как? О том, как создавать команды описано в секции «Команды».

getFileRequest ­– метод запрашивает информацию о файле хранилища, возвращает информацию о файле в формате JSON, ссылка на файл хранилища имеет вид: https://api.telegram.org/bot<token>/getFile?file_id=<file_id>, где: token – токен бота, file_id – идентификатор файла.

getFileUrl – возвращает ссылку на файл хранилища, для этого сначала запрашиваем информацию о файле (метод getFileRequest), откуда получаем путь к файлу в хранилище (поле «file_path»). Ссылка на файл имеет вид: https://api.telegram.org/file/bot<token>/<path>, где token – токен бота, path – путь к файлу в хранилище.

registerBot – подключает бот к Telegram API.

Зависимости:

Команды

Команды должны имплементировать интерфейс IBotCommand, в моей реализации интерфейс имплементируется абстрактным классом Command, от которого наследуются классы, содержащие реализацию команд (классы CommandStart и CommandHelp).

В боте имеются команды /START и /HELP, по наименованию команд несложно догадаться, что они выполняются при запуске бота и при запросе справки, соответственно. Логика команд содержится в классах CommandStart и CommandHelp (код ниже).

С реализацией команд все понятно, но как быть в случае, если пользователь отправит боту незарегистрированную команду? Для обработки подобных ситуаций необходимо переопределить метод processInvalidCommandUpdate.

Запуск приложения

Основную логику приложения разработали, но как его запустить? Для запуска используем класс Main (код ниже), в основном методе main создаем инстанс разработанного нами Telegram-бота. Запускаем… Работает!

Работа с QR-кодами (ZXing)

Для работы с QR-кодами я использовал open-source библиотеку ZXing (zebra crossing), назначение которой – работа с штрих- и QR-кодами.

Для обработки QR-кодов я разработал класс QRTools (код ниже).

Методы:

getBitmapFromUrl ­­– возвращает изображение по url-адресу, как мы помним, изображения хранятся в хранилище telegram, данный метод возвращает объект BinaryBitmap библиотеки Zxing

decodeBitmap ­– декодирует изображение в текст

encodeText ­– кодирует текст в QR-код, полученному изображение сохраняется в файл с уникальным именем, метод возвращает путь к файлу.

getTextFromQR – возвращает текст, который содержит QR-код.

Зависимости:

Обработка ошибок

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

Логгирование

Для логгирования я воспользовался библиотекой SLF4J. Бот не собирает информацию о личных данных, отправляемых пользователем, механизм протоколирования используется лишь для отладки.

Зависимости:

Ресурсы

Найти бот в Telegram можно по имени: @QRVisorBot

Заключение

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

Есть идея для написания следующей статьи, хотел бы поделиться своими изысканиями на тему работы с API Tinkoff-Инвестиции, в планах написать пример торгового робота. Но это если вам, что называется, зайдет данный материал.

Желаю читателям здоровья и терпения, надеюсь, что в скором времени с нас снимут ограничения на посещение общественных мест по QR-кодам.

Генератор QR-кода для Telegram аккаунта

Чтобы создать QR-код для перехода на канал, публичный чат, бота в Telegram или к переписке с конкретным пользователем в Telegram, укажите имя пользователя (@username) или канала или чата или бота.

Узнать имя пользователя можно в профиле пользователя.

Если у вас ещё не установлен @username в Telegram, вы можете установить его в настройках своего профиля в приложении.

Если вы создаёте QR код не для канала, а для связи непосредственно с вами, вы можете указать номер телефона. Номер телефона нужно указывать в международном формате — начиная с символа «+», без тире и скобок.

*Если вы указываете номер телефона, не забудьте проверить свои настройки приватности в приложении. Номер телефона должен быть открыт для всех. Если вы его скрываете или он доступен только вашим добавленным контактам, ссылка с номером не будет работать или будет работать только у ваших контактов, в этом случае лучше использовать имя пользователя (@username).

При использовании номера телефона, при переходе по ссылке, пользователи которые давно не обновляли своё приложение, могут видеть сообщение об ошибке «Истёк срок действия ссылки». Решение проблемы — обновить приложение. Ссылка с @username будет работать у всех.

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

Вы можете вставить логотип Telegram в центр QR-кода, выберите цвет логотипа: чёрный или оригинальный цвет логотипа Telegram, если логотип не нужен, выберите пункт «Нет» в настройке логотипа.

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

Вы также можете воспользоваться формами для создания QR-кода на другие случаи или общим, универсальным генератором QR кода

Бесплатный универсальный онлайн генератор статических и динамических QR-кодов: Telegram
Выберите тип QR-кода в списке доступных типов и определите кодируемые данные QR-кода в открывшейся форме

Для создания большого числа однотипных QR-кодов за раз можно воспользоваться нашим программным модулем — Пакетный генератор QR-кодов.
Модуль позволяет создавать коды путем загрузки специального пакетного файла в формете CSV, который может быть создан в Excel или любом текстовом редакторе. Модуль доступен только на тарифных планах Профессиональный и Безлимитный.

Либо использовать специально разработанный программный интерфейс STQR API.
API позволяет создавать коды в автоматическом режиме из сторонних информационных систем, например, 1С, SAP, ActiveDirectory и др. Модуль доступен только на тарифных планах Безлимитный.

Наложение QR-кода на существующее изображение

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

Будем благодарны за поддержку нашего интернет-сервиса:
Поддержите STQR.RU «лайком» в социальных сетях:
Как создать динамический QR-код?
  • зарегистрироваться на нашем сервисе STQR.ru, пройти авторизацию
  • перейти в онлайн генератор QR-кодов
  • выбрать тип создаваемого QR-кода, заполнить нужны поля формы и нажать кнопку Создать динамический QR-код.
Есть еще вопросы? Хотите сотрудничать со STQR.RU?
    в нашу службу технической поддержки
  • пишите на наш Whatsapp/Telegram: +7 (930) 001-44-56
  • пишите на support@stqr.ru
  • звоните +7 (930) 001-44-56
  • пишите на info@stqr.ru через наш портал технической поддержки
Оставляйте отзывы и комментарии в наших социальных сетях:

Результат создания QR-кода

Новости

Дворцовый мост в Санкт-Петербурге обзавелся «удостоверением личности» с QR-кодом

06 июля 2022
Дворцовый мост в Санкт-Петербурге обзавелся «удостоверением личности» с QR-кодом

Дворцовый мост в Петербурге официально обзавелся «удостоверением личности». Как сообщили в пресс-службе «Мостотреста», на табличке отображена вся информация о постройке, а также QR-код

Владельцы карт «Мир» смогут оплачивать покупки с помощью QR-кода в смартфоне

17 июня 2022
Владельцы карт «Мир» смогут оплачивать покупки с помощью QR-кода в смартфоне

Роскомнадзор поручил разработать программу для поиска незаконного контента в Сети

10 июня 2022
Роскомнадзор поручил разработать программу для поиска незаконного контента в Сети

В России появится интеллектуальная система, отслеживающая незаконный визуальный контент в интернете.

Наш блог

Оплата в STQR.RU стала доступна оплата иностранным картам!

19 августа 2022
Оплата в STQR.RU стала доступна оплата иностранным картам!

Спешим сообщить, что для нашего интернет-сервиса STQR.RU вновь стали доступны оплаты по международным банковским картам, по которым в последнее время были сложности с оплатами.

Новые групповые функции по работе с динамическими QR-кодами

16 мая 2022
Новые групповые функции по работе с динамическими QR-кодами

Доступны новые «групповые» функции в личном кабинете для работы с динамическими QR-кодами

14 марта 2022
Информационное обращение!

В это неспокойное время сообщаем Вам, что мы работаем в обычном режиме. Это значит, что можно и дальше пользоваться нашими интернет-сервисами — в любом месте и в любое время.

Справочная информация

QR-коды

QR-код (сокращение от английского Quick Response, что в переводе означает «Быстрый ответ») – оптически считываемый матричный код, который способен хранить в закодированном виде обычный текст, URL-адрес веб-сайта, номер телефона, адрес электронной почты и любые другие буквенно-цифровые данные в объеме до 4296 символов (QR-коды стандартизированы на международном уровне в соответствии с ISO 18004).
Наш QR-генератор умеет генерировать динамические или статические QR-коды, формировать их изображения в доступных графических форматах для дальнейшего использования.

Создание бесплатных статичных QR-кодов

Выше представленный QR-код генератор БЕСПЛАТЕН для тех, кому нужно получить графическое изображение QR-коды без регистрации. Это полностью функциональный онлайн-генератор, создающий статичные (постоянные) QR-коды, срок действия которых не истекает, вся информация закодирована непосредственно в самом коде. Вы можете создать столько QR-кодов, сколько вам нужно БЕСПЛАТНО без каких-либо ограничений для личного или коммерческого использования.

Как создать статический QR-код

  • Шаг 1 Выберите тип QR-кода, который вам нужен. У нас есть более 20 типов данных QR-кода на выбор, включая URL веб-сайта, видео, Facebook, местоположение на карте, SMS или сообщение электронной почты, контактные данные и т.д.
  • Шаг 2 Добавьте содержимое QR-кода. В зависимости от выбранного типа данных введите контент для QR-кода, например; URL веб-сайта, страницу Facebook, местоположение карты, данные электронного сообщения и т. д.
  • Шаг 3 Стиль вашего QR-кода. Измените цвет своего QR-кода, используя наш удобный подборщик цветов и определите параметр коррекции ошибок.
  • Шаг 4 Загрузите свой QR-код. Загрузите полученный код QR-код в доступных растровых и векторных форматах.

И не забудьте проверить свой QR-код при помощи сканера QR-кодов

Уровень коррекции ошибок

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

  • Уровень L (7%)
  • Уровень M — 15% — используется по умолчанию
  • Уровень Q (25%)
  • Уровень H (30%)

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *