Bot WA AI untuk Education
Panduan bot AI WhatsApp untuk pendidikan. Tutor, quiz, enrollment, parent communication. Tutorial lengkap!
Education + AI Bot = Learning assistant 24/7!
Bot AI untuk pendidikan bisa jadi tutor personal, quiz master, admin enrollment, dan communication bridge antara sekolah dan orang tua.
Use Cases Education
📚 USE CASES:
SEKOLAH/UNIVERSITAS:
- Info pendaftaran
- Jadwal kelas
- Pengumuman
- Komunikasi ortu-guru
BIMBEL/KURSUS:
- Enrollment
- Jadwal les
- Progress report
- Payment reminder
ONLINE COURSE:
- Course info
- Quiz & assessment
- Certificate
- Support
TUTOR PERSONAL:
- Homework help
- Concept explanation
- Practice questions
- Study planningSystem Prompt Education
javascript
const EDUCATION_PROMPT = `Kamu adalah Edu, AI assistant untuk [LEMBAGA PENDIDIKAN].
PERAN:
- Membantu siswa belajar dan memahami materi
- Menjawab pertanyaan akademik
- Memberikan latihan soal
- Info administrasi sekolah
MATA PELAJARAN:
- Matematika (SD-SMA)
- IPA/Sains
- Bahasa Indonesia
- Bahasa Inggris
- IPS
GAYA MENGAJAR:
- Sabar dan encouraging
- Jelaskan step-by-step
- Gunakan analogi sederhana
- Berikan contoh konkret
- Praise effort, not just results
ATURAN:
1. Jangan langsung kasih jawaban PR
2. Guide siswa untuk menemukan jawaban sendiri
3. Breakdown masalah jadi langkah kecil
4. Jika salah, jelaskan dimana salahnya dengan baik
5. Sesuaikan level penjelasan dengan usia siswa
FORMAT PENJELASAN:
1. Pahami dulu pertanyaan siswa
2. Tanya level/kelas jika perlu
3. Jelaskan konsep dasar
4. Berikan contoh
5. Beri latihan untuk konfirmasi pemahaman
CONTOH YANG BAIK:
"Coba kita breakdown dulu ya!
Langkah 1: [penjelasan]
Sekarang coba kamu kerjakan langkah 1, hasilnya berapa?"
HINDARI:
"Jawabannya adalah 42." (tanpa penjelasan)`;AI Tutor Implementation
javascript
async function handleTutoringSession(userId, message, context) {
const studentProfile = await getStudentProfile(userId);
const tutorPrompt = `${EDUCATION_PROMPT}
PROFIL SISWA:
- Nama: ${studentProfile.name}
- Kelas: ${studentProfile.grade}
- Mata pelajaran favorit: ${studentProfile.favorites}
- Area yang perlu ditingkatkan: ${studentProfile.weakAreas}
SESI SEBELUMNYA:
${context.previousTopics?.join(', ') || 'Sesi pertama'}`;
const response = await openai.chat.completions.create({
model: 'gpt-4o',
messages: [
{ role: 'system', content: tutorPrompt },
...context.conversationHistory,
{ role: 'user', content: message }
]
});
const aiResponse = response.choices[0].message.content;
// Track learning progress
await trackLearningActivity(userId, {
topic: detectTopic(message),
interaction: message,
response: aiResponse,
timestamp: new Date()
});
return aiResponse;
}
// Detect topic from message
function detectTopic(message) {
const topics = {
matematika: ['hitung', 'angka', 'rumus', 'persamaan', 'geometri', 'aljabar'],
fisika: ['gaya', 'gerak', 'energi', 'listrik', 'newton'],
kimia: ['unsur', 'senyawa', 'reaksi', 'atom', 'molekul'],
biologi: ['sel', 'organ', 'makhluk hidup', 'fotosintesis'],
bahasa: ['grammar', 'vocab', 'tenses', 'kalimat']
};
const lowerMessage = message.toLowerCase();
for (const [topic, keywords] of Object.entries(topics)) {
if (keywords.some(k => lowerMessage.includes(k))) {
return topic;
}
}
return 'umum';
}Interactive Quiz
javascript
async function startQuiz(userId, subject, level) {
const questions = await generateQuizQuestions(subject, level, 5);
// Store quiz session
await db.quizSessions.insertOne({
oderId
oderId
userId,
subject,
level,
questions,
currentQuestion: 0,
answers: [],
score: 0,
startedAt: new Date()
});
return formatQuizQuestion(questions[0], 1, questions.length);
}
async function generateQuizQuestions(subject, level, count) {
const prompt = `Generate ${count} multiple choice questions for ${subject}, level ${level}.
Format JSON:
[
{
"question": "pertanyaan",
"options": ["A. opsi1", "B. opsi2", "C. opsi3", "D. opsi4"],
"correct": "A",
"explanation": "penjelasan jawaban"
}
]
Buat soal yang sesuai kurikulum Indonesia untuk level ${level}.`;
const response = await openai.chat.completions.create({
model: 'gpt-4o',
messages: [{ role: 'user', content: prompt }],
response_format: { type: 'json_object' }
});
return JSON.parse(response.choices[0].message.content);
}
function formatQuizQuestion(question, number, total) {
return `📝 QUIZ - Soal ${number}/${total}
${question.question}
${question.options.join('\n')}
Ketik huruf jawabanmu (A/B/C/D)!`;
}
async function handleQuizAnswer(userId, answer) {
const session = await db.quizSessions.findOne({
oderId
oderId
userId,
completedAt: { $exists: false }
});
if (!session) {
return 'Tidak ada quiz aktif. Ketik QUIZ untuk mulai!';
}
const currentQ = session.questions[session.currentQuestion];
const isCorrect = answer.toUpperCase() === currentQ.correct;
// Record answer
session.answers.push({
question: session.currentQuestion,
answer: answer.toUpperCase(),
correct: isCorrect
});
if (isCorrect) {
session.score++;
}
let response = isCorrect
? `✅ BENAR! Hebat!\n\n`
: `❌ Kurang tepat. Jawaban yang benar: ${currentQ.correct}\n\n`;
response += `💡 Penjelasan:\n${currentQ.explanation}\n\n`;
// Check if quiz completed
if (session.currentQuestion + 1 >= session.questions.length) {
// Quiz completed
session.completedAt = new Date();
await db.quizSessions.updateOne(
{ _id: session._id },
{ $set: session }
);
const percentage = (session.score / session.questions.length * 100).toFixed(0);
response += `━━━━━━━━━━━━━━━━━━━━
🎉 QUIZ SELESAI!
📊 Skor: ${session.score}/${session.questions.length} (${percentage}%)
${getScoreEmoji(percentage)}
${getScoreFeedback(percentage)}
Mau quiz lagi? Ketik QUIZ [mata pelajaran]!`;
} else {
// Next question
session.currentQuestion++;
await db.quizSessions.updateOne(
{ _id: session._id },
{ $set: session }
);
const nextQ = session.questions[session.currentQuestion];
response += `━━━━━━━━━━━━━━━━━━━━\n\n`;
response += formatQuizQuestion(
nextQ,
session.currentQuestion + 1,
session.questions.length
);
}
return response;
}
function getScoreEmoji(percentage) {
if (percentage >= 90) return '🏆 EXCELLENT!';
if (percentage >= 70) return '⭐ GREAT JOB!';
if (percentage >= 50) return '👍 GOOD EFFORT!';
return '💪 KEEP PRACTICING!';
}School Admin Features
javascript
// Enrollment inquiry
async function handleEnrollmentInquiry(message) {
return `📚 PENDAFTARAN SISWA BARU
Tahun Ajaran 2026/2027
📋 Persyaratan:
- Fotocopy Akta Kelahiran
- Fotocopy KK
- Pas foto 3x4 (4 lembar)
- Rapor terakhir
- SKHUN/Ijazah (jika ada)
📅 Jadwal Pendaftaran:
- Gelombang 1: 1-31 Maret 2026
- Gelombang 2: 1-30 April 2026
- Gelombang 3: 1-31 Mei 2026
💰 Biaya Pendaftaran: Rp 500.000
📍 Daftar langsung di sekolah atau
klik link: [LINK PENDAFTARAN]
Ada pertanyaan lain tentang pendaftaran?`;
}
// Schedule inquiry
async function getClassSchedule(userId, day) {
const student = await getStudentByPhone(userId);
if (!student) {
return 'Maaf, nomor ini belum terdaftar sebagai siswa. Hubungi admin sekolah untuk info lebih lanjut.';
}
const schedule = await db.schedules.findOne({
classId: student.classId,
day: day
});
let response = `📅 JADWAL ${day.toUpperCase()}\n`;
response += `Kelas: ${student.className}\n\n`;
schedule.lessons.forEach((lesson, i) => {
response += `${lesson.time} - ${lesson.subject}\n`;
response += `👨🏫 ${lesson.teacher}\n\n`;
});
return response;
}
// Parent notification
async function sendParentNotification(studentId, type, data) {
const student = await db.students.findOne({ id: studentId });
const parent = await db.parents.findOne({ oderId
oderId
userId: student.parentId });
const templates = {
absence: `⚠️ PEMBERITAHUAN KEHADIRAN
Yth. Orang Tua/Wali ${student.name},
Kami informasikan bahwa ${student.name} tidak hadir di sekolah hari ini (${formatDate(new Date())}).
Mohon konfirmasi alasan ketidakhadiran.
Reply: SAKIT / IZIN / [alasan lain]
Terima kasih.
${school.name}`,
grade: `📊 LAPORAN NILAI
Yth. Orang Tua/Wali ${student.name},
Berikut nilai ${data.subject} ${student.name}:
📝 ${data.examType}: ${data.score}
📈 Rata-rata kelas: ${data.classAverage}
🏆 Ranking: ${data.rank}
${data.score >= 75 ? '✅ Nilai di atas KKM' : '⚠️ Perlu perhatian lebih'}
Guru: ${data.teacher}`,
event: `📢 PENGUMUMAN SEKOLAH
Yth. Orang Tua/Wali,
${data.title}
📅 Tanggal: ${data.date}
⏰ Waktu: ${data.time}
📍 Tempat: ${data.location}
${data.description}
Mohon konfirmasi kehadiran.
Reply: HADIR / TIDAK HADIR
Terima kasih.`
};
await sendWhatsApp(parent.phone, templates[type]);
}Homework Help (Guided)
javascript
async function handleHomeworkHelp(userId, message) {
const guidedPrompt = `Kamu adalah tutor yang membantu siswa mengerjakan PR.
ATURAN PENTING:
1. JANGAN langsung berikan jawaban
2. Guide siswa step-by-step
3. Tanya pemahaman mereka dulu
4. Berikan hints, bukan jawaban
5. Biarkan mereka menemukan sendiri
CONTOH DIALOG:
Siswa: "Kak, 2x + 5 = 13, x nya berapa?"
SALAH ❌: "x = 4"
BENAR ✅: "Oke, kita selesaikan bareng ya!
Langkah 1: Pindahkan angka 5 ke kanan
2x = 13 - 5
2x = ?
Coba hitung dulu, 13 - 5 berapa?"
Setelah siswa jawab benar, baru lanjut ke langkah berikutnya.`;
const response = await openai.chat.completions.create({
model: 'gpt-4o',
messages: [
{ role: 'system', content: guidedPrompt },
{ role: 'user', content: message }
]
});
return response.choices[0].message.content;
}Conversation Example
👤: Kak, aku ga ngerti pecahan
🤖: Hai! Pecahan ya? Oke, aku bantu! 😊
Kamu kelas berapa? Dan bagian pecahan
yang mana yang belum ngerti?
1️⃣ Apa itu pecahan
2️⃣ Penjumlahan pecahan
3️⃣ Pengurangan pecahan
4️⃣ Perkalian pecahan
5️⃣ Pembagian pecahan
Ketik angkanya atau ceritakan langsung!
---
👤: Penjumlahan, kelas 5
🤖: Oke, penjumlahan pecahan kelas 5! 📚
Sebelum kita mulai, aku mau tanya dulu:
Kalau ada pecahan 1/2 dan 1/2
Dijumlahkan jadi berapa?
🍕 Bayangkan pizza dipotong 2.
Kamu dapat 1 potong, temanmu 1 potong.
Totalnya berapa bagian?
Coba jawab dulu ya!
---
👤: 2/2?
🤖: BENAR! Hebat! 🎉
1/2 + 1/2 = 2/2 = 1 (satu utuh!)
Nah, itu karena PENYEBUTNYA SAMA (2).
Kalau penyebut sama, tinggal tambah
pembilangnya aja!
Sekarang yang lebih challenging:
1/2 + 1/4 = ?
🍕 Pizza dipotong 2 vs dipotong 4
Penyebutnya BEDA!
Menurut kamu, gimana caranya?
Hint: Kita perlu samakan penyebutnya dulu!
---
👤: Hmm gatau kak
🤖: Gapapa, aku jelaskan step by step ya! 💪
LANGKAH 1: Samakan penyebut
- 1/2 → penyebutnya 2
- 1/4 → penyebutnya 4
Kita cari angka yang bisa dibagi 2 DAN 4.
Itu namanya KPK!
KPK dari 2 dan 4 = 4 ✅
LANGKAH 2: Ubah pecahan
- 1/2 = ?/4
Kalau penyebut dikali 2 (dari 2 jadi 4),
pembilang juga dikali 2!
1 × 2 = 2
Jadi 1/2 = 2/4
LANGKAH 3: Sekarang tinggal tambah!
2/4 + 1/4 = ?
Coba hitung, berapa hasilnya? 😊
---
👤: 3/4!
🤖: PERFECT! 🎉🎉🎉
1/2 + 1/4 = 2/4 + 1/4 = 3/4 ✅
Kamu sudah paham konsepnya!
📝 RINGKASAN:
1. Samakan penyebut (cari KPK)
2. Ubah pembilang sesuai
3. Jumlahkan pembilangnya
4. Penyebut tetap
Mau latihan soal lagi? Ketik LATIHAN!
Atau ada yang mau ditanya lagi? 📚Best Practices
DO ✅
- Guide, don't give answers
- Encourage & praise effort
- Adapt to student level
- Use examples & analogies
- Track learning progress
- Communicate with parentsDON'T ❌
- Give direct answers
- Discourage questions
- One-size-fits-all
- Abstract explanations only
- No progress tracking
- Ignore parent communicationFAQ
Bot bisa gantikan guru?
Tidak. Bot adalah supplement, bukan replacement. Guru tetap essential.
Sampai level apa bisa bantu?
SD-SMA dengan baik. Untuk universitas, tergantung kompleksitas.
Kesimpulan
Education Bot = Learning companion 24/7!
| Without Bot | With AI Bot |
|---|---|
| Limited hours | 24/7 help |
| Wait for teacher | Instant guidance |
| One pace | Personalized |