<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://wiki.raskrutka.com.ua/index.php?action=history&amp;feed=atom&amp;title=%D0%A1%D1%82%D0%B0%D0%B2%D0%BA%D0%B8_24%2F7</id>
	<title>Ставки 24/7 - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.raskrutka.com.ua/index.php?action=history&amp;feed=atom&amp;title=%D0%A1%D1%82%D0%B0%D0%B2%D0%BA%D0%B8_24%2F7"/>
	<link rel="alternate" type="text/html" href="http://wiki.raskrutka.com.ua/index.php?title=%D0%A1%D1%82%D0%B0%D0%B2%D0%BA%D0%B8_24/7&amp;action=history"/>
	<updated>2026-07-15T05:33:33Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.31.1</generator>
	<entry>
		<id>http://wiki.raskrutka.com.ua/index.php?title=%D0%A1%D1%82%D0%B0%D0%B2%D0%BA%D0%B8_24/7&amp;diff=1886&amp;oldid=prev</id>
		<title>Ilonamaksimova в 14:51, 28 октября 2019</title>
		<link rel="alternate" type="text/html" href="http://wiki.raskrutka.com.ua/index.php?title=%D0%A1%D1%82%D0%B0%D0%B2%D0%BA%D0%B8_24/7&amp;diff=1886&amp;oldid=prev"/>
		<updated>2019-10-28T14:51:57Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Версия 14:51, 28 октября 2019&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Строка 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;1. Корректировки ставок устанавливаются в Google Таблицах. Сохраните себе копию [https://&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;drive&lt;/del&gt;.google.com/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;file&lt;/del&gt;/d/1SuaOem0c-yYoscb_nmbCA2S0Ap9KYiBM/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;view?usp&lt;/del&gt;=&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;sharing &lt;/del&gt;шаблона].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;1. Корректировки ставок устанавливаются в Google Таблицах. Сохраните себе копию [https://&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;docs&lt;/ins&gt;.google.com/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;spreadsheets&lt;/ins&gt;/d/1SuaOem0c-yYoscb_nmbCA2S0Ap9KYiBM/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;edit#gid&lt;/ins&gt;=&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;1235166581 &lt;/ins&gt;шаблона].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;2. Выставьте в нем свои значения. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;2. Выставьте в нем свои значения. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ilonamaksimova</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.raskrutka.com.ua/index.php?title=%D0%A1%D1%82%D0%B0%D0%B2%D0%BA%D0%B8_24/7&amp;diff=1885&amp;oldid=prev</id>
		<title>Ilonamaksimova в 14:51, 28 октября 2019</title>
		<link rel="alternate" type="text/html" href="http://wiki.raskrutka.com.ua/index.php?title=%D0%A1%D1%82%D0%B0%D0%B2%D0%BA%D0%B8_24/7&amp;diff=1885&amp;oldid=prev"/>
		<updated>2019-10-28T14:51:07Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Версия 14:51, 28 октября 2019&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Строка 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;1. Корректировки ставок устанавливаются в Google Таблицах. Сохраните себе копию [https://&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;docs&lt;/del&gt;.google.com/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;spreadsheets&lt;/del&gt;/d/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;1HvNKXkVcsc&lt;/del&gt;-&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;k1vmMSbQciYGiK3U0MZTNNoRNHw2zFgk&lt;/del&gt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;edit&lt;/del&gt;?usp=sharing шаблона].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;1. Корректировки ставок устанавливаются в Google Таблицах. Сохраните себе копию [https://&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;drive&lt;/ins&gt;.google.com/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;file&lt;/ins&gt;/d/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;1SuaOem0c&lt;/ins&gt;-&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;yYoscb_nmbCA2S0Ap9KYiBM&lt;/ins&gt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;view&lt;/ins&gt;?usp=sharing шаблона].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;2. Выставьте в нем свои значения. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;2. Выставьте в нем свои значения. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ilonamaksimova</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.raskrutka.com.ua/index.php?title=%D0%A1%D1%82%D0%B0%D0%B2%D0%BA%D0%B8_24/7&amp;diff=1042&amp;oldid=prev</id>
		<title>Ilonamaksimova в 13:58, 21 мая 2018</title>
		<link rel="alternate" type="text/html" href="http://wiki.raskrutka.com.ua/index.php?title=%D0%A1%D1%82%D0%B0%D0%B2%D0%BA%D0%B8_24/7&amp;diff=1042&amp;oldid=prev"/>
		<updated>2018-05-21T13:58:33Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Версия 13:58, 21 мая 2018&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l45&quot; &gt;Строка 45:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 45:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; //The Google sheet to use&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; //The Google sheet to use&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; //The default value is the example sheet&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; //The default value is the example sheet&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; var spreadsheetUrl = &amp;quot;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;https://docs.google.com/a/brainlabsdigital.com/spreadsheets/d/1JDGBPs2qyGdHd94BRZw9lE9JFtoTaB2AmlL7xcmLx2g/edit#gid=0&lt;/del&gt;&amp;quot;;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; var spreadsheetUrl = &amp;quot;&amp;quot;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; //Shopping or regular campaigns&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; //Shopping or regular campaigns&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ilonamaksimova</name></author>
		
	</entry>
	<entry>
		<id>http://wiki.raskrutka.com.ua/index.php?title=%D0%A1%D1%82%D0%B0%D0%B2%D0%BA%D0%B8_24/7&amp;diff=1041&amp;oldid=prev</id>
		<title>Ilonamaksimova: Новая страница: «1. Корректировки ставок устанавливаются в Google Таблицах. Сохраните себе копию [https://docs.google.…»</title>
		<link rel="alternate" type="text/html" href="http://wiki.raskrutka.com.ua/index.php?title=%D0%A1%D1%82%D0%B0%D0%B2%D0%BA%D0%B8_24/7&amp;diff=1041&amp;oldid=prev"/>
		<updated>2018-05-21T13:57:06Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «1. Корректировки ставок устанавливаются в Google Таблицах. Сохраните себе копию [https://docs.google.…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;1. Корректировки ставок устанавливаются в Google Таблицах. Сохраните себе копию [https://docs.google.com/spreadsheets/d/1HvNKXkVcsc-k1vmMSbQciYGiK3U0MZTNNoRNHw2zFgk/edit?usp=sharing шаблона].&lt;br /&gt;
&lt;br /&gt;
2. Выставьте в нем свои значения. &lt;br /&gt;
&lt;br /&gt;
В ячейках от B2 до H25 вводим корректировки ставок: ставки 0% не изменяют ничего, а показатели 25% и — 25% соответственно увеличивают и уменьшают ставки в кампаниях на 25%.&lt;br /&gt;
Если вы также хотите использовать корректировки для мобильных устройств, перейдите на второй лист документа и заполните таблицу.&lt;br /&gt;
&lt;br /&gt;
3. Перейдите в аккаунт Google AdWords на вкладку &amp;quot;Скрипты&amp;quot;. Добавить код, приведенный ниже&lt;br /&gt;
&lt;br /&gt;
4. Откорректируйте скрипт&lt;br /&gt;
&lt;br /&gt;
'''spreadsheetUrl''' — это адрес документа с коэффициентами ставок (добавьте URL);&lt;br /&gt;
&lt;br /&gt;
установите значение true для переменной '''shoppingCampaigns''', если нужно использовать скрипт для корректировки торговых кампаний, или false, чтобы использовать только в поисковых;&lt;br /&gt;
&lt;br /&gt;
установите для '''runMobileBids''' значение true, если хотите изменить корректировки ставок для мобильных устройств;&lt;br /&gt;
&lt;br /&gt;
чтобы использовать скрипт для определенных кампаний, используйте '''excludeCampaignNameContains''' и '''includeCampaignNameContains'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
*&lt;br /&gt;
* Advanced ad scheduling&lt;br /&gt;
*&lt;br /&gt;
* This script will apply ad schedules to campaigns or shopping campaigns and set&lt;br /&gt;
* the ad schedule bid modifier and mobile bid modifier at each hour according to&lt;br /&gt;
* multiplier timetables in a Google sheet.&lt;br /&gt;
*&lt;br /&gt;
* This version creates schedules with modifiers for 4 hours, then fills the rest&lt;br /&gt;
* of the day and the other days of the week with schedules with no modifier as a&lt;br /&gt;
* fail safe.&lt;br /&gt;
*&lt;br /&gt;
* Version: 3.1&lt;br /&gt;
* Updated to allow -100% bids, change mobile adjustments and create fail safes.&lt;br /&gt;
* brainlabsdigital.com&lt;br /&gt;
*&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
function main() {&lt;br /&gt;
  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//&lt;br /&gt;
  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//&lt;br /&gt;
  //Options&lt;br /&gt;
 &lt;br /&gt;
  //The Google sheet to use&lt;br /&gt;
  //The default value is the example sheet&lt;br /&gt;
  var spreadsheetUrl = &amp;quot;https://docs.google.com/a/brainlabsdigital.com/spreadsheets/d/1JDGBPs2qyGdHd94BRZw9lE9JFtoTaB2AmlL7xcmLx2g/edit#gid=0&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
  //Shopping or regular campaigns&lt;br /&gt;
  //Use true if you want to run script on shopping campaigns (not regular campaigns).&lt;br /&gt;
  //Use false for regular campaigns.&lt;br /&gt;
  var shoppingCampaigns = false;&lt;br /&gt;
 &lt;br /&gt;
  //Use true if you want to set mobile bid adjustments as well as ad schedules.&lt;br /&gt;
  //Use false to just set ad schedules.&lt;br /&gt;
  var runMobileBids = false;&lt;br /&gt;
 &lt;br /&gt;
  //Optional parameters for filtering campaign names. The matching is case insensitive.&lt;br /&gt;
  //Select which campaigns to exclude e.g [&amp;quot;foo&amp;quot;, &amp;quot;bar&amp;quot;] will ignore all campaigns&lt;br /&gt;
  //whose name contains 'foo' or 'bar'. Leave blank [] to not exclude any campaigns.&lt;br /&gt;
  var excludeCampaignNameContains = [];&lt;br /&gt;
 &lt;br /&gt;
  //Select which campaigns to include e.g [&amp;quot;foo&amp;quot;, &amp;quot;bar&amp;quot;] will include only campaigns&lt;br /&gt;
  //whose name contains 'foo' or 'bar'. Leave blank [] to include all campaigns.&lt;br /&gt;
  var includeCampaignNameContains = [];&lt;br /&gt;
 &lt;br /&gt;
  //When you want to stop running the ad scheduling for good, set the lastRun&lt;br /&gt;
  //variable to true to remove all ad schedules.&lt;br /&gt;
  var lastRun = false;&lt;br /&gt;
 &lt;br /&gt;
  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//&lt;br /&gt;
  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//&lt;br /&gt;
 &lt;br /&gt;
  //Initialise for use later.&lt;br /&gt;
  var weekDays = [&amp;quot;MONDAY&amp;quot;, &amp;quot;TUESDAY&amp;quot;, &amp;quot;WEDNESDAY&amp;quot;, &amp;quot;THURSDAY&amp;quot;, &amp;quot;FRIDAY&amp;quot;, &amp;quot;SATURDAY&amp;quot;, &amp;quot;SUNDAY&amp;quot;];&lt;br /&gt;
  var adScheduleCodes = [];&lt;br /&gt;
  var campaignIds = [];&lt;br /&gt;
 &lt;br /&gt;
  //Retrieving up hourly data&lt;br /&gt;
  var scheduleRange = &amp;quot;B2:H25&amp;quot;;&lt;br /&gt;
  var accountName = AdWordsApp.currentAccount().getName();&lt;br /&gt;
  var spreadsheet = SpreadsheetApp.openByUrl(spreadsheetUrl);&lt;br /&gt;
  var sheets = spreadsheet.getSheets();&lt;br /&gt;
 &lt;br /&gt;
  var timeZone = AdWordsApp.currentAccount().getTimeZone();&lt;br /&gt;
  var date = new Date();&lt;br /&gt;
  var dayOfWeek = parseInt(Utilities.formatDate(date, timeZone, &amp;quot;uu&amp;quot;), 10) - 1;&lt;br /&gt;
  var hour = parseInt(Utilities.formatDate(date, timeZone, &amp;quot;HH&amp;quot;), 10);&lt;br /&gt;
 &lt;br /&gt;
  var sheet = sheets[0];&lt;br /&gt;
  var data = sheet.getRange(scheduleRange).getValues();&lt;br /&gt;
 &lt;br /&gt;
  //This hour's bid multiplier.&lt;br /&gt;
  var thisHourMultiplier = data[hour][dayOfWeek];&lt;br /&gt;
  var lastHourCell = &amp;quot;I2&amp;quot;;&lt;br /&gt;
  sheet.getRange(lastHourCell).setValue(thisHourMultiplier);&lt;br /&gt;
 &lt;br /&gt;
  //The next few hours' multipliers&lt;br /&gt;
  var timesAndModifiers = [];&lt;br /&gt;
  var otherDays = weekDays.slice(0);&lt;br /&gt;
  for (var h=0; h&amp;lt;5; h++) {&lt;br /&gt;
    var newHour = (hour + h)%24;&lt;br /&gt;
    if (hour + h &amp;gt; 23) {&lt;br /&gt;
      var newDay = (dayOfWeek + 1)%7;&lt;br /&gt;
    } else {&lt;br /&gt;
      var newDay = dayOfWeek;&lt;br /&gt;
    }&lt;br /&gt;
    otherDays[newDay] = &amp;quot;-&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    if (h&amp;lt;4) {&lt;br /&gt;
      // Use the specified bids for the next 4 hours&lt;br /&gt;
      var bidModifier = data[newHour][newDay];&lt;br /&gt;
      if (isNaN(bidModifier) || (bidModifier &amp;lt; -0.9 &amp;amp;&amp;amp; bidModifier &amp;gt; -1) || bidModifier &amp;gt; 9) {&lt;br /&gt;
        Logger.log(&amp;quot;Bid modifier '&amp;quot; + bidModifier + &amp;quot;' for &amp;quot; + weekDays[newDay] + &amp;quot; &amp;quot; + newHour + &amp;quot; is not valid.&amp;quot;);&lt;br /&gt;
        timesAndModifiers.push([newHour, newHour+1, weekDays[newDay], 0]);&lt;br /&gt;
      } else if (bidModifier != -1 &amp;amp;&amp;amp; bidModifier.length != 0) {&lt;br /&gt;
        timesAndModifiers.push([newHour, newHour+1, weekDays[newDay], bidModifier]);&lt;br /&gt;
      }&lt;br /&gt;
    } else {&lt;br /&gt;
      // Fill in the rest of the day with no adjustment (as a back-up incase the script breaks)&lt;br /&gt;
      timesAndModifiers.push([newHour, 24, weekDays[newDay], 0]);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  if (hour&amp;gt;0) {&lt;br /&gt;
    timesAndModifiers.push([0, hour, weekDays[dayOfWeek], 0]);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  for (var d=0; d&amp;lt;otherDays.length; d++) {&lt;br /&gt;
    if (otherDays[d] != &amp;quot;-&amp;quot;) {&lt;br /&gt;
      timesAndModifiers.push([0, 24, otherDays[d], 0]);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  //Pull a list of all relevant campaign IDs in the account.&lt;br /&gt;
  var campaignSelector = ConstructIterator(shoppingCampaigns);&lt;br /&gt;
  for(var i = 0; i &amp;lt; excludeCampaignNameContains.length; i++){&lt;br /&gt;
    campaignSelector = campaignSelector.withCondition('Name DOES_NOT_CONTAIN_IGNORE_CASE &amp;quot;' + excludeCampaignNameContains[i] + '&amp;quot;');&lt;br /&gt;
  }&lt;br /&gt;
  campaignSelector = campaignSelector.withCondition(&amp;quot;Status IN [ENABLED,PAUSED]&amp;quot;);&lt;br /&gt;
  var campaignIterator = campaignSelector.get();&lt;br /&gt;
  while(campaignIterator.hasNext()){&lt;br /&gt;
    var campaign = campaignIterator.next();&lt;br /&gt;
    var campaignName = campaign.getName();&lt;br /&gt;
    var includeCampaign = false;&lt;br /&gt;
    if(includeCampaignNameContains.length === 0){&lt;br /&gt;
      includeCampaign = true;&lt;br /&gt;
    }&lt;br /&gt;
    for(var i = 0; i &amp;lt; includeCampaignNameContains.length; i++){&lt;br /&gt;
      var index = campaignName.toLowerCase().indexOf(includeCampaignNameContains[i].toLowerCase());&lt;br /&gt;
      if(index !== -1){&lt;br /&gt;
        includeCampaign = true;&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    if(includeCampaign){&lt;br /&gt;
      var campaignId = campaign.getId();&lt;br /&gt;
      campaignIds.push(campaignId);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  //Return if there are no campaigns.&lt;br /&gt;
  if(campaignIds.length === 0){&lt;br /&gt;
    Logger.log(&amp;quot;There are no campaigns matching your criteria.&amp;quot;);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  //Remove all ad scheduling for the last run.&lt;br /&gt;
  if(lastRun){&lt;br /&gt;
    checkAndRemoveAdSchedules(campaignIds, []);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  // Change the mobile bid adjustment&lt;br /&gt;
  if(runMobileBids){&lt;br /&gt;
    if (sheets.length &amp;lt; 2) {&lt;br /&gt;
      Logger.log(&amp;quot;Mobile ad schedule sheet was not found in the Google spreadsheet.&amp;quot;);&lt;br /&gt;
    } else {&lt;br /&gt;
      var sheet = sheets[1];&lt;br /&gt;
      var data = sheet.getRange(scheduleRange).getValues();&lt;br /&gt;
      var thisHourMultiplier_Mobile = data[hour][dayOfWeek];&lt;br /&gt;
 &lt;br /&gt;
      if (thisHourMultiplier_Mobile.length === 0) {&lt;br /&gt;
        thisHourMultiplier_Mobile = -1;&lt;br /&gt;
      }&lt;br /&gt;
 &lt;br /&gt;
      if (isNaN(thisHourMultiplier_Mobile) || (thisHourMultiplier_Mobile &amp;lt; -0.9 &amp;amp;&amp;amp; thisHourMultiplier_Mobile &amp;gt; -1) || thisHourMultiplier_Mobile &amp;gt; 3) {&lt;br /&gt;
        Logger.log(&amp;quot;Mobile bid modifier '&amp;quot; + thisHourMultiplier_Mobile + &amp;quot;' for &amp;quot; + weekDays[dayOfWeek] + &amp;quot; &amp;quot; + hour + &amp;quot; is not valid.&amp;quot;);&lt;br /&gt;
        thisHourMultiplier_Mobile = 0;&lt;br /&gt;
      }&lt;br /&gt;
 &lt;br /&gt;
      var totalMultiplier = ((1+thisHourMultiplier_Mobile)*(1+thisHourMultiplier))-1;&lt;br /&gt;
      sheet.getRange(&amp;quot;I2&amp;quot;).setValue(thisHourMultiplier_Mobile);&lt;br /&gt;
      sheet.getRange(&amp;quot;T2&amp;quot;).setValue(totalMultiplier);&lt;br /&gt;
      ModifyMobileBidAdjustment(campaignIds, thisHourMultiplier_Mobile);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  // Check the existing ad schedules, removing those no longer necessary&lt;br /&gt;
  var existingSchedules = checkAndRemoveAdSchedules(campaignIds, timesAndModifiers);&lt;br /&gt;
 &lt;br /&gt;
  // Add in the new ad schedules&lt;br /&gt;
  AddHourlyAdSchedules(campaignIds, timesAndModifiers, existingSchedules, shoppingCampaigns);&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/**&lt;br /&gt;
* Function to add ad schedules for the campaigns with the given IDs, unless the schedules are&lt;br /&gt;
* referenced in the existingSchedules array. The scheduling will be added as a hour long periods&lt;br /&gt;
* as specified in the passed parameter array and will be given the specified bid modifier.&lt;br /&gt;
*&lt;br /&gt;
* @param array campaignIds array of campaign IDs to add ad schedules to&lt;br /&gt;
* @param array timesAndModifiers the array of [hour, day, bid modifier] for which to add ad scheduling&lt;br /&gt;
* @param array existingSchedules array of strings identifying already existing schedules.&lt;br /&gt;
* @param bool shoppingCampaigns using shopping campaigns?&lt;br /&gt;
* @return void&lt;br /&gt;
*/&lt;br /&gt;
function AddHourlyAdSchedules(campaignIds, timesAndModifiers, existingSchedules, shoppingCampaigns){&lt;br /&gt;
  // times = [[hour,day],[hour,day]]&lt;br /&gt;
  var campaignIterator = ConstructIterator(shoppingCampaigns)&lt;br /&gt;
  .withIds(campaignIds)&lt;br /&gt;
  .get();&lt;br /&gt;
  while(campaignIterator.hasNext()){&lt;br /&gt;
    var campaign = campaignIterator.next();&lt;br /&gt;
    for(var i = 0; i &amp;lt; timesAndModifiers.length; i++){&lt;br /&gt;
      if (existingSchedules.indexOf(&lt;br /&gt;
        timesAndModifiers[i][0] + &amp;quot;|&amp;quot; + (timesAndModifiers[i][1]) + &amp;quot;|&amp;quot; + timesAndModifiers[i][2]&lt;br /&gt;
          + &amp;quot;|&amp;quot; + Utilities.formatString(&amp;quot;%.2f&amp;quot;,(timesAndModifiers[i][3]+1)) + &amp;quot;|&amp;quot; + campaign.getId())&lt;br /&gt;
      &amp;gt; -1) {&lt;br /&gt;
 &lt;br /&gt;
        continue;&lt;br /&gt;
      }&lt;br /&gt;
 &lt;br /&gt;
      campaign.addAdSchedule({&lt;br /&gt;
        dayOfWeek: timesAndModifiers[i][2],&lt;br /&gt;
        startHour: timesAndModifiers[i][0],&lt;br /&gt;
        startMinute: 0,&lt;br /&gt;
        endHour: timesAndModifiers[i][1],&lt;br /&gt;
        endMinute: 0,&lt;br /&gt;
        bidModifier: Math.round(100*(1+timesAndModifiers[i][3]))/100&lt;br /&gt;
      });&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/**&lt;br /&gt;
* Function to remove ad schedules from all campaigns referenced in the passed array&lt;br /&gt;
* which do not correspond to schedules specified in the passed timesAndModifiers array.&lt;br /&gt;
*&lt;br /&gt;
* @param array campaignIds array of campaign IDs to remove ad scheduling from&lt;br /&gt;
* @param array timesAndModifiers array of [hour, day, bid modifier] of the wanted schedules&lt;br /&gt;
* @return array existingWantedSchedules array of strings identifying the existing undeleted schedules&lt;br /&gt;
*/&lt;br /&gt;
function checkAndRemoveAdSchedules(campaignIds, timesAndModifiers) {&lt;br /&gt;
 &lt;br /&gt;
  var adScheduleIds = [];&lt;br /&gt;
 &lt;br /&gt;
  var report = AdWordsApp.report(&lt;br /&gt;
    'SELECT CampaignId, Id ' +&lt;br /&gt;
    'FROM CAMPAIGN_AD_SCHEDULE_TARGET_REPORT ' +&lt;br /&gt;
    'WHERE CampaignId IN [&amp;quot;' + campaignIds.join('&amp;quot;,&amp;quot;')  + '&amp;quot;]'&lt;br /&gt;
  );&lt;br /&gt;
 &lt;br /&gt;
  var rows = report.rows();&lt;br /&gt;
  while(rows.hasNext()){&lt;br /&gt;
    var row = rows.next();&lt;br /&gt;
    var adScheduleId = row['Id'];&lt;br /&gt;
    var campaignId = row['CampaignId'];&lt;br /&gt;
    if (adScheduleId == &amp;quot;--&amp;quot;) {&lt;br /&gt;
      continue;&lt;br /&gt;
    }&lt;br /&gt;
    adScheduleIds.push([campaignId,adScheduleId]);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  var chunkedArray = [];&lt;br /&gt;
  var chunkSize = 10000;&lt;br /&gt;
 &lt;br /&gt;
  for(var i = 0; i &amp;lt; adScheduleIds.length; i += chunkSize){&lt;br /&gt;
    chunkedArray.push(adScheduleIds.slice(i, i + chunkSize));&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  var wantedSchedules = [];&lt;br /&gt;
  var existingWantedSchedules = [];&lt;br /&gt;
 &lt;br /&gt;
  for (var j=0; j&amp;lt;timesAndModifiers.length; j++) {&lt;br /&gt;
    wantedSchedules.push(timesAndModifiers[j][0] + &amp;quot;|&amp;quot; + (timesAndModifiers[j][1]) + &amp;quot;|&amp;quot; + timesAndModifiers[j][2] + &amp;quot;|&amp;quot; + Utilities.formatString(&amp;quot;%.2f&amp;quot;,timesAndModifiers[j][3]+1));&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  for(var i = 0; i &amp;lt; chunkedArray.length; i++){&lt;br /&gt;
    var unwantedSchedules = [];&lt;br /&gt;
 &lt;br /&gt;
    var adScheduleIterator = AdWordsApp.targeting()&lt;br /&gt;
    .adSchedules()&lt;br /&gt;
    .withIds(chunkedArray[i])&lt;br /&gt;
    .get();&lt;br /&gt;
    while (adScheduleIterator.hasNext()) {&lt;br /&gt;
      var adSchedule = adScheduleIterator.next();&lt;br /&gt;
      var key = adSchedule.getStartHour() + &amp;quot;|&amp;quot; + adSchedule.getEndHour() + &amp;quot;|&amp;quot; + adSchedule.getDayOfWeek() + &amp;quot;|&amp;quot; + Utilities.formatString(&amp;quot;%.2f&amp;quot;,adSchedule.getBidModifier());&lt;br /&gt;
 &lt;br /&gt;
      if (wantedSchedules.indexOf(key) &amp;gt; -1) {&lt;br /&gt;
        existingWantedSchedules.push(key + &amp;quot;|&amp;quot; + adSchedule.getCampaign().getId());&lt;br /&gt;
      } else {&lt;br /&gt;
        unwantedSchedules.push(adSchedule);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    for(var j = 0; j &amp;lt; unwantedSchedules.length; j++){&lt;br /&gt;
      unwantedSchedules[j].remove();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  return existingWantedSchedules;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/**&lt;br /&gt;
* Function to construct an iterator for shopping campaigns or regular campaigns.&lt;br /&gt;
*&lt;br /&gt;
* @param bool shoppingCampaigns Using shopping campaigns?&lt;br /&gt;
* @return AdWords iterator Returns the corresponding AdWords iterator&lt;br /&gt;
*/&lt;br /&gt;
function ConstructIterator(shoppingCampaigns){&lt;br /&gt;
  if(shoppingCampaigns === true){&lt;br /&gt;
    return AdWordsApp.shoppingCampaigns();&lt;br /&gt;
  }&lt;br /&gt;
  else{&lt;br /&gt;
    return AdWordsApp.campaigns();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/**&lt;br /&gt;
* Function to set a mobile bid modifier for a set of campaigns&lt;br /&gt;
*&lt;br /&gt;
* @param array campaignIds An array of the campaign IDs to be affected&lt;br /&gt;
* @param Float bidModifier The multiplicative mobile bid modifier&lt;br /&gt;
* @return void&lt;br /&gt;
*/&lt;br /&gt;
function ModifyMobileBidAdjustment(campaignIds, bidModifier){&lt;br /&gt;
 &lt;br /&gt;
  var platformIds = [];&lt;br /&gt;
  var newBidModifier = Math.round(100*(1+bidModifier))/100;&lt;br /&gt;
 &lt;br /&gt;
  for(var i = 0; i &amp;lt; campaignIds.length; i++){&lt;br /&gt;
    platformIds.push([campaignIds[i],30001]);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  var platformIterator = AdWordsApp.targeting()&lt;br /&gt;
  .platforms()&lt;br /&gt;
  .withIds(platformIds)&lt;br /&gt;
  .get();&lt;br /&gt;
  while (platformIterator.hasNext()) {&lt;br /&gt;
    var platform = platformIterator.next();&lt;br /&gt;
    platform.setBidModifier(newBidModifier);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ilonamaksimova</name></author>
		
	</entry>
</feed>