понедельник, 12 марта 2018 г.

Comagic: возобновление задачи

Суть задачи.
Андрей, возобновляем задачу по интеграции с коллтрекинговой системой Comagic.
Делим на 2 этапа:
1. Передача webo_id в Comagic: настройка синхронизации кук.
Нужен скрипт, который будет обращаться к нашему синхронизационному тегу:
<img src="http://redirect.frontend.weborama.fr/redirect/standard?url=http%3A%2F%2FPartnerABC.com%2Fusersync%3Fwebouuid%3D{WEBO_CID}">
, при редиректе в макрос {Webo_cid} будет возвращаться weborama_id.
Нам нужно будеть передать данный идентификатор на сторону Comagic, можно сделать это через обращение к их API (https://www.comagic.ru/support/api/javascript-api/manual/js_api/#_11 – добавление свойства посетителю).
Вот пример из документации: Comagic.setProperty(name, value);
Параметры:
name text Имя свойства, которое должно быть присвоено посетителю
value text Значение свойства (необязательный параметр)
Т.е. данное обращение должно выглядеть следующим образом: Comagic.setProperty('Weborama_ID', '12345678');
Потом мы должны будем вызвать HTTP нотификацию, где мы забираем куку с определенным именем и значениями (id посетителя во внешней системе, id обращения в системе Comagic и т.д).
По итогу нам необходимо получить таблицу соответствий, где одному пользователю будет присвоена ID Comagic и одновременно Weborama_ID, которая позволит распознать пользователя в нашей DMP.
2. Передача информации о конверсии - задача, получить информацию о пользователях, совершивших конверсию.
С помощью функционала http-уведомлений Comagic при входящем звонке (или любой другой конверсии) отправляет информацию на сервер Weborama с указанием Weborama_ID посетителя, совершившего конверсию.
В интерфейсе CoMagic уведомления о конверсии настраиваются вручную - можно задать по какому событию и условию его отправлять. Чаще всего, это делается на событие "завершение звонка" но можно и по-другому - в зависимости от потребности - тут список всех возможных значений для передачи http://help.comagic.ru/topics/1538-uvedomleniya-nastrojka/
С нашей стороны нужен еще один скрипт, который будет собирать конверсионный счетчик WCM и вызывать его на нужного {WEBO_CID}. Вызов должен быть "мнимый": сначала мы должны искусственно подставить нужную куку, а после вызвать нужный конверсионный счетчик. Нам нужно будет внутри разделять пользователей по виду совершенной конверсии - входящий звонок, офлайн-заказ и т.д., чтобы потом можно было анализировать и таргетироваться на конкретный сегмент.
Во вложении конверсионный счетчик,который делал Цветков.
P.s. на всякий случай старая задача от Жени http://megaplan.ias.su/task/1031924/card/






import csv
import sys
import os
import requests
import json
import random
import re
from concurrent import futures
param_collection = []
lines_collection = []
counter = 0
ct_bad_requests = 0
num_lines = 0
counts = 0
slice = 1000

input = str(sys.argv[1])  # First argument : the file to load 
wamid = str(sys.argv[2])  # The wamid of the client 
csid = str(sys.argv[3])   # The customcategory_customvalue  test_1 , abcd_544 and so on


url = "http://wam.solution.weborama.fr/fcgi-bin/dispatch.fcgi?d.A=ex&d.a=" + wamid + "&d.d="
path = ""
def fireUrl(line):
         global counter
         global ct_bad_requests
    
         cus = csid
         url_wam = url + cus
         #print url_wam
         #WARNING: AFFICHE_W is the 14 car long . If you want to use weboid ( comming from datamining) 
         try:
              c = line[0]
              if len(c) == 12:
                 c = c + "AA"
           
              cookies = dict(AFFICHE_W=c)
         
         
              #print url_wam
              content = requests.get(url_wam, cookies=cookies,allow_redirects=False,timeout=2)
              counter  +=  1
              #print content.status_code
              if content.status_code not in  (200,302):
               ct_bad_requests += 1
               print "Bad status detected:" + str(content.status_code) 
              if (counter % 100 ) == 0:
               print "counter=" + str(counter)
         except:
          pass

         return 1


with open(path + input,"r") as csvinput:
      print "Start reading ..."  
      lines = csv.reader(csvinput,delimiter='|')
      for line in lines:
       lines_collection.append(line)
      nbl = len(lines_collection) 
      print str(nbl) + " lines to fire. Start forks now " 
      #start slicing 
      #compute the number of blocks
      nbi = divmod(nbl,slice)
      i = nbi[0]
      print "Number of slices : " + str( i + 1)  
      r = nbi[1]
      for b in range(0,i+1):
        start =b*slice
        end   =(b+1)*slice
        print str(start) + "::" + str(end)  
        dslice = lines_collection[start:end]     
with futures.ThreadPoolExecutor(max_workers=4) as executor:
    for (count) in executor.map(fireUrl, dslice):
        counts += count
             

print "Amount of mutations store in wam:" + str(counts)        
print "counter : " + str(counter)
print "bad request : " + str(ct_bad_requests)










function getWeboID(){
  var link = window.location.href;
  window.location.href = "https://redirect.frontend.weborama.fr/redirect/standard?url=https://weborama.com/pixel/wb/{WEBO_CID}/"; 
  var urls = window.location.toString();
  window.location.href = link;

  var id = urls.split('/')[6];
  return id;
}

Комментариев нет:

Отправить комментарий