"); // Blog code right column mein save hoga (Insta ke liye 'S') sheet.getRange(row, blogCodeCol).setValue(aiDescription); let postUrl = ""; const postTitle = `🔥 Buy ${rowData[5]} | ID: ${rowData[4]}`; if (sheetName === "New Channels") postUrl = publishToBlogger(postTitle, aiDescription, rowData[12], rowData); else if (sheetName === "Insta_Deals") postUrl = publishInstaToBlogger(postTitle, aiDescription, rowData[10], rowData); else if (sheetName === "FB_Deals") postUrl = publishFBToBlogger(postTitle, aiDescription, rowData[13], rowData); if (postUrl) { // ✅ Ab 100% guarantee hai ki Link sahi jagah jayega (Insta ke liye 'P') sheet.getRange(row, blogLinkCol).setValue(postUrl); sheet.getRange(row, promptCol).clearContent(); sheet.getRange(row, blogCodeCol).clearContent(); } } catch (error) { // Error bhi usi blogLinkCol mein aayega sheet.getRange(row, blogLinkCol).setValue("Error: " + error.message); } } } } // Partner Trigger if (sheetName === "Partners_DB" && col === 10) { if (value && value.toString().trim().toLowerCase() === "settled") { const walletRange = sheet.getRange(row, 8), paidRange = sheet.getRange(row, 9); const curWallet = parseFloat(walletRange.getValue()) || 0, curPaid = parseFloat(paidRange.getValue()) || 0; if (curWallet > 0) { paidRange.setValue(curPaid + curWallet); walletRange.setValue(0); } } } if (sheetName === "Leads_DB" && (col === 7 || col === 8)) { const statusValue = sheet.getRange(row, 7).getValue().toString().trim().toLowerCase(); const commission = parseFloat(sheet.getRange(row, 8).getValue()) || 0; if (statusValue === "done" && commission > 0) { const pId = sheet.getRange(row, 2).getValue().toString().trim(); if (pId) { const pSheet = e.source.getSheetByName("Partners_DB"); const pData = pSheet.getDataRange().getValues(); for (let i = 1; i < pData.length; i++) { if (pData[i][1].toString().trim() === pId) { pSheet.getRange(i + 1, 7).setValue((parseInt(pData[i][6]) || 0) + 1); pSheet.getRange(i + 1, 8).setValue((parseFloat(pData[i][7]) || 0) + commission); pSheet.getRange(i + 1, 10).setValue("Pending"); sheet.getRange(row, 7).setValue("Done ✅"); break; } } } } } } // ========================================== // 4. FULLY-AUTO SEO MACHINE // ========================================== // ========================================== // 4. FULLY-AUTO SEO MACHINE (SMART SEO SUMMARY FIX) // ========================================== function runAutoSEOManager() { const ss = SpreadsheetApp.openById(SHEET_ID); let seoSheet = ss.getSheetByName("SEO_Keywords_DB"); if (!seoSheet) return; const data = seoSheet.getDataRange().getValues(); for (let i = 1; i < data.length; i++) { let keyword = data[i][0] ? data[i][0].toString().trim() : ""; let status = data[i][1] ? data[i][1].toString().trim().toUpperCase() : ""; if (status === "PENDING" && keyword !== "") { try { // NAYA COMMAND: AI ab sabse pehle 140 character ka description likhega const prompt = `Write a highly engaging, SEO-optimized article about "${keyword}". Language: Mix of English and simple Hindi (Hinglish/Roman Hindi) so Indian audience can easily read. Format: Use proper HTML tags like
, ,
,
- ,
- .
CRITICAL SEO RULE: The very first element of the article MUST be a
tag containing a powerful 140-character SEO Meta Description summarizing the topic. Make it bold using tag. Important: At the very end of the article, add a compelling Call-to-Action (CTA) inside an attractive HTML box with background color #162438, text color white, and border-left 4px solid #f39c12. The CTA should say: "🔥 Kya aap bhi ek Safe, Monetized YouTube Channel kharidna ya apna channel bechna chahte hain? Hamari PT Seva Deals agency aapse sirf 1 WhatsApp message door hai! Aaj hi sampark karein: +91 7987744656." Output rule: Return ONLY the clean HTML code for the article body. No markdown backticks, no or tags.`; const rawText = callGroq(prompt); const cleanHtml = rawText.replace(/```html/g, "").replace(/```/g, "").trim(); // API ke liye bhi description bhejenge (Agar Google future me apna bug theek kar de) const plainText = cleanHtml.replace(/<[^>]+>/g, '').replace(/ /g, ' ').trim(); const searchDesc = plainText.length > 145 ? plainText.substring(0, 145) + "..." : plainText; publishSEOArticleToBlogger(keyword, cleanHtml, searchDesc); seoSheet.getRange(i + 1, 2).setValue("DONE ✅"); break; } catch (error) { seoSheet.getRange(i + 1, 3).setValue("Error: " + error.message); break; } } } } // ========================================== // API HELPER FUNCTIONS // ========================================== function callGroq(promptText) { const url = "https://api.groq.com/openai/v1/chat/completions"; const payload = { "model": "llama-3.3-70b-versatile", "messages": [{ "role": "user", "content": promptText }], "temperature": 0.7 }; const options = { "method": "post", "contentType": "application/json", "headers": { "Authorization": "Bearer " + GROQ_API_KEY }, "payload": JSON.stringify(payload), "muteHttpExceptions": true }; const response = UrlFetchApp.fetch(url, options); const json = JSON.parse(response.getContentText()); if (json.choices && json.choices.length > 0) return json.choices[0].message.content; else throw new Error("Groq API Error"); } // ========================================== // 5. PREMIUM APP-STYLE BLOGGER FUNCTION (YT - 100% ORIGINAL TEMPLATE) // ========================================== function publishToBlogger(title, aiContent, label, rowData) { const channelId = rowData[4] || "N/A"; const subs = rowData[6] || "0"; const views = rowData[7] || "0"; let rawMon = (rowData[8] || "No").toString().trim().toLowerCase(); let monStatus = "Not Monetised"; if (rawMon === "yes") monStatus = "Full Monetised"; else if (rawMon === "half") monStatus = "Half Monetised"; else if (rawMon !== "no" && rawMon !== "") monStatus = rowData[8]; const earnings = rowData[9] || "$0"; const strikes = rowData[11] || "None"; const videoType = rowData[13] || "Mixed"; const img1 = rowData[14] || ""; const img2 = rowData[15] || ""; const img3 = rowData[16] || ""; const ytLink = rowData[17] || "#"; const finalHtml = `
${title} `; const url = "https://www.googleapis.com/blogger/v3/blogs/" + BLOG_ID + "/posts/"; const labelsArray = label ? [label.toString().trim(), "Channel Deals", "Premium"] : ["Channel Deals", "Premium"]; const payload = { "kind": "blogger#post", "title": title, "content": finalHtml, "labels": labelsArray }; const options = { "method": "post", "contentType": "application/json", "headers": { "Authorization": "Bearer " + ScriptApp.getOAuthToken() }, "payload": JSON.stringify(payload), "muteHttpExceptions": true }; const response = UrlFetchApp.fetch(url, options); const json = JSON.parse(response.getContentText()); if (json.url) return json.url; else throw new Error(json.error ? json.error.message : "Blogger error"); } // 🟢 NEW: PUBLISHER (INSTAGRAM) - INDEPENDENT CODE function publishInstaToBlogger(title, aiContent, label, rowData) { // Extracting Exact Columns for Insta_Deals (Updated for New Sheet Structure) const accId = rowData[4] || "N/A"; const username = rowData[5] || "N/A"; const followers = rowData[6] || "0"; const reach = rowData[7] || "0"; const storyViews = rowData[8] || "0"; const oge = rowData[9] || "No"; const category = rowData[10] || "Mixed"; // 👇 FIXED INDICES: Shifted back by 3 due to deleted columns const img1 = rowData[11] || ""; // L Column const img2 = rowData[12] || ""; // M Column const img3 = rowData[13] || ""; // N Column const igLink = rowData[14] || "#"; // O Column const finalHtml = `Earning ChannelID: ${channelId}${subs} Subs & ${monStatus} YouTube Channel For Sale!
Buy this active, earning channel (${videoType} Videos) securely.
${img1 ? `` : ''} ${img2 ? `
` : ''} ${img3 ? `
` : ''}
Channel Analytics${subs}
Subscribers
${views}
Lifetime Views
${videoType}
Video Type
${monStatus}
Status
Restrictions: ${strikes}Monetize Status: ${monStatus}Lifetime Earnings: ${earnings}Channel Info
${aiContent}
100% सुरक्षित डील
चैनल आपको पूरी सेफ्टी के साथ ट्रांसफर किया जाएगा।
${title} `; const url = "https://www.googleapis.com/blogger/v3/blogs/" + BLOG_ID + "/posts/"; const payload = { "kind": "blogger#post", "title": title, "content": finalHtml, "labels": ["Instagram Deals", "Premium"] }; const options = { "method": "post", "contentType": "application/json", "headers": { "Authorization": "Bearer " + ScriptApp.getOAuthToken() }, "payload": JSON.stringify(payload), "muteHttpExceptions": true }; const response = UrlFetchApp.fetch(url, options); const json = JSON.parse(response.getContentText()); if (json.url) return json.url; else throw new Error("Blogger Error"); } // 🟢 NEW: PUBLISHER (FACEBOOK) - INDEPENDENT & SAFE CODE function publishFBToBlogger(title, aiContent, label, rowData) { const pgId = rowData[4] || "N/A"; const pageName = rowData[5] || "N/A"; const followers = rowData[6] || "0"; const reach = rowData[7] || "0"; let monStatus = rowData[8] || "No"; const bm = rowData[9] || "No"; const qual = rowData[10] || "Mixed"; // ✅ Ab Column L (11) sirf Earning hai, Name Change hamesha ke liye hat gaya const rawEarning = (rowData[11] || "").toString().trim(); // Column L const rawWT = (rowData[12] || "").toString().trim(); // Column M const category = rowData[13] || "Mixed"; // Column N const img1 = rowData[14] || ""; const img2 = rowData[15] || ""; const img3 = rowData[16] || ""; const img4 = rowData[17] || ""; const fbLink = rowData[18] || "#"; // Custom Logic for Monetization / Earning / WT let extraStatTitle = "Earning / WT"; let extraStatValue = "N/A"; if (rawEarning !== "") { extraStatTitle = "Lifetime Earnings"; extraStatValue = rawEarning; } else if (rawWT !== "") { extraStatTitle = "Watch Time (60D)"; extraStatValue = rawWT; } const finalHtml = `Instagram AccountID: ${accId}${followers} Followers & ${category} Instagram Account For Sale!
Buy this highly active Instagram account securely with Escrow.
${img1 ? `` : ''} ${img2 ? `
` : ''} ${img3 ? `
` : ''}
Account Analytics${followers}
Followers
${reach}
Monthly Reach
${storyViews}
Story Views
${oge}
OGE Status
Account Niche: ${category}Original Email (OGE): ${oge}Profile Link: Provided on RequestAccount Info
${aiContent}
100% सुरक्षित डील
अकाउंट आपको पूरी सेफ्टी के साथ ट्रांसफर किया जाएगा।
${title} `; const labelsArray = label ? ["Facebook Deals", "Premium", label.toString().trim()] : ["Facebook Deals", "Premium"]; const url = "https://www.googleapis.com/blogger/v3/blogs/" + BLOG_ID + "/posts/"; const payload = { "kind": "blogger#post", "title": title, "content": finalHtml, "labels": labelsArray }; const options = { "method": "post", "contentType": "application/json", "headers": { "Authorization": "Bearer " + ScriptApp.getOAuthToken() }, "payload": JSON.stringify(payload), "muteHttpExceptions": true }; const response = UrlFetchApp.fetch(url, options); const json = JSON.parse(response.getContentText()); if (json.url) return json.url; else throw new Error(json.error ? json.error.message : "Blogger Error"); } function publishSEOArticleToBlogger(title, htmlContent) { const url = "https://www.googleapis.com/blogger/v3/blogs/" + BLOG_ID + "/posts/"; const finalHtml = `Facebook PageID: ${pgId}${followers} Followers & ${qual} Quality Facebook Page For Sale!
Buy this highly active Facebook Page securely with Escrow.
${img1 ? `` : ''} ${img2 ? `
` : ''} ${img3 ? `
` : ''} ${img4 ? `
` : ''}
Page Analytics${followers}
Followers
${reach}
Reach (28D)
${bm}
BM Status
${monStatus}
Monetization
Page Quality: ${qual}Category: ${category}${extraStatTitle}: ${extraStatValue}Page Info
${aiContent}
100% सुरक्षित डील
पेज आपको पूरी सेफ्टी के साथ ट्रांसफर किया जाएगा।
`; const payload = { "kind": "blogger#post", "title": title, "content": finalHtml, "labels": ["SEO", "Growth", "Guide"] }; const options = { "method": "post", "contentType": "application/json", "headers": { "Authorization": "Bearer " + ScriptApp.getOAuthToken() }, "payload": JSON.stringify(payload), "muteHttpExceptions": true }; const response = UrlFetchApp.fetch(url, options); const json = JSON.parse(response.getContentText()); if (json.url) return json.url; else throw new Error("Blogger error"); } function trimData(val) { return val ? val.toString().trim() : ""; } function jsonResponse(data) { return ContentService.createTextOutput(JSON.stringify(data)).setMimeType(ContentService.MimeType.JSON); } function updatePartnerLeadCount(ss, pId) { const sheet = ss.getSheetByName("Partners_DB"), data = sheet.getDataRange().getValues(); for (let i = 1; i < data.length; i++) { if (data[i][1].toString().trim() === pId) { sheet.getRange(i+1, 6).setValue((parseInt(data[i][5])||0)+1); break; } } }${title}
${htmlContent}