Как открыть голосовой чат в Телеграмме

В статье делимся пошаговой инструкцией, как реализовать Telegram-бота на NodeJS и задеплоить его на виртуальный сервер.

Введение

Привет! Я Владилен Минин, YouTube-блогер. Пару недель назад я написал бота, который позволяет говорить с ChatGPT с помощью голосовых и текстовых сообщений. Это удобно, потому что не нужно использовать VPN для работы с OpenAI, а про клавиатуру можно забыть вовсе.

В этой статье делюсь пошаговой инструкцией, как реализовать ChatGPT Telegram-бота на NodeJS и задеплоить его на виртуальный сервер.

Каркас Telegram-бота

Настройка рабочего окружения

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

npm init -y npm i -D nodemon cross-env

После инициализации в директории проекта сгенерируется конфигурационный файл package.json. А вторая команда подтянет необходимые пакеты, которые позволяют запускать приложения NodeJS в режиме разработки.

Теперь добавим поддержку установленных ES-модулей в package.json для разработки и продакшена.

Как сделать голосовой чат в Телеграме? Как создать голосовой чат в Telegram?


«type»: «module», «scripts»: < «start»: «cross-env NODE_ENV=production node ./src/main.js», «dev»: «cross-env NODE_ENV=development nodemon ./src/main.js» >,

Установка Telegraf и регистрация бота

Рабочее окружение настроено — давайте приступим к написанию самого бота. Создаем главный файл ./src/main.js , устанавливаем фреймворк Telegraf и config.

npm i config telegraf

После установки необходимых пакетов и создания главного файла, можно запустить самого бота. Для этого нужно импортировать Telegraf и config, а после — добавить ключ API для работы с Telegram.

import < Telegraf >from ‘telegraf’ import config from ‘config’ const bot = new Telegraf(config.get(‘TELEGRAM_BOT’)) bot.launch() process.once(‘SIGINT’, () => bot.stop(‘SIGINT’)) process.once(‘SIGTERM’, () => bot.stop(‘SIGTERM’))

./src/main.js. О настройке config.get() ниже.

Теперь создадим «заготовки» для настроек приложения, где будут расположены данные для Telegram-бота. Добавляем два файла — ./config/default.json с конфигурациями для разработки и ./config/default.json — для продакшна.

На практике, если в продакшене API-токен не меняется, вы можете обойтись одним конфигурационным файлом — например, только config/default.json .

Добавление функционала

Бот запущен и работает, но пока ничего не умеет делать. Поэтому нужно добавить первый функционал: научиться фильтровать голосовые сообщения и получать на них ссылки в формате ogg, а после конвертировать в mp3.

Последний шаг нужен, чтобы в дальнейшем переводить голосовые сообщения в текст через сервисы OpenAI. Они принимают на вход файлы формата ogg. Подробнее нюансы описаны на официальной странице.

Фильтрация голосовых сообщений

Отбирать голосовые сообщения можно с помощью встроенного фильтра Telegraph — message. Достаточно в качестве аргумента передать значение voice — и бот будет «считывать» голосовые сообщения.

import < Telegraf >from ‘telegraf’ import < message >from ‘telegraf/filters’ import < code >from ‘telegraf/format’ import config from ‘config’ import < ogg >from ‘./ogg.js’ const bot = new Telegraf(config.get(‘TELEGRAM_BOT’)) bot.on(message(‘voice’), async (ctx) => < try < await ctx.reply(code(‘Сообщение принял. Жду ответ от сервера. ‘)) const link = await ctx.telegram.getFileLink(ctx.message.voice.file_id) const userId = String(ctx.message.from.id) const oggPath = await ogg.create(link.href, userId) const mp3Path = await ogg.toMp3(oggPath, userId) >catch (e) < console.log(`Error while voice message`, e.message) >>)

Чтобы получить ссылку на голосовое сообщение, нужно передать в метод getFileLink специальный идентификатор.

Конвертация голосовых сообщений и получение ссылок в формате ogg

Чтобы обрабатывать и конвертировать полученные из getFileLink данные, создадим обработчик — например, ./src/ogg.js — и установим зависимости. А также создадим директорию для хранения голосовых.

Далее в ./src/ogg.js создадим объект OggConverter , который будет создавать ogg-записи и сохранять их в специальной директории.

В методе create мы сначала скачиваем ogg с серверов Telegram, а потом записываем их локально в файл через stream . Голосовой ogg-файл будет храниться в ./voices/$.ogg .

import axios from ‘axios’ import < createWriteStream >from ‘fs’ import < dirname, resolve >from ‘path’ import < fileURLToPath >from ‘url’ const __dirname = dirname(fileURLToPath(import.meta.url)) // ==== async create(url, filename) < try < const oggPath = resolve(__dirname, ‘../voices’, `$.ogg`) const response = await axios(< method: ‘get’, url, responseType: ‘stream’, >) return new Promise((resolve) => < const stream = createWriteStream(oggPath) response.data.pipe(stream) stream.on(‘finish’, () =>resolve(oggPath)) >) > catch (e) < console.log(‘Error while creating ogg’, e.message) >>

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

Дальше конвертируем ogg в mp3 с помощью функции toMp3 . Выходной файл будет лежать по адресу: ./voices/$.mp3

toMp3(input, output) < try < const outputPath = resolve(dirname(input), `$.mp3`) return new Promise((resolve, reject) => < ffmpeg(input) .inputOption(‘-t 30’) .output(outputPath) .on(‘end’, () =>resolve(outputPath)) .on(‘error’, (err) => reject(err.message)) .run() >) > catch (e) < console.log(‘Error while creating mp3’, e.message) >>

Опционально. Чтобы после конвертации в mp3 файлы ogg удалялись, можно написать дополнительную утилиту.

import < unlink >from ‘fs/promises’ export async function removeFile(path) < try < await unlink(path) >catch (e) < console.log(‘Error while removing file’, e.message) >>

Голосовой чат с ChatGPT

Теперь давайте напишем основные функции для перевода mp3 в текст и работы с ChatGPT соответственно. Для этого нужно подключить API ChatGPT: установить библиотеки, сгенерировать и добавить в настройки приложения уникальный ключ.

npm i openai

Установка пакета openai.

https://platform.openai.com/account/api-keys

Для работы с API OpenAI создадим файл ./src/openai.js и опишем базовый класс. В его конструкторе создаем объект с конфигурациями, которые будут использоваться при отправке запросов на серверы OpenAI, и объект для подключения к API.

import < Configuration, OpenAIApi >from ‘openai’ import config from ‘config’ import < createReadStream >from ‘fs’ class OpenAI < roles = < ASSISTANT: ‘assistant’, USER: ‘user’, SYSTEM: ‘system’, >constructor(apiKey) < const configuration = new Configuration(< apiKey, >) this.openai = new OpenAIApi(configuration) > async chat(messages) < >async transcription(filepath) < >> export const openai = new OpenAI(config.get(‘OPENAI_KEY’))

Здесь roles — формат ролей, который принимает сервер openai. assistant — сообщения из gpt-чата; user — пользовательские сообщения; system — контекст для чата (например, «ChatGPT, веди себя как программист с многолетним стажем»).

Функция transcription отвечает за перевод mp3 в текстовые сообщения с помощью модели whisper-1. Притом она достаточно хорошо распознает русский язык.

async transcription(filepath) < try < const response = await this.openai.createTranscription( createReadStream(filepath), ‘whisper-1’ ) return response.data.text >catch (e) < console.log(‘Error while transcription’, e.message) >>

Функция chat отвечает за самое главное — общение с ChatGPT на базе модели gpt-3.5-turbo. Четвертую модель можно использовать только по предварительно одобренной заявке.

async chat(messages) < try < const response = await this.openai.createChatCompletion(< model: ‘gpt-3.5-turbo’, messages, >) return response.data.choices[0].message > catch (e) < console.log(‘Error while gpt chat’, e.message) >>

Асинхронная функция chat принимает messages — массив объектов с сообщениями, ролями и именами отправителей. А после — возвращает данные из response , ответ ChatGPT.

Осталось только добавить вызовы функций OpenAI.transcription и OpenAI.chat из головного скрипта ./src/main.js.

import < openai >from ‘./openai.js’ import < removeFile >from ‘./utils.js’ // ===== bot.on(message(‘voice’), async (ctx) => < try < await ctx.reply(code(‘Сообщение принял. Жду ответ от сервера. ‘)) const link = await ctx.telegram.getFileLink(ctx.message.voice.file_id) const userId = String(ctx.message.from.id) const oggPath = await ogg.create(link.href, userId) const mp3Path = await ogg.toMp3(oggPath, userId) removeFile(oggPath) const text = await openai.transcription(mp3Path) await ctx.reply(code(`Ваш запрос: $`)) const messages = [] const response = await openai.chat(messages) await ctx.reply(response.content) > catch (e) < console.error(`Error while proccessing voice message`, e.message) >>)

Готово — бот «понимает» голосовые сообщения и умеет отвечать на них текстом. Но это еще не все: сейчас бот не сохраняет контекст общения, не запоминает предыдущие ответы и запросы. Он работает как друг, которому все равно, что вы ему рассказывали в прошлом.

Сохранение данных сессии

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

// импортируем вместе с Telegraf пакет session import < Telegraf, session >from ‘telegraf’ import < initCommand, processTextToChat, INITIAL_SESSION >from ‘./logic.js’ // ====== const bot = new Telegraf(config.get(‘TELEGRAM_TOKEN’)) // говорим боту, чтобы он использовал session bot.use(session()) // при вызове команды new и start бот регистрирует новую беседу, // новый контекст bot.command(‘new’, initCommand) bot.command(‘start’, initCommand) bot.on(message(‘voice’), async (ctx) => < // если сессия не определилась, создаем новую ctx.session ??= INITIAL_SESSION try < await ctx.reply(code(‘Сообщение принял. Жду ответ от сервера. ‘)) const link = await ctx.telegram.getFileLink(ctx.message.voice.file_id) const userId = String(ctx.message.from.id) const oggPath = await ogg.create(link.href, userId) const mp3Path = await ogg.toMp3(oggPath, userId) removeFile(oggPath) const text = await openai.transcription(mp3Path) await ctx.reply(code(`Ваш запрос: $`)) await processTextToChat(ctx, text) > catch (e) < console.log(`Error while voice message`, e.message) >>)
import < openai >from ‘./openai.js’ export const INITIAL_SESSION = < messages: [], >export async function initCommand(ctx) < ctx.session = INITIAL_SESSION await ctx.reply(‘Жду вашего голосового или текстового сообщения’) >export async function processTextToChat(ctx, content) < try < // пушим сообщения пользователя в сессию (в контекст) ctx.session.messages.push(< role: openai.roles.USER, content >) // пушим сообщения бота в сессию (в контекст) const response = await openai.chat(ctx.session.messages) ctx.session.messages.push(< role: openai.roles.ASSISTANT, content: response.content, >) await ctx.reply(response.content) > catch (e) < console.log(‘Error while proccesing text to gpt’, e.message) >>

Еще по теме:  Узнать номер по странице ВК Телеграм

Бот сохраняет контекст общения до тех пор, пока вы не сделаете новую сессию.

Текстовый чат с ChatGPT

Бот умеет отвечать на голосовые сообщения и сохранять результаты в сессию. Давайте не будем ограничивать пользователей без микрофона и добавим обработку текстовых запросов. Для этого нужно просто обработать через фильтр сообщения с типом text и передать значение напрямую в ChatGPT.

bot.on(message(‘text’), async (ctx) => < ctx.session ??= INITIAL_SESSION try < await ctx.reply(code(‘Сообщение принял. Жду ответ от сервера. ‘)) await processTextToChat(ctx, ctx.message.text) >catch (e) < console.log(`Error while voice message`, e.message) >>)

Облачные серверы с гибкой производительностью ядра vCPU

Деплой бота на облачный сервер

Все готово, но есть проблема: программа запущена на компьютере.

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

Подготовка контейнера

Чтобы задеплоить бота на сервер, сначала нужно создать Dockerfile, который будет описывать процесс сборки приложения в контейнер. А для автоматизации команд docker build и docker run можно завести Makefile.

FROM node:16-alpine WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . ENV PORT=3000 EXPOSE $PORT CMD [«npm», «start»]
build: docker build -t tgbot . run: docker run -d -p 3000:3000 —name tgbot —rm tgbot

Теперь для запуска приложения на сервере будет достаточно написать команду make run .

Запуск сервера и загрузка бота

Поскольку бот работает с ChatGPT через API и потребление вычислительных ресурсов минимально, для деплоя подойдет сервер линейки Shared Line. Это линейка облачных серверов с возможностью оплаты только части ядра, например 10, 20 или 50%. Shared Line позволяет использовать все преимущества облака и не переплачивать за неиспользуемые ресурсы.

Для начала зарегистрируемся в панели управления и создадим новый сервер в разделе Облачная платформа. Затем — настроим его.

Далее устанавливаем на сервер Docker согласно инструкции, git и клонируем репозиторий с проектом. Проверяем конфигурации и API-ключи, собираем образ через make build и запускаем c помощью make run !


Пример работы бота.

Супер — бот работает! Дальше вы можете внедрить свой функционал. Например, по сохранению диалога с ботом и выводу истории запросов.

Заключение

Как мы видим, в разработке подобных Telegram-ботов нет ничего сложного. Тем более для хостинга такого проекта не нужно платить полную стоимость сервера: ресурсы оплачиваются по модели pay-as-you-go. Видеоверсия инструкции доступна по ссылке.

Зарегистрируйтесь в панели управления

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

Инструкция

Как автоматизировать подготовку к собеседованиям с помощью Telegram-бота

29 сентября 2023

Инструкция

Как реализовать очередь в Redis

14 сентября 2023

Инструкция

Как генерировать истории с помощью ChatGPT и Telegram

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

Как записать и отправить голосовое в Телеграмме

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

Каким образом найти человека по номеру телефона в Телеграмм

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

Но если человека в ваших контактах нет, его можно найти при помощи номера мобильного в Телеграмм:

Кнопка меню в Телеграмм

    Запускаем приложение и находим кнопку с тремя полосками в верхней части экрана;

Контакты в меню

В меню среди прочих пунктов найдите « Контакты » и нажмите;

Кнопка добавления контакта

Далее находим знак с плюсом в верхнем правом углу и нажимаем на него;

Доавление номера в Телеграмм

  • Вводим в верхней части в первой строке имя будущего контакта;
  • Ниже вводим номер телефона без ошибок;
  • Приглашение в мессенджер

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

    Появится также окно для подтверждения приглашения пользователя в Telegram, если такого контакта в базе данных нет. При подтверждении приглашения пользователю отправляется СМС-сообщение со ссылкой на загрузку программы из Play Market и Google Play. Если человек зарегистрирован, то контакт сохранится и у вас появится возможность сразу же ему написать. Его можно будет найти в будущем при помощи кнопки поиска. Или через книгу контактов в мобильном приложении Телеграмм.

    Способ записать голосовое сообщение в мессенджере

    Голосовыми сообщениями удобно обмениваться в любом мессенджере. Так часто делают в ВК, общаясь с друзьями и знакомыми. Но мобильный клиент Телеграмм имеет свои функции и оригинальный интерфейс. Здесь минимум функций и кнопок. А часто одна из них имеет несколько назначений.

    Еще по теме:  Лайки на последние посты в ТГ

    Так получилось и с функцией записи голоса для переписки.

    Для того, чтобы записать такое голосовое сообщение, нужно зайти в приложение Telegram:

    1. Откройте чат с человеком, которому нужно отослать послание; Чат в Telegram
    2. Прикоснитесь к одному из окон чата, чтобы на экране появилась виртуальная клавиатура; Клавиатура телефона
  • Нажмите на кнопку справа в виде микрофона и удерживайте её несколько секунд; Кнопка с микрофоном
  • Говорите, чтобы записать речь. После того, как вы отпустите, запись прекратится и её можно будет отослать в сообщении;
  • В некоторых случаях этого микрофона нет в приложении. А вместо него расположена квадратная кнопка со скруглёнными углами. Значит необходимо один раз прикоснуться к ней, чтобы началась запись на микрофон мобильного телефона. Кнопка для создания голосового
  • Если эту же кнопку нажать два раза, то вы сможете создать видео через фронтальную или внешнюю камеру смартфона. И также отправить запись свои друзьям. Мессенджер позволяет записывать длительные сообщения, которых хватит на то, чтобы сообщить новость любого объёма информации.

    Можно управлять процессом записи, если нажимать и удерживать иконку с микрофоном, запись будет длиться до её отпуска. Чтобы она продолжалась, а вы убрали палец, смахните кнопку вверх. Чтобы сразу же удалить сообщение, не отправляя его, смахните влево.

    Отправка видео-сообщение в Телеграмм

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

    Видео в чате

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

    Итак, порядок действий для отправки видео-сообщения с голосом в Телеграмм:

    Обновление клиента

      Для записи клиент должен быть обновлён. Если возникают трудности при применении этих инструкций, возможно у вас более ранняя версия, на которой описываемые функции просто отсутствуют;

    Кнопка для записи

  • Для всех остальных — открываем мессенджер и выбираем контакт, которому необходимо записать видео;
  • По умолчанию в нижней части находится микрофон для записи и отправки голосовых сообщений в Telegram. Нам нужно один раз прикоснуться к этой кнопке. Она должна поменять свою форму на квадратную;
  • Запись также будет отправлена, после того, как пользователь её остановит. Запись может длиться максимум — 1 минуту. Если этого времени недостаточно, вы можете создать ещё несколько роликов и отправить по нужному адресу.

    Кнопка для автозаписи

    Если запись создаёте без вашей помощи, то остановить её можно при помощи кнопки с квадратом.

    Кнопка для остановки записи

    Камера может записывать в разных режимах. Чтобы сменить её, нажмите на кнопку слева внизу на экране.

    Ограничения приложения Telegram

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

    Чат в Telegram

    • Пользователь может создавать не больше 10 каналов для одного никнейма в Telegram;
    • Ник аккаунта в Telegram может состоять минимум из 5 символов, максимум из 32;
    • Описание собственного аккаунта не должно превышать 70 символов;
    • Можно подписаться одному аккаунту не более чем на 500 разных каналов;
    • Количество всех созданных чатов для одного пользователя — до 5;

    Имя пользователя в Телеграмм

    Имя пользователя может носить 1 символ и не более 64;

    Сообщения в Телеграм

  • Каждый пользователь может хранить на своём аккаунте не более 200 GIF-анимаций;
  • Длина одного отправляемого сообщения не должна превышать 4096 символов;
  • Чат

  • Файлы, которые отправляет пользователь не должны быть больше, чем 2 Гб;
  • Создавать отложенных сообщений можно не более 100 штук;
  • В день можно создавать не более 50 чатов;
  • Кроме этого, количество редактирований сообщений во всех группах и их типах не ограничивается. На видимость пользователей рядом также есть ограничение — не более 12 км.

    Использования Телеграмм для прослушивания голосовых на компьютере

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

    Для этого понадобится мобильный телефон, так как на него будет отправлена СМС-ка, в которой будет содержаться код для подтверждения:

    Форма для ввода телефона

    1. Переходим по адресу: https://web.telegram.org/;
    2. Здесь вас ждёт форма, которую нужно заполнить своими данными и отправить на сервер. Выберите в ней свою страну и укажите номер мобильного телефона;
    3. Введите в следующей строке код подтверждения и нажмите внизу кнопку для продолжения использования.

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

    Видео-инструкция

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

    Источник: it-doc.info

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