
CX
13/10/2026
Tóm tắt
blog.share_blog
@cogover/sdk: Process và AI AgentTrang này thuộc API reference của @cogover/sdk.
processes khởi chạy Process của Cogover và agents khởi chạy lượt chạy AI Agent
từ code của project. Cả hai là thành phần trong context của script và route, trigger
after-change, background job và Custom Module Action. Trigger
before-change bị từ chối bằng PermissionDeniedError
(details.reason === "TRIGGER_READ_ONLY").
Cả hai chạy nền. start trả về ngay khi lượt chạy Process hoặc lượt chạy agent được
tạo, không bao giờ đợi nó kết thúc. Để xử lý kết quả, hãy chỉ định một background job
của project trong onComplete hoặc onResult: Cogover enqueue job đó khi lượt chạy
kết thúc. get đọc trạng thái hiện tại của lượt chạy mà project đã khởi chạy.
Ví dụ này giả định workspace.d.ts đã khai báo Object lead và field dùng bên dưới.
import { defineJob, defineScript } from "@cogover/sdk";
import type { CogoverRecordId, ProcessCompletionJobPayload } from "@cogover/sdk";
export default defineScript(async ({ input, processes }) => {
const { leadId } = input as { leadId: string };
const { instanceId, duplicate } = await processes.start("PIXXXXXXXXXXXX", {
input: { lead_id: leadId },
instanceName: `Approve discount ${leadId}`,
idempotencyKey: `discount:${leadId}`,
onComplete: { job: "after_approval", payload: { leadId } },
});
return { instanceId, duplicate };
});
export const jobs = [
// Payload của job là JSON: ID gửi trong onComplete.payload quay về dưới dạng chuỗi.
defineJob<ProcessCompletionJobPayload<{ leadId: CogoverRecordId }>>({ key: "after_approval" }, async ({ payload, data }) => {
if (payload?.payload == null || payload.process.state !== "COMPLETED") return;
const approved = payload.process.output?.approved === true;
await data.object("lead").records.update(payload.payload.leadId, { discount_approved: approved });
}),
];
Identity policy của project quyết định project được dùng những Process và AI Agent
nào; quản trị viên Workspace duyệt các mục này như phần còn lại của policy. Không có
mục processes thì mọi lời gọi processes ném PermissionDeniedError với
details.reason là "PROCESSES_NOT_ALLOWED"; không có mục agents thì mọi lời gọi
agents ném lỗi đó với "AGENTS_NOT_ALLOWED".
{
"processes": {
"processes": { "mode": "ONLY", "processInfoIds": ["PIXXXXXXXXXXXX"] },
"allowSystem": false
},
"agents": {
"agents": { "mode": "ALL", "agentIds": [] },
"allowSystem": false,
"maxRunsPerDay": 200,
"allowAutoApprove": false
}
}| Field | Ý nghĩa |
|---|---|
processes.processes |
Những Process mà processes.start được khởi chạy: mode là ALL, ALL_EXCEPT hoặc ONLY, và ID của Process trong processInfoIds. |
processes.allowSystem |
Cho phép lần thực thi không có người dùng khởi chạy các Process đã chọn. Mặc định false. |
agents.agents |
Những AI Agent mà agents.start được chạy: mode và ID của agent trong agentIds. |
agents.allowSystem |
Cho phép lần thực thi không có người dùng chạy các agent đã chọn, khi đó agent dùng danh tính riêng của nó. Mặc định false. |
agents.maxRunsPerDay |
Số lời gọi agents.start tối đa của project trong một ngày UTC, từ 1 đến 10000. Mặc định 200. |
agents.allowAutoApprove |
Cho phép agents.start với approvalPolicy: "autoApprove". Mặc định false; lần thực thi không có người dùng không bao giờ dùng được. |
PermissionDeniedError với details.reason là
"PROCESS_START_DENIED" hoặc "AGENT_RUN_DENIED". Người dùng không có tài khoản
Workspace không khởi chạy được Process.
allowSystem: true trong mục tương ứng. Process khởi chạy theo cách này không có
người khởi tạo.
get cũng cần có mục tương ứng, nhưng không cần được chọn: nó chỉ đọc lượt chạy mà
chính project đã khởi chạy.
processes.start(processInfoId, options?): Promise<ProcessStartResult>interface ProcessesApi {
start(processInfoId: string, options?: ProcessStartOptions): Promise<ProcessStartResult>;
get(instanceId: string): Promise<ProcessInstanceState>;
}
interface ProcessStartOptions {
readonly input?: Record<string, unknown>;
readonly instanceName?: string;
readonly idempotencyKey?: string;
readonly onComplete?: ProcessCompletion;
}
interface ProcessCompletion {
readonly job: string;
readonly payload?: unknown;
}
interface ProcessStartResult {
readonly instanceId: string;
readonly duplicate: boolean;
}
processInfoId là ID của một Process, chính là ID mà identity policy liệt kê, không
phải ID của một version hay lượt chạy của nó: từ 1 đến 64 chữ cái, chữ số, _ hoặc
-. Cogover khởi chạy version đã kích hoạt và đã xuất bản của Process đó, và Process
phải là Process Normal flow.
| Tuỳ chọn | Quy tắc và ý nghĩa |
|---|---|
input |
Object JSON tối đa 65.536 byte UTF-8: giá trị của các biến Process được đánh dấu input, theo tên biến. |
instanceName |
Tên của lượt chạy mới, từ 1 đến 255 ký tự. |
idempotencyKey |
Bắt đầu bằng chữ cái hoặc chữ số và có tối đa 200 chữ cái, chữ số, ., _, : hoặc -. Xem Idempotency và thử lại. |
onComplete |
job là key của một job mà version đang active khai báo; payload là giá trị JSON tuỳ chọn tối đa 8.192 byte UTF-8 được chuyển cho job đó. |
Kết quả là instanceId của lượt chạy mới, và duplicate: true khi một lần start
trước với cùng idempotencyKey đã trả về lượt chạy đó thay vì tạo mới. Tham số không
hợp lệ ném ValidationError trước khi gửi bất cứ gì.
processes.get(instanceId): Promise<ProcessInstanceState>interface ProcessInstanceState {
readonly instanceId: string;
readonly processId: string;
readonly processInfoId: string;
readonly state: string;
readonly startedAt: number | null;
readonly finishedAt: number | null;
}
state là NOT_STARTED, RUNNING, PAUSED, COMPLETED, FAILED (lượt chạy dừng vì
lỗi), CANCELED hoặc DELETED. startedAt và finishedAt là Unix millisecond, hoặc
null trước khi lượt chạy bắt đầu và trong lúc nó đang chạy. Lượt chạy không do
project này khởi chạy ném NotFoundError.
interface ProcessCompletionJobPayload<TPayload = unknown> {
readonly payload: TPayload | null;
readonly process: {
readonly instanceId: string;
readonly processId: string;
readonly processInfoId: string;
readonly state: "COMPLETED" | "CANCELED" | "DELETED" | "FAILED";
readonly output: Record<string, unknown> | null;
readonly finishedAt: number | null;
};
}
Khi lượt chạy được khởi chạy với onComplete kết thúc, Cogover enqueue một lần chạy
của job với giá trị này làm payload: payload là onComplete.payload (hoặc
null), còn process.output chứa giá trị của các biến Process được đánh dấu output,
hoặc null khi không có hoặc lớn hơn 48 KiB. Xem
Quy tắc của job nhận kết quả để biết job chạy thế nào.
agents.start(agentId, options): Promise<AgentStartResult>interface AgentsApi {
start(agentId: string, options: AgentStartOptions): Promise<AgentStartResult>;
get<TResult = unknown>(runId: string): Promise<AgentRunState<TResult>>;
}
interface AgentStartOptions {
readonly instruction: string;
readonly variables?: Readonly<Record<string, string | number | boolean>>;
readonly records?: readonly AgentRecordReference[];
readonly resultSchema?: ObjectSchema<ObjectShape, false>;
readonly runAs?: "caller" | "agent";
readonly approvalPolicy?: "deny" | "autoApprove";
readonly timeoutSeconds?: number;
readonly idempotencyKey?: string;
readonly onResult?: AgentResultCompletion;
readonly deliverTo?: AgentDeliveryTarget;
}
interface AgentRecordReference {
readonly objectSlug: string;
readonly recordId: string;
readonly withActivities?: boolean;
}
interface AgentResultCompletion {
readonly job: string;
readonly payload?: unknown;
}
interface AgentDeliveryTarget {
readonly personnelId: string;
readonly conversation?: "new" | "latest";
readonly title?: string;
}
interface AgentStartResult {
readonly runId: string;
readonly duplicate: boolean;
}const { runId } = await agents.start("AGXXXXXXXXXXXX", {
instruction: "Classify this email as a sales or a support request.",
variables: { subject: message.subject, body: message.body },
records: [{ objectSlug: "lead", recordId: leadId, withActivities: true }],
resultSchema: s.object({ category: s.enum(["sales", "support"]) }),
idempotencyKey: `classify:${message.id}`,
onResult: { job: "save_classification", payload: { messageId: message.id } },
});
agentId là ID của một AI Agent: từ 1 đến 64 chữ cái, chữ số, _ hoặc -. Mỗi lượt
chạy làm việc trong một phiên mới của riêng nó, không người nào nhìn thấy; deliverTo
là cách để lượt chạy nhắn tới một người.
| Tuỳ chọn | Quy tắc và ý nghĩa |
|---|---|
instruction |
Bắt buộc. Việc agent phải làm, từ 1 đến 20.000 ký tự, không để trống. |
variables |
Tối đa 50 giá trị có tên mà agent dùng được; tên bắt đầu bằng chữ cái và có tối đa 64 chữ cái, chữ số hoặc _; giá trị là chuỗi tối đa 4.000 ký tự, số hữu hạn hoặc boolean. |
records |
Tối đa 20 record mà agent đọc làm ngữ cảnh. objectSlug là slug của Object, recordId có từ 1 đến 128 chữ cái, chữ số, _ hoặc -, và withActivities: true cho agent đọc thêm activity của record. |
resultSchema |
Hình dạng của kết quả có cấu trúc, tạo bằng s.object (xem Schema builder). Agent phải trả kết quả khớp schema; nếu không, lượt chạy thất bại. |
runAs |
"caller" (mặc định): agent hành động dưới danh tính người dùng của lần thực thi này. "agent": agent dùng danh tính riêng của nó, và agent phải có danh tính đó. Lần thực thi không có người dùng phải dùng "agent". |
approvalPolicy |
"deny" (mặc định): tool cần người phê duyệt sẽ không chạy, và agent được báo điều đó. "autoApprove": các tool đó chạy không cần phê duyệt; cần allowAutoApprove: true trong identity policy và lần thực thi có người dùng, nếu không start ném PermissionDeniedError với details.reason là "AGENT_AUTO_APPROVE_NOT_ALLOWED". |
timeoutSeconds |
Số nguyên từ 10 đến 1800; mặc định 300. Giới hạn thời gian của lượt chạy. |
idempotencyKey |
Cùng quy tắc như với processes.start. |
onResult |
job là key của một job mà version đang active khai báo; payload là giá trị JSON tuỳ chọn tối đa 8.192 byte UTF-8 được chuyển cho job đó. |
deliverTo |
Cho phép agent gửi tin nhắn chat cho một nhân sự trong lượt chạy; xem Gửi tin nhắn chat cho một nhân sự. |
Kết quả là runId của lượt chạy mới, và duplicate: true khi một lần start trước với
cùng idempotencyKey đã trả về lượt chạy đó thay vì tạo mới. Tham số không hợp lệ ném
ValidationError trước khi gửi bất cứ gì.
const { runId } = await agents.start("AGXXXXXXXXXXXX", {
instruction: "Check the overdue invoices of this account. If any are overdue, "
+ "tell the account owner which ones and what to do next.",
records: [{ objectSlug: "account", recordId: accountId }],
runAs: "agent",
deliverTo: { personnelId: ownerPersonnelId, conversation: "latest", title: "Overdue invoices" },
idempotencyKey: `overdue:${accountId}:${today}`,
onResult: { job: "after_reminder", payload: { accountId } },
});
Với deliverTo, agent có thể chủ động mở chat với một nhân sự: tin nhắn đến hội thoại
AI chat của agent đó với nhân sự đó, người nhận được thông báo như thường lệ và trả lời
ngay tại đó.
| Thành phần | Quy tắc và ý nghĩa |
|---|---|
personnelId |
Bắt buộc. Personnel ID của người nhận: từ 1 đến 128 chữ cái, chữ số, _ hoặc -. |
conversation |
"new" (mặc định): tin nhắn luôn mở một hội thoại mới. "latest": tin nhắn nối tiếp hội thoại gần nhất của agent với người nhận, và mở hội thoại mới khi chưa có hội thoại nào, khi hội thoại đó đang bận với một lượt chạy khác hoặc khi người nhận đã xoá nó. |
title |
Tên của hội thoại mà lượt chạy mở: một dòng từ 1 đến 80 ký tự, không để trống, không chứa ký tự điều khiển. Mặc định lấy phần đầu của tin nhắn. |
instruction người nhận cần biết gì và khi nào thì đáng gửi tin. Câu trả lời cuối của
agent (text) và result vẫn chỉ trả về cho code của bạn; chúng không được gửi cho
người nhận.
delivery (xem
agents.get). status của lượt chạy không
phụ thuộc vào đó: lượt chạy có thể COMPLETED trong khi tin nhắn không được gửi.
CogoverApiError với code là
RECIPIENT_NOT_FOUND, RECIPIENT_ACCESS_DENIED hoặc RECIPIENT_AI_SEAT_REQUIRED
(xem Lỗi): không có lượt chạy nào được tạo và không có gì được gửi. Identity
policy không cần khai báo gì cho người nhận, và lần thực thi không có người dùng vẫn
dùng được deliverTo.
delivery báo BLOCKED với
RECIPIENT_RATE_LIMITED.
deliverTo gửi tin nhắn thật
cho người thật. Hãy dùng người nhận đã biết trước việc này.
agents.get(runId): Promise<AgentRunState>interface AgentRunState<TResult = unknown> {
readonly runId: string;
readonly status: string;
readonly text: string | null;
readonly result: TResult | null;
readonly error: { readonly code: string; readonly message: string } | null;
readonly delivery: AgentDelivery | null;
}
interface AgentDelivery {
readonly status: "SENT" | "NOT_SENT" | "BLOCKED" | "FAILED";
readonly errorCode: string | null;
readonly chatSessionId: string | null;
readonly conversationId: string | null;
readonly newConversation: boolean;
}
status là QUEUED hoặc RUNNING khi lượt chạy đang diễn ra, sau đó là trạng thái
cuối như COMPLETED, FAILED, TIMEOUT hoặc CANCELLED. text là câu trả lời của
agent (tối đa 32 KiB), result là kết quả có cấu trúc khớp resultSchema, và error
là lý do lượt chạy thất bại; mỗi giá trị là null khi không có. error.code là một
trong RESULT_SCHEMA_MISMATCH, TIMEOUT, CALLER_TIMEOUT, CANCELLED, MAX_TURNS,
GUARDRAIL_REJECTED, APPROVAL_DENIED, SERVER_RESTARTED, SESSION_BUSY,
SESSION_EVICTED, AGENT_INACTIVE, AGENT_ACCESS_DENIED, AGENT_CONFIG_INVALID,
CONFIG_LOAD_FAILED, LLM_HTTP_ERROR, LLM_NETWORK, LLM_RESPONSE_FAILED, LLM_PARSE,
OUTPUT_TRUNCATED, INTERNAL_ERROR, một trong các mã tính phí credit AI
INSUFFICIENT_CREDITS, AI_SUBSCRIPTION_REQUIRED, AI_SEAT_REQUIRED,
AGENT_CREDIT_LIMIT_EXCEEDED, MODEL_NOT_PRICED (ý nghĩa như ở Lỗi) khi lượt
chạy bị dừng vì tính phí, hoặc AGENT_ERROR với mọi lý do khác, và
error.message là mô tả tiếng Anh cố định của mã đó: nội dung từ nhà cung cấp mô hình
AI không bao giờ được chuyển tiếp. Job onResult nhận cùng error đó. Lượt chạy không
do project này khởi chạy ném NotFoundError.
delivery là kết quả của deliverTo, và là null với lượt chạy được khởi chạy không
có tuỳ chọn này. Hãy đọc nó khi lượt chạy đã có trạng thái cuối: khi lượt chạy còn đang
diễn ra, giá trị này chưa phải kết quả cuối và có thể vẫn là null. Job onResult nhận
cùng giá trị đó.
delivery.status |
Ý nghĩa |
|---|---|
SENT |
Người nhận đã nhận ít nhất một tin nhắn. chatSessionId và conversationId xác định hội thoại, và newConversation là true khi lượt chạy đã mở hội thoại đó. |
NOT_SENT |
Agent không gửi tin nào, ví dụ vì không có gì cần báo. |
BLOCKED |
Agent đã thử gửi và tin nhắn bị từ chối. errorCode cho biết lý do. |
FAILED |
Agent đã thử gửi và việc gửi thất bại. errorCode cho biết lý do. |
delivery.errorCode là null với SENT và NOT_SENT. Ngược lại nó là một trong:
delivery.errorCode |
Ý nghĩa |
|---|---|
RECIPIENT_NOT_FOUND |
Người nhận không còn là nhân sự của Workspace. |
RECIPIENT_ACCESS_DENIED |
Người nhận không được dùng agent. |
RECIPIENT_AI_SEAT_REQUIRED |
Người nhận chưa được gán seat AI Agent. |
RECIPIENT_RATE_LIMITED |
Agent đã gửi cho người nhận này đủ số tin nhắn mà một lượt chạy hoặc một ngày cho phép. |
INVALID_DELIVERY |
Tin nhắn rỗng hoặc quá dài, hoặc agent không active. |
NOT_ALLOWED_IN_CUSTOMER_CHAT |
Lượt chạy thuộc một hội thoại với khách hàng bên ngoài, nơi không được nhắn cho nhân sự. |
CHAT_SERVER_ERROR |
Không mở được hội thoại hoặc không gửi được tin nhắn. |
DELIVERY_UNAVAILABLE |
Lỗi tạm thời khi kiểm tra người nhận hoặc lưu hội thoại. |
INSUFFICIENT_CREDITS, AI_SUBSCRIPTION_REQUIRED, AGENT_CREDIT_LIMIT_EXCEEDED, MODEL_NOT_PRICED |
Tin nhắn bị dừng vì tính phí credit AI (ý nghĩa như ở Lỗi). |
DELIVERY_ERROR |
Mọi lý do khác. |
chatSessionId và conversationId là null trừ khi đã có tin nhắn được gửi.
interface AgentResultJobPayload<TPayload = unknown, TResult = unknown> {
readonly payload: TPayload | null;
readonly agentRun: {
readonly runId: string;
readonly status: string;
readonly text: string | null;
readonly result: TResult | null;
readonly error: { readonly code: string; readonly message: string } | null;
readonly usage: Record<string, unknown> | null;
readonly delivery: AgentDelivery | null;
};
}
Khi lượt chạy được khởi chạy với onResult kết thúc, Cogover enqueue một lần chạy của
job với giá trị này làm payload: payload là onResult.payload (hoặc null),
agentRun.text bị cắt còn 32 KiB, agentRun.result là null khi lớn hơn 16 KiB,
agentRun.usage cho biết inputTokens, outputTokens, iterations và durationMs,
và agentRun.delivery là kết quả của deliverTo đúng như agents.get trả về (null
với lượt chạy được khởi chạy không có tuỳ chọn này).
defineJob<AgentResultJobPayload<{ accountId: string }>>({ key: "after_reminder" }, async ({ payload, log }) => {
const delivery = payload?.agentRun.delivery;
if (delivery?.status === "SENT") {
log.info("Owner reminded", { conversationId: delivery.conversationId });
} else if (delivery !== null && delivery !== undefined && delivery.status !== "NOT_SENT") {
log.warn("Reminder not delivered", { status: delivery.status, errorCode: delivery.errorCode });
}
});onComplete hoặc onResult chạy như mọi job được enqueue
(xem Quy tắc thực thi job): job.source là
"enqueue", job được giao ít nhất một lần và được thử lại khi ném RetryableError.
Lịch sử lần chạy ghi job với enqueuedBy là process:<instanceId> hoặc
agent:<runId>.
start (hoặc không có
người dùng khi lần thực thi đó không có). Job nhận ít hơn lần thực thi đó hai bước
ngân sách tự động hoá (một bước để tới Process hoặc agent, một bước để quay về), và
tiếp nối chuỗi job của lần thực thi đó, nên job mà Process hoặc agent của nó kết thúc
bằng việc khởi chạy lại chính job đó sẽ dừng như job tự enqueue chính nó. Khi không
còn bước nào, hoặc chuỗi quá dài, kết quả sẽ không được giao.
start; nếu không, start ném
ValidationError. Nếu khi lượt chạy kết thúc mà version đang active không còn khai
báo job, hoặc project đã có 10.000 lần chạy job đang chờ, kết quả sẽ không được giao.
idempotencyKey thì mỗi lần start tạo một lượt chạy mới.start thứ hai với cùng key trong cùng project trả về lượt chạy đầu
tiên với duplicate: true. Cogover giữ key trong lúc lượt chạy còn hoạt động và 7
ngày sau khi nó kết thúc. Dùng lại key cho một Process hoặc agent khác sẽ ném
ValidationError. Key thuộc về danh tính đã dùng nó đầu tiên: người dùng khác của
project, hoặc lần thực thi không có người dùng, gửi cùng key sẽ nhận
CogoverApiError với code: "IDEMPOTENCY_CONFLICT", không bao giờ nhận lượt chạy của
danh tính kia. Hãy đưa người dùng vào key khi nhiều người có thể dùng chung key.
agents.start
thứ hai với cùng key nhưng deliverTo khác trả về lượt chạy đầu tiên với
duplicate: true và không gửi gì cho người nhận kia. Hãy đưa người nhận vào key khi
một công việc nhắn cho nhiều người.
RetryableError báo lỗi tạm thời. Khi details.writesMayHaveCompleted là false,
chưa có gì được khởi chạy. Khi giá trị này là true, lượt chạy có thể đã được tạo:
hãy thử lại sau với cùng idempotencyKey, Cogover sẽ hoàn tất lần start đó thay vì
tạo lượt chạy thứ hai; lần thử lại quá sớm có thể lại ném RetryableError. Sau một
lần từ chối dứt khoát, như ValidationError, PermissionDeniedError, một mã tính
phí credit AI hoặc một mã về người nhận của deliverTo, key được dùng lại.
payload của job hoặc job.id, và trong action, key suy ra
từ action.runId, giúp handler được thử lại không khởi chạy cùng một việc hai lần.
processes và agents là một capability call (xem
Giới hạn của một lần thực thi).
processes.start tối đa 20 lần và agents.start tối đa 5 lần.
Vượt quá sẽ ném RateLimitError không có details.budget.
agents.start còn được tính vào maxRunsPerDay của identity policy, và dịch vụ AI
Agent có thể áp quota riêng; cả hai đều ném RateLimitError. Một project còn được
khởi chạy tối đa 1.000 Process trong một ngày UTC. Lần start bị dịch vụ Process hoặc
AI Agent từ chối không bị tính.
start
ném CogoverApiError với code: "MAX_HOP_EXCEEDED".
agents.start ném CogoverApiError với
code: "AGENT_DEPTH_EXCEEDED".
"read" và phiên phát triển local chỉ đọc được gọi get nhưng không được
gọi start: start ném PermissionDeniedError.
deliverTo,
trong lượt chạy và trong một ngày (xem
Gửi tin nhắn chat cho một nhân sự).
| Lỗi | code |
Khi nào |
|---|---|---|
ValidationError |
VALIDATION_ERROR |
Tham số không hợp lệ; job onComplete hoặc onResult không được version đang active khai báo; idempotencyKey đã dùng cho Process hoặc agent khác; hoặc dịch vụ Process hay AI Agent từ chối lần start, ví dụ biến input không tồn tại (details.upstreamCode cho biết lý do). |
NotFoundError |
NOT_FOUND |
Process không tồn tại hoặc không active, agent không tồn tại, hoặc get chỉ định lượt chạy mà project này không khởi chạy. |
PermissionDeniedError |
PERMISSION_DENIED |
details.reason là PROCESSES_NOT_ALLOWED, AGENTS_NOT_ALLOWED hoặc AGENT_AUTO_APPROVE_NOT_ALLOWED (identity policy), PROCESS_START_DENIED hoặc AGENT_RUN_DENIED (người dùng không được khởi chạy), hoặc TRIGGER_READ_ONLY (trigger before-change); hoặc lần thực thi chỉ đọc. |
RateLimitError |
RATE_LIMITED |
Giới hạn của một lần thực thi, maxRunsPerDay, giới hạn số Process khởi chạy mỗi ngày hoặc quota của dịch vụ AI Agent. |
RetryableError |
RETRYABLE |
Lỗi tạm thời; xem Idempotency và thử lại. |
CogoverApiError |
MAX_HOP_EXCEEDED |
Ngân sách tự động hoá đã hết. |
CogoverApiError |
IDEMPOTENCY_CONFLICT |
Một danh tính khác của project đã dùng idempotencyKey này. |
CogoverApiError |
AGENT_DEPTH_EXCEEDED |
Các AI Agent sẽ gọi lẫn nhau sâu quá 3 cấp. |
CogoverApiError |
INSUFFICIENT_CREDITS |
Workspace đã hết credit AI. |
CogoverApiError |
AI_SUBSCRIPTION_REQUIRED |
Workspace không có gói AI Agent trả phí hoặc gói dùng thử. |
CogoverApiError |
AI_SEAT_REQUIRED |
Người dùng chưa được gán seat AI Agent. |
CogoverApiError |
AGENT_CREDIT_LIMIT_EXCEEDED |
Agent đã dùng hết hạn mức credit AI của tháng. |
CogoverApiError |
MODEL_NOT_PRICED |
Model AI của agent chưa có giá hoặc đã bị tắt. |
CogoverApiError |
RECIPIENT_NOT_FOUND |
Người nhận của deliverTo không phải nhân sự của Workspace. |
CogoverApiError |
RECIPIENT_ACCESS_DENIED |
Người nhận của deliverTo không được dùng agent. |
CogoverApiError |
RECIPIENT_AI_SEAT_REQUIRED |
Người nhận của deliverTo chưa được gán seat AI Agent. |
CogoverApiError |
DELIVERY_UNAVAILABLE |
Tạm thời chưa kiểm tra được người nhận của deliverTo; hãy thử lại sau. |
CogoverApiError |
NOT_SUPPORTED |
onComplete hoặc onResult trong phiên phát triển local. |
CogoverApiError |
PROCESSES_DISABLED, AGENTS_DISABLED |
Tính năng không khả dụng trong môi trường này. |
Năm mã tính phí credit AI (từ INSUFFICIENT_CREDITS tới MODEL_NOT_PRICED) chỉ do
agents.start ném, khi dịch vụ AI Agent từ chối lượt chạy: không có lượt chạy nào được
tạo, details.upstreamCode giữ cùng mã và details.writesMayHaveCompleted là false.
Hãy báo người dùng việc cần làm (nạp thêm credit, đăng ký gói, gán seat, nâng hạn mức của
agent hoặc chọn model khác) thay vì thử lại ngay. Lượt chạy đã bắt đầu mà bị dừng vì cùng
lý do sẽ kết thúc với error.code là mã đó.
Bốn mã về người nhận (từ RECIPIENT_NOT_FOUND tới DELIVERY_UNAVAILABLE) chỉ do
agents.start có deliverTo ném: không có lượt chạy nào được tạo, không có gì được gửi,
và details.upstreamCode giữ cùng mã. Các mã này nói về người nhận, không bao giờ về
người dùng của lần thực thi; lỗi của chính người dùng đó là AI_SEAT_REQUIRED và
PermissionDeniedError với AGENT_RUN_DENIED. DELIVERY_UNAVAILABLE là lỗi tạm thời, nên thử lại sau; ba mã còn lại
cần thay đổi trong Workspace trước. Khi cùng vấn đề đó chỉ xuất hiện lúc lượt chạy đang
gửi tin, lượt chạy vẫn kết thúc bình thường và delivery.errorCode giữ mã đó.
Khi code chạy local bằng Cogover Dev CLI, start tạo lượt chạy Process và lượt chạy
agent thật, dưới danh tính người dùng của Project key, và phiên chỉ đọc sẽ từ chối
lời gọi này. Lượt chạy có deliverTo gửi tin nhắn chat thật cho người nhận, đúng như
version đã publish. onComplete và onResult bị từ chối bằng CogoverApiError
code: "NOT_SUPPORTED", vì job của chúng chỉ chạy trong version đã publish: hãy thử
lần start mà không có hai tuỳ chọn này và đọc kết quả bằng get, rồi publish project
để thử job.

blog.blogs_related
Bắt đầu đổi mới phương thức vận hành và tự chủ hệ thống quản trị công việc của bạn
CÔNG TY CỔ PHẦN STRINGEE
Văn phòng