ktoxktox docs
ktx_dispatch

Calls

The limits on a call, the notifications, and calling from another resource.

Config.Dispatch = {
    callCooldownSeconds = 300,
    resolvedVisibleSeconds = 180,
    notifyOnNewCall = true,
    notifyCaller = true,
}
callCooldownSecondshow long a player waits between two calls of their own
resolvedVisibleSecondshow long a resolved call stays in the list
notifyOnNewCallnotify the players of that service who do not have the interface open
notifyCallertell the caller when their call is taken and when it is done

All of them are enforced on the server. The interface only displays what it is told, so a cooldown is not something a client can talk its way out of.

What the client may send

A call carries the service, the priority and the description. The service key and the priority key are looked up in the config. The name, the coordinates, the time and who is calling come from the server, never from the client.

Resolving

The resolve button appears on the call the responder owns. Pressing it starts a five second countdown on the client, so an undo is a cancelled timer and the server never hears about it. The caller is told once, when the call is actually closed.

From another resource

All five are registered on the server, so the call has to come from server side code. A client script cannot reach them.

exports.ktx_dispatch:sendEmergencyCall(sender, serviceKey, priorityKey, description, distress, coords)
exports.ktx_dispatch:closeCall(callId)
exports.ktx_dispatch:setCallStatus(callId, state)
exports.ktx_dispatch:playerRevived(playerId)
exports.ktx_dispatch:getHistory(serviceKey, limit)

These are exports and not net events on purpose. As a net event, playerRevived would let any client close the calls of any downed player.

closeCall skips the owner check, so a medical script can close a call that nobody ever picked up.