Телеграм чат-бот

Цель проекта: изучить базовые возможности чат-ботов телеграм.
Реализованные функции:

  • Создание меню команд
  • Создание inline-клавиатуры
  • Передача сообщений в бот
  • Получение сообщений, команд и callbacks
  • Создание опросников и получение графических результатов
  • Фиксация всей деятельности в базе данных
  • Удаление сообщенний из бота
  • Запуск веб-приложения телеграм
  • Коммуникация с веб-приложением

Бот доступен по ссылке
Использовались библиотеки: irazasyed (базовая для работы с telegram), jpgraph (для создания графика), web application сделано в виде обычной HTML-страницы, в нее добавлены библиотеки JQuery и JQuery UI.
Бот обслуживается программой на PHP, которая работает у меня на хостинге в окне (screen) операционной системы. Запрос сообщений на сервере происходит раз в 5 секунд. Я решил сделать пока только один этот вариант, чтобы не терять сообщения при сбоях программы или связи. Работает следующая общая схема:

Алгоритм такой: PHP-скрипт раз в 5 секунд запрашивает новые обновления (updates) на сервере Telegram через его API, реализовано три команды в меню ввода: краткая информация о боте, тестовый опросник и запуск web application. Все сообщения от сервера записываются в базу данных, также записываются ответы бота (то есть обработчика команд). Это позволяет на регулярной основе удалять из бота сообщения, которые там находятся более 5 минут.


Сначала была сделана попытка реализовать опросник на основе poll Telegram, но оказалось, что такие опросники работают только в одном чате, то есть в группах или каналах, в простом боте опросник будет состоять из одного ответа конкретного пользователя и получить доступ к ответам других пользователей нельзя, также нельзя выдать результат опроса в виде графика, то есть доступен только один вариант: показ опросника, ответ пользователя и показ графика из одного показателя со значением 100%. Пришлось сделать полностью кастомный опросник и принимать ответы через inline-клавиатуру. В этом варианте пользователю разрешено вывзать опросник сколько угодно раз. Создание графика сделано с помощью библиотеки jpgraph. Пользователь не сможет вызвать опросник еще раз, если у него открыт предыдущий и он за 5 минут не был автоматически удален.
Веб-приложение запускается через inline-keyboards, то есть кнопка запуска показывается в области сообщений. Это сделано специально, так как при вызове приложения через клавиатуру в области ввода туда не передается информация о пользователе и объект initData. Кроме этого на всякий случай в приложение передается chat_id и ссылка на скрипт API для обработки действий внутри приложения. Веб-приложение представляет собой обычную HTML-страницу, но вызываться она должна через HTTPS.
Дополнительный скрипт PHP для обеспечения функционала приложения необходим из-за того, что практически не существует связи между приложением и ботом. В библиотеке telegram javascript есть метод sendData(), но он позволяет только отправить некий текст в область ввода интерфейса и закрывает приложение, кроме этого, метод срабатывает только когда приложение вызывается через кнопку в области ввода, то есть при таком раскладе в приложение не поступает сведений о пользователе. Таким образом, если нужно что-то отдать в бот из приложения, то надо вызвать скрипт с API, он запишет сообщение в базу и отправит в телеграм сообщение, которое будет показано в боте. Если не записывать данные в базу, то это сообщение не будет получено основным обработчиком, такие сообщения telegram не передает в updates. Каких-то выдающихся коммерческих возможностей у веб-приложения я не обнаружил, это обычная веб-страница. У библиотеки javascript много возможностей по использованию смартфона, все остальные возможности для меня в этом исследовании пока не открылись.

Проект MUSICALION (Германия)

Проект представляет собой коммерческий музыкальный сервис, члены которого могут публиковать свои произведения, а также произведения других авторов в собственном исполнении и/или оранжировке. Я работал над проектом с июля 2019 года по июнь 2021 года в качестве программиста. К моему большому сожалению за это время я выполнил все поставленные передо мной задачи и работать стало не с чем, эпидемия ковида также добавила негатива в этот бизнес, что привело к его сильному сокращению и отмене изветсных музыкальных конкурсов для которых проект являлся организатором.
В связи с тем, что я связан с моими бывшими работодателями соглашением NDA (Confidentiality Agreement), я не могу подробно остановиться на задачах, которые выполнялись мной в рамках этого проекта и технологиях на которых это было выполнено. Вы можете посмотреть на часть сайта проекта, которая есть в открытом доступе, это довольно большой его кусок, по роду своей деятельности я так или иначе принимал участие в модификации практически всех страниц а часть модулей и функций создал с нуля, в проекте их не было.
Вкратце можно перечислить следующие направления моей деятельности:

Проекты выполненные мной в составе колл-центра “Фронт Лайн” (Москва)

Я работал в качестве программиста в колл-центре “Фронт Лайн” (Москва, Зеленоград) с августа 2016 года по июль 2019 года. Работы там было очень много, но можно выделить несколько основных направлений.

  • Оперативная текущая работа, которая заключалась в коррекции существующих телекоммуникационных проектов в соответствии с требованиями заказчиков. Проекты представляли собой обычные сайты написанные на HTML и Javascript на стороне броузера и на PHP на стороне сервера, база данных mySQL. При создании нового проекта обычно за основу брался какой-то существующий похожий проект и модифицировался в соответствии с техническим заданием.
  • Текущая работа по созданию отчетов для проектов. Первоначально все отчеты были написаны на PHP и их было несколько сотен. В дальнейшем мне разрешили использовать Microsoft SSRS и я начал новые отчеты по своим проектам делать на этой технологии, всего мне удалось написать таких отчетов около 50, а также обучить своих коллег пользоваться SSRS.
  • Разработка систем интеграции с внешними проектами. На начальном этапе таких интеграций было немного, я могу припомнить только обновление базы знаний ДИТ, но в дальнейшем этот сегмент сильно вырос. Я занимался реализацией интеграций со следующими компаниями и организациями: “DPD”, “Нау такси”, “Командир такси”, “СПСР” (вошла в состав DPD), “ДИТ” и пр.
  • С моим приходом в компанию возобновились работы по созданию систем контроля качества для нескольких проектов, которые до этого момента создать не получалось. Мне удалось реализовать три таких системы: для проекта ДИТ 7Х7, проекта ДИТ ЕДЦ и проекта для обслуживания чата на сайте МПГУ. Эти проекты использовали одну базу данных, но на клиентской части сильно отличались технологиями реализации: на начальном этапе для интерфейса контроля я использовал обычный HTML и Javascript, в следующих двух проектах я работал уже с ExtJS. Кроме этого проекты кардинально отличались алгоритмами отбора звонков и диалогов, а также содержимым чек-листов для анализа разговоров, также у проектов были разные отчеты, которые я делал на SSRS.
  • При обслуживании проектов компании было очень много ручной рутинной работы, руководство поощряло мою проектную деятельность и потому я постоянно развивал наш внутренний производственный проект. В рамках этого проекта я реализовал множество задач: управление адресами получателей отчетов, универсальный редактор справочников НСИ, управление интерфейсами проектов, управление универсальыми базами знаний и т.д.
  • Проект OMS

    [+]
    Более подробно о моем участии в проекте для российских работодателей …

    OMS (Offer Management System) система для создания каталогов товаров в формате для печати (Adobe InDesign).
    Разработан в виде двух клиентских приложений для броузера и издательского продукта Adobe InDesign, и двух обслуживающих их серверных частей: базы данных mySQL (взаимодействие через PHP) и сервера Adobe InDesign (взаимодействие через SOAP и Adobe JavaScript).

    Включает в себя:

  • Графический редактор, позволяющий создавать презентации, состоящие из изображений, текстовых блоков, внутренних переменных и других презентаций.
  • Базу данных (mySQL) для хранения предложений (offers) и товаров, входящих в них, которая обновляется из базы данных CRM-системы компании (Oracle). Также в базе данных хранятся сведения о каталогах и презентациях.
  • Систему построения шаблонов каталогов и сами каталоги, которые могут быть реплицированы на сервер Adobe InDesign с помощью технологии SOAP (PHP – Adobe JavaScript).
  • Набор скриптов для клиентских программ Adobe InDesign (Adobe JavaScript), которые позволяют подключаться к базе данных товаров и производить обновление цен и описаний с помощью внутренних переменных.
  • Планирование производственного процесса ООО “Промопост”

    [+]
    Более подробно о моем участии в проекте (для российских работодателей) …

    Краткие сведения о проекте:

  • Поддержка расчетов загрузки для нескольких технологий сборки
  • Планирование в рамках месяца загрузки линий сборки
  • Поддержка неограниченного количества бизнес-юнитов (фирм)
  • Оперативное планирование загрузки линий на несколько дней вперед
  • Хранение актуальной информации о производственных процессах в реальном режиме времени
  • Импорт данных из CRM-системы компании
  • Формирование отчетов в MS Reporting Services (SSRS)
  • Система управления производственным процессом лаборатории “EuroTest” (русскоязычный)

    Заказчик: ООО “Евро Тест”
    Тип проекта: Внутренний корпоративный проект
    Моя позиция в проекте:
  • Системный аналитик
  • Программист
  • Базы данных: mySQL
    Языки: PHP, HTML, JavaScript
    Технологии: jQuery, PHPExcel library
    Среды разработки: Netbeans 8, mySQL Workbench

    Назначение проекта: обеспечение процесса лабораторного анализа биофизического материала.

    Лаборатория “Евро Тест” выполняет исследования биофизического материала для нескольких крупных медицинских компаний. Проект обеспечивает регистрацию образцов, подготовку плана исследований, назначение исполнителей для исследований, хранение результатов и отсылку их заказчикам. Отсылка результатов производится через email (формат MS Excel) и вебсервисы (формат XML). Сайт проекта является закрытым, но заказчики имеют доступ к своим результатам через интернет.