Pour quoi
Avec la structure complexe des campagnes publicitaires et un grand nombre d'appels, des outils supplémentaires pour le stockage, le traitement et l'analyse des informations sur les appels entrants deviennent nécessaires. Souvent, vous avez besoin d'un accès rapide aux données sur une longue période. Parfois, vous avez besoin d'un traitement de données complexe, d'une corrélation des appels vers un canal ou une campagne spécifique.
L'une des options pour accélérer le travail, qui offre également des avantages supplémentaires, consiste à importer des appels de CoMagic vers Google BigQuery. Beaucoup a été écrit sur les avantages de BigQuery, passons donc à la création.
Pour créer une importation automatique, vous aurez besoin de:
- Compte Google (si ce n'est pas déjà fait) avec le projet créé
- Connaissance de Python
- Présentation de la documentation Google Cloud
Comment créer un projet est décrit
ici . Une fois le projet créé, vous devez créer un jeu de données dans BigQuery.
Documentation BQ et
instructions pour créer un ensemble de données .
Récupération des données de CoMagic
Passons à la
documentation CoMagic. Pour obtenir une liste d'appels ou d'appels, nous avons besoin de la section des rapports.
Nous créons une classe simple pour travailler avec l'API CoMagic. Toutes les exigences nécessaires seront indiquées à la fin dans le lien vers GitHub.
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)
Vous devez maintenant déterminer quel type de données est nécessaire. Les données doivent être traitées et rendues visibles pour pouvoir être chargées dans BigQuery.
Créez une classe d'assistance et définissez les données reçues de CoMagic.
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']
Envoi de données à BigQuery
Une fois les données de CoMagic reçues et converties, vous devez les envoyer à BigQuery.
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:
Déterminer la logique de mise à jour des données
Puisqu'il y a une limite sur le nombre de lignes de données reçues de CoMagic, il est nécessaire de limiter le nombre de données demandées. Nous limiterons la période de demande. Pour ce faire, vous avez besoin d'une fonction auxiliaire qui divisera une grande période de temps en segments d'une longueur spécifiée.
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
Cela est nécessaire lors du premier chargement de données, lorsque vous devez télécharger des données pendant une longue période. La période est divisée en plusieurs petites périodes. Soit dit en passant, il est préférable de le faire sans utiliser la fonction Cloud, car ils ont une limite de temps. Eh bien, ou, en option, vous pouvez exécuter la fonction plusieurs fois.
Nous créons une classe de connecteur pour lier la table BigQuery où nous voulons stocker les données et les données de CoMagic.
from helpfunctions import interval_split import pandas as pd class Connector: """ """ time_partition_field = 'PARTITION_DATE'
Ensuite, nous prescrivons la fonction principale de mise à jour des données, qui sera lancée selon un calendrier.
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"""
Configurer Google Cloud Platform
Nous collectons tous les fichiers dans une archive ZIP. Dans le fichier credfile.py, nous entrons le login et le mot de passe CoMagic pour recevoir le jeton, ainsi que le nom complet de la table dans BigQuery et le chemin d'accès au fichier de compte de service si le script est lancé à partir de la machine locale.
Créer une fonction cloud
- Accédez à la console
- Si aucune fonction n'a encore été créée, cliquez sur «Créer une fonction»
- Dans le champ déclencheur, sélectionnez PUB / SUB
- Créez un nouveau thème pour PUB / SUB. Par exemple, «update_calls»
- Source: téléchargement ZIP (fichier ZIP local)
- Environnement: Python 3.7
- Téléchargez le fichier zip
- Choisir un segment temporaire de Cloud Storage
- Dans le champ «fonction appelée», nous écrivons «principal»
- Mémoire allouée: facultative

Configuration de Scheduler et PUB / SUB
Dans la dernière étape, nous avons créé le déclencheur `update_calls`. Ce sujet automatique est apparu dans la
liste des sujets .

Maintenant, avec Cloud Scheduler, vous devez configurer le déclencheur. quand il se déclenchera et GCF démarrera.
- Accédez à la console
- Dans le champ de fréquence au format CRON, définissez le moment où le déclencheur doit se déclencher et la fonction démarre.
- Destination: Pub / Sub
- Objet: enregistrez le thème qui a été spécifié lors de la création de la fonction: «update_calls»
- Payloads * (Payloads) - ce sont les informations qui seront transférées à Pub / Sub et à la fonction principale

Maintenant, le script sera lancé tous les jours à 01h00 et les données d'appel seront mises à jour à la fin de la journée précédente.
Lien vers GitHub pour s'exécuter à partir de l'ordinateur local
Lien GitHub vers un fichier ZIP