# ๐Ÿš€ OpenAI Team Auto Provisioner
**OpenAI Team ่ดฆๅท่‡ชๅŠจๆ‰น้‡ๆณจๅ†Œ & ๆŽˆๆƒๅ…ฅๅบ“ๅทฅๅ…ท** [![Python](https://img.shields.io/badge/Python-3.12+-blue.svg)](https://www.python.org/) [![DrissionPage](https://img.shields.io/badge/DrissionPage-4.1+-green.svg)](https://drissionpage.cn/) [![License](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
--- ## โœจ ๅŠŸ่ƒฝ็‰นๆ€ง - ๐Ÿ”„ **ๅ…จ่‡ชๅŠจๅŒ–ๆต็จ‹** - ไปŽ้‚ฎ็ฎฑๅˆ›ๅปบๅˆฐๆŽˆๆƒๅ…ฅๅบ“ไธ€้”ฎๅฎŒๆˆ - ๐Ÿ“ง **ๅคš้‚ฎ็ฎฑ็ณป็ปŸๆ”ฏๆŒ** - ๆ”ฏๆŒ Cloud Mail ่‡ชๅปบ้‚ฎ็ฎฑๅ’Œ GPTMail ไธดๆ—ถ้‚ฎ็ฎฑ - ๐Ÿ‘ฅ **Team ๆ‰น้‡้‚€่ฏท** - ไธ€ๆฌกๆ€ง้‚€่ฏทๅคšไธช่ดฆๅทๅˆฐ Team - ๐ŸŒ **ๆต่งˆๅ™จ่‡ชๅŠจๅŒ–** - ๅŸบไบŽ DrissionPage ็š„ๆ™บ่ƒฝๆณจๅ†Œ - ๐Ÿ” **ๅคšๆŽˆๆƒๆœๅŠกๆ”ฏๆŒ** - ๆ”ฏๆŒ CRS / CPA / S2A ไธ‰็งๆŽˆๆƒๅ…ฅๅบ“ๆ–นๅผ - ๐Ÿ’พ **ๆ–ญ็‚น็ปญไผ ** - ๆ”ฏๆŒไธญๆ–ญๆขๅค๏ผŒ้ฟๅ…้‡ๅคๆ“ไฝœ - ๐Ÿ“Š **็Šถๆ€่ฟฝ่ธช** - ่ฏฆ็ป†็š„่ดฆๅท็Šถๆ€่ฎฐๅฝ•ไธŽ่ฟฝ่ธช - ๐ŸŒ **ไปฃ็†่ฝฎๆข** - ๆ”ฏๆŒๅคšไปฃ็†้…็ฝฎๅ’Œ่‡ชๅŠจ่ฝฎๆข - ๐ŸŽญ **ๆต่งˆๅ™จๆŒ‡็บน** - ้šๆœบๆต่งˆๅ™จๆŒ‡็บน้˜ฒๆฃ€ๆต‹ --- ## ๐Ÿ“‹ ๅ‰็ฝฎ่ฆๆฑ‚ - Python 3.12+ - [uv](https://github.com/astral-sh/uv) (ๆŽจ่) ๆˆ– pip - Chrome ๆต่งˆๅ™จ - ้‚ฎ็ฎฑๆœๅŠก API - ๆŽˆๆƒๆœๅŠก API (CRS / CPA / S2A ไปป้€‰ๅ…ถไธ€) --- ## ๐Ÿ› ๏ธ ๅฟซ้€Ÿๅผ€ๅง‹ ### 1. ๅฎ‰่ฃ…ไพ่ต– ```bash # ไฝฟ็”จ uv (ๆŽจ่) uv sync # ๆˆ–ไฝฟ็”จ pip pip install -r requirements.txt ``` ### 2. ้…็ฝฎๆ–‡ไปถ ```bash # ๅคๅˆถ้…็ฝฎๆจกๆฟ cp config.toml.example config.toml cp team.json.example team.json ``` ### 3. ็ผ–่พ‘้…็ฝฎ #### `config.toml` - ไธป้…็ฝฎๆ–‡ไปถ ```toml # ==================== ๆœๅŠก้€‰ๆ‹ฉ ==================== # ้‚ฎ็ฎฑ็ณป็ปŸ: "cloudmail" (่‡ชๅปบ้‚ฎ็ฎฑ) ๆˆ– "gptmail" (ไธดๆ—ถ้‚ฎ็ฎฑ) email_provider = "gptmail" # ๆŽˆๆƒๆœๅŠก: "crs" / "cpa" / "s2a" auth_provider = "cpa" # ๆ˜ฏๅฆๅฐ† Team Owner ไนŸๆทปๅŠ ๅˆฐๆŽˆๆƒๆœๅŠกๅ…ฅๅบ“ # - true: Owner ่ดฆๅทไนŸไผš่ฟ›่กŒๆŽˆๆƒๅนถๅ…ฅๅบ“ (้œ€่ฆ Owner ้‚ฎ็ฎฑ่ƒฝๆŽฅๆ”ถ้ชŒ่ฏ็ ) # - false: ไป…ๅค„็†้‚€่ฏท็š„ๆˆๅ‘˜่ดฆๅท๏ผŒOwner ไธๅ…ฅๅบ“ include_team_owners = false # ==================== ้‚ฎ็ฎฑๆœๅŠก้…็ฝฎ ==================== # Cloud Mail ้‚ฎ็ฎฑๆœๅŠก (email_provider = "cloudmail" ๆ—ถไฝฟ็”จ) [email] api_base = "https://your-email-service.com/api/public" api_auth = "your-api-auth-token" domains = ["domain1.com", "domain2.com"] role = "gpt-team" web_url = "https://your-email-service.com" # GPTMail ไธดๆ—ถ้‚ฎ็ฎฑ (email_provider = "gptmail" ๆ—ถไฝฟ็”จ) [gptmail] api_base = "https://mail.chatgpt.org.uk" api_key = "gpt-test" prefix = "" # ้‚ฎ็ฎฑๅ‰็ผ€๏ผŒ็•™็ฉบ่‡ชๅŠจ็”Ÿๆˆ domains = [] # ๅฏ็”จๅŸŸๅๅˆ—่กจ๏ผŒ็•™็ฉบไฝฟ็”จ้ป˜่ฎค # ==================== ๆŽˆๆƒๆœๅŠก้…็ฝฎ ==================== # CRS ๆœๅŠก้…็ฝฎ (auth_provider = "crs" ๆ—ถไฝฟ็”จ) [crs] api_base = "https://your-crs-service.com" admin_token = "your-admin-token" # CPA ๆœๅŠก (auth_provider = "cpa" ๆ—ถไฝฟ็”จ) [cpa] api_base = "http://your-cpa-service:8317" admin_password = "your-admin-password" poll_interval = 2 # ่ฝฎ่ฏข้—ด้š” (็ง’) poll_max_retries = 30 # ๆœ€ๅคง้‡่ฏ•ๆฌกๆ•ฐ is_webui = true # S2A ๆœๅŠก (auth_provider = "s2a" ๆ—ถไฝฟ็”จ) [s2a] api_base = "https://your-sub2api-service.com/api/v1" admin_key = "your-admin-api-key" # Admin API Key (ๆŽจ่) admin_token = "" # JWT Token (ๅค‡้€‰) concurrency = 10 # ่ดฆๅทๅนถๅ‘ๆ•ฐ priority = 50 # ่ดฆๅทไผ˜ๅ…ˆ็บง group_ids = [] # ๅˆ†็ป„ ID ๅˆ—่กจ group_names = ["codex"] # ๅˆ†็ป„ๅ็งฐๅˆ—่กจ (่‡ชๅŠจ่งฃๆžไธบ ID) # ==================== ่ดฆๅท้…็ฝฎ ==================== [account] default_password = "YourSecurePassword@2025" accounts_per_team = 4 # ==================== ๆต่งˆๅ™จ้…็ฝฎ ==================== [browser] wait_timeout = 60 short_wait = 10 headless = false # ๆ— ๅคดๆจกๅผ # ==================== ไปฃ็†้…็ฝฎ (ๅฏ้€‰) ==================== proxy_enabled = false # [[proxies]] # type = "socks5" # host = "127.0.0.1" # port = 1080 # ๆ›ดๅคš้…็ฝฎ้กน่ฏทๅ‚่€ƒ config.toml.example ``` #### `team.json` - Team ๅ‡ญ่ฏ้…็ฝฎ > ๐Ÿ’ก ้€š่ฟ‡่ฎฟ้—ฎ `https://chatgpt.com/api/auth/session` ่Žทๅ–๏ผˆ้œ€ๅ…ˆ็™ปๅฝ• ChatGPT๏ผ‰ **ๆ ผๅผ 1: ๆ—งๆ ผๅผ (ๅฎŒๆ•ด Session)** ```json [ { "user": { "email": "team-admin@example.com" }, "account": { "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "organizationId": "org-xxxxxxxxxxxxxxxxxxxxxxxx" }, "accessToken": "eyJhbGciOiJSUzI1NiIs..." } ] ``` > โš ๏ธ **ๆณจๆ„**: ๆ ผๅผ 1 ็š„ Team Owner ้‚ฎ็ฎฑๅฟ…้กปๆ˜ฏ่‡ชๅทฑๅฏๆŽง็š„ๅŸŸๅ้‚ฎ็ฎฑ๏ผŒๆ‰่ƒฝๆŽฅๆ”ถ้ชŒ่ฏ็ ๅฎŒๆˆๆŽˆๆƒๅ…ฅๅบ“ใ€‚ๅฆ‚ๆžœๆ˜ฏ็ฌฌไธ‰ๆ–น้‚ฎ็ฎฑ๏ผˆๅฆ‚ Gmail๏ผ‰๏ผŒOwner ่ดฆๅทๆ— ๆณ•ๅ…ฅๅบ“๏ผŒๅช่ƒฝ้‚€่ฏทๆˆๅ‘˜่ดฆๅทใ€‚ **ๆ ผๅผ 2: ๆ–ฐๆ ผๅผ (้‚ฎ็ฎฑๅฏ†็  + Token)** ```json [ { "account": "team-admin@example.com", "password": "your-password", "token": "eyJhbGciOiJSUzI1NiIs..." } ] ``` **ๆ ผๅผ 3: ๆ–ฐๆ ผๅผ (ไป…้‚ฎ็ฎฑๅฏ†็ ๏ผŒ่‡ชๅŠจ็™ปๅฝ•่Žทๅ– Token)** ```json [ { "account": "team-admin@example.com", "password": "your-password" } ] ``` > ๐Ÿ’ก ๆ ผๅผ 3 ๆ— ้œ€ๆไพ› Token๏ผŒ็จ‹ๅบไผš่‡ชๅŠจ็™ปๅฝ•่Žทๅ–ๅนถไฟๅญ˜ๅˆฐ้…็ฝฎๆ–‡ไปถ #### ไธ‰็งๆ ผๅผ็š„ๅค„็†็ญ–็•ฅ | ๆ ผๅผ | Owner ๆŽˆๆƒๅ…ฅๅบ“ | ๆˆๅ‘˜้‚€่ฏท | Token ่Žทๅ– | ้€‚็”จๅœบๆ™ฏ | |:---:|:---:|:---:|:---:|------| | **ๆ ผๅผ 1** | โš ๏ธ ้œ€่‡ชๆœ‰ๅŸŸๅ้‚ฎ็ฎฑ | โœ… ๆ”ฏๆŒ | ๆ‰‹ๅŠจๆไพ› | ๅทฒๆœ‰ Session๏ผŒOwner ็”จ็ฌฌไธ‰ๆ–น้‚ฎ็ฎฑ | | **ๆ ผๅผ 2** | โœ… ๆ”ฏๆŒ | โœ… ๆ”ฏๆŒ | ๆ‰‹ๅŠจๆไพ› | ๅทฒๆœ‰ Token๏ผŒOwner ๅฏๆŽฅๆ”ถ้ชŒ่ฏ็  | | **ๆ ผๅผ 3** | โœ… ๆ”ฏๆŒ | โœ… ๆ”ฏๆŒ | ่‡ชๅŠจ็™ปๅฝ• | ๆœ€็ฎ€้…็ฝฎ๏ผŒOwner ๅฏๆŽฅๆ”ถ้ชŒ่ฏ็  | **่ฏฆ็ป†่ฏดๆ˜Ž๏ผš** - **ๆ ผๅผ 1 (ๆ—งๆ ผๅผ)**: ็›ดๆŽฅไฝฟ็”จ ChatGPT Session๏ผŒOwner ไฝฟ็”จ OTP ้ชŒ่ฏ็ ็™ปๅฝ•ๆŽˆๆƒใ€‚ๅฆ‚ๆžœ Owner ้‚ฎ็ฎฑๆ˜ฏ Gmail ็ญ‰็ฌฌไธ‰ๆ–น้‚ฎ็ฎฑ๏ผŒๆ— ๆณ•ๆŽฅๆ”ถ้ชŒ่ฏ็ ๏ผŒๅˆ™ Owner ่ดฆๅทไธไผšๅ…ฅๅบ“๏ผŒไป…้‚€่ฏทๆˆๅ‘˜่ดฆๅทใ€‚ - **ๆ ผๅผ 2 (ๆ–ฐๆ ผๅผ + Token)**: ๆไพ›้‚ฎ็ฎฑๅฏ†็ ๅ’Œ Token๏ผŒOwner ไฝฟ็”จๅฏ†็ ็™ปๅฝ•่ฟ›่กŒๆŽˆๆƒใ€‚้€‚ๅˆๅทฒ็ปๆœ‰ Token ไธ” Owner ้‚ฎ็ฎฑๅฏๆŽฅๆ”ถ้ชŒ่ฏ็ ็š„ๅœบๆ™ฏใ€‚ - **ๆ ผๅผ 3 (ๆ–ฐๆ ผๅผ ๆ—  Token)**: ไป…ๆไพ›้‚ฎ็ฎฑๅฏ†็ ๏ผŒ็จ‹ๅบไผšๅ…ˆ่‡ชๅŠจ็™ปๅฝ•่Žทๅ– Token ๅนถไฟๅญ˜๏ผŒ็„ถๅŽ่ฟ›่กŒๅŽ็ปญๆต็จ‹ใ€‚ๆœ€็ฎ€ๅ•็š„้…็ฝฎๆ–นๅผ๏ผŒๆŽจ่ไฝฟ็”จใ€‚ ### 4. ่ฟ่กŒ ```bash # ่ฟ่กŒๆ‰€ๆœ‰ Team uv run python run.py # ๅ•ไธช Team ๆจกๅผ uv run python run.py single 0 # ๆต‹่ฏ•ๆจกๅผ (ไป…ๅˆ›ๅปบ้‚ฎ็ฎฑๅ’Œ้‚€่ฏท) uv run python run.py test # ๆŸฅ็œ‹็Šถๆ€ uv run python run.py status ``` --- ## ๐Ÿ” ๆŽˆๆƒๆœๅŠก่ฏดๆ˜Ž ๆœฌ้กน็›ฎๆ”ฏๆŒไธ‰็งๆŽˆๆƒๅ…ฅๅบ“ๆœๅŠก๏ผŒ้€š่ฟ‡ `auth_provider` ้…็ฝฎ้€‰ๆ‹ฉ๏ผš | ๆœๅŠก | ่ฏดๆ˜Ž | ็‰น็‚น | |:---:|------|------| | **CRS** | Claude Relay Service | ้œ€ๆ‰‹ๅŠจๆทปๅŠ ่ดฆๅท๏ผŒๆ”ฏๆŒ Token ็ฎก็† | | **CPA** | Codex/Copilot Authorization | ๅŽๅฐ่‡ชๅŠจๅค„็†๏ผŒ่ฝฎ่ฏขๆŽˆๆƒ็Šถๆ€ | | **S2A** | Sub2API | ๆ”ฏๆŒ OAuth ๆŽˆๆƒ๏ผŒ่‡ชๅŠจๅ…ฅๅบ“๏ผŒๆ”ฏๆŒๅˆ†็ป„ | ### CRS ้…็ฝฎ ```toml auth_provider = "crs" [crs] api_base = "https://your-crs-service.com" admin_token = "your-admin-token" ``` ### CPA ้…็ฝฎ ```toml auth_provider = "cpa" [cpa] api_base = "http://your-cpa-service:8317" admin_password = "your-admin-password" poll_interval = 2 poll_max_retries = 30 is_webui = true ``` ### S2A ้…็ฝฎ ```toml auth_provider = "s2a" [s2a] api_base = "https://your-sub2api-service.com/api/v1" # ่ฎค่ฏๆ–นๅผไบŒ้€‰ไธ€ (ไผ˜ๅ…ˆไฝฟ็”จ admin_key) admin_key = "your-admin-api-key" admin_token = "" # ่ดฆๅท้…็ฝฎ concurrency = 10 priority = 50 # ๅˆ†็ป„้…็ฝฎ (ไบŒ้€‰ไธ€) group_ids = [] group_names = ["codex"] ``` --- ## ๐Ÿ“ ้กน็›ฎ็ป“ๆž„ ``` oai-team-auto-provisioner/ โ”‚ โ”œโ”€โ”€ ๐Ÿš€ run.py # ไธปๅ…ฅๅฃ่„šๆœฌ โ”œโ”€โ”€ โš™๏ธ config.py # ้…็ฝฎๅŠ ่ฝฝๆจกๅ— โ”‚ โ”œโ”€โ”€ ๐Ÿ“ง email_service.py # ้‚ฎ็ฎฑๆœๅŠก (ๅˆ›ๅปบ็”จๆˆทใ€่Žทๅ–้ชŒ่ฏ็ ) โ”œโ”€โ”€ ๐Ÿ‘ฅ team_service.py # Team ๆœๅŠก (้‚€่ฏท็ฎก็†) โ”œโ”€โ”€ ๐ŸŒ browser_automation.py # ๆต่งˆๅ™จ่‡ชๅŠจๅŒ– (ๆณจๅ†Œๆต็จ‹) โ”‚ โ”œโ”€โ”€ ๐Ÿ” ๆŽˆๆƒๆœๅŠกๆจกๅ— โ”‚ โ”œโ”€โ”€ crs_service.py # CRS ๆœๅŠก โ”‚ โ”œโ”€โ”€ cpa_service.py # CPA ๆœๅŠก โ”‚ โ””โ”€โ”€ s2a_service.py # S2A (Sub2API) ๆœๅŠก โ”‚ โ”œโ”€โ”€ ๐Ÿ› ๏ธ utils.py # ๅทฅๅ…ทๅ‡ฝๆ•ฐ (CSVใ€็Šถๆ€่ฟฝ่ธช) โ”œโ”€โ”€ ๐Ÿ“Š logger.py # ๆ—ฅๅฟ—ๆจกๅ— โ”‚ โ”œโ”€โ”€ ๐Ÿ“ config.toml.example # ้…็ฝฎๆจกๆฟ โ”œโ”€โ”€ ๐Ÿ”‘ team.json.example # Team ๅ‡ญ่ฏๆจกๆฟ โ”‚ โ”œโ”€โ”€ ๐Ÿ“‚ logs/ # ๆ—ฅๅฟ—็›ฎๅฝ• โ”‚ โ””โ”€โ”€ app.log # ่ฟ่กŒๆ—ฅๅฟ— (่‡ชๅŠจ่ฝฎ่ฝฌ) โ”‚ โ””โ”€โ”€ ๐Ÿ“‚ ่‡ชๅŠจ็”Ÿๆˆๆ–‡ไปถ โ”œโ”€โ”€ accounts.csv # ่ดฆๅท่ฎฐๅฝ• โ”œโ”€โ”€ team_tracker.json # ็Šถๆ€่ฟฝ่ธช โ””โ”€โ”€ domain_blacklist.json # ๅŸŸๅ้ป‘ๅๅ• ``` --- ## ๐Ÿ”„ ๅทฅไฝœๆต็จ‹ ### ๆ•ดไฝ“ๆต็จ‹ๅ›พ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿš€ python run.py โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿ“‹ ๅŠ ่ฝฝ้…็ฝฎๆ–‡ไปถ โ”‚ โ”‚ config.toml โ”‚ โ”‚ team.json โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿ” ้ชŒ่ฏๆŽˆๆƒๆœๅŠก่ฟžๆŽฅ โ”‚ โ”‚ CRS / CPA / S2A โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ–ผ โ–ผ โ–ผ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๆ ผๅผ 3 โ”‚ โ”‚ ๆ ผๅผ 2 โ”‚ โ”‚ ๆ ผๅผ 1 โ”‚ โ”‚ ไป…้‚ฎ็ฎฑๅฏ†็  โ”‚ โ”‚้‚ฎ็ฎฑๅฏ†็ +Tokenโ”‚ โ”‚ ๅฎŒๆ•ดSession โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ–ผ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ”‘ ๆต่งˆๅ™จ โ”‚ โ”‚ โ”‚ โ”‚ ่‡ชๅŠจ็™ปๅฝ• โ”‚ โ”‚ โ”‚ โ”‚ ่Žทๅ–Token โ”‚ โ”‚ โ”‚ โ”‚ ๅŒๆ—ถๆŽˆๆƒ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ–ผ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿ” ้ๅކๆฏไธช Team โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ“ง Step 1: ๆ‰น้‡ๅˆ›ๅปบ้‚ฎ็ฎฑ โ”‚ โ”‚ โ””โ”€ Cloud Mail / GPTMail API โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿ‘ฅ Step 2: ๆ‰น้‡้‚€่ฏทๅˆฐ Team โ”‚ โ”‚ โ””โ”€ ChatGPT API ้‚€่ฏทๆˆๅ‘˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๐Ÿ” ้ๅކๆฏไธช้‚ฎ็ฎฑ่ดฆๅท โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ๐ŸŒ Step 3: ๆต่งˆๅ™จ่‡ชๅŠจๆณจๅ†Œ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€ DrissionPage ่‡ชๅŠจๅŒ– โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€ ๅกซๅ†™ไฟกๆฏ + ้‚ฎ็ฎฑ้ชŒ่ฏ็  โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿ” Step 4: Codex ๆŽˆๆƒ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€ ็”ŸๆˆๆŽˆๆƒ้“พๆŽฅ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€ ่‡ชๅŠจ็™ปๅฝ•ๅฎŒๆˆๆŽˆๆƒ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ๐Ÿ’พ Step 5: ๆŽˆๆƒๆœๅŠกๅ…ฅๅบ“ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€ CRS: ๆ‰‹ๅŠจๆทปๅŠ ่ดฆๅท โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€ CPA: ๅŽๅฐ่‡ชๅŠจๅค„็† โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€ S2A: OAuth ่‡ชๅŠจๅ…ฅๅบ“ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿ‘‘ ๅค„็† Team Owner (ๅฏ้€‰) โ”‚ โ”‚ โ””โ”€ include_team_owners = true โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โœ… ๅฎŒๆˆ & ๆ‰“ๅฐๆ‘˜่ฆ โ”‚ โ”‚ ๐Ÿ“Š ไฟๅญ˜ CSV ่ฎฐๅฝ• โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### ็Šถๆ€ๆต่ฝฌ ่ดฆๅทๅœจๅค„็†่ฟ‡็จ‹ไธญไผš็ปๅކไปฅไธ‹็Šถๆ€๏ผš ``` invited โ†’ registered โ†’ authorized โ†’ completed โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ†’ partial (ๅ…ฅๅบ“ๅคฑ่ดฅ) โ”‚ โ”‚ โ”‚ โ””โ”€โ†’ auth_failed (ๆŽˆๆƒๅคฑ่ดฅ) โ”‚ โ””โ”€โ†’ register_failed (ๆณจๅ†Œๅคฑ่ดฅ) ``` | ็Šถๆ€ | ่ฏดๆ˜Ž | ไธ‹ไธ€ๆญฅๆ“ไฝœ | |:---:|------|------| | `invited` | ๅทฒ้‚€่ฏทๅˆฐ Team | ็ญ‰ๅพ…ๆณจๅ†Œ | | `registered` | ๅทฒๅฎŒๆˆๆณจๅ†Œ | ็ญ‰ๅพ…ๆŽˆๆƒ | | `authorized` | ๅทฒๅฎŒๆˆๆŽˆๆƒ | ็ญ‰ๅพ…ๅ…ฅๅบ“ | | `completed` | ๅ…จ้ƒจๅฎŒๆˆ | ๆ—  | | `partial` | ๆŽˆๆƒๆˆๅŠŸไฝ†ๅ…ฅๅบ“ๅคฑ่ดฅ | ้‡่ฏ•ๅ…ฅๅบ“ | | `auth_failed` | ๆŽˆๆƒๅคฑ่ดฅ | ้‡่ฏ•ๆŽˆๆƒ | | `register_failed` | ๆณจๅ†Œๅคฑ่ดฅ | ้‡่ฏ•ๆณจๅ†Œ | | `team_owner` | Team Owner (ๆ ผๅผ1) | OTP ้ชŒ่ฏ็ ็™ปๅฝ•ๆŽˆๆƒ | > ๐Ÿ’ก ็จ‹ๅบๆ”ฏๆŒๆ–ญ็‚น็ปญไผ ๏ผŒไธญๆ–ญๅŽ้‡ๆ–ฐ่ฟ่กŒไผš่‡ชๅŠจไปŽๆœชๅฎŒๆˆ็š„็Šถๆ€็ปง็ปญๅค„็† ### ไธ‰็งๆ ผๅผ็š„ๅค„็†ๅทฎๅผ‚ | ้˜ถๆฎต | ๆ ผๅผ 1 (ๅฎŒๆ•ดSession) | ๆ ผๅผ 2 (้‚ฎ็ฎฑๅฏ†็ +Token) | ๆ ผๅผ 3 (ไป…้‚ฎ็ฎฑๅฏ†็ ) | |:---:|:---:|:---:|:---:| | **Token ่Žทๅ–** | ๆ‰‹ๅŠจๆไพ› accessToken | ๆ‰‹ๅŠจๆไพ› token | ่‡ชๅŠจ็™ปๅฝ•่Žทๅ– | | **Owner ็™ปๅฝ•ๆ–นๅผ** | OTP ้ชŒ่ฏ็  | ๅฏ†็ ็™ปๅฝ• | ๅฏ†็ ็™ปๅฝ• (็™ปๅฝ•ๆ—ถๅŒๆ—ถๆŽˆๆƒ) | | **Owner ๆŽˆๆƒ** | ้œ€่‡ชๆœ‰ๅŸŸๅ้‚ฎ็ฎฑๆ”ถ้ชŒ่ฏ็  | ๅฏ†็ ็™ปๅฝ•ๅŽๆŽˆๆƒ | ็™ปๅฝ•ๆ—ถๅทฒๅฎŒๆˆ | | **ๆˆๅ‘˜ๅค„็†** | ๆญฃๅธธๆต็จ‹ | ๆญฃๅธธๆต็จ‹ | ๆญฃๅธธๆต็จ‹ | --- ## ๐Ÿ“Š ่พ“ๅ‡บๆ–‡ไปถ | ๆ–‡ไปถ | ่ฏดๆ˜Ž | |------|------| | `accounts.csv` | ๆ‰€ๆœ‰่ดฆๅท่ฎฐๅฝ• (้‚ฎ็ฎฑใ€ๅฏ†็ ใ€Teamใ€็Šถๆ€ใ€ๆŽˆๆƒ ID) | | `team_tracker.json` | ๆฏไธช Team ็š„่ดฆๅทๅค„็†็Šถๆ€่ฟฝ่ธช | | `domain_blacklist.json` | ไธๅฏ็”จ็š„้‚ฎ็ฎฑๅŸŸๅ้ป‘ๅๅ• | --- ## ๐Ÿค ็›ธๅ…ณ้กน็›ฎ ### ๐Ÿ“ง ้‚ฎ็ฎฑๆœๅŠก | ๆœๅŠก | ่ฏดๆ˜Ž | ้…็ฝฎ | |------|------|------| | [Cloud Mail](https://github.com/maillab/cloud-mail) | ่‡ชๅปบ้‚ฎ็ฎฑ็ณป็ปŸ | `email_provider = "cloudmail"` | | [GPTMail](https://mail.chatgpt.org.uk) | ไธดๆ—ถ้‚ฎ็ฎฑๆœๅŠก ([API ๆ–‡ๆกฃ](https://www.chatgpt.org.uk/2025/11/gptmailapiapi.html)) | `email_provider = "gptmail"` | ### ๐Ÿ” ๆŽˆๆƒๆœๅŠก | ๆœๅŠก | ่ฏดๆ˜Ž | ้…็ฝฎ | |------|------|------| | [Claude Relay Service](https://github.com/Wei-Shaw/claude-relay-service) | Token ็ฎก็†ๆœๅŠก | `auth_provider = "crs"` | | [CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI) | Codex ๆŽˆๆƒๆœๅŠก | `auth_provider = "cpa"` | | [Sub2API](https://github.com/Wei-Shaw/sub2api) | OAuth ๆŽˆๆƒๅ…ฅๅบ“ | `auth_provider = "s2a"` | --- ## โš ๏ธ ๅ…่ดฃๅฃฐๆ˜Ž ๆœฌ้กน็›ฎไป…ไพ›ๅญฆไน ๅ’Œ็ ”็ฉถไฝฟ็”จใ€‚ไฝฟ็”จ่€…้œ€่‡ช่กŒๆ‰ฟๆ‹…ไฝฟ็”จ้ฃŽ้™ฉ๏ผŒ่ฏท้ตๅฎˆ็›ธๅ…ณๆœๅŠกๆกๆฌพใ€‚ --- ## ๐Ÿ“„ License [MIT](LICENSE)