Wofür
Mit der komplexen Struktur von Werbekampagnen und einer großen Anzahl von Anrufen werden zusätzliche Tools zum Speichern, Verarbeiten und Analysieren von Informationen über eingehende Anrufe erforderlich. Oft muss über einen langen Zeitraum schnell auf Daten zugegriffen werden. Manchmal ist eine komplexe Datenverarbeitung erforderlich, bei der Anrufe einem bestimmten Kanal oder einer bestimmten Kampagne zugeordnet werden.
Eine der Möglichkeiten zur Beschleunigung der Arbeit, die auch zusätzliche Vorteile bietet, besteht darin, Anrufe von CoMagic nach Google BigQuery zu importieren. Es wurde viel über die Vorteile von BigQuery geschrieben. Fahren wir also mit der Erstellung fort.
Um einen automatischen Import zu erstellen, benötigen Sie:
- Google-Konto (falls nicht bereits vorhanden) mit dem erstellten Projekt
- Python-Kenntnisse
- Einführung in die Google Cloud-Dokumentation
Wie Sie ein Projekt anlegen, erfahren Sie
hier . Nachdem das Projekt erstellt wurde, müssen Sie in BigQuery ein Dataset erstellen.
BQ-Dokumentation und
Anweisungen zum Erstellen eines Datensatzes .
Abrufen von Daten aus CoMagic
Weiter zur CoMagic-
Dokumentation . Um eine Liste von Anrufen oder Anrufen zu erhalten, benötigen wir den Abschnitt Berichte.
Wir erstellen eine einfache Klasse für die Arbeit mit der CoMagic-API. Alle notwendigen Voraussetzungen werden am Ende im Link zu GitHub angegeben.
import json import requests import random import pandas as pd class ComagicClient: """ CoMagic""" def __init__(self, login, password): """ CoMagic""" self.login = login self.password = password self.base_url = 'https://dataapi.comagic.ru/v2.0' self.payload_ = {"jsonrpc":"2.0", "id":1, "method":None, "params": None} self.token = self.get_token(self.login, self.password) def base_request(self, method, params): """ CoMagic. API . JSON-like . : https://www.comagic.ru/support/api/data-api/""" id_ = random.randrange(10**7)
Nun müssen Sie bestimmen, welche Art von Daten benötigt werden. Die Daten müssen verarbeitet und sichtbar gemacht werden, damit sie in BigQuery geladen werden können.
Erstellen Sie eine Hilfsklasse und definieren Sie die von CoMagic empfangenen Daten.
class ComagicHandler(ComagicClient): """ , CoMagic""" time_partition_field = 'PARTITION_DATE' def __init__(self, login, password, first_call_date): self.day_before_first_call = pd.to_datetime(first_call_date) - pd.Timedelta(days=1) super().__init__(login, password) def get_calls_report(self, date_from, date_till): """ . . Pandas DataFrame. . Connector . . . Pnadas.DataFrame""" method = "get.calls_report" fields = ['id', 'visitor_id', 'person_id', 'start_time', 'finish_reason', 'is_lost', 'tags', 'campaign_name','communication_number', 'contact_phone_number', 'talk_duration', 'clean_talk_duration', 'virtual_phone_number', 'ua_client_id', 'ym_client_id', 'entrance_page', 'gclid', 'yclid', 'visitor_type', 'visits_count', 'visitor_first_campaign_name', 'visitor_device', 'site_domain_name','utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'eq_utm_source', 'eq_utm_medium', 'eq_utm_campaign', 'attributes']
Senden von Daten an BigQuery
Nachdem die Daten von CoMagic empfangen und konvertiert wurden, müssen Sie sie an BigQuery senden.
from google.cloud import bigquery from google.cloud.exceptions import NotFound import pandas as pd class BQTableHanler: """ BigQuery""" time_partition_field = 'PARTITION_DATE' def __init__(self, full_table_id, service_account_file_key_path = None): """ `myproject.mydataset.mytable`. , Application Default Credentials, .""" self.full_table_id = full_table_id project_id, dataset_id, table_id = full_table_id.split(".") self.project_id = project_id self.dataset_id = dataset_id self.table_id = table_id if service_account_file_key_path:
Bestimmen Sie die Logik zum Aktualisieren von Daten
Da die Anzahl der von CoMagic empfangenen Datenzeilen begrenzt ist, muss die Anzahl der angeforderten Daten begrenzt werden. Wir werden den Anforderungszeitraum begrenzen. Dazu benötigen Sie eine Hilfsfunktion, die einen großen Zeitraum in Segmente einer bestimmten Länge aufteilt.
def interval_split(array, interval): """ . , 2, - , - . : get_intervals([1,2,3,4,5,6,7], 3) => [[1,3], [4,6], [7]] get_intervals([1,2,3], 4) => [[1,3]]""" intervals = [] iw, i = 0, 0 l = len(array) for v in array: if i==0 or (i)%interval==0: intervals.append([v]) if (i+1)%interval == 0 or (i+1) == l: intervals[iw].append(v) iw+=1 i+=1 return intervals
Dies ist beim erstmaligen Laden von Daten erforderlich, wenn Sie Daten über einen längeren Zeitraum herunterladen müssen. Die Periode ist in mehrere kleine Perioden unterteilt. Übrigens ist es besser, auf die Cloud-Funktion zu verzichten, da sie zeitlich begrenzt ist. Nun, oder optional können Sie die Funktion viele, viele Male ausführen.
Wir erstellen eine Connector-Klasse, um die BigQuery-Tabelle zu verknüpfen, in der die Daten und die Daten von CoMagic gespeichert werden sollen.
from helpfunctions import interval_split import pandas as pd class Connector: """ """ time_partition_field = 'PARTITION_DATE'
Als nächstes schreiben wir die Hauptfunktion für die Aktualisierung der Daten vor, die nach einem Zeitplan gestartet wird.
from connector import Connector from bqhandler import BQTableHanler from comagichandler import ComagicHandler from credfile import * def main(event, context): """ event, context : https://cloud.google.com/functions/docs/writing/background#functions-writing-background-hello-pubsub-python"""
Konfigurieren Sie Google Cloud Platform
Wir sammeln alle Dateien in einem ZIP-Archiv. In der Datei credfile.py geben wir den CoMagic-Benutzernamen und das Kennwort ein, um das Token zu erhalten, sowie den vollständigen Namen der Tabelle in BigQuery und den Pfad zur Dienstkontodatei, wenn das Skript vom lokalen Computer ausgeführt wird.
Erstellen Sie eine Cloud-Funktion
- Gehen Sie zur Konsole
- Wenn noch keine Funktion erstellt wurde, klicken Sie auf "Funktion erstellen"
- Wählen Sie im Triggerfeld PUB / SUB
- Erstellen Sie ein neues Thema für PUB / SUB. Zum Beispiel 'update_calls'
- Quelle: ZIP-Upload (lokale ZIP-Datei)
- Umgebung: Python 3.7
- Laden Sie die ZIP-Datei herunter
- Auswählen eines temporären Cloud-Speichersegments
- In das Feld `called function` schreiben wir 'main'
- Zugewiesener Speicher: Optional

Scheduler und PUB / SUB konfigurieren
Im letzten Schritt haben wir den "update_calls" -Trigger erstellt. Dieses automatische Thema wurde in der
Themenliste angezeigt .

Jetzt müssen Sie mit Cloud Scheduler den Trigger konfigurieren. wenn es ausgelöst wird und GCF gestartet wird.
- Gehen Sie zur Konsole
- Stellen Sie im Frequenzfeld im CRON-Format ein, wann der Trigger ausgelöst werden soll und die Funktion startet.
- Ziel: Pub / Sub
- Betreff: Registrieren Sie das Thema, das beim Erstellen der Funktion angegeben wurde: "update_calls"
- Payloads * (Payloads) - Dies sind die Informationen, die an Pub / Sub und an die Hauptfunktion übertragen werden

Jetzt wird das Skript täglich um 01:00 Uhr gestartet und die Anrufdaten werden am Ende des vorherigen Tages aktualisiert.
Verlinken Sie zu GitHub, um es auf dem lokalen Computer auszuführen
GitHub
Link zur ZIP-Datei