Untuk apa
Dengan struktur kompleks kampanye iklan dan sejumlah besar panggilan, alat tambahan untuk menyimpan, memproses, dan menganalisis informasi tentang panggilan masuk menjadi penting. Seringkali Anda membutuhkan akses cepat ke data dalam jangka waktu yang lama. Terkadang Anda membutuhkan pemrosesan data yang kompleks, menghubungkan panggilan ke saluran atau kampanye tertentu.
Salah satu opsi untuk mempercepat pekerjaan, yang juga memberikan manfaat tambahan, adalah mengimpor panggilan dari CoMagic ke Google BigQuery. Banyak yang telah ditulis tentang manfaat BigQuery, jadi mari kita beralih ke penciptaan.
Untuk membuat impor otomatis, Anda perlu:
- Akun Google (jika belum) dengan proyek yang dibuat
- Pengetahuan python
- Memperkenalkan Dokumentasi Google Cloud
Cara membuat proyek dijelaskan di
sini . Setelah proyek dibuat, Anda perlu membuat dataset di BigQuery.
Dokumentasi dan
instruksi BQ untuk membuat dataset .
Mengambil data dari CoMagic
Beralih ke
dokumentasi CoMagic. Untuk mendapatkan daftar panggilan atau panggilan, kami membutuhkan bagian laporan.
Kami membuat kelas sederhana untuk bekerja dengan CoMagic API. Semua persyaratan yang diperlukan akan ditunjukkan di akhir tautan ke 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)
Sekarang Anda perlu menentukan jenis data apa yang dibutuhkan. Data perlu diproses dan dibuat terlihat sehingga dapat dimuat ke BigQuery.
Buat kelas pembantu dan tentukan data yang diterima dari 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']
Mengirim data ke BigQuery
Setelah data dari CoMagic diterima dan dikonversi, Anda harus mengirimkannya ke 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:
Tentukan logika untuk memperbarui data
Karena ada batasan jumlah baris data yang diterima dari CoMagic, perlu untuk membatasi jumlah data yang diminta. Kami akan membatasi periode permintaan. Untuk melakukan ini, Anda memerlukan fungsi bantu yang akan membagi periode waktu besar menjadi segmen-segmen dengan panjang yang ditentukan.
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
Ini diperlukan saat memuat data untuk pertama kalinya, saat Anda perlu mengunduh data untuk jangka waktu yang lama. Periode ini dibagi menjadi beberapa periode kecil. Ngomong-ngomong, lebih baik melakukan ini tanpa menggunakan Fungsi Cloud, karena mereka memiliki batas waktu. Baik, atau, sebagai opsi, Anda dapat menjalankan fungsinya berkali-kali.
Kami membuat kelas konektor untuk menautkan tabel BigQuery tempat kami ingin menyimpan data dan data dari CoMagic.
from helpfunctions import interval_split import pandas as pd class Connector: """ """ time_partition_field = 'PARTITION_DATE'
Selanjutnya, kami meresepkan fungsi utama untuk memperbarui data, yang akan diluncurkan sesuai jadwal.
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"""
Konfigurasikan Google Cloud Platform
Kami mengumpulkan semua file dalam arsip ZIP. Di file credfile.py, kami memasukkan login dan kata sandi CoMagic untuk menerima token, serta nama lengkap tabel di BigQuery dan jalur ke file akun layanan jika skrip diluncurkan dari mesin lokal.
Buat Fungsi Cloud
- Pergi ke konsol
- Jika belum ada fungsi yang dibuat, klik "Buat fungsi"
- Di bidang pemicu, pilih PUB / SUB
- Buat tema baru untuk PUB / SUB. Misalnya, 'update_calls'
- Sumber: Unggahan ZIP (file ZIP lokal)
- Lingkungan: Python 3.7
- Unduh file zip
- Memilih segmen sementara Penyimpanan Cloud
- Di bidang `disebut fungsi` kita menulis 'utama'
- Memori yang dialokasikan: opsional

Mengkonfigurasi Penjadwal dan PUB / SUB
Pada langkah terakhir, kami membuat pemicu `update_calls`. Topik otomatis ini telah muncul dalam
daftar topik .

Sekarang, dengan Cloud Scheduler Anda perlu mengonfigurasi pelatuk. kapan akan menyala dan GCF akan mulai.
- Pergi ke konsol
- Di bidang frekuensi dalam format CRON, atur kapan pelatuk akan diaktifkan dan fungsi dimulai.
- Tujuan: Pub / Sub
- Subjek: daftarkan tema yang ditentukan saat membuat fungsi: "update_calls"
- Payloads * (Payloads) - ini adalah informasi yang akan ditransfer ke Pub / Sub dan ke fungsi utama

Sekarang skrip akan diluncurkan setiap hari pada pukul 01:00 dan data panggilan akan diperbarui pada akhir hari sebelumnya.
Tautan ke GitHub untuk dijalankan dari komputer lokal
GitHub
Tautan ke File ZIP