Парсер входящей почты ящиков на gmail
Деплой и авторизация
Ящик захардкожен в google_api_utils.py
.
Авторизация в ящике по Gmail API происходит по OAuth через запуск браузера.
credentials.json
получен на приложение в gmail и вероятно при смене ящика менять этот файл не надо.
После авторизации в каталоге с программой будет автоматически создан token.pickle
.
По факту это вечный токен для доступа в ящик поэтому в git его не храню.
Поэтому первый запуск программы перед деплоем для определенного ящика делаем на десктопе с браузером,
получаем token.pickle
и копируем его на сервер куда деплоится программа.
Программа запускается как systemd job (или руками как executable (app.py)). Сам скрипт делает свою работу просто в вечном цикле. Менеджмент работы скрипта и перезапуск в случае падения обеспечивается systemd job'ом.
Запуск
-
выполнить git pull, далее в каталоге с проектом:
-
поместить
token.pickle
от ящика (получить его можно запустивapp.py
на десктопе) в каталог с проектом -
установить зависимости:
sudo pip3 install -r requirements.txt
-
установить systemd job в систему:
sudo cp info-mailbox-parser.service /etc/systemd/system/ sudo systemctl daemon-reload
Если необходимо, поправить путь до каталога с проектом в WorkingDirectory
.service файла
-
запустить сервис:
sudo systemctl start info-mailbox-parser.service
-
убедиться что сервис запущен или узнать причину фэйла:
sudo systemctl status info-mailbox-parser.service
-
смотреть рантайм логи работы скрипта:
sudo journalctl -u info-mailbox-parser.service -f
app.py
запускается с параметрами:
-j <кол-во воркеров. default: 4>: Кол-во тредов для распараллеливания парсинга писем.
-t <кол-во сек. default: 60>: Кол-во секунд паузы после каждого сбора и обработки почты.
-u <email> в AMO crm ответственного за заявки поступающие с анализируемого ящика
Значения параметров можно поменять в .service файле в ExecStart
.
При запуске без параметров будут использованы дефолты.
Принцип работы
Забирается входящая непрочитанная почта с ящика указанного в google_api_utils.py
.
Затем парсится (в тредах) и вместе с вложениями складывается в коллекцию определенного формата.
Формат коллекции подходит для дальнейшего экспорта в Amo CRM.
Перед попаданием в коллекцию (и в будущем в Amo CRM) принимается решение нейронкой
(classification_model.py
) интерено нам письмо или нет.
Релевантные письма помечаются лэйблом Заявка
. Нерелевантные лэйблом Не заявка
.
Затем письма заносятся в AMO как leads и notes, пакетно.
Аттачменты сохраняются на диск в /mnt/amo-files
LXC контейнера.
Этот маунтпоинт монтируется из каталога хостовой системы. На этот каталог настроен nginx на отдачу статики.
Файлы в каталог кладутся при занесении notes, ссылка на файл заносится в note в АМО, так что аттач можно скачать.
Экспорт писем в АМО и сохранение аттачей реализован в amocrm.py. Предполагается что для обрабатываемого скриптом ящика есть один ответственный, а не несколько для разных писем ящика. Поэтому при запуске скрипта передается логин сотрудника на которого в АМО будут созданы все поступившие с ящика заявки.