Не работает парсер и отправка в телеграм бота python aiogram asincio

Парсер собирает данные с авито и отправляет интересные объявления в Тг Собственно по отдельности парсер парсит, а отправка в Тг бота работает исправно. Но вместе никак не работает. Понятно что конфликт между асинхронной функцией и обыкновенной. Но как исправить у меня ума не хватает

    import asyncio
import os
import subprocess
#from notifiers.logging import NotificationHandler
from loguru import logger
import pandas as pd
import openpyxl
import time
from datetime import datetime
import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from aiogram import Bot, Dispatcher, types, executor
from aiogram.utils import executor
cd=1&q=%D0%B1%D0%B5%D1%81%D0%BF%D0%BB%D0%B0%D1%82%D0%BD%D0%BE')

now = datetime.now().strftime("%d-%m-%Y %H:%M:%S")
class AvitoParse:
    def __init__(self, url:str, items:list, count=100, versiom_main=None):
        self.url = url
        self.items = items
        self.count = count
        self.data = []
        self.current_date = datetime.now().strftime("%d.%m.%Y") # перенес дату файла в класс
        self.file_json = f"data_{self.current_date}{self.items}.json"
        self.file_xlsx = f"data_{self.current_date}{self.items}.xlsx"


    @property
    def __get_chrome_version(self):
        if os.name == 'nt':
            import winreg
            '''Открываем ключ в реестре который содержит версию'''
            reg_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Google\Chrome\BLBeacon")

            version = winreg.QueryValueEx(reg_key, "version")[0]
            return version.split('.')[0]
        else:
            output = subprocess.check_output(['google-chrome', '--version'])
            try:
                version = output.decode('utf-8').split()[-1]
                version = version.split('.')[0]
                return version
            except Exception as error:
                raise Exception(f'Chrome Exception: {error}')


    def __set_up(self):
        options = Options()
        options.add_argument('--headless')

        self.driver = driver = uc.Chrome(versiom_main = self.__get_chrome_version, options=options)

    def __get_url(self):
        self.driver.get(self.url)


    def __paginator(self):
        """сначала сделаем фильтрацию, а то по умолчанию он херню выдает"""
        self.driver.find_element(By.TAG_NAME, "select").click()
        self.driver.find_element(By.CSS_SELECTOR, "[value='104']").click()
        while self.driver.find_elements(By.CSS_SELECTOR, "[data-marker = 'pagination-button/nextPage']") and self.count>0:
            self.__parse_page()
            self.driver.find_element(By.CSS_SELECTOR, "[data-marker = 'pagination-button/nextPage']").click()
            self.count-=1

    def find_key(self, description):
        key = ''
        description_split = description.lower().split()
        for i in description_split:
            for word in self.items:
                if word in i:
                    key = word
        return key
        #for item in self.items:
        #    if item in description.lower().split():
        #        return item

    async def parse_page(self):
        # задержка для загрузки всей страницы
        #def document_initialised(driver):
         #   return driver.execute_script("return initialised")

        #WebDriverWait(driver, timeout=10).until(document_initialised)

        """Ограничение количества просмотренных объявлений  NEW ADD TEST LATER"""
        if os.path.isfile('viewed.txt'):
            with open('viewed.txt', 'r') as file:
                self.viewed_list = list(map(str.rstrip, file.readlines()))
                if len(self.viewed_list) > 5000:
                    self.viewed_list = self.viewed_list[-900:]
        else:
            with open('viewed.txt', 'w') as file:
                self.viewed_list = []

        titles = self.driver.find_elements(By.CSS_SELECTOR, "[data-marker='item']")
        for title in titles:
            name = title.find_element(By.CSS_SELECTOR, "[itemprop='name']").text

            try:
                description = title.find_element(By.CSS_SELECTOR, "[class *= 'item-description']").text
            except Exception as E:
                description = ''

            url = title.find_element(By.CSS_SELECTOR, "[data-marker *= 'item-title']").get_attribute('href')
            price = int(title.find_element(By.CSS_SELECTOR, "[itemprop='price']").get_attribute('content'))

            date = title.find_element(By.CSS_SELECTOR, "[data-marker='item-date']").text + " " + "от "+ str(now)
            id = title.get_attribute('data-item-id')

            """TEST NEW"""
            if self.is_viewed(id):
                continue
            self.viewed_list.append(id)

            data = {'id': id,
                    'name': name,
                    'description': description,
                    'url': url, 'price': price,
                    'date': date,
                    'key': self.find_key(description)}
            '''продумать выдирание ключа'''
            name_desc=description.lower() + ' ' + name.lower() # чтоб искал не только в описании, но и в наименовании создана переменная
            if any([item.lower() in name_desc for item in self.items]) and int(price) < 25000:
                self.data.append(data)

                print('send_tg')
                await bot.send_message(chat_id=chat_id, text=url) # ПРОБЛЕМА ТУТ!!!

        self.__save_data()


    def is_viewed(self, id: str) -> bool:
        """Проверяет, смотрели мы это или нет"""
        if id in self.viewed_list:
            return True
        return False

    def __save_data(self):
        # докрутим к имени файла текущую дату
        #current_date = datetime.now().strftime("%d.%m.%Y") ''' спрятал для теста переноса в класс'''
        #file_name =  f"data_{self.current_date}{self.items}.json"
        #file_name1 = f"data_{self.current_date}{self.items}.xlsx"

        #with open(self.file_json, 'w', encoding='utf-8') as file: '''отключен так как е нужен'''
        #    json.dump(self.data, file, ensure_ascii=False, indent=4)

        # запись в эксельку
        workbook = openpyxl.Workbook()
        sheet = workbook.active

        headers = ['id', 'name', 'description', 'url', 'price', 'date', 'key']

        for col_num, header in enumerate(headers, 1):
            sheet.cell(row=1, column=col_num).value = header

        for row_num, row_data in enumerate(self.data, 2):
            for col_num, value in enumerate(row_data.values(), 1):
                sheet.cell(row=row_num, column=col_num).value = value

        workbook.save(self.file_xlsx)

        """TEST NEW"""
        with open('viewed.txt', 'w') as file:
            for item in set(self.viewed_list):
                file.write("%s\n" % item)


    def parse(self):
        self.__set_up()
        self.__get_url()
        self.__paginator()
        
categories = {'https://www.avito.ru': ['600d'],
            'https://www.avito.ru': ['nex']} # Здесь тоже подтер свои ссылки

async def send_tg(link):
    #loop = asyncio.get_event_loop()
    #loop.create_task(send_tg())

    await bot.send_message(chat_id=chat_id, text='self.data')



if __name__=="__main__":
    chat_id = 'ИД' # убрал свои данные
    token = 'токен' # убрал свои данные

    bot = Bot(token)
    dp = Dispatcher(bot)

    loop = asyncio.get_event_loop()
    loop.create_task(send_tg())

    executor.start_polling(dp)
        
    while True:
        for link, items in categories.items():
            AvitoParse(url=link, items=items, count=5).parse()
            print('Следущая ссылка')
        time.sleep(1200)

Ответы (0 шт):