Скрипт для автоматического обзвона по базе xslx, либо переданных в argv

Сделал скрипт, для себя, для работы. В моей ситуации работает, кому необходимо могут подстроить под себя. Принцип примитивный, как и весь скрипт. Скрипт написан для python3

Требуется opepyxl. «База» это страница, в самом низу, где листы.

А дальше сама ячейка, с номерами и статусом. Если статус не стоит, то по номерам можно звонить. Мною он используется для холодных обзвонов. Работает хорошо в моей ситуации, упрощает надобность копировать и вставлять номера. Сделано на скорую руку, в моменты свободного времени в работе. Могут быть не доработки. Никакой гарантии и всё такое, как есть. I,G,B это буквы, в начале ячейки. acc с linphone, что после символа «@» в вашем случае

main.py, config.cfg:

#!/bin/python3
# Primitive Script
# For auto call people

import os, sys, configparser
import openpyxl

class AutoCaller():
    config_path = 'config.cfg'
    def __init__(self):
        self.c = configparser.ConfigParser()
        self.c.read(AutoCaller.config_path)
        self.acc = self.c['account']['acc']
        self.cell_status = self.c['cells']['status']
        self.cell_numbers = self.c['cells']['numbers']
        self.cell_info = self.c['cells']['info']
        self.cellit = int(self.c['call']['from'])

    def clean_number(self, number):
        return number.replace("(", "").replace(" ", "").replace(")", "")

    def do_call(self, number):
        number = self.clean_number(number)
        os.system('linphone "call sip-address={}@{}"'.format(number, self.acc))

    def read_excel(self, file_path=None, sheet_name=None):
        file_path = file_path or self.c.get('xsl', 'file', fallback='база.xlsx')
        sheet_name = sheet_name or self.c.get('xsl', 'sheet', fallback='База')
        workbook = openpyxl.load_workbook(file_path)
        sheet = workbook[sheet_name]

        while True:
            numbers = sheet[str(self.cell_numbers + str(self.cellit))].value
            print(numbers)
            cell_status_value = sheet[str(self.cell_status + str(self.cellit))].value

            if cell_status_value is None:
                with open('was_calls.txt', 'a') as f:
                 print(sheet[self.cell_info + str(self.cellit)].value)
                 print(sheet[self.cell_info + str(self.cellit)].value, file=f)
                print("Значение в ячейке {}{} пустое".format(self.cell_status, self.cellit))
                for number in numbers.split(","):
                    print("Enter to continue. call {}".format(number))
                    self.do_call(number)
                    v = input()
                    if v == "next":
                        break
                self.cellit += 1
                with open(AutoCaller.config_path, 'w') as configfile:
                    self.c['call']['from'] = str(self.cellit)
                    self.c.write(configfile)
            else:
                print("Значение в ячейке {}{}: {}".format(self.cell_status, self.cellit, cell_status_value))

        workbook.close()

def main():
    c = AutoCaller()
    if len(sys.argv) > 1:
        for numbers in sys.argv[1:]:
            for number in numbers.split(","):
                print("Enter to continue. call {}".format(number))
                c.do_call(number)
                input()
    else:
        c.read_excel()

main()
[account]
acc = ***.***.***.**

[cells]
status = I
info = B
numbers = G

[call]
from = 2626

[xsl]
file = ***.xlsx
sheet = База

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *