/gmail2amo-example

Парсит входящую почту в указанном ящике google mail, анализирует, создает заявки в Amo CRM cloud.

Primary LanguagePython

Парсер входящей почты ящиков на 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. Предполагается что для обрабатываемого скриптом ящика есть один ответственный, а не несколько для разных писем ящика. Поэтому при запуске скрипта передается логин сотрудника на которого в АМО будут созданы все поступившие с ящика заявки.