Files
autoreg-skills-max/skills/cloud-trial-registration/references/sepa-lastschrift-trials.md

67 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SEPA / Lastschrift AI-service trials (DE-hosted)
Class of targets: German AI SaaS (nele.ai, amaiko.ai, kompas.ai, omnifact.ai) whose free trial is gated behind a SEPA Lastschrift mandate at Stripe/keycloak checkout. Pattern: register → email activation → package wizard → confirmation checkboxes → payment step → SEPA tab → IBAN → submit. A synthetic DE IBAN + German exit IP is the accepted combo (Vlad's standing instruction: «Сепа через ибан генератор и надо Германия айпи»).
## Per-service status (verified live)
| Service | Signup | Trial | Payment | Status |
|---|---|---|---|---|
| nele.ai (manage.nele.ai) | email → Brevo activation link → Vuetify wizard | 1000 credits / 7 days Testphase (package step shows 5000cr €67.45/mo card; trial is the free option) | Stripe checkout, SEPA tab | FULLY AUTOMATABLE — recipe below |
| amaiko.ai | Keycloak (auth.amaiko.ai realm `amaiko`), no captcha | no free self-serve trial — paid plans only (€37.39/seat/mo, €44.87 liberté) | SEPA | account+store signup automatable; trial requires SEPA payment |
| kompas.ai (app.kompas.ai) | `/auth/signup` (note: NOT `/api/`) | 7d Pro Cloud | Cloudflare Turnstile, server-side validated | DEAD for autoreg — sitekey not in static chunks, `turnstile_token:"bypass"` rejected |
| guenther.chat | account created only by first WhatsApp message | free | — | not automatable |
| aiworkspacehub.com | affiliate catalog, no self-serve signup | — | — | not automatable |
| chat.omnifact.ai | work-email gate: gmail/t-online REJECTED, voidash.bond ACCEPTED (mail.tm blocked) | 10d Pro, no card | SEPA later | signup OK; manual team verification 24–48h, no magic link |
## DE IBAN generator (ISO 13616 / 7064 mod97)
```python
import random
BLZ = ["51020000","20030000","36020030","10020020","50010517","37020500"] # real bank codes
def gen_de_iban():
bban = random.choice(BLZ) + ''.join(random.choice('0123456789') for _ in range(10))
cd = 98 - int(bban + "131400") % 97 # "1314"=DE, "00"=check placeholder
return f"DE{cd:02d}{bban}"
# validate: int(iban[4:] + "1314" + iban[2:4]) % 97 == 1
```
Pitfall: validate with the reorder formula above — hand-rolled digit-mapping checks give false negatives.
## DE proxy sourcing (the hard part)
1. Free GitHub lists are country-blind: a FULL TheSpeedX `http.txt` scan with ~150 parallel workers through `ipinfo.io/json` yields only ~5 live DE exits (mostly Hetzner/DO). Budget minutes, not seconds.
2. Pre-verify once into `de_proxies_fresh.json` [{proxy, ip}], re-verify through the proxy BEFORE launching Playwright — free DE proxies die between scan and use.
3. bpproxy-style paid pools: rotate session via username suffix `_session-<rand8>_lifetime-30`; country targeting via username is unreliable, filter by geo-check instead.
4. Geo-check services rate-limit silently: ipapi.co returns JSON with `country_code: null` from an exhausted local IP (no error!) → proxy finder returns None and the whole run dies with NO_DE_PROXY. Use a fallback chain ipinfo.io/json → api.ip.sb/geoip and treat null-country as "try next service", not "not DE".
## Playwright through auth proxy (Windows, Python 3.11, PYTHONPATH="")
```python
m = re.match(r'http://([^:@]+):([^@]+)@(.+):(\d+)', proxy_str)
pw_proxy = {"server": f"http://{m.group(3)}:{m.group(4)}",
"username": m.group(1), "password": m.group(2)}
```
- Credentials embedded in the proxy URL → every request fails `net::ERR_TUNNEL_CONNECTION_FAILED`. MUST split into server/username/password.
- Slow proxy + SPA: `wait_until="networkidle"` hangs forever; use `wait_until="commit"` + explicit `page.wait_for_timeout(15000)` + `page.wait_for_selector("#input-2", timeout=180000)` + `page.set_default_timeout(120000)`.
## Vuetify automation pattern (nele.ai wizard)
- Buttons are custom Vuetify components: `get_by_role("button", name=...)` clicks HANG. Use text locator + `force=True` + `.last` (stepper headers also match), or `page.locator("button[type=submit]").click(force=True)`.
- Checkbox inputs are visually hidden: `page.check()` fails. Sequence: `locator("#id").evaluate("el => el.click()")` → verify `is_checked()` → fallback click ancestor `.v-input`/`.v-selection-control`. Payment button stays disabled until both `register-trial-conditions` and `register-terms-of-use` are checked.
- UI is German regardless of Accept-Language: `NÄCHSTER SCHRITT` (next), `ZAHLUNGSMETHODE WÄHLEN` (choose payment). Match labels with `GERMAN|english` regex alternation.
- Prefilled/readonly email in activation wizard: skip fill if `input_value()` non-empty — fill on readonly throws and burns the step.
- Key selectors (may drift): step0 email `#input-2`, submit button text `REGISTER`; activation step1 `#input-7` email(readonly), `#input-9` password, `#input-11` company, `#input-13`/`#input-15` names.
## Activation email extraction (t-online IMAP, Brevo-sent)
- `msg.get("Subject")` returns an `email.header.Header` object — `.lower()` on it crashes; decode first: `str(email.header.decode_header(...))`.
- Search `M.search(None, 'FROM "nele"')` — subject-based search misses.
- The direct link `https://manage\.nele\.ai/register/[A-Za-z0-9]+` is in the HTML body; Brevo wraps it in `...r.mailinblue.com/sendibt3?...` tracking redirects — regex the raw HTML first, follow the redirect Location as fallback.
- Keycloak (amaiko) action tokens live ~5 minutes: fetch the mail and open the link in the same automated pass, never store-and-replay later.
## Automation hygiene
- Run the funnel as a standalone Playwright script (python311, `PYTHONPATH=""`, `-X utf8 -u`) writing a result JSON + per-step screenshots; the interactive browser_exec daemon is too flaky for multi-step checkout flows.
- Log every step name before attempting it — when a run dies at step3 you need to know whether the click or the checkbox failed.
- Kill stuck runs via `psutil.process_iter` cmdline match (wmic/ps kill fails on this host).
- Account state file: `C:/Users/User/Desktop/_PROJECTS/conol_autoreg/sepa_trial_accounts.json` (append one entry per service: email, status, trial terms, blockers). Never store IBANs or session keys there.