Настройка распределения заказов

Распределение заказов по компаниям осуществляется на двух этапах: при поступлении лида в систему и при подтверждении лида в колл-центре системы. При работе с компанией типа "Колл-центр" лид при подтверждении обязательно должен куда-то уйти, поскольку колл-центр может работать только с заказами на обзвоне.

Настройка распределения выполняется в общих настройках оффера. За неё отвечают два (или три для КЦ) параметра:

  • Компания по умолчанию - в неё лид передаётся, если не удалось подобрать удачной альтернативы через список сайтов, ручное задание компании или скрипт распределения. Идеально подходит для случаев, когда оффер целиком и полностью обслуживается одной компанией. В этом случае задавать другие параметры распределения не требуется.
  • Список компаний для колл-центра - позволяет задать список компаний, куда колл-центр может передавать заказы в зависимости от результатов беседы с клиентом. Добавляет сотруднику колл-центра поле выбора компании из списка указанных идентификаторов. Это позволит, например, направлять сомнительных клиентов в сторонние компании, а для своей компании отбирать только самые качественные заказы. Пункт доступен только для колл-центра.
  • Скрипт распределения заказов - псевдокод, позволяющий описать логику распределения заказов в зависимости от их параметров. Например, автоматически распределять заказы по компаниям в зависимости от ГЕО, отделять от компании часть трафика в другую компанию, переносить заказы VIP-пользователей на свой собственный колл-центр и так далее.

Ручной выбор компании имеет наивысший приоритет. Далее следует скрипт распределения заказов. Следующим пунктом проверяется компания по умолчанию. Если ни один из трёх вариантов не выдал номера компании, используется идентификатор компании из сайта, с которого пришел заказ. Рекомендуется всегда задавать компанию по умолчанию.

Скрипт распределения заказов

Скрипт представляет собой псевдокод, который описывает условия последовательной обработки заказов. Строки скрипта обрабатываются по очереди сверху вниз. Если условия в строке подходят лиду, он уходит в указанную компанию и обработка скрипта останавливается.

Строки скрипта задаются в формате:

параметр:значение вероятность% time(с-по) #компания

Пример скрипта распределения:

city:[москва] #5
area:[?чечня] #10
geo:ru 50% #10
geo:ru #5
geo:kz user:3 #5
80% #8
geo:ua time(8-16) #2
geo:ua time(130-730) #17

В каждой строке скрипта обязательно должен присутствовать идентификатор компании, куда будет распределён заказ. Идентификатор указывается с символом решетка перед ним, без пробела после него.

Основные параметры

Для распределения заказов, вам доступны следующие параметры:

  • user:XX - пользователь, от имени которого пришел лид
  • gang:XX - арбитражная команда, от имени которой пришел лид
  • comp:XX - компания, из которой был перенаправлен лид
  • flow:XX - поток, по которому был получен лид
  • site:XX - лендинг, на котором был произведён заказ
  • space:XX - прелендинг, с которого пришел посетитель
  • ext:XX - агентство, от которого поступил заказ
  • exts:XX - вебмастер на стороне агентства, от которого поступил заказ
  • geo:ZZ - страна, которая указана в заказе или отмечена колл-центром
  • geoip:ZZ - страна, которая была определена по IP-адресу заказчика
  • city:[YYYY] - город, в который производится доставка (указанный колл-центром или определённый по IP)
  • area:[YYYY] - регион, в который производится доставка (указанный колл-центром или определённый по IP)
  • mobile:XX - признак мобильного трафика, 0 или 1
  • bad:XX - признак говнотрафа, 0 или 1
  • reason:XX - код причины отказа (для скрипта обработки отмен)
  • utms:[YYYY] - UTM-метка utm_source
  • utmc:[YYYY] - UTM-метка utm_campaign
  • utmn:[YYYY] - UTM-метка utm_content
  • utmt:[YYYY] - UTM-метка utm_term
  • utmm:[YYYY] - UTM-метка utm_medium

В списке выше:

  • ХХ - целочисленный идентификатор того или иного объекта
  • YYYY - название населённого пункта или региона, указывается в квадратных скобках. Если необходимо задать строгое соответствие, например строго "Москва" - то указывается [москва], не чувствительно к регистру. Если необходимо задать нестрогое соответствие и искать по слову в строке, перед словом указывается знак вопроса: [?чечня]. Это будет соответствовать "Республика Чечня", "Респ. Чечня", "Чечня, Республика" и любым другим вариантам, где встречается набор символов "чечня" независимо от регистра. Знак вопроса должен ставиться сразу после открывающей скобки. Он относится ко всем символам далее в скобках.
  • ZZ - двухбуквенный ISO-код страны, указывается латиницей маленькими буквами

Вы можете использовать сразу несколько параметров в одной строке. В этом случае строка сработает только привыполнении всех условий одновременно. Для того, чтобы получить срабатывание хотя бы одного из условий, просто сделайте две строки, например:

area:[?чечня] #10
area:[?дагестан] #10

Или перечислите условия через запятую. Такой вариант подходит для целочисленных идентификаторов и ISO-кодов страны. Например:

geo:us,ca,mx #5
gang:2,4,5 #6

Разделение трафика

Вы можете задавать вероятность срабатывания строки. Вероятность может задаваться как совместно с другими условиями, так и без них. Она задаётся целым числом процентов от 1 до 100, знак процента указывается. Обратите внимание, что вы задаёте именно вероятность срабатывания, а не процент распределения трафика. Это означает, что для распределения трафика поровну на две компании, первой вы должны задать вероятность 50%, а второй - 100% (или не задавать вообще, если нет других условий).

Например, распределение заказов по ГЕО ru с поровну на две компании:

geo:ru 50% #1
geo:ru #2

Пример распределения поровну на три компании:

geo:ru 33% #1
geo:ru 50% #2
geo:ru #3

Почему делается именно так - изучайте теорию вероятностей и последовательные эксперименты, курс высшей математики не входит в данное руководство.

Применение капов для распределения

Вы можете использовать капы при распределении трафика по офферам. Для проверки капа, добавьте в скрипт распределения пункт cap(123), где вместо 123 укажите идентификатор капа. Скрипт сработает только при доступном капе.

Вы можете проверять несколько капов одновременно. При этом скрипт сработает только в том случае, если доступны все капы.

Пример скрипта распределения с учётом капов:

geo:ru 80% cap(1) cap(4) #3
geo:ru cap(2) cap(4) #4

Важно! При удалении капа из системы все скрипты с его участием перестают работать, поскольку кап при этом считается недоступным.

Ручное ограничения по количеству лидов

Рекомендуемый метод ограничения - проверка заполненности капов. Количество поступающих лидов может быть ограничено прямо в скрипте - вы можете задать лимит количества лидов в определённом статусе за определённый период. Для применения ограничений у вас обязательно должен присутствовать как минимум один основной параметр или вероятность, можно 100%. В общем виде параметр ограничения по количеству выглядит так:

max(period,type,count)

Параметр period обозначает время, за которое подсчитывается количество лидов, принимает значения:

  • day - за текущий день по времени системы, начиная с полуночи
  • 24h - за последние 24 часа
  • week - за последние 7 суток
  • month - за последние 30 суток
  • year - за последние 365 суток
  • any - за всё время

Параметр type указывает, заказы какого статуса проверять, принимает значения:

  • any - заказы в любом статусе
  • valid - валидные заказы (все кроме треша и удалённых)
  • wait - заказы в статусе ожидания (учитывая холд)
  • accept - принятые заказы
  • ok - все заказы кроме отмен (ожидание и принятые)

Параметр count - целое число, количество заказов, которое может быть отправлено в компанию.

Например, max(day,any,100) отправит в компанию не более 100 лидов за каждый день, а max(24h,valid,30) даст не больше 30 валидных лидов в течение 24 часов.

Обратите внимание, что данный блок должен быть написан в строгом соответствии с документацией: не должен содержать пробелов, параметры должны иметь строго указанные обозначения, количество лидов должно быть больше нуля. В противном случае параметр не будет учитываться в скрипте.

Распределение по времени и дням недели

Вы можете распределять заказы в зависимости от времени их поступления. Время указывается в особом параметре time(от-до). Значения от и до могут быть как часами от 0 до 24, так и точным временем от 0000 до 2359. Время указывается слитно, без символа точки или двоеточия между часами и минутами. В параметрах вы можете использовать как часы, так и часы с минутами - как будет удобнее. Распределение по времени указывается только вместе с другими условиями или вероятностью. Без условий или вероятности оно не сработает.

Для удобства работы с часовыми поясами, вы можете явно указать, в каком часовом поясе смотреть время. Для этого используйте параметр tz с указанием полного названия часового пояса в скобках, например: tz(Europe/London).

Кроме того, вы можете распределять заказы в зависимости от дня недели их поступления. День недели указывается в особом параметре dow(от-до) или dow(день), например dow(1-5) или dow(7). В качестве параметров указываются порядковые дни недели, где 1 - понедельник, а 7 - воскресенье. Распределение по дням указывается только вместе с другими условиями или вероятностью. Без условий или вероятности оно не сработает.

Особые параметры

Вы можете добавить в проверку активности компании. Это очень полезно при работе с несколькими поставщиками и позволяет поставщику не уйти в минус на своём депозите. Для того, чтобы скрипт срабатывал только для активных компаний, добавьте в строку волшебное слово @active и скрипт проверит, не ушла ли компания ниже лимита блокировки.

Ротаторы распределения трафика

Иногда необходимо использовать идентичные правила распределения для множества офферов. В этой ситуации пригодятся ротаторы трафика - скрипты распределения, которые настраиваются один раз и просто вставляются в оффер. Работа с ротаторами выполняется в разделе "Управление - Настройки - Справочники - Ротаторы распределения трафика".

Добавьте ротатор, укажите удобное для вас название. В поле "Значение" впишите скрипт распределения трафика. Сохраните. Обратите внимание на первую колонку таблицы - в ней указывается идентификатор ротатора, который необходим вам для вставки. Укажите ротатор вместо идентификатора компании параметром rot(XXX), где вместо XXX будет идентификатор ротатора, например: rot(13).

Особенности работы ротатора:

  • Ротатор указывается вместо идентификатора компании. Если указан ротатор, идентификатор компании игнорируется.
  • Вы можете указать только один ротатор на строчку скрипта.
  • Вы можете использовать ссылку на ротатор внутри ротатора. Максимальная глубина вложенности - 10 уровней.
  • Вы можете указать ротатор в строке с любыми параметрами фильтрации, капами, временем и вероятностями.
  • Вы можете указать ротатор в строке без дополнительных параметров фильтрации и вероятностей.
  • Ваш скрипт распределения может состоять из одной ссылки на ротатор, не забудьте только указать компанию по умолчанию в оффере.

Примеры использования ротатора:

geo:ru rot(11)
time(9-21) rot(12)
rot(13)

"Ведёрко"

Алгоритм "Ведёрка" - это особый метод использования ротаторов, который позволяет выбирать не первую, а случайную компанию из списка. Он использует те же ротаторы трафика, что описаны в предыдущем разделе, но меняет их поведение. Для вызова ротатора с алгоритмом "Ведёрка", вместо rot(XXX) используйте bucket(XXX), где XXX - идентификатор ротатора, например: bucket(13).

Особенности алгоритма "Ведёрко":

  • Вместо выбора первой компании из скрипта, алгоритм запоминает все компании, которые в принципе могли быть доступны в скрипте, и выбирает одну из них случайным образом. Проверяются все строки скрипта, анализируется доступность всех капов.
  • При указании вероятности, не требуется применять хитрых алгоритмов. Если у какой-то строчки указано 10% трафика, это будет именно 10% трафика. Без особых хитростей.
  • Если у каких-то из компаний вероятность не указана, она распределяется по ним равномерно.
  • Если какая-то компания встречается в скрипте несколько раз с указанием вероятности, вероятность её срабатывания суммируется.
  • Если у всех доступных компаний суммарная вероятность получается меньше 100%, вероятности подгоняются автоматически.

С точки зрения программиста

В целом, скрипт распределения транслируется приблизительно в такой код:

if ( $geo == 'ua' ) return 3;
if ( $geo == 'ru' ) if ( rand( 0, 100 ) < 50 ) return 5;
if ( $geo == 'ru' && $user == 123 ) return 7;

Примеры распределяющих скриптов

Пример 1. Распределим трафик из Украины на компанию 1, трафик из Казахстана - на компанию 2, остальной трафик - на компанию 3.

Для этого задаём компанию 3 как компанию по умолчанию, а скрипт распределения используем такой:

geo:ua #1
geo:kz #2

Пример 2. Усложним предыдуший пример и разделим оставшийся трафик поровну между компаниями 3 и 4.

Снова задаём компанию 3 как компанию по умолчанию и используем вот такой скрипт распределения:

geo:ua #1
geo:kz #2
50% #4

Пример 3. Передадим трафик по России от нашего любимого вебмастера с ИД 123 в обработку хорошей компании 7.

В скрипт распределения вписываем строку:

user:123 geo:ru #7

Пример 4. Компания 1 даёт хорошие отчисления по офферу, но не принимает трафик из Чечни и Дагестана. Компания 2 принимает любой трафик. Требуется распределить в компанию 2 все заказы из Дагестана и Чечни, а остальной трафик перенаправить в компанию 1.

В качестве компании по умолчанию указываем 1, в скрипт распределения добавляем:

area:[?чечня] #2
area:[?дагестан] #2

Пример 5. Наш основной колл-центр 1 работает с 8 до 18 часов, запасной колл-центр 2 работает круглосуточно, но стоит дороже. Требуется распределить заказы, поступающие с 8 часов до 17:30 в первый КЦ, а остальные - во второй.

В скрипте указываем 100-процентную вероятность срабатывания и условия по времени:

100% time(8-1730) #1
100% time(1730-8) #2

Пример 6. Аналогичные условия, но трафик только по России.

В скрипте уже не указываем вероятности, так как присутствует условие источника трафика

geo:ru time(8-1730) #1
geo:ru time(1730-8) #2

Пример 7. Наш любимый веб-мастер 123 хочет, чтобы половина его российских заказов с 8:30 до 13:30 передавалась в колл-центр 13, потому что в это время там работает его любимый оператор Света.

В скрипте указываем все требуемые условия:

geo:ru user:123 time(830-1330) 50% #13