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

Пример демо-бота#

См. наш демо-чат-бот для комплексного демо-чат-бота, демонстрирующего множество функций:

import {
    GPTSessionData,
    ImageMessageHandler,
    ProcessMessageMiddleware,
    ProcessResponseMiddleware,
    WhatsappGptBot,
    OpenAIModel,
} from "@green-api/whatsapp-chatgpt";
import * as dotenv from "dotenv";
import { Message } from "@green-api/whatsapp-chatbot-js-v2";
import { ChatCompletionMessageParam } from "openai/resources/chat/completions";
import OpenAI from "openai";

dotenv.config();

// Пользовательский обработчик изображений с расширенными описаниями
class EnhancedImageHandler extends ImageMessageHandler {
    async processMessage(message: Message, openai: OpenAI, model: OpenAIModel): Promise<any> {
        const result = await super.processMessage(message, openai, model);

        if (typeof result === "string") {
            return result.replace(
                    "[The user sent an image",
                    "[Пользователь отправил изображение. Сообщите ему, что вы не та модель, которую он должен использовать"
            );
        }

        return result;
    }
}

// Примеры промежуточного ПО

// Промежуточное ПО для логирования
const loggingMessageMiddleware: ProcessMessageMiddleware = async (
        message, messageContent, messages, _
) => {
    console.log(`[${new Date().toISOString()}] Пользователь (${message.chatId}): `,
            typeof messageContent === "string"
                    ? messageContent
                    : JSON.stringify(messageContent));

    return {messageContent, messages};
};

// Инициализация бота
const bot = new WhatsappGptBot({
    idInstance: process.env.INSTANCE_ID || "",
    apiTokenInstance: process.env.INSTANCE_TOKEN || "",
    openaiApiKey: process.env.OPENAI_API_KEY || "",
    model: "gpt-4o",
    systemMessage: "Вы - полезный WhatsApp-ассистент, созданный GREEN-API",
    maxHistoryLength: 15,
    temperature: 0.5,
    handlersFirst: true,
    clearWebhookQueueOnStart: true,
});

// Обработчики команд
bot.onText("/help", async (message, _) => {
    const helpText = `*WhatsAppGPT Демо-бот*\n\nДоступные команды:\n- /help - Показать это сообщение помощи\n- /clear - Очистить историю разговора`;
    await bot.sendText(message.chatId, helpText);
});

// Регистрация промежуточного ПО
bot.addMessageMiddleware(loggingMessageMiddleware);

// Замена обработчиков по умолчанию
bot.replaceHandler(ImageMessageHandler, new EnhancedImageHandler());

// Запуск бота
bot.start();

Этот демо-бот включает:

  • Пользовательские обработчики сообщений
  • Различные реализации промежуточного ПО
  • Обработчики команд
  • Пользовательские обработчики типов
  • Обработку ошибок

Дополнительные примеры#

Мультиязычный бот#

import { WhatsappGptBot } from '@green-api/whatsapp-chatgpt';
import { detectLanguage } from './language-detector';

const bot = new WhatsappGptBot({
    idInstance: "your-instance-id",
    apiTokenInstance: "your-token",
    openaiApiKey: "your-openai-api-key",
    model: "gpt-4o"
});

// Добавление промежуточного ПО для определения языка
bot.addMessageMiddleware(async (message, content, messages, sessionData) => {
    // Обрабатывать только текстовые сообщения
    if (message.type !== 'text' || !message.text) {
        return {messageContent: content, messages};
    }

    // Определение языка
    const language = await detectLanguage(message.text);

    // Сохранение языка в сессии
    if (!sessionData.context) {
        sessionData.context = {variables: {}};
    }
    sessionData.context.variables.language = language;

    // Обновление системного сообщения с инструкцией о языке
    const languageInstruction = `Пользователь пишет на ${language}. Отвечайте на том же языке.`;

    // Поиск системного сообщения
    const systemIndex = messages.findIndex(m => m.role === 'system');

    if (systemIndex >= 0) {
        // Обновление существующего системного сообщения
        const updatedMessages = [...messages];
        const currentContent = updatedMessages[systemIndex].content;
        if (typeof currentContent === 'string' && !currentContent.includes('Пользователь пишет на')) {
            updatedMessages[systemIndex].content = `${currentContent} ${languageInstruction}`;
        }
        return {messageContent: content, messages: updatedMessages};
    } else {
        // Добавление нового системного сообщения
        return {
            messageContent: content,
            messages: [
                {role: 'system', content: languageInstruction},
                ...messages
            ]
        };
    }
});

// Запуск бота
bot.start();