ep.ru - внедрение FreePBX

Администратор, 16.12.2019

«ЭЛЕКТРО-ПРОФИ» – Группа Компаний, специализирующихся на поставке современного электрооборудования и материалов ведущих европейских и российских производителей, а также готовых решений в области защиты и коммутации в системах распределения электроэнергии и управления. Широкая гамма оборудования таких производителей, как: ABB, Weidmuller, Phoenix Contact, Wöhner, EATON, Pfannenberg, Hensel, Hummel, Провенто и др. для применения в различных инженерных системах.

Установка Asterisk и веб-интерфейса в виде FreePBX значительно облегчила работу системного администратора по управлению телефонии в компании. 
- FreePBX Distro 14 был установлен клиентом самостоятельно
- Мы записали голосовое приветствие у наших партнеров ivrvoice.ru
- настроили связку c SIpnet и другим провайдером SIP телефонии.
- настроили переадресацию FollowMe для администраторов магазинов в регионах.

Одна из особенностей настройке, это запись звуковых файлов в гугл диск. Вы можете использовать наши наработки, если вам необходимо выгружать записи на внешнее хранилище Google, и затем удалять старые записи из жесткого диска самой АТС.

Мы решили воспользоваться мощным Python и набросать следующий скрипт:
В текущем примере, записи старше 50 дней удаляются с сервера АТС.


Приготовления делаем на тачке с иксами 
 
1. Включить google drive api (big blue button)
 
    https://developers.google.com/drive/api/v3/quickstart/python
    In resulting dialog click DOWNLOAD CLIENT CONFIGURATION and save the file credentials.json to your working directory.
 
2. Установить Google Client библиотеки
    
    pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
 
3. Получить токен
 
    При первом запуске откроется окно браузера, где нужно будет авторизовать приложение
 
    В результате в рабочей директории сохранится файл token.pickle, который нужно будет загрузить на тачку вместе со скриптом (при изменении скопов - всегда нужно перегенерировать токен)
 
4. выполняем скрипт ниже, в конце указываем кол-во дней, старше которых удаляем и грузим на гугл диск и путь до директории в переменных days, path соответственно
 
"""
 
from __future__ import print_function
import sys
import time
from apiclient.http import MediaFileUpload
import pickle
import os
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
 
 
# If modifying these scopes, delete the file token.pickle.
SCOPES = ['https://www.googleapis.com/auth/drive']
 
def main(days, path):
    
    creds = None
    # The file token.pickle stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)
 
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server(port=0)
        # Save the credentials for the next run
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)
 
    service = build('drive', 'v3', credentials=creds)
 
    def remove(path):
        """
        Remove the file or directory and upload to ggole drive
        """
        if os.path.isdir(path):
            try:
                os.rmdir(path)
            except OSError:
                print("Unable to remove folder: %s" % path)
        else:
            try:
                if os.path.exists(path):
                    file_metadata = {'name': path}
                    media = MediaFileUpload(path, mimetype='audio/mpeg')
                    file = service.files().create(body=file_metadata, media_body=media, fields='id').execute()
                    print('File ID: %s' % file.get('id'))
                    os.remove(path)
            except OSError:
                print("Unable to remove file: %s" % path)
 
    def cleanup(number_of_days, path):
        """
        Removes files from the passed in path that are older than or equal 
        to the number_of_days
        """
        time_in_secs = time.time() - (number_of_days * 24 * 60 * 60)
        for root, dirs, files in os.walk(path, topdown=False):
            for file_ in files:
                full_path = os.path.join(root, file_)
                stat = os.stat(full_path)
                if stat.st_mtime <= time_in_secs:
                    remove(full_path)
                    
    cleanup(days, path)
 
if __name__ == '__main__':
    days, path = 50, '/var/spool/asterisk/monitor/'
    main(days, path)
 
   Установка Asterisk с АТС Дизайн - это решение всех ваших проблем с телефонией. Оставляйте заявки, и менеджер свяжется с вами.