OpenRPA Cannot Connect to Self-Hosted OpenFlow

OpenRPA version: 1.4.57
OpenFlow version: 1.5.12.62
Using app.openiap.io or self hosted openflow: self-hosted openflow
Error message: unable to connect to remote server
Screenshot or video:
Attach a simple workflow from OpenRPA or NodeRED that reproduces the error/issue:

Good day @Allan_Zimmermann and co , I (urgently) need your guidance on an issue I’m facing. I have previously created multiple workflows on local OpenRPA and connected to app.openiap.io, where I can view all of my workflows published onto the cloud opencore. But now I have successfully hosted my own OpenCore on a remote server using docker, and I wanted to switch the OpenCore instance to my self-hosted instance to be connected to my OpenRPA, but it kept on showing “unable to connect to remote server” etc.

My settings.json is as follows:

{
  "wsurl": "wss://example.domain.com.my/",
  "username": "janedoe@example.com.my",
  "use_virtual_click": true,
  "use_sendkeys": false,
  "use_postwait": "00:00:00",
  "use_animate_mouse": false,
  "updatecheckinterval": "1.00:00:00",
  "unsafepassword": null,
  "thread_lock_timeout_seconds": 10,
  "thread_exit_on_lock_timeout": false,
  "skip_online_state": false,
  "skip_child_session_check": false,
  "restore_dependencies_on_startup": false,
  "remote_allowed": true,
  "remote_allow_multiple_running_max": 2,
  "remote_allow_multiple_running": false,
  "reloadinterval": "00:05:00",
  "recording_add_to_designer": true,
  "record_overlay": true,
  "querypagesize": 50,
  "password": "",
  "otel_trace_url": "",
  "otel_trace_interval": 5000,
  "otel_metric_url": "",
  "otel_metric_interval": 5000,
  "otel_log_url": "https://otel.stats.openiap.io/v1/logs",
  "openflow_uniqueid": "",
  "ocrlanguage": "eng",
  "noweblogin": false,
  "notify_on_workflow_remote_start": true,
  "notify_on_workflow_remote_end": false,
  "notify_on_workflow_end": true,
  "network_message_timeout": "00:00:15",
  "move_animation_steps": 20,
  "move_animation_run_time": "00:00:00.5000000",
  "minimize_to_tray": true,
  "minimize": false,
  "max_workflows": 500,
  "max_trace_lines": 250,
  "max_projects": 100,
  "max_output_lines": 250,
  "mainwindow_position": "2214, 20, 1200, 750",
  "log_warning": true,
  "log_verbose": false,
  "log_to_file": false,
  "log_selector_verbose": false,
  "log_selector": false,
  "log_output": true,
  "log_network": false,
  "log_information": true,
  "log_file_level_minimum": 2,
  "log_file_level_maximum": 5,
  "log_error": true,
  "log_debug": false,
  "log_busy_warning": true,
  "log_activity": false,
  "lastupdatecheck": "2025-04-10T09:03:03.5536456+08:00",
  "jwt": "",
  "isagent": false,
  "getting_started_url": "",
  "files_pending_deletion": [],
  "entropy": "",
  "enable_analytics": true,
  "doupdatecheck": true,
  "disable_instance_store": false,
  "designerlayout": "",
  "culture": "",
  "cef_useragent": "",
  "cancelkey": "{ESCAPE}",
  "autoupdateupdater": false,
  "properties": {
    "IE_enable_xpath_support": true,
    "NM_wait_for_tab_after_set_value": false,
    "NM_wait_for_tab_click": false,
    "NM_compensate_for_old_addon": false,
    "NM_debug_console_output": false,
    "NM_unique_xpath_ids": [
      "ng-model",
      "ng-reflect-name",
      "data-control-name"
    ],
    "NM_protocol_timeout": "00:00:10",
    "NM_wait_for_tab_timeout": "00:00:00.0010000",
    "Windows_allow_attach": true,
    "Windows_cache_timeout": "00:05:00",
    "Windows_enable_cache": true,
    "Windows_allow_multiple_hits_mid_selector": false,
    "Windows_enum_selector_properties": false,
    "Windows_get_elements_in_different_thread": true,
    "Windows_search_timeout": "00:00:05",
    "Windows_traverse_selector_both_ways": true,
    "Windows_enable_windows_detector": true,
    "StorageFileSystem_strict": false,
    "StorageFileSystem_enabled": false,
    "StorageLiteDB_enabled": true,
    "Windows_try_mouse_over_search": false,
    "Windows_search_descendants": true,
    "Windows_create_short_selector": true,
    "Image_recording_mouse_move_time": 350,
    "Windows_remove_fisrt_window": false
  }
}

I have left the openflow_uniqueid and jwt empty because I believe the values vary from instance to instance.

Can you please advise how I can go about this?

most likely you don’t have a certificate, so change wss:// to ws://

Hi @Allan_Zimmermann , my domain is secured with a valid SSL certificate. And I did try both wss and ws, but it’s still not working.

Could it be because of the incompatibility of the versions of openrpa and openflow that’s causing this issue?

So, are you using Let’s Encrypt issued by Traefik in the Docker Compose? If not, your config is most likely wrong. If that’s the case, look at my letsencrypt example and see the changes under API, then compare with yours.

A valid certificate is not enough. It has to be trusted by .NET 4, which OpenRPA is using. So, if this is a self-issued certificate, the root certificate may not be registered correctly. (Sometimes in big enterprises, they use self-issued certificates and ensure it works in the browsers, but not for other applications.)

Hi Allan, thank you so much for your quick response. I was able to find out the root cause. Our domain is indeed only accessible within our own network, and hence the Let’s Encrypt cert couldnt be obtained as our domain is not publicly accessible.

I have then proceed to generate a self-signed certificate using openssl and update my docker service of traefik accordingly so it will use my own self-signed certs. For the OpenRPA, I just install and trust the certificate on the machine that I’m running my robot on, and it solves the problem.

Thank you so much and I hope you have a great day! :smiley:

1 Like

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.