ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° WhatsApp GPT Bot#
Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ WhatsApp-Π±ΠΎΡΠ° Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠ΅ΠΉ OpenAI GPT, ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½Π°Ρ Π½Π° Π±Π°Π·Π΅ GREEN-API.
API#
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΊ REST API Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΡΡΠΊΠΎΠΉ ΠΊ REST API, ΠΏΠΎΡΡΠΎΠΌΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠ° ΠΈ ΠΊ ΡΠ°ΠΌΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅.
ΠΠ²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ#
Π§ΡΠΎΠ±Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ GREEN-API, Π°ΠΊΠΊΠ°ΡΠ½Ρ WhatsApp Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΠ΅Π»Π΅ΡΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π² Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ. ΠΠ»Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½ΡΡΠ°Π½ΡΠ° ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² Π»ΠΈΡΠ½ΡΠΉ ΠΊΠ°Π±ΠΈΠ½Π΅Ρ ΠΈ ΡΠΊΠ°Π½ΠΈΡΡΠΉΡΠ΅ QR-ΠΊΠΎΠ΄ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ WhatsApp.
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ#
- ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ OpenAI GPT Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π»Π»Π΅ΠΊΡΡΠ°Π»ΡΠ½ΡΡ ΠΎΡΠ²Π΅ΡΠΎΠ²
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ GPT (GPT-3.5, GPT-4, GPT-4o)
- ΠΡΠ»ΡΡΠΈΠΌΠΎΠ΄Π°Π»ΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
- Π’ΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΡ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
- ΠΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² ΠΌΠ΅Π΄ΠΈΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ WhatsApp
- ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΠ (middleware) Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈ ΠΎΡΠ²Π΅ΡΠΎΠ²
- ΠΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΡΡΠΎΡΠΈΠ΅ΠΉ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠΎΠ²
- Π‘ΠΈΡΡΠ΅ΠΌΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ, ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½Π°Ρ ΠΎΡ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° TypeScript
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°#
npm install @green-api/whatsapp-chatgpt
ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ (openai
ΠΈ @green-api/whatsapp-chatbot-js-v2
) Π±ΡΠ΄ΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ.
ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ#
import { WhatsappGptBot } from '@green-api/whatsapp-chatgpt';
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π±ΠΎΡΠ°
const bot = new WhatsappGptBot({
idInstance: "your-instance-id",
apiTokenInstance: "your-token",
openaiApiKey: "your-openai-api-key",
model: "gpt-4o",
systemMessage: "ΠΡ - ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ Π°ΡΡΠΈΡΡΠ΅Π½Ρ."
});
// ΠΠ°ΠΏΡΡΠΊ Π±ΠΎΡΠ°
bot.start();
ΠΠ°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ#
ΠΠ°Π½Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π΄Π²Π° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²Π°ΡΠΈΡ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠ΅ΠΉ:
1. Π‘Π°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΡΠΉ Π±ΠΎΡ#
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΡΡ Π±ΠΎΡΠ° ΠΊΠ°ΠΊ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π΅Ρ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ WhatsApp:
const bot = new WhatsappGptBot({
idInstance: "your-instance-id",
apiTokenInstance: "your-token",
openaiApiKey: "your-openai-api-key",
model: "gpt-4o",
systemMessage: "ΠΡ - ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ Π°ΡΡΠΈΡΡΠ΅Π½Ρ."
});
// ΠΠ°ΡΠ°ΡΡ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π½ΠΈΠ΅ Π²Π΅Π±Ρ
ΡΠΊΠΎΠ² ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
bot.start();
2. ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ#
ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΎΡΠ° ΠΊΠ°ΠΊ ΡΡΠΈΠ»ΠΈΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² Π²Π°ΡΠ΅ΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ Π±ΠΎΡΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ:
const gptBot = new WhatsappGptBot({
idInstance: "your-instance-id",
apiTokenInstance: "your-token",
openaiApiKey: "your-openai-api-key",
model: "gpt-4o",
systemMessage: "ΠΡ - ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ Π°ΡΡΠΈΡΡΠ΅Π½Ρ."
});
// ΠΠ΅ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ start() - ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ processMessage ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ
const {response, updatedData} = await gptBot.processMessage(message, sessionData);
// ΠΠ±ΡΠ°Π±ΠΎΡΠ°ΠΉΡΠ΅ ΠΎΡΠ²Π΅Ρ ΡΠ²ΠΎΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ
await yourBot.sendText(message.chatId, response);
// Π‘ΠΎΡ
ΡΠ°Π½ΠΈΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠ΅ΡΡΠΈΠΈ Π² ΡΠ²ΠΎΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ
yourSessionData.gptSession = updatedData;
ΠΡΠΈΠΌΠ΅Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ#
ΠΠΎΡ ΠΊΠ°ΠΊ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ GPT-Π±ΠΎΡΠ° Π² Π²Π°Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ Π±ΠΎΡ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΡΡ :
interface CustomSessionData {
lang?: string;
gptSession?: GPTSessionData; // Π₯ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
ΡΠ΅ΡΡΠΈΠΈ GPT
}
const gptState: State<CustomSessionData> = {
name: "gpt_state",
async onEnter(message, data) {
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΡΡΠΈΠΈ GPT
data.gptSession = {
messages: [{role: "system", content: gptBot.systemMessage}],
lastActivity: Date.now()
};
await bot.sendText(message.chatId, "Π§Π°Ρ Ρ GPT Π½Π°ΡΠ°Ρ!");
},
async onMessage(message, data) {
// ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ GPT-Π±ΠΎΡΠ°
const {response, updatedData} = await gptBot.processMessage(
message,
data.gptSession
);
await bot.sendText(message.chatId, response);
data.gptSession = updatedData;
return undefined; // ΠΡΡΠ°ΡΡΡΡ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ
}
};
ΠΡΠ° Π³ΠΈΠ±ΠΊΠΎΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π°ΠΌ Π»ΠΈΠ±ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π±ΠΎΡΠ° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ, Π»ΠΈΠ±ΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ GPT Π² Π²Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, ΡΠΎΡ ΡΠ°Π½ΡΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ° ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΡΠΌΠΈ.
ΠΠ»ΡΡΠ΅Π²ΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ ΠΎΠ± ΡΡΠΈΡ Π²Π°ΡΠΈΠ°Π½ΡΠ°Ρ :
-
Π‘Π°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΡΠΉ Π±ΠΎΡ
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡΠΌΠΈ
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π²Π΅Π±Ρ ΡΠΊΠΈ
- ΠΡΡΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΠΏΡΠΎΡΡΡΡ , ΠΎΠ΄Π½ΠΎΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ GPT-ΡΠ°ΡΠ±ΠΎΡΠΎΠ²
- Π’ΡΠ΅Π±ΡΠ΅Ρ Π²ΡΠ·ΠΎΠ²Π°
bot.start()
-
ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
- ΠΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡΠΌΠΈ
- ΠΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π²Π΅Π±Ρ ΡΠΊΠΈ
- ΠΠ΄Π΅Π°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ Π±ΠΎΡΠΎΠ²
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ GPT
- ΠΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΠΌΡΠΉ
- ΠΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΡΠ·ΡΠ²Π°ΠΉΡΠ΅
start()
- ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅processMessage()
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ#
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π±ΠΎΡΠ°#
ΠΠΎΠ»Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π΄Π»Ρ WhatsappGptBot:
interface GPTBotConfig extends BotConfig {
/** API-ΠΊΠ»ΡΡ OpenAI */
openaiApiKey: string;
/** ΠΠΎΠ΄Π΅Π»Ρ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΎΡΠ²Π΅ΡΠΎΠ² (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: gpt-4o) */
model?: OpenAIModel;
/** ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ Π² ΠΈΡΡΠΎΡΠΈΠΈ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ° (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: 10) */
maxHistoryLength?: number;
/** Π‘ΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Π°ΡΡΠΈΡΡΠ΅Π½ΡΠ° */
systemMessage?: string;
/** Π’Π΅ΠΌΠΏΠ΅ΡΠ°ΡΡΡΠ° Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΎΡΠ²Π΅ΡΠΎΠ² (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: 0.5) */
temperature?: number;
/** ΠΡΠ²Π΅Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ */
errorMessage?: string;
// ΠΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈΠ· Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ WhatsAppBot ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ
// Π‘ΠΌ. Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ @green-api/whatsapp-chatbot-js-v2 Π΄Π»Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΠΎΠΏΡΠΈΠΉ
}
WhatsappGptBot#
ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²Π°ΡΠΈΠΌ WhatsApp-Π±ΠΎΡΠΎΠΌ Ρ OpenAI:
const bot = new WhatsappGptBot({
// ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ
idInstance: "your-instance-id",
apiTokenInstance: "your-token",
openaiApiKey: "your-openai-api-key",
// ΠΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ GPT-ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ
model: "gpt-4o",
maxHistoryLength: 15,
systemMessage: "ΠΡ - ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ Π°ΡΡΠΈΡΡΠ΅Π½Ρ, ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΠΈΠΉΡΡ Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ².",
temperature: 0.7,
errorMessage: "ΠΠ·Π²ΠΈΠ½ΠΈΡΠ΅, Ρ Π½Π΅ ΡΠΌΠΎΠ³ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π²Π°Ρ Π·Π°ΠΏΡΠΎΡ. ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΠ½ΠΎΠ²Π°.",
// ΠΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈΠ· Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Π±ΠΎΡΠ°
defaultState: "greeting",
sessionTimeout: 300,
// Π‘ΠΌ. Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π»Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΠΎΠΏΡΠΈΠΉ
});
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ#
ΠΠΎΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΈΠΏΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ 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
};
});
ΠΠ°Π½Π½ΡΠ΅ ΡΠ΅ΡΡΠΈΠΈ#
GPT-Π±ΠΎΡ ΡΠ°ΡΡΠΈΡΡΠ΅Ρ Π±Π°Π·ΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠ΅ΡΡΠΈΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΠΉ Π΄Π»Ρ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ°:
interface GPTSessionData {
/** ΠΡΡΠΎΡΠΈΡ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ° */
messages: ChatCompletionMessageParam[];
/** ΠΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΌΠ΅ΡΠΊΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ */
lastActivity: number;
/** ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ */
userData?: Record<string, any>;
/** ΠΠΎΠ½ΡΠ΅ΠΊΡΡ Π΄Π»Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ° */
context?: {
/** Π’Π΅Π³ΠΈ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ° */
tags?: string[];
/** ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° */
variables?: Record<string, any>;
};
}
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ Π² Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠΌ ΠΠ:
bot.addMessageMiddleware(async (message, content, messages, sessionData) => {
// Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°
if (!sessionData.context) {
sessionData.context = {variables: {}};
}
sessionData.context.variables.lastInteraction = new Date().toISOString();
return {messageContent: content, messages};
});
Π£ΡΠΈΠ»ΠΈΡΡ#
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»ΡΠΆΠ΅Π±Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΠΎΠ±ΡΠΈΡ Π·Π°Π΄Π°Ρ:
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΌΠ΅Π΄ΠΈΠ°ΡΠ°ΠΉΠ»ΠΎΠ²#
import { Utils } from '@green-api/whatsapp-chatgpt';
// ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΌΠ΅Π΄ΠΈΠ°ΡΠ°ΠΉΠ»Π° ΠΈΠ· URL
const tempFile = await Utils.downloadMedia("https://example.com/image.jpg");
// Π’ΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΡ Π°ΡΠ΄ΠΈΠΎ
const openai = new OpenAI({apiKey: "your-openai-api-key"});
const transcript = await Utils.transcribeAudio("/path/to/audio.ogg", openai);
// ΠΡΠΈΡΡΠΊΠ° ΠΏΠΎΡΠ»Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ
fs.unlinkSync(tempFile);
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠΎΠΌ#
import { Utils } from '@green-api/whatsapp-chatgpt';
// ΠΠ±ΡΠ΅Π·ΠΊΠ° ΠΈΡΡΠΎΡΠΈΠΈ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ°
const trimmedMessages = Utils.trimConversationHistory(
messages,
10, // ΠΌΠ°ΠΊΡ. ΠΊΠΎΠ»-Π²ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
true // ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
);
// ΠΡΠ΅Π½ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠΊΠ΅Π½ΠΎΠ²
const estimatedTokens = Utils.estimateTokens(messages);
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ OpenAI#
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ OpenAI:
ΠΠΎΠ΄Π΅Π»ΠΈ GPT-4#
- gpt-4
- gpt-4-turbo
- gpt-4-turbo-preview
- gpt-4-1106-preview
- gpt-4-0125-preview
- gpt-4-32k
ΠΠΎΠ΄Π΅Π»ΠΈ GPT-4o#
- gpt-4o (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ)
- gpt-4o-mini
- gpt-4o-2024-05-13
ΠΠΎΠ΄Π΅Π»ΠΈ GPT-3.5#
- gpt-3.5-turbo
- gpt-3.5-turbo-16k
- gpt-3.5-turbo-1106
- gpt-3.5-turbo-0125
ΠΠΎΠ΄Π΅Π»ΠΈ o1#
- o1
- o1-mini
- o1-preview
ΠΠΎΠ΄Π΅Π»ΠΈ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ#
Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ:
- gpt-4o
- gpt-4o-mini
- gpt-4-vision-preview
- gpt-4-turbo
- gpt-4-turbo-preview
Π Π°ΡΡΠΈΡΠ΅Π½Π½Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ#
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠ°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ#
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΡΡΡΠΎΠ΅Π½Π° Π½Π° green-api/whatsapp-chatbot-js-v2, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ:
// ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ
bot.addState({
name: "collect_info",
async onEnter(message) {
await bot.sendText(message.chatId, "ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΡΠΊΠ°ΠΆΠΈΡΠ΅ Π²Π°ΡΠ΅ ΠΈΠΌΡ.");
},
async onMessage(message, data = {}) {
// Π‘ΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ GPT
const openai = bot.getOpenAI();
const completion = await openai.chat.completions.create({
model: "gpt-3.5-turbo",
messages: [
{role: "system", content: "Π‘Π³Π΅Π½Π΅ΡΠΈΡΡΠΉΡΠ΅ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΈΠ΅."},
{role: "user", content: `ΠΠ΅Π½Ρ Π·ΠΎΠ²ΡΡ ${message.text}`}
]
});
await bot.sendText(message.chatId, completion.choices[0]?.message.content || "ΠΡΠΈΠ²Π΅Ρ!");
return "main_chat"; // ΠΠ΅ΡΠ΅Ρ
ΠΎΠ΄ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ°ΡΠ°
}
});
Π Π°ΡΡΠΈΡΠ΅Π½Π½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ#
// ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° OpenAI Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
API-Π²ΡΠ·ΠΎΠ²ΠΎΠ²
const openai = bot.getOpenAI();
// ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΡ
if (bot.supportsImages()) {
// ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
}
ΠΡΠΈΠΌΠ΅Ρ Π΄Π΅ΠΌΠΎ-Π±ΠΎΡΠ°#
Π‘ΠΌ. Π½Π°Ρ Π΄Π΅ΠΌΠΎ-ΡΠ°Ρ-Π±ΠΎΡ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΠΎΠ³ΠΎ Π΄Π΅ΠΌΠΎ-ΡΠ°Ρ-Π±ΠΎΡΠ°, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠ΅Π³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ:
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();
ΠΠΈΡΠ΅Π½Π·ΠΈΡ#
ΠΠΈΡΠ΅Π½Π·ΠΈΡΠΎΠ²Π°Π½ΠΎ Π½Π° ΡΡΠ»ΠΎΠ²ΠΈΡΡ MIT.