Automation Servisi Event Sözleşmeleri
Bu sayfa Automation Servisi tarafından üretilen event'lerin payload sözleşmelerini ve zorunlu alanlarını verir.
Event Haritası
| Event | Ne zaman kullanılır? | Producer | Consumer | Amaç |
|---|---|---|---|---|
automation.command.requested.v1 | Otomasyon tetiklenip komut gönderimi başlatılırken | Automation Servisi | Communication Servisi | Cihaza iletilecek komutu bildirmek |
automation.job.completed.v1 | Komut cihaz tarafından onaylandığında | Communication Servisi | Automation Servisi | Başarılı yürütme sonucunu geri bildirmek |
automation.job.failed.v1 | Komut iletimi başarısız olduğunda | Communication / Automation Servisi | Observer/Alarm | Hata görünürlüğü |
Ortak Envelope
{
"event": "<name>.v1",
"meta": {
"schema_version": 1,
"trace_id": "auto-9f3f",
"producer_service": "automation-service",
"produced_at": "2026-03-12T21:15:02.020Z",
"process_ms": 8
},
"context": {
"device_id": "400000011D081B70"
},
"data": {},
"error": null
}
automation.command.requested.v1
Açıklama
Automation Servisi, bir otomasyon kaydını tetiklediğinde bu event'i üretir. Event içinde yalnızca device_command_id referansı ve yürütme bağlamı taşınır. Communication Servisi bu event'i consume ederek device_commands kaydını çözer ve komutu cihaza iletir.
Örnek Payload
{
"event": "automation.command.requested.v1",
"meta": {
"schema_version": 1,
"trace_id": "auto-9f3f",
"producer_service": "automation-service",
"produced_at": "2026-03-12T21:15:02.020Z",
"process_ms": 8
},
"context": {
"device_id": "400000011D081B70"
},
"data": {
"automation_id": 1,
"run_id": 42,
"device_command_id": 2,
"trigger_type": "date",
"scheduled_at": "2026-03-12T21:15:00Z"
},
"error": null
}
Alan Tablosu
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
event | string | Evet | Sabit değer: automation.command.requested.v1 |
meta.schema_version | integer | Evet | Event şema sürümü |
meta.trace_id | string | Evet | Dağıtık izleme kimliği |
meta.producer_service | string | Evet | Sabit değer: automation-service |
meta.produced_at | datetime | Evet | Event üretim zamanı |
meta.process_ms | integer | Evet | İşlem süresi (ms) |
context.device_id | string | Evet | Hedef cihaz kimliği |
data.automation_id | integer | Evet | automations.id |
data.run_id | integer | Evet | automation_runs.id |
data.device_command_id | integer | Evet | device_commands.id |
data.trigger_type | string | Evet | date | interval |
data.scheduled_at | datetime | Evet | Otomasyonun tetiklendiği hedef zaman |
error | null | Evet | İstek event'inde daima null |
automation.job.completed.v1
Açıklama
Communication Servisi komutun cihaz tarafından başarıyla alındığını bildirmek için bu event'i üretir. Automation Servisi bu event'i consume ederek ilgili automation_runs kaydını günceller ve automations tablosundaki son çalışma bilgilerini yazar.
Örnek Payload
{
"event": "automation.job.completed.v1",
"meta": {
"schema_version": 1,
"trace_id": "auto-9f3f",
"producer_service": "communication-service",
"produced_at": "2026-03-12T21:15:05.340Z",
"process_ms": 3312
},
"context": {
"device_id": "400000011D081B70"
},
"data": {
"automation_id": 1,
"run_id": 42,
"device_command_id": 2,
"result_code": 200,
"result_message": "Komut başarıyla cihaza iletildi",
"acked_at": "2026-03-12T21:15:05Z"
},
"error": null
}
Alan Tablosu
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
event | string | Evet | Sabit değer: automation.job.completed.v1 |
meta.producer_service | string | Evet | Sabit değer: communication-service |
context.device_id | string | Evet | Hedef cihaz kimliği |
data.automation_id | integer | Evet | automations.id |
data.run_id | integer | Evet | automation_runs.id |
data.device_command_id | integer | Evet | Çalıştırılan device_commands.id |
data.result_code | integer | Evet | HTTP-benzeri sonuç kodu |
data.result_message | string | Hayır | Başarı mesajı |
data.acked_at | datetime | Evet | Cihaz onay zamanı |
error | null | Evet | Başarı event'inde daima null |
automation.job.failed.v1
Açıklama
Komut iletimi başarısız olduğunda veya cihaz onayı alınamadığında üretilir.
Örnek Payload
{
"event": "automation.job.failed.v1",
"meta": {
"schema_version": 1,
"trace_id": "auto-9f3f",
"producer_service": "communication-service",
"produced_at": "2026-03-12T21:16:02.120Z",
"process_ms": 60003
},
"context": {
"device_id": "400000011D081B70"
},
"data": {
"automation_id": 1,
"run_id": 42,
"device_command_id": 2
},
"error": {
"failed_stage": "dispatch",
"error_code": "AUTOMATION_DEVICE_TIMEOUT",
"error_message": "Cihazdan zamanında yanıt alınamadı",
"retryable": false,
"failed_at": "2026-03-12T21:16:02Z"
}
}
Alan Tablosu
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
event | string | Evet | Sabit değer: automation.job.failed.v1 |
meta.producer_service | string | Evet | communication-service veya automation-service |
context.device_id | string | Evet | Hedef cihaz kimliği |
data.automation_id | integer | Evet | automations.id |
data.run_id | integer | Evet | automation_runs.id |
data.device_command_id | integer | Evet | Başarısız çağrının device_commands.id değeri |
error.failed_stage | string | Evet | persist | command_lookup | dispatch | ack_timeout |
error.error_code | string | Evet | Makine okunur hata kodu |
error.error_message | string | Evet | Açıklama |
error.retryable | boolean | Evet | Yeniden denenebilirlik (automation_runs kararı verir) |
error.failed_at | datetime | Evet | Hata zamanı |
Hata Kodları
| Hata Kodu | Açıklama |
|---|---|
AUTOMATION_DB_TRANSIENT | Geçici DB bağlantı hatası |
AUTOMATION_KAFKA_TRANSIENT | Geçici Kafka publish hatası |
AUTOMATION_DEVICE_TIMEOUT | Communication tarafında çözülmüş komut için yanıt zaman aşımı oluştu |
AUTOMATION_DEVICE_UNREACHABLE | Communication katmanı cihaza ulaşamadı |
AUTOMATION_COMMAND_DISABLED | Communication tarafında çözülen device_commands kaydı pasif bulundu |
AUTOMATION_JOB_CANCELLED | Yürütme sırasında otomasyon iptal edildi |
AUTOMATION_COMMAND_LOOKUP_FAILED | Communication tarafı device_command_id referansını çözümleyemedi |