Перейти к содержанию

Обработка сообщений#

Бот автоматически обрабатывает различные типы сообщений WhatsApp и преобразует их в формат, понятный моделям OpenAI.

Поддерживаемые типы сообщений#

  • Текст: Обычные текстовые сообщения
  • Изображения: Фотографии с опциональными подписями (поддерживается в моделях с возможностью обработки изображений)
  • Аудио: Голосовые сообщения с автоматической транскрипцией
  • Видео: Видеосообщения с подписями
  • Документы: Вложенные файлы
  • Опросы: Сообщения с опросами и обновлениями опросов
  • Местоположение: Общий доступ к местоположению
  • Контакты: Общий доступ к контактам

Реестр обработчиков сообщений#

Бот использует реестр обработчиков сообщений для обработки различных типов сообщений:

// Доступ к реестру
const registry = bot.messageHandlers;

// Создание пользовательского обработчика сообщений
class CustomMessageHandler implements MessageHandler {
    canHandle(message: Message): boolean {
        return message.type === "custom-type";
    }

    async processMessage(message: Message): Promise<any> {
        // Обработка сообщения
        return "Обработанный контент";
    }
}

// Регистрация пользовательского обработчика
bot.registerMessageHandler(new CustomMessageHandler());

// Замена существующего обработчика
bot.replaceHandler(TextMessageHandler, new CustomTextHandler());

Система промежуточного ПО (Middleware)#

Система промежуточного ПО позволяет настраивать обработку сообщений перед отправкой в GPT и обработку ответов перед отправкой пользователю.

Добавление промежуточного ПО для сообщений#

// Обработка сообщений перед отправкой в GPT
bot.addMessageMiddleware(async (message, messageContent, messages, sessionData) => {
    // Добавление пользовательского контекста в разговор
    if (message.type === "text" && message.chatId.endsWith("@c.us")) {
        // Добавление информации о пользователе из базы данных
        const userInfo = await getUserInfo(message.chatId);

        // Изменение текущего содержимого сообщения
        const enhancedContent = `[Пользователь: ${userInfo.name}] ${messageContent}`;

        return {
            messageContent: enhancedContent,
            messages
        };
    }

    return {
        messageContent,
        messages
    };
});

Добавление промежуточного ПО для ответов#

// Обработка ответов GPT перед отправкой пользователю
bot.addResponseMiddleware(async (response, messages, sessionData) => {
    // Форматирование или изменение ответа
    const formattedResponse = response
            .replace(/\bGPT\b/g, "Ассистент")
            .trim();

    // Вы также можете изменить сообщения, которые будут сохранены в истории
    return {
        response: formattedResponse,
        messages
    };
});