📦 External services (workflow services)
Functions are proxied to services via WorkflowServices:
Directory (DIRECTORY_AMAZON)
Functions (apps/workflows/functions/directory.py):
GET_CHANNELS_ACTIVE_SUBSCRIBERSCHANNELS_SOURCE_PARAM_SUBSCRIBERSGET_FIREBASE_SUBSCRIBERS_DELIVERIESGET_CAMPAIGNS_BY_URLPROCESS_SUBSCRIBERSREACTIVATING_UNSUBSCRIBED_USERSUNSUBSCRIPTION_SPIKE_MONITORINGSUBSCRIPTION_DROP_MONITORING
Manager (MANAGER_AMAZON)
Functions (apps/workflows/functions/manager.py):
GET_CHANNELS_FOR_USERSGET_CHANNELS_WITH_DOMAINSUPDATE_CAMPAIGNGET_CAMPAIGNS_BY_ACCOUNTSDUPLICATE_POOLSCAMPAIGN_RUNNER
Statistics (STATISTICS)
Functions (apps/workflows/functions/statistics.py):
GET_FIREBASE_DELIVERIES_STATISTICSGET_CAMPAIGN_REPORTSGET_FIREBASE_DELIVERY_ERRORSGET_FIREBASE_SUBSCRIPTION_ERRORSGET_MAIN_STATISTICSCHANNELS_STATISTICS
SSO (SSO)
Functions (apps/workflows/functions/sso.py):
REQUEST_ACCESS_FOR_USERS
💬 Slack
Notifications are sent via Slack SDK.
Templates are in apps/workflows/notification_templates/.
Key settings:
SLACK_BOT_TOKENSLACK_NOTIFICATION_CHANNEL
SlackNotificationFunction can post messages into a thread
and stores thread_ts in Redis (SlackThreadMessages).
🔗 Link Switcher
SendDomainsToLinkSwitcherFunction sends domains
to link‑switcher via API:
/telegram/unsubscription-spike//telegram/subscription-drop/
Settings:
LINK_SWITCHER_BASE_URLLINK_SWITCHER_API_KEY
📬 Kafka
run_kafka_consumer listens to SlackNotificationEvent
and starts SlackNotificationWorkflow.
Setting:
KAFKA_GROUP_ID