{"record":{"id":"f125b47ae155253e","repo":"AlistGo/alist","slug":"lark-export-task-response-missing-ticket","errorCode":null,"errorMessage":"lark export task response missing ticket","messagePattern":"lark export task response missing ticket","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"drivers/lark/other.go","lineNumber":149,"sourceCode":"\t\tType(docType).\n\t\tFileExtension(format).\n\t\tFileName(larkExportBaseName(obj.GetName()))\n\tif subID != \"\" {\n\t\tbuilder.SubId(subID)\n\t}\n\texportTask := builder.Build()\n\tresp, err := doDrive(ctx, c, func(opts ...larkcore.RequestOptionFunc) (*larkdrive.CreateExportTaskResp, error) {\n\t\treturn c.client.Drive.V1.ExportTask.Create(ctx,\n\t\t\tlarkdrive.NewCreateExportTaskReqBuilder().ExportTask(exportTask).Build(), opts...)\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif !resp.Success() {\n\t\treturn nil, larkAPIError(resp)\n\t}\n\tif resp.Data == nil || resp.Data.Ticket == nil || *resp.Data.Ticket == \"\" {\n\t\treturn nil, errors.New(\"lark export task response missing ticket\")\n\t}\n\treturn &LarkExportCreateResp{\n\t\tTicket: *resp.Data.Ticket,\n\t\tToken:  token,\n\t\tType:   docType,\n\t\tFormat: format,\n\t\tSubID:  subID,\n\t}, nil\n}\n\nfunc (c *Lark) getExportOptions(ctx context.Context, obj model.Obj) (*LarkExportOptionsResp, error) {\n\ttoken, ok := c.getObjToken(ctx, obj.GetPath())\n\tif !ok {\n\t\treturn nil, errors.WithStack(errors.New(\"lark file token not found\"))\n\t}\n\tdocType, err := larkExportType(obj.GetName())\n\tif err != nil {\n\t\treturn nil, err","sourceCodeStart":131,"sourceCodeEnd":167,"githubUrl":"https://github.com/AlistGo/alist/blob/843d9dc8149126976b2625911e45a4d3ffd6f2f5/drivers/lark/other.go#L131-L167","documentation":"The Feishu Drive ExportTask.Create call returned success but resp.Data.Ticket was nil/empty. The ticket is the handle required to poll export status (Get with Ticket+Token), so without it the export flow cannot continue; the driver returns this error instead of an unusable LarkExportCreateResp.","triggerScenarios":"CreateExportTask succeeds at HTTP/code level yet omits data.ticket — export quota exceeded, file in a state that cannot be exported, or the export feature not enabled for the app/tenant.","commonSituations":"Mass-exporting many docs quickly hits the tenant's export quota; exporting a doc type the tenant disabled; SDK/response drift after a Feishu API update.","solutions":["Log larkAPIError details / raw response for the create call to find the underlying reason","Wait if export quota is exhausted, then retry with fewer concurrent tasks","Verify the app has the drive export permission (docs:document:export or equivalent scope)","Confirm the doc is not locked/being-edited heavily, then retry"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"resp, err := c.createExportTask(ctx, obj, req)\nif err != nil && strings.Contains(err.Error(), \"missing ticket\") {\n\t// quota/state issue: back off and retry once later\n\treturn nil, fmt.Errorf(\"feishu did not issue export ticket (quota or doc state): %w\", err)\n}","preventionTips":["Throttle export creation (one or few concurrent) to stay under tenant export quota","Confirm drive export scopes are granted before shipping export features"],"tags":["lark","feishu","export","api-contract","driver"],"backgroundTag":null,"analyzedSha":"843d9dc8149126976b2625911e45a4d3ffd6f2f5","analyzedAt":"2026-08-15T12:14:11.722Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}