Temukan Email Sah di Folder Spam Gmail Anda dengan AI dan Google Script

Diterbitkan: 2024-06-08

Positif palsu di Gmail jarang terjadi tetapi bisa terjadi, artinya email penting mungkin salah masuk ke folder spam Anda. Saat Anda menangani ratusan pesan spam setiap hari, mengidentifikasi email yang sah ini menjadi lebih menantang.

Anda dapat membuat filter di Gmail sehingga email dari pengirim tertentu atau dengan kata kunci tertentu tidak pernah ditandai sebagai spam. Namun filter ini jelas tidak berfungsi untuk email dari pengirim baru atau tidak dikenal.

Temukan pesan yang salah klasifikasi di Spam Gmail

Bagaimana jika kita menggunakan AI untuk menganalisis email spam di Gmail dan memprediksi mana yang kemungkinan merupakan positif palsu? Dengan daftar email yang salah klasifikasi ini, kami dapat secara otomatis memindahkan email tersebut ke kotak masuk atau membuat laporan untuk ditinjau secara manual.

Berikut contoh laporan yang dihasilkan dari Gmail. Ini mencakup daftar email dengan skor spam rendah yang kemungkinan besar sah dan harus dipindahkan ke kotak masuk. Laporan ini juga menyertakan ringkasan konten email dalam bahasa pilihan Anda.

Gmail Spam Summary

Untuk memulai, buka Google Script ini dan buat salinannya di Google Drive Anda. Beralih ke editor Apps Script dan berikan alamat email Anda, kunci API OpenAI, dan bahasa pilihan untuk ringkasan email.

Pilih fungsi reportFalsePositives dari dropdown dan klik tombol putar untuk menjalankan skrip. Ini akan mencari email spam yang belum dibaca di akun Gmail Anda, menganalisisnya menggunakan API OpenAI, dan mengirimi Anda laporan email dengan skor spam rendah.

Jika Anda ingin menjalankan skrip ini secara otomatis secara berkala, buka menu “Pemicu” di editor Google Apps Script dan siapkan pemicu berdasarkan waktu untuk menjalankan skrip ini sekali setiap hari seperti yang ditunjukkan di bawah ini. Anda juga dapat memilih waktu kapan Anda ingin menerima laporan.

Google Script - Time Trigger

Cara Kerja Klasifikasi Spam AI - Bagian Teknis

Jika Anda penasaran ingin mengetahui cara kerja scriptnya, berikut gambaran singkatnya:

Skrip Gmail menggunakan API Gmail untuk mencari email spam yang belum dibaca di akun Gmail Anda. Kemudian mengirimkan konten email ke API OpenAI untuk mengklasifikasikan skor spam dan menghasilkan ringkasan dalam bahasa pilihan Anda. Email dengan skor spam rendah kemungkinan besar merupakan email positif palsu dan dapat dipindahkan ke kotak masuk.

1. Konfigurasi Pengguna

Anda dapat memberikan alamat email tujuan pengiriman laporan, kunci API OpenAI Anda, model LLM pilihan Anda, dan bahasa ringkasan email.

 // Basic configuration const USER_EMAIL = '[email protected]' ; // Email address to send the report to const OPENAI_API_KEY = 'sk-proj-123' ; // API key for OpenAI const OPENAI_MODEL = 'gpt-4o' ; // Model name to use with OpenAI const USER_LANGUAGE = 'English' ; // Language for the email summary

2. Temukan Email yang Belum Dibaca di Folder Spam Gmail

Kami menggunakan epoch time untuk menemukan email spam yang masuk dalam 24 jam terakhir dan masih belum dibaca.

 const HOURS_AGO = 24 ; // Time frame to search for emails (in hours) const MAX_THREADS = 25 ; // Maximum number of email threads to process const getSpamThreads_ = ( ) => { const epoch = ( date ) => Math . floor ( date . getTime ( ) / 1000 ) ; const beforeDate = new Date ( ) ; const afterDate = new Date ( ) ; afterDate . setHours ( afterDate . getHours ( ) - HOURS_AGO ) ; const searchQuery = ` is:unread in:spam after: ${ epoch ( afterDate ) } before: ${ epoch ( beforeDate ) } ` ; return GmailApp . search ( searchQuery , 0 , MAX_THREADS ) ; } ;

3. Buat Prompt untuk Model OpenAI

Kami membuat prompt untuk model OpenAI menggunakan pesan email. Perintah tersebut meminta model AI untuk menganalisis konten email dan menetapkan skor spam pada skala 0 hingga 10. Responsnya harus dalam format JSON.

 const SYSTEM_PROMPT = ` You are an AI email classifier. Given the content of an email, analyze it and assign a spam score on a scale from 0 to 10, where 0 indicates a legitimate email and 10 indicates a definite spam email. Provide a short summary of the email in ${ USER_LANGUAGE } . Your response should be in JSON format. ` ; const MAX_BODY_LENGTH = 200 ; // Maximum length of email body to include in the AI prompt const getMessagePrompt_ = ( message ) => { const body = message . getPlainBody ( ) . replace ( / https?:\/\/[^\s>]+ / g , '' ) . replace ( / [\n\r\t] / g , ' ' ) . replace ( / \s+ / g , ' ' ) . trim ( ) ; // remove all URLs, and whitespace characters return [ ` Subject: ${ message . getSubject ( ) } ` , ` Sender: ${ message . getFrom ( ) } ` , ` Body: ${ body . substring ( 0 , MAX_BODY_LENGTH ) } ` , ] . join ( '\n' ) ; } ;

4. Hubungi OpenAI API untuk mendapatkan Skor Spam

Kami meneruskan pesan pesan ke OpenAI API dan mendapatkan skor spam serta ringkasan konten email. Skor spam digunakan untuk menentukan apakah email tersebut positif palsu.

Variabel tokens melacak jumlah token yang digunakan dalam panggilan API OpenAI dan disertakan dalam laporan email. Anda dapat menggunakan informasi ini untuk memantau penggunaan API Anda.

 let tokens = 0 ; const getMessageScore_ = ( messagePrompt ) => { const apiUrl = ` https://api.openai.com/v1/chat/completions ` ; const headers = { 'Content-Type' : 'application/json' , Authorization : ` Bearer ${ OPENAI_API_KEY } ` , } ; const response = UrlFetchApp . fetch ( apiUrl , { method : 'POST' , headers , payload : JSON . stringify ( { model : OPENAI_MODEL , messages : [ { role : 'system' , content : SYSTEM_PROMPT } , { role : 'user' , content : messagePrompt } , ] , temperature : 0.2 , max_tokens : 124 , response_format : { type : 'json_object' } , } ) , } ) ; const data = JSON . parse ( response . getContentText ( ) ) ; tokens += data . usage . total_tokens ; const content = JSON . parse ( data . choices [ 0 ] . message . content ) ; return content ; } ;

5. Memproses Email Spam dan mengirimkan Laporan melalui email

Anda dapat menjalankan skrip Google ini secara manual atau menyiapkan pemicu cron untuk menjalankannya secara otomatis secara berkala. Ini menandai email spam sebagai telah dibaca sehingga tidak diproses lagi.

 const SPAM_THRESHOLD = 2 ; // Threshold for spam score to include in the report const reportFalsePositives = ( ) => { const html = [ ] ; const threads = getSpamThreads_ ( ) ; for ( let i = 0 ; i < threads . length ; i += 1 ) { const [ message ] = threads [ i ] . getMessages ( ) ; const messagePrompt = getMessagePrompt_ ( message ) ; // Get the spam score and summary from OpenAI const { spam_score , summary } = getMessageScore_ ( messagePrompt ) ; if ( spam_score <= SPAM_THRESHOLD ) { // Add email message to the report if the spam score is below the threshold html . push ( ` <tr><td> ${ message . getFrom ( ) } </td> <td> ${ summary } </td></tr> ` ) ; } } threads . forEach ( ( thread ) => thread . markRead ( ) ) ; // Mark all processed emails as read if ( html . length > 0 ) { const htmlBody = [ ` <table border="1"> ` , '<tr><th>Email Sender</th><th>Summary</th></tr>' , html . join ( '' ) , '</table>' , ] . join ( '' ) ; const subject = ` Gmail Spam Report - ${ tokens } tokens used ` ; GmailApp . sendEmail ( USER_EMAIL , subject , '' , { htmlBody } ) ; } } ;

Lihat juga: Mengautentikasi pesan Gmail Anda