Yerinde hizmet API

Yerinde hizmet modülünün tüm işlemleri (5) ve veri modelleri (1): adresler, izinler, girdiler, ön koşullar, olaylar ve örnekler.

Müşterinin adresinde hizmet — kim gidiyor, ne zaman varıyor, imza ve fotoğraf.

Modül kodu field_service · 5 işlem · 1 veri modeli · 7 olay. Bir anahtar ya da token, arkasındaki kişinin bu modülde yapabildiğinden fazlasını asla yapamaz; satır düzeyindeki güvenlik uygulamadakiyle birebir aynıdır. Yetki kapsamları: field_service (hepsi), field_service:read (yalnız okuma) ya da field_service:<yetenek>.

Kaynaklar

KaynakTabloListeleme ve okumaPOSTPATCHDELETE
field_visitsfield_visit/api/v1/field_visits

Listeler limit (en çok 200), cursor, order (ör. -created_at), fields ve q alır; diğer her sorgu parametresi bir sütun süzgecidir: ?status=paid, ?total[gte]=100, ?id[in]=a,b, ?x=null.

İşlemler

İşlemGereken izinNe yapar
field_service.advancefield_service:writeZiyareti güncelle
field_service.cancel_visitfield_service:writeZiyareti iptal et
field_service.completefield_service:writeZiyareti bitir
field_service.dispatchfield_service:writeZiyareti görevlendir
field_service.reassignfield_service:writeBaşka birini gönder

field_service.advance

Ziyareti güncelle — Yolda, vardı, işe başladı — bu sırayla.

Gereken izin field_service:write · veriyi değiştirir

POSThttps://app.getera.io/api/v1/field_visits/{id}/actions/advance
API anahtarı ya da OAuth token · field_service:write
  • Asıl adres: POST /api/v1/actions/field_service.advance

Girdi

AlanTürZorunluAçıklama
visitIduuidevetDoldurulduğu yer: adresteki {id} · Ziyaret · kimliği: field_visit
tostring (enum)evetŞimdi · İzin verilen değerler: en_route, arrived, in_progress

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
visit_not_foundZiyaret bulunmalı.
visit_closedZiyaret hâlâ açık olmalı.
wrong_orderBir ziyaret yalnızca ileri gider.

Yayımladığı olaylar: field_service.en_route, field_service.arrived, field_service.started

Neye yazar: field_visit (update) — Moves the status and stamps the time

curl -X POST https://app.getera.io/api/v1/field_visits/FIELD_VISIT_ID/actions/advance \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"to":"en_route"}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "field_service.en_route",
    "field_service.arrived",
    "field_service.started"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.fieldVisits.advance("FIELD_VISIT_ID", {
  to: "en_route"
})
era field_visits advance FIELD_VISIT_ID \
  --to "en_route"
tools/call
{
  "name": "era__field_service__advance",
  "arguments": {
    "visitId": "FIELD_VISIT_ID",
    "to": "en_route"
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde field_service:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 visit_not_found, visit_closed, wrong_order · 429 çok sık istek

field_service.cancel_visit

Ziyareti iptal et — Ziyareti rotadan çıkarır. Randevunun kendisi iptal edilmez.

Gereken izin field_service:write · siler ya da geri alınamaz · Era çalıştırırken bir kişiye onaylatır

POSThttps://app.getera.io/api/v1/field_visits/{id}/actions/cancel_visit
API anahtarı ya da OAuth token · field_service:write
  • Asıl adres: POST /api/v1/actions/field_service.cancel_visit

Girdi

AlanTürZorunluAçıklama
visitIduuidevetDoldurulduğu yer: adresteki {id} · Ziyaret · kimliği: field_visit
notestringNeden · en çok 1000

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
visit_not_foundZiyaret bulunmalı.
visit_closedZiyaret hâlâ açık olmalı.

Yayımladığı olaylar: field_service.visit_cancelled

Neye yazar: field_visit (update) — Moves it to cancelled

curl -X POST https://app.getera.io/api/v1/field_visits/FIELD_VISIT_ID/actions/cancel_visit \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"note":"Why"}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "field_service.visit_cancelled"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.fieldVisits.cancelVisit("FIELD_VISIT_ID", {
  note: "Why"
})
era field_visits cancel_visit FIELD_VISIT_ID \
  --note "Why"
tools/call
{
  "name": "era__field_service__cancel_visit",
  "arguments": {
    "visitId": "FIELD_VISIT_ID",
    "note": "Why"
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde field_service:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 visit_not_found, visit_closed · 429 çok sık istek

field_service.complete

Ziyareti bitir — Ziyareti notlar, müşterinin imzası ve fotoğraflarla kapatır.

Gereken izin field_service:write · veriyi değiştirir

POSThttps://app.getera.io/api/v1/field_visits/{id}/actions/complete
API anahtarı ya da OAuth token · field_service:write
  • Asıl adres: POST /api/v1/actions/field_service.complete

Girdi

AlanTürZorunluAçıklama
visitIduuidevetDoldurulduğu yer: adresteki {id} · Ziyaret · kimliği: field_visit
notesstringNe yapıldı · en çok 4000
signatureFileIduuidİmza · kimliği: file
photoFileIdsobject / arrayFotoğraflar · [fileId, …]

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
visit_not_foundZiyaret bulunmalı.
visit_closedZiyaret hâlâ açık olmalı.
not_startedBirinin varmış olması gerekir.
signature_requiredİşletme istiyorsa bir imza.
file_not_foundHer dosya bulunmalı.

Yayımladığı olaylar: field_service.completed

Neye yazar: field_visit (update) — Completes it with its proof of work

curl -X POST https://app.getera.io/api/v1/field_visits/FIELD_VISIT_ID/actions/complete \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"notes":"What was done"}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "field_service.completed"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.fieldVisits.complete("FIELD_VISIT_ID", {
  notes: "What was done"
})
era field_visits complete FIELD_VISIT_ID \
  --notes "What was done"
tools/call
{
  "name": "era__field_service__complete",
  "arguments": {
    "visitId": "FIELD_VISIT_ID",
    "notes": "What was done"
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde field_service:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 visit_not_found, visit_closed, not_started, signature_required, file_not_found · 429 çok sık istek

field_service.dispatch

Ziyareti görevlendir — Yerinde hizmet randevusunu, hizmet bölgesindeki bir adreste birinin rotasına koyar.

Gereken izin field_service:write · dışarıya ulaşır (gönderir, yayımlar ya da ücret alır)

POSThttps://app.getera.io/api/v1/field_visits/actions/dispatch
API anahtarı ya da OAuth token · field_service:write
  • Asıl adres: POST /api/v1/actions/field_service.dispatch

Girdi

AlanTürZorunluAçıklama
appointmentIduuidevetRandevu · kimliği: appointment
memberUserIduuidKim gider
addressIduuidAdres · kimliği: address

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
appointment_not_foundRandevu bulunmalı.
appointment_closedRandevu beklemede veya onaylı olmalı.
already_dispatchedBir randevunun tek ziyareti olur.
address_not_foundSeçilen adres misafirin adres defterinde olmalı.
not_home_visitRandevunun bir adresi olmalı.
outside_service_areaAdres hizmet bölgesi içinde olmalı.
provider_cannot_performGiden kişi hizmetlerden birini veriyor olmalı.

Yayımladığı olaylar: field_service.dispatched

Neye yazar: field_visit (insert) — Opens the visit

curl -X POST https://app.getera.io/api/v1/field_visits/actions/dispatch \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"appointmentId":"APPOINTMENT_ID"}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "field_service.dispatched"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.fieldVisits.dispatch({
  appointmentId: "APPOINTMENT_ID"
})
era field_visits dispatch \
  --appointment-id "APPOINTMENT_ID"
tools/call
{
  "name": "era__field_service__dispatch",
  "arguments": {
    "appointmentId": "APPOINTMENT_ID"
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde field_service:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 appointment_not_found, appointment_closed, already_dispatched, address_not_found, not_home_visit, outside_service_area, provider_cannot_perform · 429 çok sık istek

field_service.reassign

Başka birini gönder — Açık bir ziyareti hizmeti veren başka bir üyeye verir.

Gereken izin field_service:write · veriyi değiştirir

POSThttps://app.getera.io/api/v1/field_visits/{id}/actions/reassign
API anahtarı ya da OAuth token · field_service:write
  • Asıl adres: POST /api/v1/actions/field_service.reassign

Girdi

AlanTürZorunluAçıklama
visitIduuidevetDoldurulduğu yer: adresteki {id} · Ziyaret · kimliği: field_visit
memberUserIduuidevetKim gider

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
visit_not_foundZiyaret bulunmalı.
visit_closedZiyaret hâlâ açık olmalı.
provider_cannot_performGiden kişi hizmetlerden birini veriyor olmalı.

Yayımladığı olaylar: field_service.reassigned

Neye yazar: field_visit (update) — Changes who goes

curl -X POST https://app.getera.io/api/v1/field_visits/FIELD_VISIT_ID/actions/reassign \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"memberUserId":"MEMBER_USER_ID"}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "field_service.reassigned"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.fieldVisits.reassign("FIELD_VISIT_ID", {
  memberUserId: "MEMBER_USER_ID"
})
era field_visits reassign FIELD_VISIT_ID \
  --member-user-id "MEMBER_USER_ID"
tools/call
{
  "name": "era__field_service__reassign",
  "arguments": {
    "visitId": "FIELD_VISIT_ID",
    "memberUserId": "MEMBER_USER_ID"
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde field_service:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 visit_not_found, visit_closed, provider_cannot_perform · 429 çok sık istek

Veri modelleri

FieldVisit

Tablo field_visit · Kaynak field_visits

  • GET /api/v1/field_visits
  • GET /api/v1/field_visits/{id}
SütunTürBoş olabilirİzin verilen değerlerBağlı olduğu tablo
idstring (uuid) · uuid
organization_idstring (uuid) · uuidorganization
workspace_idstring (uuid) · uuidworkspace
appointment_idstring (uuid) · uuidappointment
member_user_idstring (uuid) · uuidevetapp_user
statusstring · textdispatched, en_route, arrived, in_progress, completed, cancelled
addressstring · text
address_idstring (uuid) · uuidevetaddress
departed_atstring (date-time) · timestamptzevet
arrived_atstring (date-time) · timestamptzevet
started_atstring (date-time) · timestamptzevet
completed_atstring (date-time) · timestamptzevet
cancelled_atstring (date-time) · timestamptzevet
cancellation_notestring · textevet
completion_notesstring · textevet
signature_file_idstring (uuid) · uuidevetfile
photo_file_idsstring[] · uuid[]
owner_user_idstring (uuid) · uuidevetapp_user
created_atstring (date-time) · timestamptz
updated_atstring (date-time) · timestamptz

Birincil anahtar: id

Tekil: appointment_id

Denetimler:

  • CHECK ((length(btrim(address)) > 0))
  • CHECK (((status = 'cancelled'::text) = (cancelled_at IS NOT NULL)))
  • CHECK (((status = 'completed'::text) = (completed_at IS NOT NULL)))

Olaylar

İş akışları ve webhook'lar bu olaylara tepki verir.

OlayNe olurTaşıdığı alanlar
field_service.arrivedAdrese varıldı.id, appointmentId, customerId, memberUserId
field_service.completedZiyaret tamamlandı.id, appointmentId, customerId
field_service.dispatchedBir ev ziyareti birinin rotasına kondu.id, appointmentId, customerId, customerName, address, memberUserId, appointmentDate, startTime
field_service.en_routeEkip yola çıktı — müşteriye bildirim için kullanılır.id, appointmentId, customerId, memberUserId
field_service.reassignedBaşka biri gidiyor.id, appointmentId, memberUserId
field_service.startedİş başladı.id, appointmentId, customerId, memberUserId
field_service.visit_cancelledBir ziyaret iptal edildi.id, appointmentId
Bu sayfa yardımcı oldu mu?