commit 333fd3d5d39ca0748579a2f54fb37c6b99002937 Author: Alex Date: Mon Oct 9 00:18:10 2023 +0300 Перезалил на новый домен diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..585c579 --- /dev/null +++ b/.gitignore @@ -0,0 +1,30 @@ +# Игнорировать файлы с расширением .log и .tmp +*.log +*.tmp + +# Игнорировать директорию с именем temp +temp/ + +# Игнорировать файл config.ini +config.ini + +# Игнорировать все файлы в директории temp_folder +temp_folder/* + +# Игнорировать все файлы и поддиректории в директории logs +logs/* +.venv/ +keyroz.txt +.env +creds_service_acc.json +test.py +test1.py +notfiles.xlsx +__pycache__ +output.json +data.json +*.zip +*.db +# Игнорировать все файлы и директории, кроме файла important.txt и директории docs +!/requirements.txt +!/docs/ \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..5966b7f --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +# Lugi получаем контакты с opencatr и заносим их в KeyCrm и создаём в воронке лид + +* :white_check_mark: Проверяем каждых 10 минут новые записи в базе магазина понимаем что есть новые контакты через файл data.json +* :white_check_mark: Проверяем есть ли такой контакт в KeyCrm если нет то создаём +* :white_check_mark: Если создали контакт создаём лид в воронке с привязаным контактом в KeyCrm +* :white_check_mark: Есть функция для проверки создания контакта + +* :white_check_mark: Отчёты для ТГ когда падает сообщает! пофиксил что будет сообщать раз в минуту пока не стопнуть или поднять! + +> Что нужно не забыть и нет в проекте! +> файл со всеми паролями и доступами +> data.json это для проверки контактов там все контактные данные файл на сервере! diff --git a/main.py b/main.py new file mode 100644 index 0000000..bd7c357 --- /dev/null +++ b/main.py @@ -0,0 +1,269 @@ +import mysql.connector +import requests +import json +import time +from dotenv import load_dotenv +import os + +# Загрузка переменных окружения из файла .env +load_dotenv() + +# Получение значений переменных окружения +db_host = os.getenv('DB_HOST') +db_user = os.getenv('USERS') +db_password = os.getenv('PASSW') +db_name = os.getenv('DATABASE') +api_key = os.getenv('TGAPI_KEY') +chat = os.getenv('TGCHAT_ID') +token_key =os.getenv('KEYCRM_API') + + +# Подключение к базе данных +# Подключение к базе данных +db = mysql.connector.connect( + host= db_host, + user= db_user, + password= db_password, + database= db_name +) + +# Путь к файлу JSON +file_path = './data.json' + + + +# Функция для загрузки данных из JSON файла +def load_data_from_json(file_path): + try: + with open(file_path, 'r') as file: + data = json.load(file) + return data + except FileNotFoundError: + return [] + +# Функция для сохранения данных в JSON файл +def save_data_to_json(file_path, data): + # Сохраняем данные в файл JSON + with open(file_path, 'w', encoding='utf-8') as file: + json.dump(data, file, ensure_ascii=False, indent=4) + +# Функция для проверки наличия элемента в списке +def is_item_in_list(item, item_list): + for existing_item in item_list: + if existing_item == item: + return True + return False + +# Функция создания нового пользователя в key_crm +def new_customer(full_name, groops, email, phone): + headers = { + 'accept': 'application/json', + 'Authorization': f'Bearer {token_key}', + 'Content-Type': 'application/json', + } + + json_data = { + 'full_name': full_name, + 'email': [ + email + + ], + 'phone': [ + + phone + ], + # 'note': 'Примітка', + # 'company_id': 112, + 'manager_id': 4, + # 'shipping': [ + # { + # 'address': 'string', + # 'additional_address': 'string', + # 'city': 'Kyiv', + # 'region': 'Kyivska', + # 'zip_code': '50000', + # 'country': 'Ukraine', + # 'recipient_full_name': 'Ann Doe', + # 'recipient_phone': '+1 555-234-7777', + # 'warehouse_ref': '1ec09d2e-e1c2-11e3-8c4a-0050568002cf', + # }, + # ], + 'custom_fields': [ + { + 'uuid': 'CT_1007', + 'value': groops, + }, + ], + } + + response = requests.post('https://openapi.keycrm.app/v1/buyer', headers=headers, json=json_data) + otv = (response.json()) + ids_con = otv['id'] + print(ids_con) + return ids_con + + + +# Функция создания новой карты в key_crm +def new_voronka(ids, full_name, groops, email, phone, ids_cust): + headers = { + 'accept': 'application/json', + 'Authorization': f'Bearer {token_key}', + } + + + json_data = { + 'title': f'Новий клиент с Lugi.com.ua с {ids}', + 'source_id': 3, + 'manager_comment': f'Гурт: {groops}', + 'manager_id': 4, + 'pipeline_id': 1, + 'contact': { + 'full_name': full_name, + 'email': email, + 'phone': phone, + 'client_id': ids_cust, + }, + + } + + response = requests.post('https://openapi.keycrm.app/v1/pipelines/cards', headers=headers, json=json_data) + + print(response.json()) + +def prov(email): + headers = { + 'accept': 'application/json', + 'Authorization': f'Bearer {token_key}', + } + + params = { + 'limit': '15', + 'page': '1', + 'include': 'custom_fields', + 'filter[buyer_email]': email, + } + + response = requests.get('https://openapi.keycrm.app/v1/buyer', params=params, headers=headers) + dt = response.json() + return dt['data'] + + + +def con(): + cursor = db.cursor() + query = "SELECT * FROM oc_customer" + cursor.execute(query) + rows = cursor.fetchall() + for row in rows: + # if row[1] == target_model: + ids = row[0] + groop = row[1] + firstname = row[4] + lastname = row[5] + email = row[6] + phone = row[7] + + # Загрузка данных из файла (если файл существует) + data = load_data_from_json(file_path) + new_item = {'id': ids, 'groop': groop, 'firstname': firstname, 'lastname': lastname, 'email': email, 'phone': phone} + if not is_item_in_list(new_item, data): + data.append(new_item) + save_data_to_json(file_path, data) + print(f"Элемент {new_item} успешно добавлен.") + if prov(email) == []: + print(f'{ids} {phone} {groop} {email} {lastname}') + if groop == 2: + groops = 'Гуртовий' + elif groop == 3: + groops = 'Дропшипер' + elif groop == 4: + groops = 'Крупно гуртовий' + else: + groops = '' + full_name = f'{firstname} {lastname}' + ids_cust = new_customer(full_name, groops, email, phone) + new_voronka(ids, full_name, groops, email, phone, ids_cust) + + else: + print('YES') + + else: + print(f"Элемент {new_item} уже существует в данных.") + + # print(f'{ids} {phone} {groop} {email} {lastname}') + # if prov(email) == []: + # print(f'{ids} {phone} {groop} {email} {lastname}') + # else: + # print('YES') + """ + Groop + OC 2 mopt key_crm [{'id': 7, 'uuid': 'CT_1007', 'name': 'Тип покупця', 'type': 'select', 'value': ['Гуртовий']}]} + OC 3 dprop key_crm[{'id': 7, 'uuid': 'CT_1007', 'name': 'Тип покупця', 'type': 'select', 'value': ['Дропшипер']}] + OC 4 kopt key_crm [{'id': 7, 'uuid': 'CT_1007', 'name': 'Тип покупця', 'type': 'select', 'value': ['Крупно гуртовий']}]}""" + + +def new_customer1(): + headers = { + 'accept': 'application/json', + 'Authorization': f'Bearer {token_key}', + 'Content-Type': 'application/json', + } + + json_data = { + 'full_name': "aa aa", + 'email': [ + 'tesn@jj.com' + + ], + 'phone': [ + + '0668561234' + ], + # 'note': 'Примітка', + # 'company_id': 112, + 'manager_id': 4, + # 'shipping': [ + # { + # 'address': 'string', + # 'additional_address': 'string', + # 'city': 'Kyiv', + # 'region': 'Kyivska', + # 'zip_code': '50000', + # 'country': 'Ukraine', + # 'recipient_full_name': 'Ann Doe', + # 'recipient_phone': '+1 555-234-7777', + # 'warehouse_ref': '1ec09d2e-e1c2-11e3-8c4a-0050568002cf', + # }, + # ], + 'custom_fields': [ + { + 'uuid': 'CT_1007', + 'value': 'Дропшипер', + }, + ], + } + + response = requests.post('https://openapi.keycrm.app/v1/buyer', headers=headers, json=json_data) + otv = (response.json()) + ids_con = otv['id'] + print(ids_con) + +if __name__ == '__main__': + # a = requests.get('https://api.telegram.org/bot{}/sendMessage'.format(api_key), params=dict( + # chat_id=chat, + # text= '=> 🤙 Обмен Keycrm and opencart контактов работает)' )) + + # print(a) + while True: + try: + con() # Вызываем вашу функцию + print('Pause') + time.sleep(600) + except Exception: + print("ERROR") + a = requests.get('https://api.telegram.org/bot{}/sendMessage'.format(api_key), params=dict( + chat_id=chat, + text= '=> Народ 🥺 упал обмен с контактами не забудь поднять' )) + time.sleep(60) + print(a) diff --git a/requests b/requests new file mode 100644 index 0000000..e69de29 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..710521d --- /dev/null +++ b/requirements.txt @@ -0,0 +1,8 @@ +certifi==2023.7.22 +charset-normalizer==3.3.0 +idna==3.4 +mysql-connector-python==8.1.0 +protobuf==4.21.12 +python-dotenv==1.0.0 +requests==2.31.0 +urllib3==2.0.5