Skip to content
Docs
API reference Go to dashboard
DocsIntegrationsConnect internal systems

Connect internal systems

Your inventory system, property management software or ERP runs in the company network and has no public address? This is how the chatbot reaches it anyway – securely and without opening a port in the firewall.

What this is about

A custom action calls your system from the internet via https. Paldra cannot reach addresses in the company network (e.g. http://192.168.1.20:8080) – and must not: we always reject private addresses. The solution is a tunnel: a small program in your network opens an outbound connection to a provider and makes exactly one service reachable under a public https address. You don't need to open anything in the firewall.

Cloudflare Tunnel (recommended)

Requirements: a free Cloudflare account and a domain whose DNS is on Cloudflare (e.g. yourcompany.com), plus a machine in the company network that can reach your system (server, VM or Raspberry Pi; Linux, Windows or macOS).

1
In the Cloudflare dashboard: Zero Trust → Networks → Tunnels → Create a tunnel, type Cloudflared, name e.g. alpheris.
2
Cloudflare shows the install command with a token. Run it on the machine in the company network – cloudflared then runs as a service and starts by itself after a reboot.
3
Under Public Hostname: subdomain e.g. erp-api, domain yourcompany.com, path only what is needed (e.g. ^/api/alpheris/.*), service HTTP and the internal address, e.g. 192.168.1.20:8080.
4
Protect the address with Cloudflare Access: Zero Trust → Access → Service Auth → Service Tokens → create a token (note client ID and client secret). Then Access → Applications → Self-hosted for erp-api.yourcompany.com with a rule, action Service Auth, that allows exactly this token.
5
In Paldra, create the custom action with https://erp-api.yourcompany.com/api/alpheris/… and add two headers under “More: headers …”: CF-Access-Client-Id and CF-Access-Client-Secret with the values from step 4.

Prefer a configuration file over the dashboard? Then like this:

bash
cloudflared tunnel login
cloudflared tunnel create alpheris
cloudflared tunnel route dns alpheris erp-api.yourcompany.com
sudo cloudflared --config /etc/cloudflared/config.yml service install
yaml
# /etc/cloudflared/config.yml
tunnel: alpheris
credentials-file: /etc/cloudflared/<TUNNEL-ID>.json
ingress:
  - hostname: erp-api.yourcompany.com
    path: ^/api/alpheris/
    service: http://192.168.1.20:8080
  - service: http_status:404

Check from outside (without the token Cloudflare must reject, with the token your system answers):

bash
curl -i https://erp-api.yourcompany.com/api/alpheris/status
curl -i https://erp-api.yourcompany.com/api/alpheris/status \
  -H "CF-Access-Client-Id: <ID>.access" -H "CF-Access-Client-Secret: <SECRET>"

Security: what to watch out for

  • Publish only what is needed: a separate path or a small service just for Paldra – never the whole admin interface.
  • Two locks: Cloudflare Access (service token) in front of the tunnel and check the signature of every call (X-Alpheris-Signature, see verifying calls). Reject calls without a valid signature.
  • A dedicated user with few permissions in the internal system: read wherever possible; writing actions (PUT, PATCH, DELETE) with the stage “customer confirms” or “draft”.
  • Personal data only for the matching customer: use the confirmed email (X-Alpheris-Customer-Email) and return only that customer’s data.
  • Rotate secrets: service token and signing secret can be renewed at any time; enter them in Paldra again afterwards.
  • Logs: Cloudflare shows every access under Zero Trust → Logs; your system should record the X-Alpheris-Request-Id.

Other ways

  • Tailscale Funnel: tailscale funnel 8080 makes a service reachable at https://<machine>.<tailnet>.ts.net. There is no access protection in front – so always check the signature and add your own key as a header.
  • ngrok with a fixed domain: ngrok http --url=erp-api.yourcompany.com 8080; secure access with your own header (e.g. X-Api-Key) or ngrok’s policies.
  • Reverse proxy in the DMZ (nginx, Caddy, Traefik) with a valid certificate and a key header – if your IT runs one anyway.
  • Only data, no live access needed? Then a lookup table (CSV/Excel or published link) or POST /v1/wissen from your system is often enough – no tunnel required.

IP allowlisting

We currently don't publish fixed outbound IP addresses. They can change when servers are expanded or moved, so allowing access by IP address alone is not reliable. IP allowlisting on request – contact us via support. A service token or key header plus the signature of every call is safer and permanent.

i
Good to know: The tunnel doesn't change the limits of the custom action: https only, no redirects, 8-second timeout, answers are trimmed to what the chatbot needs. If your system takes longer, use long-running jobs with a callback.