{"record":{"id":"eb822fe152f99058","repo":"chenhg5/cc-connect","slug":"cloud-web-base-url-is-required-for-long-poll-tran","errorCode":null,"errorMessage":"cloud_web: base_url is required for long_poll transport","messagePattern":"cloud_web: base_url is required for long_poll transport","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"platform/cloud-web/cloudweb.go","lineNumber":108,"sourceCode":"\tsendPath, _ := opts[\"send_path\"].(string)\n\tlongPollMS := pickInt(opts[\"long_poll_timeout_ms\"])\n\n\tallowFrom, _ := opts[\"allow_from\"].(string)\n\tcore.CheckAllowFrom(name, allowFrom)\n\tshareInChannel, _ := opts[\"share_session_in_channel\"].(bool)\n\tgroupReplyAll, _ := opts[\"group_reply_all\"].(bool)\n\n\tvar tp transport\n\tswitch transportKind {\n\tcase \"websocket\":\n\t\tresolved := resolveWSURL(baseURL, wsURL)\n\t\tif strings.TrimSpace(resolved) == \"\" {\n\t\t\treturn nil, fmt.Errorf(\"cloud_web: ws_url or base_url is required for websocket transport\")\n\t\t}\n\t\ttp = newWSTransport(resolved, token, name, project)\n\tcase \"long_poll\":\n\t\tif strings.TrimSpace(baseURL) == \"\" {\n\t\t\treturn nil, fmt.Errorf(\"cloud_web: base_url is required for long_poll transport\")\n\t\t}\n\t\ttp = newPollTransport(baseURL, token, name, project, eventsPath, sendPath, longPollMS)\n\tcase \"gateway\":\n\t\tif strings.TrimSpace(baseURL) == \"\" && strings.TrimSpace(registerURL) != \"\" {\n\t\t\tbaseURL = deriveBaseURL(registerURL)\n\t\t}\n\t\tif strings.TrimSpace(baseURL) == \"\" && strings.TrimSpace(registerURL) == \"\" {\n\t\t\treturn nil, fmt.Errorf(\"cloud_web: base_url or register_url is required for gateway transport\")\n\t\t}\n\t\tif strings.TrimSpace(registerURL) != \"\" && strings.TrimSpace(publicURL) == \"\" {\n\t\t\treturn nil, fmt.Errorf(\"cloud_web: public_url is required when register_url is set for gateway transport\")\n\t\t}\n\t\ttp = newGatewayTransport(baseURL, token, name, project, listen, webhookPath, registerURL, publicURL, sendPath)\n\t}\n\n\treturn &Platform{\n\t\tname:           name,\n\t\tproject:        project,","sourceCodeStart":90,"sourceCodeEnd":126,"githubUrl":"https://github.com/chenhg5/cc-connect/blob/4000b2338aa6e850c99df54f8b0ed6ed7460b401/platform/cloud-web/cloudweb.go#L90-L126","documentation":"cloud-web's Platform constructor validates its transport configuration. When transport is set to \"long_poll\", the constructor requires a non-empty base_url because the polling transport needs an HTTP endpoint to poll for events and send messages. This error is thrown by New when baseURL is empty or whitespace-only for that transport.","triggerScenarios":"Calling New (via mustNew or the platform factory) with options resolving transport to \"long_poll\" while base_url is unset, empty string, or only whitespace.","commonSituations":"A config.toml [platform.cloud_web] section that sets transport = \"long_poll\" but omits base_url; an env-var-driven setup where the BASE_URL variable is not exported; copying a websocket example config and switching transport without adding base_url.","solutions":["Set base_url in the cloud_web platform config to the reachable HTTP endpoint of the cloud-web service, e.g. base_url = \"https://cloud.example.com\"","If you intended websocket transport instead, set ws_url (or base_url) and transport = \"websocket\"","Verify the value is not empty after trimming (no \"\" or \"   \") before constructing the platform","Run the doctor / startup config validation to catch the missing field before runtime"],"exampleFix":"// before\n[platform.cloud_web]\ntransport = \"long_poll\"\n# base_url missing\n\n// after\n[platform.cloud_web]\ntransport = \"long_poll\"\nbase_url = \"https://cloud.example.com\"","handlingStrategy":"validation","validationCode":"if strings.TrimSpace(cfg.Transport) == \"long_poll\" && strings.TrimSpace(cfg.BaseURL) == \"\" {\n    return fmt.Errorf(\"cloud_web: base_url must be set when transport is long_poll\")\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate the cloud_web config block at startup before registering platforms","Keep a config example with all transport-specific fields commented per transport","Add a CI check that lints config.toml against required fields per transport"],"tags":["config","validation","cloud-web"],"backgroundTag":"missing-required-config-field","analyzedSha":"4000b2338aa6e850c99df54f8b0ed6ed7460b401","analyzedAt":"2026-09-06T11:45:09.575Z","contentChangedAt":"2026-09-06T11:45:09.575Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}