85403da528
Campaign web links were generated from MINIAPP_CUSTOM_URL which is often empty, causing get_campaign_web_link() to return None. Admins and partners could only share bot links for campaigns, not cabinet links. Now prefers CABINET_URL (where the auth flow captures ?campaign= param), falling back to MINIAPP_CUSTOM_URL for backwards compatibility. This is consistent with how referral web links already use CABINET_URL.