Era içgörüleri API
Era içgörüleri modülünün tüm işlemleri (6) ve veri modelleri (2): adresler, izinler, girdiler, ön koşullar, olaylar ve örnekler.
Era sen sormadan söyler: işinde neyin değiştiğini kaynaklarıyla, doğrulayamadıklarıyla ve bir sonraki adımla — yalnız sana.
Modül kodu insights · 6 işlem · 2 veri modeli · 0 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ı: insights (hepsi), insights:read (yalnız okuma) ya da insights:<yetenek>.
Kaynaklar
| Kaynak | Tablo | Listeleme ve okuma | POST | PATCH | DELETE |
|---|---|---|---|---|---|
insight_settings | member_insight_setting | /api/v1/insight_settings | |||
insights | member_insight | /api/v1/insights |
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
| İşlem | Gereken izin | Ne yapar |
|---|---|---|
insights.ack | insights:write | İçgörüyü işaretle |
insights.feedback | insights:write | İşe yaradı mı? |
insights.mark_delivered | insights:write | İçgörüyü iletildi say |
insights.mute | insights:write | Bu türü sustur |
insights.record | insights:write | Benim için içgörü kaydet |
insights.update_settings | insights:write | İçgörü ayarları |
insights.ack
İçgörüyü işaretle — Görüldü, yapıldı ya da kapatıldı (durum çözüldüyse süresi doldu).
Gereken izin insights:write · veriyi değiştirir
https://app.getera.io/api/v1/insights/{id}/actions/ack- Asıl adres:
POST /api/v1/actions/insights.ack
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · İçgörü · kimliği: member_insight |
status | string (enum) | Durum · İzin verilen değerler: seen, done, dismissed, expired |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
bad_status | Durum görüldü, yapıldı, kapatıldı ya da süresi doldu olmalı. |
insight_not_found | İçgörü senin olmalı. |
Neye yazar: member_insight (update) — Saves the status
curl -X POST https://app.getera.io/api/v1/insights/INSIGHT_ID/actions/ack \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"status":"seen"}'{
"ok": true,
"result": "…",
"events": []
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.insights.ack("INSIGHT_ID", {
status: "seen"
})era insights ack INSIGHT_ID \
--status "seen"{
"name": "era__insights__ack",
"arguments": {
"id": "INSIGHT_ID",
"status": "seen"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde insights:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 bad_status, insight_not_found · 429 çok sık istek
insights.feedback
İşe yaradı mı? — İşe yaradı ya da yaramadı — Era bu türü senin için yukarı ya da aşağı taşır.
Gereken izin insights:write · veriyi değiştirir
https://app.getera.io/api/v1/insights/{id}/actions/feedback- Asıl adres:
POST /api/v1/actions/insights.feedback
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · İçgörü · kimliği: member_insight |
verdict | string (enum) | evet | Karar · İzin verilen değerler: useful, not_useful |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
bad_verdict | Cevap “işe yaradı” ya da “işe yaramadı” olmalı. |
insight_not_found | İçgörü senin olmalı. |
Neye yazar: member_insight (update) — Saves your verdict; member_insight_setting (update) — Moves that kind’s rank for you
curl -X POST https://app.getera.io/api/v1/insights/INSIGHT_ID/actions/feedback \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"verdict":"useful"}'{
"ok": true,
"result": "…",
"events": []
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.insights.feedback("INSIGHT_ID", {
verdict: "useful"
})era insights feedback INSIGHT_ID \
--verdict "useful"{
"name": "era__insights__feedback",
"arguments": {
"id": "INSIGHT_ID",
"verdict": "useful"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde insights:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 bad_verdict, insight_not_found · 429 çok sık istek
insights.mark_delivered
İçgörüyü iletildi say — Bir yüzey (zil, masaüstü sohbeti, masaüstü bildirimi) içgörüyü gösterdiğini bildirir.
Gereken izin insights:write · veriyi değiştirir
https://app.getera.io/api/v1/insights/{id}/actions/mark_delivered- Asıl adres:
POST /api/v1/actions/insights.mark_delivered
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · İçgörü · kimliği: member_insight |
channel | string (enum) | evet | Kanal · İzin verilen değerler: desktop_chat, desktop_notification, bell, digest_email, digest_whatsapp |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
bad_channel | Kanal içgörülerin gittiği kanallardan biri olmalı. |
insight_not_found | İçgörü senin olmalı. |
Neye yazar: member_insight (update) — Stamps where it was shown
curl -X POST https://app.getera.io/api/v1/insights/INSIGHT_ID/actions/mark_delivered \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"channel":"desktop_chat"}'{
"ok": true,
"result": "…",
"events": []
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.insights.markDelivered("INSIGHT_ID", {
channel: "desktop_chat"
})era insights mark_delivered INSIGHT_ID \
--channel "desktop_chat"{
"name": "era__insights__mark_delivered",
"arguments": {
"id": "INSIGHT_ID",
"channel": "desktop_chat"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde insights:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 bad_channel, insight_not_found · 429 çok sık istek
insights.mute
Bu türü sustur — Bir içgörü türünü senin için durdurur ya da yeniden açar.
Gereken izin insights:write · veriyi değiştirir
https://app.getera.io/api/v1/insight_settings/actions/mute- Asıl adres:
POST /api/v1/actions/insights.mute
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
kind | string (enum) | evet | Tür · İzin verilen değerler: assigned_to_me, dependency_changed, blocker, deadline, customer_complaint, order_late, invoice_overdue, conflicting_facts, asked_of_me, today_open_questions |
muted | boolean | Sessize alındı · false resumes it |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
unknown_kind | Tür Era’nın bildiği bir tür olmalı. |
Neye yazar: member_insight_setting (update) — Switches the kind off or on for you; member_insight (update) — Dismisses what was waiting of that kind
curl -X POST https://app.getera.io/api/v1/insight_settings/actions/mute \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"kind":"assigned_to_me"}'{
"ok": true,
"result": "…",
"events": []
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.insightSettings.mute({
kind: "assigned_to_me"
})era insight_settings mute \
--kind "assigned_to_me"{
"name": "era__insights__mute",
"arguments": {
"kind": "assigned_to_me"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde insights:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 unknown_kind · 429 çok sık istek
insights.record
Benim için içgörü kaydet — Era’nın taraması seni ilgilendiren bir şeyi kaynaklarıyla, doğrulayamadıklarıyla ve bir sonraki adımla not eder.
Gereken izin insights:write · veriyi değiştirir
https://app.getera.io/api/v1/insights/actions/record- Asıl adres:
POST /api/v1/actions/insights.record
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
kind | string (enum) | evet | Tür · İzin verilen değerler: assigned_to_me, dependency_changed, blocker, deadline, customer_complaint, order_late, invoice_overdue, conflicting_facts, asked_of_me, today_open_questions |
dedupeKey | string | evet | Same-situation key · en çok 300 |
title | string | evet | Başlık · en çok 200 |
body | string | Mesaj · en çok 4000 | |
severity | string (enum) | How pressing · İzin verilen değerler: info, attention, urgent | |
score | number | Rank · en az -10 · en çok 10 | |
facts | object / array | Facts it was drawn from | |
sources | object / array | Kaynaklar · [{label, href, kind, ref}] | |
unverified | object / array | What could not be verified | |
actions | object / array | Next steps · [{kind: open|reply|create_task|ask, label, href}] | |
locale | string (enum) | Dil · İzin verilen değerler: tr, en | |
composedBy | object / array | Written by | |
deliverAfter | date-time | Hold until | |
expiresAt | date-time | Sona erme |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
unknown_kind | İçgörü Era’nın bildiği türlerden biri olmalı. |
empty_title | İçgörünün bir başlığı olmalı. |
invalid_evidence | Kaynaklar, gerçekler, çekinceler ve adımlar doğru biçimde kısa listeler olmalı. |
already_noted | Aynı durum aynı hâliyle bir kez söylenir. |
Neye yazar: member_insight (insert) — Adds the insight, for you only
curl -X POST https://app.getera.io/api/v1/insights/actions/record \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"kind":"assigned_to_me","dedupeKey":"Same-situation key","title":"Title"}'{
"ok": true,
"result": "…",
"events": []
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.insights.record({
kind: "assigned_to_me",
dedupeKey: "Same-situation key",
title: "Title"
})era insights record \
--kind "assigned_to_me" \
--dedupe-key "Same-situation key" \
--title "Title"{
"name": "era__insights__record",
"arguments": {
"kind": "assigned_to_me",
"dedupeKey": "Same-situation key",
"title": "Title"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde insights:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 unknown_kind, empty_title, invalid_evidence, already_noted · 429 çok sık istek
insights.update_settings
İçgörü ayarları — İçgörüleri aç/kapa; türleri, sessiz saatleri, kanalları ve günlük sınırı seç.
Gereken izin insights:write · veriyi değiştirir
https://app.getera.io/api/v1/insight_settings/actions/update_settings- Asıl adres:
POST /api/v1/actions/insights.update_settings
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
enabled | boolean | Açık | |
kinds | object / array | Kinds · {kind: true|false} | |
quietStart | number | Quiet from (hour) · en az 0 · en çok 23 | |
quietEnd | number | Quiet until (hour) · en az 0 · en çok 23 | |
timezone | string | Saat dilimi · en çok 64 | |
channels | object / array | Kanallar · desktop_chat · desktop_notification · bell · digest_email · digest_whatsapp | |
dailyCap | number | Günde en fazla · en az 0 · en çok 20 |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
bad_hours | Sessiz saatler bilinen bir saat diliminde tam saatler olmalı. |
bad_cap | Günlük sınır 0 ile 20 arasında olmalı. |
bad_switches | Türler ve kanallar açık/kapalı değerli bilinen adlar olmalı. |
Neye yazar: member_insight_setting (update) — Saves your insight settings
curl -X POST https://app.getera.io/api/v1/insight_settings/actions/update_settings \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"enabled":true}'{
"ok": true,
"result": "…",
"events": []
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.insightSettings.updateSettings({
enabled: true
})era insight_settings update_settings \
--enabled true{
"name": "era__insights__update_settings",
"arguments": {
"enabled": true
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde insights:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 bad_hours, bad_cap, bad_switches · 429 çok sık istek
Veri modelleri
MemberInsightSetting
Tablo member_insight_setting · Kaynak insight_settings
GET /api/v1/insight_settingsGET /api/v1/insight_settings/{id}
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
user_id | string (uuid) · uuid | app_user | ||
enabled | boolean · bool | |||
kinds | object · jsonb | |||
weights | object · jsonb | |||
quiet_start | integer · int2 | |||
quiet_end | integer · int2 | |||
timezone | string · text | |||
channels | object · jsonb | |||
daily_cap | integer · int2 | |||
watermark | string (int64) · int8 | |||
last_swept_at | string (date-time) · timestamptz | evet | ||
created_at | string (date-time) · timestamptz | |||
updated_at | string (date-time) · timestamptz |
Birincil anahtar: id
Tekil: workspace_id, user_id
Denetimler:
CHECK ((jsonb_typeof(channels) = 'object'::text))CHECK (((daily_cap >= 0) AND (daily_cap <= 20)))CHECK ((jsonb_typeof(kinds) = 'object'::text))CHECK (((quiet_end >= 0) AND (quiet_end <= 23)))CHECK (((quiet_start >= 0) AND (quiet_start <= 23)))CHECK (((length(timezone) >= 1) AND (length(timezone) <= 64)))CHECK ((jsonb_typeof(weights) = 'object'::text))
MemberInsight
Tablo member_insight · Kaynak insights
GET /api/v1/insightsGET /api/v1/insights/{id}
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
user_id | string (uuid) · uuid | app_user | ||
kind | string · text | assigned_to_me, dependency_changed, blocker, deadline, customer_complaint, order_late, invoice_overdue, conflicting_facts, asked_of_me, today_open_questions | ||
dedupe_key | string · text | |||
severity | string · text | info, attention, urgent | ||
score | number · float4 | |||
title | string · text | |||
body | string · text | |||
facts | object · jsonb | |||
sources | object · jsonb | |||
unverified | object · jsonb | |||
actions | object · jsonb | |||
locale | string · text | tr, en | ||
composed_by | object · jsonb | |||
status | string · text | new, seen, done, dismissed, expired | ||
feedback | string · text | evet | ||
delivered | object · jsonb | |||
deliver_after | string (date-time) · timestamptz | evet | ||
expires_at | string (date-time) · timestamptz | evet | ||
seen_at | string (date-time) · timestamptz | evet | ||
created_at | string (date-time) · timestamptz | |||
updated_at | string (date-time) · timestamptz |
Birincil anahtar: id
Tekil: workspace_id, user_id, dedupe_key
Denetimler:
CHECK ((jsonb_typeof(actions) = 'array'::text))CHECK ((length(body) <= 4000))CHECK ((jsonb_typeof(composed_by) = 'object'::text))CHECK (((length(dedupe_key) >= 1) AND (length(dedupe_key) <= 300)))CHECK ((jsonb_typeof(delivered) = 'object'::text))CHECK ((jsonb_typeof(facts) = 'array'::text))CHECK (((feedback IS NULL) OR (feedback = ANY (ARRAY['useful'::text, 'not_useful'::text]))))CHECK ((jsonb_typeof(sources) = 'array'::text))CHECK (((length(btrim(title)) >= 1) AND (length(btrim(title)) <= 200)))CHECK ((jsonb_typeof(unverified) = 'array'::text))