iflytek/astron-agent · error · BusinessException

8001

8001

Error message

Failed to query APPID credentials. Please check if APPID belongs to you or if APPID has been deleted, APPID=${appId}

What it means

Thrown by AppService.parseRemoteCredential when the remote credential service returned a response whose data payload is null or an empty array, so no AkSk credential could be extracted. The message embeds the queried appId. It signals the APPID either does not belong to the caller or has been deleted upstream.

Solutions

  1. Verify the appId passed to getAkSk/remoteCallAkSk exists and belongs to your account in the upstream console.
  2. Check logs to inspect the raw remote response and confirm whether data was null or the array was empty.
  3. Re-create or re-bind the app credentials if the app was deleted, then update the stored appId configuration.
  4. Add pre-validation that rejects empty/blank appId before making the remote call.

Example fix

// before
AkSk credential = appService.getAkSk(appId);
// after
if (appId == null || appId.isBlank()) {
    throw new IllegalArgumentException("appId must be provided before querying AK/SK");
}
AkSk credential = appService.getAkSk(appId);
Defensive patterns

Strategy: validation

Validate before calling

// before the remote call
if (appId == null || appId.isBlank()) {
    throw new BusinessException(ResponseEnum.RESPONSE_FAILED, "appId is required");
}

Type guard

boolean hasCredentialPayload(Object data) {
    if (data == null) return false;
    JSONArray arr = JSON.parseArray(data.toString());
    return arr != null && !arr.isEmpty();
}

Try / catch

try {
    AkSk akSk = appService.getAkSk(appId);
} catch (BusinessException e) {
    // prompt user to verify the APPID exists and belongs to them
    log.warn("credential lookup failed for appId={}", appId, e);
}

Prevention

When it happens

Trigger: getAkSk or remoteCallAkSk calls the remote app-credential API; CommonTool.checkSystemCallResponse returns null data, or JSON.parseArray(data.toString()) yields an empty array for the given appId.

Common situations: Typo or stale APPID configured in the caller's environment; the app was deleted in the upstream console; the remote service returns success with an empty list for apps owned by another tenant.

Understand the failure class

Background: "empty response", "returned no data", "empty embeddings": what HTTP 200-with-empty-body errors mean across libraries — this error's family across 36 libraries.

Related errors


AI-assisted analysis of iflytek/astron-agent@5e758547a8 (2026-09-12). Data as JSON: /api/errors/6dcf37d4bd9bc537. Report an issue: GitHub.

Appendix: source

Thrown at console/backend/toolkit/src/main/java/com/iflytek/astron/console/toolkit/service/extra/AppService.java:105

            return akSk;
        }

        String appUrl = apiUrl.getAppUrl() + "/key/" + appId;
        String resp;
        try {
            resp = HeaderAuthHttpTool.tenantGet(
                    appUrl, apiUrl.getApiKey(), apiUrl.getApiSecret());
        } catch (NoSuchAlgorithmException | InvalidKeyException | IOException e) {
            throw new RuntimeException(e);
        }
        return parseRemoteCredential(resp, appId, "uncached");
    }

    private AkSk parseRemoteCredential(String response, String appId, String lookupMode) {
        Object data = CommonTool.checkSystemCallResponse(response);
        String errMsg = "Failed to query APPID credentials. Please check if APPID belongs to you or if APPID has been deleted, APPID=" + appId;
        if (data == null) {
            throw new BusinessException(ResponseEnum.RESPONSE_FAILED, errMsg);
        }
        JSONArray array = JSON.parseArray(data.toString());
        if (CollectionUtils.isEmpty(array)) {
            throw new BusinessException(ResponseEnum.RESPONSE_FAILED, errMsg);
        }
        AkSk credential = array.getObject(0, AkSk.class);
        log.info(
                "APP credential query succeeded, appId={}, mode={}, responseChars={}",
                appId,
                lookupMode,
                response == null ? 0 : response.length());
        return credential;
    }

    /**
     * Handle special application IDs that have predefined credentials
     *
     * @param appId The application ID to check

View on GitHub (pinned to 5e758547a8)