Самообучающийся чат-бот запоминает фразы всех участников диалога, а вот выдает их в рандомном порядке и анонимно. Конечно, все начинают с «привет, как дела?», но затем разговор становится чудесатей и чудесатей.
- Получается диалог тебя и кучи других людей: не всегда адекватный и понятный, но зато забавный.
Игра «Привет, Незнакомец»
Первый в Telegram квест-бот с встроенным сюжетом. Твоя задача — помочь главному герою выбраться из океанской бездны в режиме реального времени. У тебя есть варианты фраз, которыми ты можешь отвечать. Затягивает не на час.
- Когда квест пройден, можешь отправиться на официальную страницу игры «ВКонтакте» и поболтать с другими игроками.
Анонимный чат
Созданный специально для анонимного общения, чат предлагает интересную функцию — выбрать абсолютно любой ник, при этом настоящее имя твоего профиля нигде не отобразится. Конечно, анонимность не предполагает вседозволенность: в боте запрещено разжигать конфликты и нецензурно выражаться.
Как создать своего бота в telegram?
- Зато можно писать личные сообщения, «обнимать» и даже «шлепать» участников.
Voices of strangers
Некий аналог анонимной чарт-рулетки, только с голосовыми сообщениями. Ты записываешь войс, отправляешь его в чат, и оно рандомно выбирает себе получателя (из тех, кто пользуется ботом, разумеется).
- Бот выбирает из последних 200 записанных в нем сообщений, так что есть шанс устроить с кем-нибудь разговор в реальном времени.
Правил, что можно и нельзя записывать, нет — выражай себя на всю катушку.
Love Story
Невероятно удобный и простой бот для поиска партнера или собеседника. Естественно, все частично анонимно: тебе не напишут в личные сообщения, а твой ник и номер скрыты. Также ты можешь решить, показывать ли определенному пользователю свою анкету.
- Тем не менее, базовой информацией придется поделиться: возраст, город, коротенькое описание и фото.
Better Than Tinder
Бот работает так же, как Тиндер, только лучше. Его задача — повысить самооценку, чего создатели бота не скрывают.
- Надо всего лишь кинуть фотографию и смотреть, как ее лайкают другие люди. Фото людей, которые лайкнули тебя, ты, разумеется, увидишь.
Можно и познакомиться: для этого достаточно написать на фотографии свой ник в Инстаграме или Телеграме .
Бот усталого москвича
Этот бот подскажет тебе уютное место для уединения, неспешной прогулки или медитации в одиночестве в пределах Садового кольца. В библиотеке программы — парки, скверы, пруды, кафе и антикафе.
- К сожалению, получить можно не больше одного места в день, зато к каждому дается подробное описание с достоинствами и недостатками.
Находит собеседников вокруг твоей локации. Минимальный радиус — 10 метров, максимальный — вся планета. Бот можно использовать не только как место для знакомств, но и как чатик, если тебе хочется узнать мнение соседей по подъезду или поболтать с одноклассниками в соседней аудитории.
Источник: news.myseldon.com
Как общаться с ChatGPT с помощью голосовых сообщений в Telegram?
В статье делимся пошаговой инструкцией, как реализовать 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 для разработки и продакшена.
«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
Создайте бота своими руками в одном из самых популярных мессенджеров за несколько минут.
Всё для чат-ботов в одном сервисе
Запускайте, управляйте, анализируйте. Это просто с инструментами Unisender.
Удобный конструктор
Не нужно знать программирование — всё легко сделать при помощи визуального редактора. Создавайте чат-бот в Telegram за считанные минуты: редактируйте готовые блоки в конструкторе, собирайте вопросы и ответы в цепочки, настраивайте логику отправки сообщений, добавляйте вложения.
Галерея шаблонов
Готовые шаблоны — типовые сценарии взаимодействия для разных целей: воронки, продажи, ответы на часто задаваемые вопросы, запись к специалистам, уведомления о доставке и другие.
Выбирайте шаблон, наполняйте своим контентом и адаптируйте под потребности вашего бизнеса.
Готовые интеграции
В Unisender доступны больше 40 интеграций с CRM, CMS и другими платформами. Собирайте данные и управляйте процессами в одном месте.
Аналитика
Смотрите статистику и улучшайте сценарии. Изучайте, как пользователи взаимодействуют с ботом. Считайте количество подписок и отписок, отправленных и открытых сообщений, переходов по ссылкам.
Не только Telegram
Подключайте другие мессенджеры — WhatsApp, ВКонтакте, добавляйте бота прямо на сайт. Соберите всех клиентов с разных каналов в одном месте.
Техподдержка 24/7
Обращайтесь с вопросами — мы рядом. Ответим в любое время суток и поможем решить проблему. Если что-то непонятно, напишите нам в чат, на почту или позвоните.
Что поручить боту в Telegram
Ответы на вопросы
О товарах, услугах, режиме работы, сроках доставки.
Массовые рассылки
Про новинки, акции, специальные предложения для клиентов.
Автоворонки
От знакомства с пользователем до успешной продажи продукта
Уведомления о статусе заказа
Создание, оплата, комплектация, доставка.
Онлайн-запись
В клинику, салон красоты, на вебинар или курсы.
Внутренние коммуникации
Объявления для сотрудников, опросы, тестирования.
Доверьте чат-боту рутинные, но важные задачи
Собрать бота легко
Шаг 1. Создайте чат-карту
Соберите самые частые вопросы, придумайте текст ответов, добавьте кнопки меню.
Шаг 2. Создайте чат-бот
Затем получите ключ-токен и привяжите его к боту в Личном кабинете.
Шаг 3. Запустите бота и пригласите первых подписчиков
Просто загрузите список адресатов из Личного кабинета Unisender, а мы отправим автоматическую email-рассылку о новом чат-боте. Это бесплатно.
Больше пользы. Больше чатов. Больше продаж
Не оставляйте сообщения без ответа
Подключайте консультанта. Если чат-бот не может ответить на вопрос, присоединяйтесь к диалогу в режиме реального времени.
Персонализируйте общение
Каждому подписчику — уникальное сообщение. Обращайтесь по имени, добавляйте в текст данные о городе, подробностях заказа и предпочтениях клиента.
Сегментируйте аудиторию
Разделяйте пользователей на группы и отправляйте рассылки на основе их интересов.
Принимайте платежи Скоро
Подключите платёжную систему и принимайте деньги прямо в мессенджере. Превратите бота в полноценный магазин внутри Telegram.
Чат-боты в Telegram — топ
Всегда на связи
Чат-бот умеет общаться с пользователями в режиме 24/7. Автоматизируйте ответы на типовые вопросы, отправляйте уведомления и рассылки — в любое время суток, без участия службы поддержки.
Удобно для пользователя
Личные контакты, рабочие переписки, интересный контент — всё есть в Telegram. Не уводите клиентов из мессенджера, в котором они привыкли общаться. Будьте на связи с пользователями там, где им удобно.
Большой охват аудитории
Telegram входит в топ-3 популярных мессенджеров в мире. Больше 500 млн активных пользователей в месяц — и аудитория только растёт. Открываемость сообщений — выше 80%. Используйте эти преимущества для продвижения и продаж.
Часто задаваемые вопросы
Как работают боты в Telegram?
- Отвечать на сообщения пользователя — реагирует на текст, выбор пунктов меню и команды из букв и специальных символов.
- Собирать контактные данные и сохранять лиды для дальнейшей работы с клиентами.
- Отправлять рассылки о новинках, акциях и специальных предложениях.
- Подключать оператора. Консультант может присоединиться к диалогу и ответить на нетиповые вопросы.
- Собирать аналитику — анализируйте эффективность чат-бота и корректируйте сценарии при необходимости.
- Принимать оплату. Пользователь может совершать покупки прямо в мессенджере.
️ Смогу ли я создать бота самостоятельно?
Да, это легко. В конструкторе Unisender — интуитивно понятный интерфейс. Вам не придётся создавать чат-бот с нуля. Используйте готовые шаблоны, наполняйте их своим контентом, настраивайте логику сообщений в простом визуальном редакторе.
️ Как подключить чат-бота в Telegram, что мне для этого нужно?
Можно создать сразу несколько ботов в Telegram?
Да. В Unisender можно создавать неограниченное количество чат-ботов.
Сколько стоит чат-бот для Telegram?
Стоимость зависит от количества подписчиков. Есть бесплатный тестовый период. Посмотреть цены.
Где взять подписчиков для бота в Telegram?
- рассказать в соцсетях;
- разместить виджет на сайте;
- отправить ссылку на бота при помощи SMS-рассылки или Viber-рассылки.
У меня есть чат-боты в другом сервисе. Их можно перенести в Unisender?
Да, мы можем помочь с переносом базы в Unisender, но каждый случай нужно рассматривать индивидуально. На возможность переноса влияют данные и параметры в данных, которые вы хотите перенести. Пожалуйста, перед переездом уточните у нашей техподдержки, доступен ли перенос базы подписчиков чат-бота именно для в вашем случае.
Можно ли заказать разработку чат-бота?
Команда Unisender поможет в создании чат-бота для Telegram и других мессенджеров, если вы не хотите заниматься этим самостоятельно. Подробнее об услуге.
Бот в Telegram работает даже тогда, когда вы отдыхаете
Используйте его для общения и продаж — будьте на связи там, где удобно вашим клиентам.
Источник: www.unisender.com