// תווית לחשבונות הרצויים var TARGET_ACCOUNT_LABEL = 'תווית לחשבונות רצויים'; // מיקום ממוצע רצוי var TARGET_AVERAGE_POSITION = 3; // הפרש מקסימלי ממקום רצוי var TOLERANCE = 0.1; // בכמה לשנות את התמחור var BID_ADJUSTMENT_COEFFICIENT = 1.05; // כתובת מייל לשליחת הסיכום, ניתן להשאיר ריק במידה ולא רוצים var EMAIL_ADDRESS = 'כתובת מייל'; function main() { var accountSelector = MccApp.accounts(); if (TARGET_ACCOUNT_LABEL != '') { accountSelector.withCondition("Labels CONTAINS '" + TARGET_ACCOUNT_LABEL + "'"); } accountSelector.executeInParallel('adjustBids', 'sendEmail'); } function adjustBids() { var raisedKeywordCount = raiseKeywordBids(); var loweredKeywordCount = lowerKeywordBids(); var retval = { 'raised': raisedKeywordCount, 'lowered': loweredKeywordCount }; return JSON.stringify(retval); } function raiseKeywordBids() { var keywordsToRaise = AdWordsApp.keywords() .withCondition('Status = ENABLED') .withCondition('AveragePosition > ' + (TARGET_AVERAGE_POSITION + TOLERANCE)) .orderBy('AveragePosition ASC') .forDateRange('LAST_7_DAYS') .get(); while (keywordsToRaise.hasNext()) { var keyword = keywordsToRaise.next(); keyword.setMaxCpc(keyword.getMaxCpc() * BID_ADJUSTMENT_COEFFICIENT); } return keywordsToRaise.totalNumEntities(); } function lowerKeywordBids() { var keywordsToLower = AdWordsApp.keywords() .withCondition('Ctr > 0.01') .withCondition('AveragePosition < ' + (TARGET_AVERAGE_POSITION - TOLERANCE)) .withCondition('Status = ENABLED') .orderBy('AveragePosition DESC') .forDateRange('LAST_7_DAYS') .get(); while (keywordsToLower.hasNext()) { var keyword = keywordsToLower.next(); keyword.setMaxCpc(keyword.getMaxCpc() / BID_ADJUSTMENT_COEFFICIENT); } return keywordsToLower.totalNumEntities(); } /** * שליחת הסיכום למייל */ function sendEmail(results) { var emailBody = []; emailBody.push( '<html>', '<body>', '<table width=800 cellpadding=0 border=0 cellspacing=0>', '<tr>', '<td colspan=2 align=right>', "<div style='font: italic normal 10pt arial, serif; " + "margin: 0; color: #666; padding-right: 5px;'>" + 'סקריפטים לאדוורדס</div>', '</td>', '</tr>', "<tr bgcolor='#3c78d8'>", '<td width=500>', "<div style='font: normal 18pt verdana, sans-serif; " + "padding: 3px 10px; color: white'>" + 'דוח תמחור למיקום</div>', '</td>', '<td align=right>', "<div style='font: normal 18pt arial, sans-serif; " + "padding: 3px 10px; color: white'>", AdWordsApp.currentAccount().getCustomerId(), '</h1>', '</td>', '</tr>', '</table>', '<table width=800 cellpadding=0 border=0 cellspacing=0>', "<tr bgcolor='#ddd'>", "<td style='font: 12pt arial, sans-serif; " + 'padding: 5px 0px 5px 5px; background-color: #ddd; ' + "text-align: left'>מזהה לקוח</td>", "<td style='font: 12pt arial, sans-serif; " + 'padding: 5px 0px 5px 5px; background-color: #ddd; ' + "text-align: left'>תוצאות</td>", '</tr>', emailRows(results), '</table>', '</body>', '</html>'); if (EMAIL_ADDRESS != '') { MailApp.sendEmail(EMAIL_ADDRESS, 'דוח סקריפט תמחור למיקום', '', {htmlBody: emailBody.join('\n')}); } } function emailRows(results) { var rows = []; for (var i = 0; i < results.length; i++) { var result = results[i]; rows.push('<tr>', "<td style='padding: 5px 10px'>" + result.getCustomerId() + '</td>', "<td style='padding: 0px 10px'>" + getResultDescription(result) + '</td>', '</tr>'); } return rows.join('\n'); } function getResultDescription(result) { if (result.getStatus() == 'OK') { var retval = JSON.parse(result.getReturnValue()); return 'הועלה : ' + retval.raised + ' < br / > ' + 'הורד : ' + retval.lowered; } else if (result.getStatus() == 'ERROR') { return result.getError(); } else { return 'Script timed out.'; } }