Reply Pilot Gmail

Tato stranka popisuje modul reply-pilot-gmail/.

Role modulu

  • vlastni Google OAuth a Gmail API integraci
  • vystavuje interni HTTP API pro reply-pilot-be
  • vytvari mailbox snapshot payloady pro backend cache
  • umi inkrementalni sync pres Gmail historyId pro vychozi inbox dotaz
  • umi udrzovat Gmail watch stav a prijmout Pub/Sub notifikaci o zmene mailboxu
  • vytvari Gmail reply drafty

Runtime

  • bezi jako samostatny Flask/Gunicorn kontejner
  • zapisuje do reply-pilot-gmail/data a reply-pilot-gmail/logs
  • conf/ zustava read-only mount
  • na interni siti se hlasi jako reply-pilot-gmail
  • reply-pilot-be ho vola pres http://reply-pilot-gmail:5000
  • Gmail token se drzi v data/gmail_token.json, aby refresh flow mohl zapisovat
  • watch stav se drzi v data/gmail-watch.json, aby se dal bezpecne obnovovat mezi restarty

Endpointy

  • GET /healthz
  • kontroluje jen lokalni runtime modulu a pritomnost/citelnost Gmail token souboru
  • neprovadi zadny primy call do Gmail API; dostupnost Gmailu se projevi az pri syncu nebo tvorbe draftu
  • GET /api/meta
  • GET /api/watch
  • POST /api/watch/ensure
  • POST /api/watch/stop
  • POST /api/watch/notify
  • POST /api/watch/pull
  • POST /api/watch/ack
  • POST /api/mailbox/snapshot
  • POST /api/mailbox/history
  • POST /api/emails/<email_id>/drafts/reply
  • POST /api/emails/<email_id>/send/reply

Reply draft/send endpointy podporuji JSON bez priloh a multipart/form-data s textovymi poli recipient, subject, body_text, reply_to_message_id a opakovanym file polem attachments. Limit je 10 souboru, 10 MB na soubor a 20 MB celkem.

Watch workflow

  • POST /api/watch/ensure vola Gmail users.watch jen kdyz existujici watch nema dostatecnou rezervu do expirace
  • worker muze watch pravidelne obnovovat pres WORKER_GMAIL_WATCH_* promenne bez dalsiho full scanu mailboxu
  • POST /api/watch/pull cte Gmail Pub/Sub Pull subscription a vraci dekodovane notifikace vcetne ack_id
  • POST /api/watch/notify ulozi metadata prijate Pub/Sub notifikace a vraci, zda je potreba spustit navazujici import workflow
  • POST /api/watch/ack potvrdi Pub/Sub zpravy az po uspesnem backend zpracovani; pri import/sync chybach se ack neposila, aby doslo k redelivery
  • doporuceny provoz je zapnout watch renewal a workerovy gmail_synchronizer, ktery spojuje watch pull i mailbox import do jedne pipeline

Pub/Sub Runtime Config

  • GMAIL_WATCH_TOPIC_NAME je plne jmeno Gmail watch topicu, napriklad projects/<project-id>/topics/gmail-watch
  • GMAIL_WATCH_SUBSCRIPTION_NAME je plne jmeno environment-specific Pull subscription, napriklad projects/<project-id>/subscriptions/reply-pilot-dev-sub
  • GMAIL_PUBSUB_CREDENTIALS_FILE muze ukazovat na service account JSON pod /app/conf/...; kdyz chybi, modul zkusi Application Default Credentials
  • doporuceny sifrovany source of truth pro Pub/Sub service account JSON je secrets/<environment>/reply-pilot-gmail-pubsub.json; start/deploy workflow ho materializuje do reply-pilot-gmail/conf/reply-pilot-pubsub.json
  • lokalni a produkcni instance maji mit vlastni subscription; obe ale mohou cilit na stejny topic
  • lokalni a produkcni instance nemaji sdilet stejnou Pull subscription, pokud maji bezet soucasne