Chuyển tới nội dung chính

API REST của svc-workflow

Tệp sinh tự động bằng make api-docs từ openapi/svc-workflow.json, không sửa tay. Lấy token và gọi API: README.

Hasura Actions của Văn phòng điện tử: API nội bộ, chỉ Hasura gọi, không qua cổng APISIX; ứng dụng gọi các Action này bằng GraphQL. Riêng /api/workflow/{app}/… (quy trình của ứng dụng cắm bằng manifest) đi qua cổng, cần token của client app-<tên> (docs/api/README.md).

OpenAPI 3.1.0, 10 thao tác:

Thao tácTóm tắt
POST /ot/notify/{tenant}Nhận thông báo của subscription NGSI-LD: cảm biến vượt ngưỡng → dự thảo báo cáo sự cố (F3.10)
POST /actions/{name}Chạy một Hasura Action: receiveIncoming, registerIncoming, submitOutgoing, myTasks, completeTask, otSensorMap, documentProcess
GET /api/workflow/{app}/forms/{form_key}JSON Schema của một form, đúng tệp manifest khai
POST /api/workflow/{app}/processes/{process_key}Bắt đầu quy trình với dữ liệu form bắt đầu
GET /api/workflow/{app}/processesĐơn người này đã gửi qua ứng dụng, mới nhất trước
GET /api/workflow/{app}/tasksViệc của ứng dụng giao cho người này hoặc nhóm của người này, cũ nhất trước
POST /api/workflow/{app}/tasks/{task_id}Hoàn thành một việc với dữ liệu form của việc
POST /actions/channels/{name}Kênh thông báo của chính người gọi (SMS, Zalo): myChannels, setMyChannel
POST /ops/alertsNhận cảnh báo của Alertmanager → thông báo ops.alert cho quản trị đơn vị (F3.13)
POST /actions/tu-dong/{name}Robot của flow tự động hóa báo người trong đơn vị theo vai trò: notifyFromFlow (#366)

POST /ot/notify/{tenant}​

Nhận thông báo của subscription NGSI-LD: cảm biến vượt ngưỡng → dự thảo báo cáo sự cố (F3.10)

Chỉ context broker gọi, kèm header X-Moc-OT-Token của đơn vị (broker nhận token khi svc-workflow tạo subscription). Thân là Notification NGSI-LD (format normalized).

Tham số:

TênỞBắt buộcKiểuMô tả
tenantđường dẫn✓string

Trả về:

MãNghĩaNội dung
204Thành công
401Thiếu hoặc sai token của đơn vị
404Chưa cấu hình MOC_NGSI_URL
503Chưa ghi được CSDL, broker sẽ báo lỗi gửi
422Dữ liệu gửi lên sai kiểu, thiếu trườngapplication/json HTTPValidationError

POST /actions/{name}​

Chạy một Hasura Action: receiveIncoming, registerIncoming, submitOutgoing, myTasks, completeTask, otSensorMap, documentProcess

Tham số:

TênỞBắt buộcKiểuMô tả
nameđường dẫn✓string
X-Moc-Action-Secretheader✓stringBí mật chung giữa Hasura và svc-workflow (MOC_ACTION_SECRET)

Thân yêu cầu application/json:

TrườngKiểuBắt buộcMô tả
actionobject✓
inputobject✓Đối số của Action, khai trong db/metadata/actions.graphql
session_variablesobject (giá trị string)✓Biến phiên Hasura lấy từ JWT đã kiểm: x-hasura-role, x-hasura-user-id, x-hasura-tenant-id, x-hasura-department-id

Trả về:

MãNghĩaNội dung
200Kết quả của Action, đúng kiểu trả về khai trong db/metadata/actions.graphqlapplication/json
422Dữ liệu gửi lên sai kiểu, thiếu trườngapplication/json HTTPValidationError
400Sai định dạng Action; dữ liệu văn bản đến, kết quả hoặc dữ liệu của việc không hợp lệapplication/json object
401Thiếu hoặc sai X-Moc-Action-Secret: không phải Hasura gọiapplication/json object
403Vai trò không được dùng Action này, hoặc việc không giao cho người gọiapplication/json object
404Không có văn bản hoặc việcapplication/json object
409Văn bản đến trùng văn bản đã tiếp nhận, văn bản sai trạng thái, việc vừa có người khác nhận, hoặc CSDL từ chốiapplication/json object
500Lỗi không mong đợi; câu trả về có mã yêu cầu để tra nhật kýapplication/json object
503Chưa gọi được Flowable hoặc CSDL, thử lại sauapplication/json object

GET /api/workflow/{app}/forms/{form_key}​

JSON Schema của một form, đúng tệp manifest khai

Tham số:

TênỞBắt buộcKiểuMô tả
appđường dẫn✓string
form_keyđường dẫn✓string

Trả về:

MãNghĩaNội dung
200Thành côngapplication/json object
401Thiếu hoặc sai token
403Token không phải của client app-<tên>, hoặc tài khoản chưa gán đơn vị
404Ứng dụng chưa cài, đã gỡ hoặc không có form này
503Chưa gọi được Flowable hoặc Keycloak, thử lại sau
422Dữ liệu gửi lên sai kiểu, thiếu trườngapplication/json HTTPValidationError

POST /api/workflow/{app}/processes/{process_key}​

Bắt đầu quy trình với dữ liệu form bắt đầu

Tham số:

TênỞBắt buộcKiểuMô tả
appđường dẫn✓string
process_keyđường dẫn✓string

Thân yêu cầu application/json:

TrườngKiểuBắt buộcMô tả
dataobject✓Dữ liệu form: tên trường là tên biến của quy trình

Trả về:

MãNghĩaNội dung
201Thành côngapplication/json object (giá trị string)
401Thiếu hoặc sai token
403Token không phải của client app-<tên>, hoặc tài khoản chưa gán đơn vị
404Ứng dụng chưa cài, đã gỡ hoặc không có quy trình này
503Chưa gọi được Flowable hoặc Keycloak, thử lại sau
422Dữ liệu chưa đúng form: {"errors": {trường: mã}} (schemas/README.md, x-moc-range)application/json object
413Thân yêu cầu lớn quá 64 KB

GET /api/workflow/{app}/processes​

Đơn người này đã gửi qua ứng dụng, mới nhất trước

Tham số:

TênỞBắt buộcKiểuMô tả
appđường dẫn✓string

Trả về:

MãNghĩaNội dung
200Thành côngapplication/json object[]
401Thiếu hoặc sai token
403Token không phải của client app-<tên>, hoặc tài khoản chưa gán đơn vị
404Ứng dụng chưa cài hoặc đã gỡ
503Chưa gọi được Flowable hoặc Keycloak, thử lại sau
422Dữ liệu gửi lên sai kiểu, thiếu trườngapplication/json HTTPValidationError

GET /api/workflow/{app}/tasks​

Việc của ứng dụng giao cho người này hoặc nhóm của người này, cũ nhất trước

Tham số:

TênỞBắt buộcKiểuMô tả
appđường dẫn✓string

Trả về:

MãNghĩaNội dung
200Thành côngapplication/json object[]
401Thiếu hoặc sai token
403Token không phải của client app-<tên>, hoặc tài khoản chưa gán đơn vị
404Ứng dụng chưa cài hoặc đã gỡ
503Chưa gọi được Flowable hoặc Keycloak, thử lại sau
422Dữ liệu gửi lên sai kiểu, thiếu trườngapplication/json HTTPValidationError

POST /api/workflow/{app}/tasks/{task_id}​

Hoàn thành một việc với dữ liệu form của việc

Tham số:

TênỞBắt buộcKiểuMô tả
appđường dẫn✓string
task_idđường dẫn✓string

Thân yêu cầu application/json:

TrườngKiểuBắt buộcMô tả
dataobject✓Dữ liệu form: tên trường là tên biến của quy trình

Trả về:

MãNghĩaNội dung
204Thành công
401Thiếu hoặc sai token
403Token không phải của client app-<tên>, hoặc tài khoản chưa gán đơn vị
404Ứng dụng đã gỡ; việc không còn hoặc không thuộc người này
503Chưa gọi được Flowable hoặc Keycloak, thử lại sau
409Việc vừa có người khác nhận
422Dữ liệu chưa đúng form: {"errors": {trường: mã}} (schemas/README.md, x-moc-range)application/json object
413Thân yêu cầu lớn quá 64 KB

POST /actions/channels/{name}​

Kênh thông báo của chính người gọi (SMS, Zalo): myChannels, setMyChannel

Tham số:

TênỞBắt buộcKiểuMô tả
nameđường dẫn✓string
X-Moc-Action-Secretheader✓stringBí mật chung giữa Hasura và svc-workflow (MOC_ACTION_SECRET)

Thân yêu cầu application/json:

TrườngKiểuBắt buộcMô tả
actionobject✓
inputobject✓Đối số của Action, khai trong db/metadata/actions.graphql
session_variablesobject (giá trị string)✓Biến phiên Hasura lấy từ JWT đã kiểm: x-hasura-role, x-hasura-user-id, x-hasura-tenant-id, x-hasura-department-id

Trả về:

MãNghĩaNội dung
200Danh sách MyChannel: mỗi kênh cá nhân bản cài đã cấu hình một dòng (db/metadata/actions.graphql)application/json
422Dữ liệu gửi lên sai kiểu, thiếu trườngapplication/json HTTPValidationError
400Sai định dạng Action, hoặc kênh chưa được cấu hình trên bản càiapplication/json object
401Thiếu hoặc sai X-Moc-Action-Secret: không phải Hasura gọiapplication/json object
403Vai trò không được dùng Action nàyapplication/json object
409Tài khoản chưa có trong danh bạ của đơn vị, hoặc chưa có số điện thoại để bật SMSapplication/json object
500Lỗi không mong đợi; câu trả về có mã yêu cầu để tra nhật kýapplication/json object
503Chưa gọi được CSDL, thử lại sauapplication/json object

POST /ops/alerts​

Nhận cảnh báo của Alertmanager → thông báo ops.alert cho quản trị đơn vị (F3.13)

Chỉ Alertmanager gọi (receiver webhook trong platform/monitoring/alertmanager.yml), kèm Authorization: Bearer MOC_ALERT_TOKEN. Thân là webhook phiên bản 4 của Alertmanager; mỗi cảnh báo firing/resolved thành một thông báo cho mọi người dùng vai trò tenant_admin, gửi lại không sinh thông báo thứ hai.

Trả về:

MãNghĩaNội dung
204Thành công
400Thân không phải webhook của Alertmanager
401Thiếu hoặc sai token
404Chưa đặt MOC_ALERT_TOKEN
503Chưa ghi được CSDL, Alertmanager sẽ gửi lại

POST /actions/tu-dong/{name}​

Robot của flow tự động hóa báo người trong đơn vị theo vai trò: notifyFromFlow (#366)

Tham số:

TênỞBắt buộcKiểuMô tả
nameđường dẫn✓string
X-Moc-Action-Secretheader✓stringBí mật chung giữa Hasura và svc-workflow (MOC_ACTION_SECRET)

Thân yêu cầu application/json:

TrườngKiểuBắt buộcMô tả
actionobject✓
inputobject✓Đối số của Action, khai trong db/metadata/actions.graphql
session_variablesobject (giá trị string)✓Biến phiên Hasura lấy từ JWT đã kiểm: x-hasura-role, x-hasura-user-id, x-hasura-tenant-id, x-hasura-department-id

Trả về:

MãNghĩaNội dung
200NotifyFromFlowOutput {sent}: số người vừa nhận thông báo; người đã có thông báo cùng khóa không tính (db/metadata/actions.graphql)application/json
422Gửi kèm văn bản cho vai trò có thể không xem được nó: chỉ director, clerk (extensions.fields.roles = document_readers_only)application/json object
400Sai định dạng Action, hoặc đối số sai: extensions.fields chỉ trường sai và mã lỗiapplication/json object
401Thiếu hoặc sai X-Moc-Action-Secret: không phải Hasura gọiapplication/json object
403Không phải robot (vai trò tu_dong), hoặc văn bản hạn chếapplication/json object
404Không có văn bản này trong đơn vị của robotapplication/json object
500Lỗi không mong đợi; câu trả về có mã yêu cầu để tra nhật kýapplication/json object
503Chưa gọi được CSDL, thử lại sauapplication/json object

Kiểu dữ liệu​

Các kiểu mà thân yêu cầu và nội dung trả về ở trên nhắc tới.

HTTPValidationError​

TrườngKiểuBắt buộcMô tả
detailValidationError[]

ValidationError​

TrườngKiểuBắt buộcMô tả
locstring hoặc integer[]✓
msgstring✓
typestring✓
inputany
ctxobject