STANAG 4817 / AEP-105 · 0.3.0-rc4 (SD-3 RC4)
Messages

Chat

Free-text and structured operator communication.

Broadcast MessageTypeEnum_CHAT

Free-text and structured operator communication.

Directionany ↔ any
CadenceOn demand.
DeliveryBroadcast — telemetry plane (QoS 0)
Schemacatl/hibw/messages/chat/Chat.json
Worked examples1

Purpose

Operator-level text communication alongside the machine protocol. The model is intentionally extensible; the current draft ships no official JSON example, so a maintained supplementary example demonstrates the shape.

When to send it

  • To carry human-readable messages between nodes / operators.
  • For out-of-band coordination that isn't a task or world-model change.

Where it fits

Loading diagram…

Message header

Every CATL message carries this envelope header.

FieldTypeMultiplicityDescription
message_typeMessageTypeEnum[1..1]An enumeration.
sourceGUID[1..1]Source that send this message. Often same as source of information, but different when relaying.
versionstring[1..1]Version of the schema used to create and validate this message. Has to follow major.minor.patch notation. For study draft 3 it should be 0.3.0.
time_sentTime[1..1]

Body — ChatBody

Inherits from catl::hibw::core::chat_model::ChatModel.

FieldTypeMultiplicityDescription
source_of_information (inherited)GUID[0..1]Holds source of information. Its a identifier of a node that provided that information. It can be a node that created a region, task. It can be a node that detected contact or is maintaining track. For self reports it should be same as identifier.
external_identifiers (inherited)ExternalSystemIdentifier [][0..*]Holds identifiers of this entity in other systems.
identifier (inherited)GUID[1..1]Unique identifier for this entity.
description (inherited)EntityDescription[0..1]Description of this entity. Contains APP6 symbol definition and human readable description.
extra (inherited)Any[0..1]Placeholder for experimentation.
timestamp (inherited)Time[1..1]Time in which this entity was last updated.
time_of_initiation (inherited)Time[0..1]Time when this entity was created or spotted.
time_of_validity (inherited)Time[0..1]
reference (inherited)GUID[0..1]Reference to previous chat message, to form threads and replay to stuff.
text (inherited)Description[1..1]
author (inherited)Name[1..1]
destination (inherited)GUID[0..1]Destination identifier. Optional - when not set its to all.
binding (inherited)BindingInformationType[0..1]
message_context (inherited)Reference [][0..*]

Full ChatBody reference →

Key fields

  • (extensible) — ChatBody delegates to the ChatModel; structure is defined by the chat model subtypes rather than fixed fields.

Worked examples

Chat Synthesized (supplementary)

✅ validates against catl/hibw/messages/chat/Chat.json. Routes to 4817/exercise-alpha/v0.3.0/src/a895f8f5-46b0-5603-bdf0-b270a2867c09/chat (QoS 0).

catl_chat_synthesized.json
{
  "header": {
    "message_type": "MessageTypeEnum_CHAT",
    "source": "a895f8f5-46b0-5603-bdf0-b270a2867c09",
    "version": "0.3.0",
    "time_sent": "2025-03-18T12:05:00+00:00"
  },
  "body": {
    "identifier": "73efad3c-8336-597c-a3f3-f6ae5b3b3f8e",
    "timestamp": "2025-03-18T12:05:00+00:00",
    "author": "C2-WATCH",
    "text": "All callsigns, RTB now — weather closing in."
  }
}

Integrate it

The two calls every integrator needs — validate the message, then resolve its MQTT route:

# 1 · fetch a worked Chat example
curl -s https://4817.r2d2.office.ilab.zone/examples/catl_chat_synthesized.json | jq '.message' > msg.json

# 2 · validate it against the 0.3.0 schema
curl -s https://4817.r2d2.office.ilab.zone/validate -H 'content-type: application/json' \
  -d "{\"message\": $(cat msg.json)}" | jq '{valid, schema_ref, errors}'

# 3 · resolve where it publishes on MQTT
curl -s "https://4817.r2d2.office.ilab.zone/route" -H 'content-type: application/json' \
  -d "{\"message\": $(cat msg.json)}" | jq

Try them interactively in the Integration API reference.

On this page