Studio API

Författare Ellinor Niklasson

Senast uppdaterad: 26.08.2026 av Ellinor Niklasson

Studio API

Vad är Studio API?

Tänk på Studio API som en datapipeline som skickar rå samtalsdata från Telavox så att kunderna kan ansluta den till sina egna system – som sina egna dashboards, BI - verktyg (Power BI, Tableau), CRM-system eller anpassade rapporter.

Det är inte ett verktyg med ett användargränssnitt. Det är ett sätt för kunder som vill ha sin egen statistik att få råa siffror och bygga vad de vill med dem.

Studio API – Live

Skickar samtalsdata till ditt system i samma ögonblick som något händer – ett samtal startar, hamnar i en kö, besvaras eller avslutas. Detta gör det till en bra lösning för live-wallboards, dashboards i realtid och allt där du vill se vad som händer just nu. Så här fungerar det: Studio API – Live använder en teknik som kallas WebSockets, som upprätthåller en öppen anslutning mellan Telavox och ditt system så att ny data kan skickas direkt.

Studio API – Historiskt

Låter dig hämta samtalsdata för en specifik tidsperiod när du behöver det – till exempel "alla samtal från 1 till 10 oktober". Det här alternativet är bäst för rapporter, trendanalyser och att titta tillbaka på vad som redan har hänt. Så här fungerar det: Studio API – Historic använder en teknik som heter GraphQL, som låter dig be om exakt den information du behöver – varken mer eller mindre.

Krav

För att spåra/ta emot data om användare

  • Användaren måste ha funktionen "Statistik över spårad användare".

Åtkomst och synlighet

Statistik Spårad användare (användarnivå)

  • Användaren kommer att spåras i rapporten.
  • Ingen åtkomst till statistikgränssnittet via webb och skrivbordsappen.

Vi presenterar Telavox Studio API. Upptäck mer genom att klicka på flikarna nedan: Studio API - Live och Studio API - Historiskt.

Del 1: Begrepp

1. Begrepp

1.1 Datakällor

Stats Studio exponerar två kompletterande datalager, med fem datakällor mellan dem. Live-lagret strömmar händelser över WebSockets i samma ögonblick som de inträffar. Det historiska lagret låter dig fråga ett datumintervall över GraphQL när du vill.

Datakälla

Live (WebSocket)

Historisk (GraphQL)

Samtalsöversikt

/samtal

samtal

Kööversikt

/köer

köer

Översikt över agenter

/agenter

agenter

Profil Live

/profil_live

ingen

Profilhistorik

/profilhistorik

profilhistorik


Båda lagren autentiseras med samma statistiktoken – det är bara sättet du kopplar den till en förfrågan som skiljer sig åt (se § 1.3).


1.2 Perspektiv

Samma samtal kan berättas från flera vinklar. Stats Studio organiserar fem datakällor kring tre perspektiv på ett samtal, plus två vyer av agentens tillstånd. Välj det perspektiv som matchar den fråga du försöker besvara.

Exempel. Ett inkommande samtal går in i talsvaret, hamnar i den första kön, erbjuds till agent 1 (inget svar), sedan till agent 2 (inget svar), hoppar till en andra kö och erbjuds slutligen till agent 3, som svarar. Hur många poster producerar det enda samtalet?

Perspektiv

Uppgifter

Detalj

Samtalsöversikt

1

1 svarade

Kööversikt

2

1 ej besvarad (första kön), 1 besvarad (andra kön)

Översikt över agenter

3

2 ej besvarade (Agent 1, Agent 2), 1 besvarad (Agent 3)


Två ytterligare datakällor följer inte denna gruppering per samtal:

Profil Live : utlöser en händelse per agent varje gång deras närvaro ändras (Tillgänglig, Lunch, I ett samtal...).

Profilhistorik : en post per agentprofilplats, sammanfattas en gång i timmen.


1.3 Autentisering

Båda lagren använder samma statistiktoken.

  1. Logga in på Telavox webbagent.

  2. Öppna Inställningar → Mitt konto → Användarnamn och lösenord.

  3. Under Integration klickar du på Hantera token.

  4. Klicka på Skapa ny statistiktoken och kopiera värdet.

Token visas en gång. Behandla den som ett lösenord. Rotera den från samma sida om den läcker.


Hur tokenet är kopplat skiljer sig åt beroende på lager:

Live : skicka en Authorization: Bearer <token> -header under WebSocket-handskakningen. En lyckad uppgradering returnerar HTTP 101 Switching Protocols . Se del 2.

Historiskt : skicka en Authorization: Bearer <token> -header på varje HTTP POST. Se del 3.

1.4 Konvention för fältnamn

Samma koncept förekommer i båda lagren under olika höljen:

Lager

Stil

Exempel

Live (WebSocket)

ormfodral

`id_call`, `call_direction`, `customer_target.number`

Historisk (GraphQL)

kamelFall

idCall`, `callDirection`, `customerTarget { number }


Varje datakällsida i del 2 och 3 listar sin fullständiga fältreferens inom det lagrets skiftläge.


1.5 Identifierare — id kontra konto-ID

Varje agent, kö och IVR har två numeriska ID:n. Använd rätt ID för jobbet:

id. Internt i Stats Studio. Använd det när du bara arbetar i Stats Studio.

konto-ID. Samma ID som Telavox exponerar i CAPI (kund-API) och PAPI (partner-API). Använd det när du behöver matcha en Stats Studio-post med samma agent, kö eller IVR i ett annat Telavox-system eller i din egen databas.

Live-WebSocket-strömmen inkluderar alltid account_id i nyttolasten. De historiska GraphQL-filtren accepterar agentAccountId , queueAccountId och ivrAccountId som indata.


1.6 När ska vilket lager användas

  • Behöver du det nu? Använd den aktuella WebSocket-funktionen för den relevanta datakällan.

  • Behöver du det för ett datumintervall (igår, förra veckan, förra kvartalet)? Använd GraphQL-frågan från samma datakälla.

  • Bygger du en väggplatta? Öppna WebSocket för deltauppdateringar och seed det initiala tillståndet med en GraphQL-fråga.

  • Skapa en daglig rapport? Endast GraphQL.

Titta på agenternas närvaro i realtid? /profile_live .

Rapportering om agentproduktivitet per timme? profile_history (historisk) eller /profile_history (live, timvis).

Radera

Del 2: Studio API - Live (WebSocket)

2. Live (WebSocket)

Live-lagret skickar händelser allt eftersom de inträffar, en WebSocket per datakälla. Varje slutpunkt accepterar samma statistiktoken (se § 1.3) som en handskakningsrubrik.

2.0 Anslutning

Node.js

// Node.js — npm i ws

importera WebSocket från  "ws" ;

 

const ws = new WebSocket( "wss://statistics-webhook.telavox.se/calls" , {

rubriker: { Auktorisering: `Bärare ${ process.env.TELAVOX_TOKEN }` },

});

 

ws.on( "meddelande" , (buf) => {

  const evt = JSON.parse (buf.toString( "utf8" ));

konsol.log(evt);

});

 

ws.on( "stäng" , (kod, orsak) =>

console.log( "stängd" , kod, reason.toString())

);


Pytonorm

# Python — pip installerar websocket-klient

importera json, operativsystem, websocket

 

definitivt  på_meddelande (ws, msg):

    skriv ut (json.loads(msg))

 

ws = websocket.WebSocketApp(

    "wss://statistics-webhook.telavox.se/calls" ,

header={ "Auktorisering" : f"Bärare { os.environ[ 'TELAVOX_TOKEN' ] }" },

on_message=on_message,

)

ws.run_forever()


En lyckad handskakning returnerar HTTP 101 Switching Protocols. En WSS-sökväg som returnerar HTTP 101 följt omedelbart av textramen "Ogiltig sökväg" är en okänd datakälla. HTTP 401 betyder att token saknas, har löpt ut eller är återkallad.


2.1 Samtalsöversikt

Ett dokument per samtalsresa: hela samtalets resa genom överföringar, köer, agenter och IVR:er.

Fält

Värde

Slutpunkt

wss://statistics-webhook.telavox.se/calls

Kadens

Händelsestyrd. Trycker på knappen allt eftersom samtalet fortskrider (samtal startat, insatt i kö, agent besvarat, samtal avslutat).

hölje

ormfodral


Exempel på nyttolast

{

  "id_call" : "4d9c10dc-3f9f-41c7-a091-91d5fc746692" ,

  "svarade" : 0 ,

  "aktiv" : 1 ,

  "call_direction" : "inkommande" ,

  "tid" : {

    "starta" : 1779099997234

},

  "erbjöds_och_besvarades" : 0 ,

  "erbjuden_och_inte_besvarad" : 0 ,

  "kund_telavox" : {

    "id" : 43 ,

    "namn" : "Saleqo AB"

},

  "kund_mål" : {

    "nummer" : "0032111111111"

},

  "agentlista" : [ "John Doe" ]

}


Fältreferens

{

  "aktiv" : "Int" ,

  "agent_först" : {

    "konto_id" : "Int" ,

    "svarade" : "Datum/Tid" ,

    "avatar" : "Sträng" ,

    "e-post" : "Sträng" ,

    "från_överföring" : "Int" ,

    "id" : "Int" ,

    "is_admin" : "Int" ,

    "licens" : {

      "ccpro" : "Int" ,

      "typ" : "Sträng"

},

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "to_transfer" : "Int" ,

    "användarnamn" : "Sträng"

},

  "agent_last" : {

    "konto_id" : "Int" ,

    "svarade" : "Datum/Tid" ,

    "avatar" : "Sträng" ,

    "e-post" : "Sträng" ,

    "från_överföring" : "Int" ,

    "id" : "Int" ,

    "is_admin" : "Int" ,

    "licens" : {

      "ccpro" : "Int" ,

      "typ" : "Sträng"

},

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "to_transfer" : "Int" ,

    "användarnamn" : "Sträng"

},

  "agent_lista" : "Sträng" ,

  "agent_list_answer" : "Sträng" ,

  "agent_list_no_answer" : "Sträng" ,

  "svarade" : "Int" ,

  "call_direction" : "Sträng" ,

  "kund_mål" : {

    "nummer" : "Sträng"

},

  "kund_telavox" : {

    "id" : "Int" ,

    "namn" : "Sträng"

},

  "varaktighet" : {

    "före_kö" : "Heltal" ,

    "on_hold" : "Int" ,

    "kö" : {

      "första" : "Int" ,

      "sista" : "Int" ,

      "totalt" : "Int"

},

    "ring" : {

      "första" : "Int" ,

      "sista" : "Int" ,

      "totalt" : "Int"

},

    "prata" : {

      "första" : "Int" ,

      "sista" : "Int" ,

      "totalt" : "Int"

},

    "totalt" : "Int" ,

    "vänta" : "Int"

},

  "id_call" : "Sträng" ,

  "inaktivt_nummer" : "Heltal" ,

  "intern" : "Int" ,

  "ivr_first" : {

    "konto_id" : "Int" ,

    "id" : "Int" ,

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "tidsstämpel" : "Datum/Tid"

},

  "ivr_last" : {

    "konto_id" : "Int" ,

    "id" : "Int" ,

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "tidsstämpel" : "Datum/Tid"

},

  "ivr_list" : "Sträng" ,

  "meny_siffra" : {

    "destination" : "Sträng" ,

    "uppringt_nummer" : "Sträng" ,

    "typ" : "Sträng"

},

  "erbjuden_och_besvarad" : "Int" ,

  "erbjuden_och_inte_besvarad" : "Int" ,

  "ohw_ordered" : "Booleskt värde" ,

  "på_anropade_samtal" : {

    "answer_wait_request" : "Int" ,

    "kund_inget_svar" : "Int" ,

    "no_wait_request" : "Int"

},

  "kö_först" : {

    "konto_id" : "Int" ,

    "fail_reason" : "Sträng" ,

    "id" : "Int" ,

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "strategi" : "Sträng" ,

    "tidsstart" : "DatumTid"

},

  "kö_sista" : {

    "konto_id" : "Int" ,

    "fail_reason" : "Sträng" ,

    "id" : "Int" ,

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "strategi" : "Sträng" ,

    "tidsstart" : "DatumTid"

},

  "kölista" : "Sträng" ,

  "köupphämtning" : "Int" ,

  "inspelad" : "Intern" ,

  "omdirigerad" : {

    "inget_svar" : "Int" ,

    "ingen_anledning" : "Heltal" ,

    "not_reachable" : "Int" ,

    "totalt" : "Int" ,

    "ovillkorlig" : "Heltal" ,

    "användare_upptagen" : "Int"

},

  "spara_nyckel_inmatning" : {

    "input" : "Sträng" ,

    "variabelnamn" : "Sträng"

},

  "samtidiga_enhetsanrop" : "Int" ,

  "terminated_call_reason" : "Sträng" ,

  "tid" : {

    "slut" : "Datum/Tid" ,

    "start" : "Datum och tid"

},

  "överföring_först" : {

    "svarade" : "Int" ,

    "typ" : "Sträng"

},

  "överföring_sista" : {

    "svarade" : "Int" ,

    "typ" : "Sträng"

},

  "överföringar" : "Int" ,

  "röstbrevlåda" : "Intern"

}


2.2 Kööversikt

Ett dokument per (samtal, kö)par. Ett samtal som går igenom tre köer genererar tre poster; samtal som aldrig går in i en kö genererar inga.

Fält

Värde

Slutpunkt

wss://statistics-webhook.telavox.se/queues

Kadens

Händelsestyrd. Utlöses när ett samtal går in i eller lämnar en kö.

hölje

ormfodral

Fältreferens

{

  "konto_id" : "Int" ,

  "aktiv" : "Int" ,

  "agent_först" : {

    "konto_id" : "Int" ,

    "svarade" : "Datum/Tid" ,

    "avatar" : "Sträng" ,

    "e-post" : "Sträng" ,

    "id" : "Int" ,

    "is_admin" : "Int" ,

    "licens" : {

      "ccpro" : "Int" ,

      "typ" : "Sträng"

},

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "användarnamn" : "Sträng"

},

  "agent_last" : {

    "konto_id" : "Int" ,

    "svarade" : "Datum/Tid" ,

    "avatar" : "Sträng" ,

    "e-post" : "Sträng" ,

    "id" : "Int" ,

    "is_admin" : "Int" ,

    "licens" : {

      "ccpro" : "Int" ,

      "typ" : "Sträng"

},

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "användarnamn" : "Sträng"

},

  "agent_lista" : "Sträng" ,

  "agent_list_answer" : "Sträng" ,

  "agent_list_no_answer" : "Sträng" ,

  "svarade" : "Int" ,

  "call_direction" : "Sträng" ,

  "kund_mål" : {

    "nummer" : "Sträng"

},

  "kund_telavox" : {

    "id" : "Int" ,

    "namn" : "Sträng"

},

  "varaktighet" : {

    "håll" : "Int" ,

    "kö" : "Heltal" ,

    "ring" : {

      "första" : "Int" ,

      "sista" : "Int" ,

      "totalt" : "Int"

},

    "prata" : "Int" ,

    "totalt" : "Int" ,

    "vänta" : "Int"

},

  "id_call" : "Sträng" ,

  "intern" : "Int" ,

  "ivr" : {

    "konto_id" : "Int" ,

    "id" : "Int" ,

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "tidsstämpel" : "Datum/Tid"

},

  "on_hooked_calls" : "Intern" ,

  "kö" : {

    "konto_id" : "Int" ,

    "fria_agenter" : "Int" ,

    "id" : "Int" ,

    "namn" : "Sträng" ,

    "not_answer_risk" : "Int" ,

    "telefon" : "Sträng" ,

    "kö_pratande_agenter" : "Int" ,

    "strategi" : "Sträng" ,

    "tidsstart" : "Datum/Tid" ,

    "totalt_talande_agenter" : "Int"

},

  "inspelad" : "Intern" ,

  "tid" : {

    "slut" : "Datum/Tid" ,

    "start" : "Datum och tid"

},

  "överföring" : "Int" ,

  "röstbrevlåda" : "Intern"

}

2.3 Översikt över agenter

Ett dokument per (samtal, agent) erbjudande. En agent som ringer men inte svarar producerar ändå en inspelning; samtal som aldrig når en agent avger ingenting.

Fält

Värde

Slutpunkt

wss://statistics-webhook.telavox.se/agents

Kadens

Händelsestyrd. Utlöses när ett samtal erbjuds en agent (besvarat eller inte).

hölje

ormfodral


Exempel på nyttolast

{

  "id_call" : "4d9c10dc-3f9f-41c7-a091-91d5fc746692" ,

  "call_direction" : "inkommande" ,

  "aktiv" : 0 ,

  "svarade" : 0 ,

  "agent" : {

    "kontotyp-id" : 1 ,

    "konto_id" : 3467672 ,

    "id" : 924328 ,

    "namn" : "John Doe" ,

    "telefon" : "003211111111" ,

    "användarnamn" : " 003211111111 " ,

    "e-post" : "john.doe@saleqo.com" ,

    "avatar" : "https://flow.telavox.com/api/internal/contacts/contact-3934178/avatar" ,

    "är_admin" : 0 ,

    "licens" : {

      "typ" : "Flow Mobile Custom 10" ,

      "ccpro" : 1

}

},

  "kund_telavox" : {

    "id" : 43 ,

    "namn" : "Saleqo AB"

},

  "kund_mål" : {

    "nummer" : "003211111111"

},

  "tid" : {

    "starta" : 1779099997234 ,

    "slut" : 1779100016445

},

  "varaktighet" : {

    "totalt" : 19211 ,

    "ring" : 19211

},

  "samtidiga_enhetssamtal" : 1 ,

  "agent_end_reason" : "INGET_SVAR"

}



Fältreferens

Fältnamn använder snake_case.

{

  "konto_id" : "Int" ,

  "aktiv" : "Int" ,

  "agent" : {

    "konto_id" : "Int" ,

    "avatar" : "Sträng" ,

    "e-post" : "Sträng" ,

    "id" : "Int" ,

    "is_admin" : "Int" ,

    "licens" : {

      "ccpro" : "Int" ,

      "typ" : "Sträng"

},

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "användarnamn" : "Sträng"

},

  "agent_end_reason" : "Sträng" ,

  "svarade" : "Int" ,

  "call_direction" : "Sträng" ,

  "kund_mål" : {

    "nummer" : "Sträng"

},

  "kund_telavox" : {

    "id" : "Int" ,

    "namn" : "Sträng"

},

  "varaktighet" : {

    "håll" : "Int" ,

    "ring" : "Int" ,

    "prata" : "Int" ,

    "totalt" : "Int"

},

  "id_call" : "Sträng" ,

  "intern" : "Int" ,

  "ivr" : {

    "konto_id" : "Int" ,

    "id" : "Int" ,

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "tidsstämpel" : "Datum/Tid"

},

  "on_hooked_calls" : "Intern" ,

  "kö" : {

    "konto_id" : "Int" ,

    "id" : "Int" ,

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "strategi" : "Sträng" ,

    "tidsstart" : "DatumTid"

},

  "inspelad" : "Intern" ,

  "samtidiga_enhetsanrop" : "Int" ,

  "tid" : {

    "svarade" : "Datum/Tid" ,

    "slut" : "Datum/Tid" ,

    "start" : "Datum och tid"

},

  "överföring" : "Int" ,

  "röstbrevlåda" : "Intern"

}


2.4 Profil Live

Streamar den aktuella profilen för varje agent (Tillgänglig, Lunch, Möte…), kö-inloggningsstatus och indikatorer för aktiva samtal. Endast live — ingen historisk motsvarighet.

Fält

Värde

Slutpunkt

wss://statistics-webhook.telavox.se/profile_live

Kadens

Driven av tillståndsändring. Utlöses när en agent ändrar profil, kö-inloggningsstatus eller aktivt samtalsstatus.

Historisk motsvarighet

Ingen. För aggregerad historik, använd `profile_history`.

hölje

ormfodral


Exempel på nyttolast

{

  "kund_telavox" : {

    "id" : 43 ,

    "namn" : "Saleqo AB"

},

  "agent" : {

    "kontotyp-id" : 1 ,

    "konto_id" : 3083293 ,

    "id" : 846851 ,

    "namn" : "John Doe" ,

    "telefon" : "0402222222" ,

    "användarnamn" : "0402222222" ,

    "e-post" : "john.doe@saleqo.com" ,

    "är_admin" : 1 ,

    "licens" : {

      "typ" : "Flow mobila armar" ,

      "ccpro" : 1

}

},

  "profil" : {

    "aktiv" : {

      "id" : 4969080 ,

      "namn" : "Tillgänglig" ,

      "status" : "tillgänglig" ,

      "status_message" : "Tillgänglig" ,

      "startdatum" : 1779099033656 ,

      "standard_varaktighet" : 1779116400000 ,

      "is_wrapup" : falskt

},

    "inte_aktiv" : [

{ "id" : 4969081 , "namn" : "Lunch" , "status" : "ej tillgänglig" , "startdatum" : 1779099030867 , "är_avslutad" : falskt },

{ "id" : 4969082 , "name" : "Möte" , "status" : "tillgänglig" , "startdatum" : 1779084010014 , "is_wrapup" : falskt },

{ "id" : 4969083 , "name" : "Slutat för dagen" , "status" : "inte tillgänglig" , "startdatum" : 1779084113000 , "is_wrapup" : false }

]

},

  "köinloggning" : {

    "inloggad" : [

{ "id" : 111834 , "namn" : "Jour-Kundsupport" , "startdatum" : 1779099033642 },

{ "id" : 19843 , "namn" : "Telavox-support" , "startdatum" : 1779099033644 }

],

    "utloggad" : [

{ "id" : 137266 , "namn" : "SOHO" , "startdatum" : 1779084113000 }

]

},

  "aktivt_samtal" : {

    "id_call" : "89913fac-a038-4fff-b9bd-a183014dc794" ,

    "svarade" : 0 ,

    "kö_id" : 111834 ,

    "queue_description" : "Kundsupport för dagen" ,

    "call_direction" : "inkommande" ,

    "tid" : { "start" : 1779100022081 }

},

  "mobil_aktiv" : 0 ,

  "webb_aktiv" : 1 ,

  "admin_aktiv" : 1

}


Avkortad för läsbarhet — Profile Live publicerar den fullständiga listan över alla profiler för varje agent i profile.not_active. Det fullständiga schemat visas i fältreferensen nedan.


Fältreferens

{

  "aktiv" : "Objekt" ,

  "aktivt_samtal" : {

    "svarade" : "Int" ,

    "call_direction" : "Sträng" ,

    "id_call" : "Sträng" ,

    "intern" : "Int" ,

    "ivr_description" : "Sträng" ,

    "ivr_id" : "Int" ,

    "on_hooked_calls" : "Intern" ,

    "köbeskrivning" : "Sträng" ,

    "kö_id" : "Heltal" ,

    "inspelad" : "Intern" ,

    "tid" : {

      "svarade" : "Int" ,

      "start" : "Int"

},

    "överföring" : "Int"

},

  "admin_active" : "Int" ,

  "agent" : {

    "konto_id" : "Int" ,

    "avatar" : "Sträng" ,

    "e-post" : "Sträng" ,

    "id" : "Int" ,

    "is_admin" : "Int" ,

    "licens" : {

      "ccpro" : "Int" ,

      "typ" : "Sträng"

},

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "användarnamn" : "Sträng"

},

  "kund_telavox" : {

    "id" : "Int" ,

    "namn" : "Sträng"

},

  "senaste_samtal_uppdatering" : "Int" ,

  "senaste_samtal_uppdatering_sek" : "Int" ,

  "mobil_aktiv" : "Int" ,

  "profil" : {

    "aktiv" : {

      "standard_duration" : "Heltid" ,

      "id" : "Int" ,

      "is_wrapup" : "Booleskt värde" ,

      "namn" : "Sträng" ,

      "startdatum" : "Int" ,

      "status" : "Sträng" ,

      "status_message" : "Sträng"

},

    "inte_aktiv" : {

      "standard_duration" : "Heltid" ,

      "id" : "Int" ,

      "is_wrapup" : "Booleskt värde" ,

      "namn" : "Sträng" ,

      "startdatum" : "Int" ,

      "status" : "Sträng" ,

      "status_message" : "Sträng"

}

},

  "köinloggning" : {

    "inloggad" : {

      "id" : "Int" ,

      "namn" : "Sträng" ,

      "startdatum" : "Int"

},

    "utloggad" : {

      "id" : "Int" ,

      "namn" : "Sträng" ,

      "startdatum" : "Int"

}

},

  "web_active" : "Int"

}


2.5 Profilhistorik

Tidslinje för profilplats per agent. Varje post täcker en sammanhängande period för en agent i en given profil, plus en sammanfattning av de samtal de hanterade inom den platsen.

Fält

Värde

Slutpunkt

wss://statistics-webhook.telavox.se/profile_history

Kadens

Cron-stil. Aggregeringen körs en gång i timmen i början av varje timme (HH:00 UTC) och skickar hela timbatchen till alla anslutna klienter.

Beteende

Mellan timtickarna är socketen tyst — lämna anslutningen öppen till nästa HH:00 för att ta emot data.

Historisk motsvarighet

`profile_history` GraphQL-rotfråga — se § 3.5.

hölje

ormfodral


Fältreferens

{

  "agent" : {

    "konto_id" : "Int" ,

    "id" : "Int" ,

    "namn" : "Sträng" ,

    "telefon" : "Sträng"

},

  "samtalssammanfattning" : {

    "aktiva_anrop" : "Sträng" ,

    "besvarade_samtal" : "Sträng" ,

    "avslutade_samtal" : "Sträng" ,

    "varaktighet" : {

      "prata" : "Int"

},

    "id_calls" : "Sträng" ,

    "total_answered" : "Heltal" ,

    "totalt antal_samtal" : "Int"

},

  "kund_telavox" : {

    "id" : "Int" ,

    "namn" : "Sträng"

},

  "extra_profil_tillgänglig_1..10" : {

    "id" : "Int" ,

    "namn" : "Sträng" ,

    "användning" : "Int"

},

  "extra_profil_inte_tillgänglig_1..20" : {

    "id" : "Int" ,

    "namn" : "Sträng" ,

    "användning" : "Int"

},

  "profil_tillgänglig" : {

    "aktiv" : "Booleskt" ,

    "tillgänglig" : "Booleskt" ,

    "upptagen" : "Int" ,

    "id" : "Int" ,

    "is_wrapup" : "Booleskt värde" ,

    "namn" : "Sträng" ,

    "tidsstart" : "Sträng" ,

    "tider_i_profil" : "Int" ,

    "användning" : "Int"

},

  "profil_inte_tillgänglig" : {

    "aktiv" : "Booleskt" ,

    "tillgänglig" : "Booleskt" ,

    "upptagen" : "Int" ,

    "id" : "Int" ,

    "is_wrapup" : "Booleskt värde" ,

    "namn" : "Sträng" ,

    "tidsstart" : "Sträng" ,

    "tider_i_profil" : "Int" ,

    "användning" : "Int"

},

  "kösammanfattning" : {

    "inloggad" : {

      "konto_id" : "Int" ,

      "aktiv" : "Booleskt" ,

      "antal_inloggade_gånger" : "Int" ,

      "kö_id" : "Heltal" ,

      "könamn" : "Sträng" ,

      "starttid" : "Heltal" ,

      "användning" : "Int"

},

    "utloggad" : {

      "konto_id" : "Int" ,

      "aktiv" : "Booleskt" ,

      "antal_gånger_utloggad" : "Int" ,

      "kö_id" : "Heltal" ,

      "könamn" : "Sträng" ,

      "starttid" : "Heltal" ,

      "användning" : "Int"

}

},

  "plats" : {

    "upptagen" : "Int" ,

    "slutdatum" : "Int" ,

    "startdatum" : "Int" ,

    "tidsintervall" : "Int"

}

}




Radera

Del 3: Studio API - Historisk (GraphQL)

3. Historisk (GraphQL)

Det historiska lagret är en enda GraphQL-slutpunkt som exponerar en rotfråga per perspektiv (samtal, agenter, köer, profilhistorik). Använd det för alla frågor som behöver ett datumintervall – igår, förra veckan, förra kvartalet.

Slutpunkt: https://statistics-api.telavox.se/graphql

Metod: HTTP POST

Hölje: camelCase (spegel av snake_case-livsfälten).

3.0 Anslutning

Node.js

// Node.js — native hämtning (Node 18+)

const res = await hämtning( "https://statistics-api.telavox.se/graphql" , {

metod: "POST" ,

rubriker: {

    "Innehållstyp" : "applikation/json" ,

Auktorisering: `Bärare ${ process.env.TELAVOX_TOKEN }` ,

},

body: JSON.stringify({

fråga: `query($s:DatumTid,$e:DatumTid){

calls(filter:{startDate:$s,endDate:$e}, first:1){ totalCount } }`,

variabler: { s: "2025-10-01T00:00:00Z", e: "2025-10-01T01:00:00Z" },

}),


});

 

const { data, fel } = await res.json();

om (fel) konsol.fel(fel);

konsol.logg(data);


Pytonorm

# Python — pip-installationsförfrågningar

importera operativsystem, förfrågningar

 

res = requests.post(

    "https://statistics-api.telavox.se/graphql" ,

rubriker={

        "Innehållstyp" : "applikation/json" ,

        "Auktorisering" : f"Bärare { os.environ[ 'TELAVOX_TOKEN' ] }" ,

},

json={

"fråga": "fråga($s:DatumTid,$e:DatumTid){

calls(filter:{startDate:$s,endDate:$e}, first:1){ totalCount } }",

"variabler": {"s": "2025-10-01T00:00:00Z", "e":

"2025-10-01T01:00:00Z"},

},


)

print (res.json())


HTTP 401 betyder att token saknas eller är ogiltig. En 200 med en felmatris.

▎ i brödtexten betyder att begäran autentiserades men frågan är felaktigt formaterad

▎ eller frågar efter fält som inte finns. Obs: varje rotfråga (anrop, köer,

▎ agents, agentHistory) kräver ett filter med startDate och endDate — anropar

▎ dem utan att det returnerar too_long_http_line_exception.



3.1 Filtrering och paginering

Alla fyra rotfrågor accepterar samma omslagsform:

<roo t >(

  filter : ÖversiktFilter

  först : Jag nt !

efter : Strömmande

) {

det här { ... }

  totalt antal

markör

harNästa sida

}


Använd markören från ett svar som efterargument för nästa begäran för att paginera.

ÖversiktFilterfält

Fält

Typ

Menande

startdatum

Datum och tid

Fönstrets början (ISO 8601 UTC).

slutdatum

Datum och tid

Slutet av fönstret (ISO 8601 UTC).

kö-ID

Int

Statistik-system kö-ID.

köKonto-ID

Int

Kö-ID delas med CAPI/PAPI. Använd detta för systemövergripande anslutningar.

könamn

Sträng

Exakt visningsnamn för kö.

ivr-ID

Int

Statistiksystemets IVR-ID.

ivrKonto-ID

Int

IVR-ID delas med CAPI/PAPI.

ivr-namn

Sträng

Exakt IVR-visningsnamn.

agent-ID

Int

Statistik-systemagent-ID.

agentKonto-ID

Int

Agent-ID delas med CAPI/PAPI. Använd detta för systemövergripande anslutningar.

agentnamn

Sträng

Exakt visningsnamn för agenten.

samtals-ID

Sträng

Exakt anrops-UUID.


totalCount är antalet endast för datumfönstret — det krymper inte när du lägger till agentId, queueId eller andra filter. För att veta hur många poster ett filter faktiskt matchade, titta på datastorleken eller paginera med markören / hasNextPage.


Behöver du accountId för en CAPI/PAPI-anslutning? Läs account_id från WebSocket-strömmen – det är den pålitliga källan (se § 1.5).



3.2 Samtalsöversikt

Ett dokument per samtalsresa: hela samtalets resa genom överföringar, köer, agenter och IVR:er.

Fält

Värde

Rotfråga

samtal

Returtyp

Översikt över samtal Anslutning!

Posttyp

SamtalsöversiktPost

Levande motsvarighet

`/anrop` (§ 2.1)

hölje

kamelFall


Exempelfråga

frågesamtal($s startdatum : Datum och tid , $ en dDatum : Datum och tid ) {

anrop ( filter : { startDate : $ startDate , endDate : $ endDate } , f irs t : 25 ) { ;

da ta

idCall

samtalsriktning

en ns var

varaktighet { totalt  samtal { totalt } ring { totalt } }

ålder nt Först t { mitt ID }

köFörst { mitt id }

} }

    totalt antal markören harNästa sida

} }

} }


Kör det från Node.js

const res = await hämtning( "https://statistics-api.telavox.se/graphql" , {

metod: "POST" ,

rubriker: {

    "Innehållstyp" : "applikation/json" ,

Auktorisering: `Bärare ${ process.env.TELAVOX_TOKEN }` ,

},

kropp: JSON .stringify({

fråga: `query Anrop($startDate: DateTime, $endDate: DateTime) {

calls(filter: { startDate: $startDate, endDate: $endDate }, first: 25) {

data { idCall samtalsriktning besvarad }

totalCount-markören harNästaSida

}

}` ,

variabler: {

startdatum: "2025-10-01T00:00:00Z" ,

slutdatum: "2025-10-06T23:59:59Z" ,

},

}),

});

const { data } = await res.json();

console.log(data.calls);


Kör det från Python

importera operativsystem, förfrågningar

 

QUERY = """query Anrop($startDate: DateTime, $endDate: DateTime) {

calls(filter: { startDate: $startDate, endDate: $endDate }, first: 25) {

data { idCall samtalsriktning besvarad }

totalCount-markören harNästaSida

}

}"""

 

res = requests.post(

    "https://statistics-api.telavox.se/graphql" ,

rubriker={

        "Innehållstyp" : "applikation/json" ,

        "Auktorisering" : f"Bärare { os.environ[ 'TELAVOX_TOKEN' ] }" ,

},

json={

        "fråga" : FRÅGA,

        "variabler" : {

            "startdatum" : "2025-10-01T00:00:00Z" ,

            "slutdatum" : "2025-10-06T23:59:59Z" ,

},

},

)

print (res.json()[ "data" ][ "anrop" ])


Fältreferens

Fältnamn använder camelCase. Källa: GraphQL-schemaintrospektion av CallOverviewRecord.

{

  "idCall" : "Sträng" ,

  "kundMål" : {

    "nummer" : "Sträng"

},

  "callDirection" : "Sträng" ,

  "erbjudenOchBesvarad" : "Int" ,

  "erbjudenOchInteBesvarad" : "Int" ,

  "påkopplade samtal" : {

    "ingenVänteförfrågan" : "Int" ,

    "svarVäntaBegäran" : "Int" ,

    "kundIngetSvar" : "Int"

},

  "samtidaEnhetssamtal" : "Int" ,

  "inaktivtNummer" : "Heltal" ,

  "varaktighet" : {

    "ring" : {

      "första" : "Int" ,

      "sista" : "Int" ,

      "totalt" : "Int"

},

    "kö" : {

      "första" : "Int" ,

      "sista" : "Int" ,

      "totalt" : "Int"

},

    "prata" : {

      "första" : "Int" ,

      "sista" : "Int" ,

      "totalt" : "Int"

},

    "totalt" : "Int" ,

    "på vänt" : "Int" ,

    "vänta" : "Int"

},

  "svarade" : "Int" ,

  "aktiv" : "Int" ,

  "agentFörst" : {

    "id" : "Int" ,

    "konto-ID" : "Int" ,

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "e-post" : "Sträng" ,

    "svarade" : "Datum/Tid" ,

    "attÖverföra" : "Int" ,

    "frånÖverföring" : "Int" ,

    "licens" : {

      "ccpro" : "Int" ,

      "typ" : "Sträng"

}

},

  "agentLast" : {

    "id" : "Int" ,

    "konto-ID" : "Int" ,

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "e-post" : "Sträng" ,

    "svarade" : "Datum/Tid" ,

    "attÖverföra" : "Int" ,

    "frånÖverföring" : "Int" ,

    "licens" : {

      "ccpro" : "Int" ,

      "typ" : "Sträng"

}

},

  "agentList" : "[Sträng!]" ,

  "agentListAnswer" : "[Sträng!]" ,

  "agentListNoAnswer" : "[Sträng!]" ,

  "köFörst" : {

    "id" : "Int" ,

    "konto-ID" : "Int" ,

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "strategi" : "Sträng" ,

    "tidsstart" : "Datum/Tid" ,

    "misslyckandeorsak" : "Sträng"

},

  "kösista" : {

    "id" : "Int" ,

    "konto-ID" : "Int" ,

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "strategi" : "Sträng" ,

    "tidsstart" : "Datum/Tid" ,

    "misslyckandeorsak" : "Sträng"

},

  "köList" : "[Sträng!]" ,

  "ivrFirst" : {

    "id" : "Int" ,

    "konto-ID" : "Int" ,

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "tidsstämpel" : "Datum/Tid"

},

  "ivrLast" : {

    "id" : "Int" ,

    "konto-ID" : "Int" ,

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "tidsstämpel" : "Datum/Tid"

},

  "ivrList" : "[Sträng!]" ,

  "köHämtning" : "Int" ,

  "tid" : {

    "start" : "Datum och tid" ,

    "slut" : "Datum/Tid"

},

  "överföringFörst" : {

    "typ" : "Sträng" ,

    "svarade" : "Int"

},

  "överföringSista" : {

    "typ" : "Sträng" ,

    "svarade" : "Int"

},

  "överföringar" : "Int" ,

  "omdirigerad" : {

    "totalt" : "Int" ,

    "ingenAnledning" : "Int" ,

    "ingetSvar" : "Int" ,

    "ejNåbar" : "Int" ,

    "användareUpptagen" : "Int" ,

    "ovillkorlig" : "Int"

},

  "inspelad" : "Intern" ,

  "menysiffra" : {

    "uppringtNumber" : "Sträng" ,

    "destination" : "Sträng" ,

    "typ" : "Sträng"

},

  "terminatedCallReason" : "Sträng" ,

  "intern" : "Int" ,

  "sparaKeyInput": [

{

"variabelnamn": "Sträng",

"input": "Sträng"

}

],

  "tidsstämpel" : "Datum/Tid"

}


3.3 Kööversikt

Ett dokument per (samtal, kö)par. Ett samtal som går igenom tre köer genererar tre poster; samtal som aldrig går in i en kö genererar inga.

Fält

Värde

Rotfråga

köer

Returtyp

KöÖversiktAnslutning!

Posttyp

KöÖversiktPost

Levande motsvarighet

`/köer` (§ 2.2)

hölje

kamelFall


Exempelfråga

query Queues($s tart Date : Date Time , $e n dDate : Date Time ) {

queues ( filter : { startdatum : $ s tartdatum , e n dDate : $ e n dDate } , först t : 25 ) {

da ta

idCall

kö { id namn mig strategi }

dura t ion { vänta  tal k }

en ns var

ålder nt Första t { id namn mig }

}

    Totalt antal markören har Nästa sida

}

}


Kör det från Node.js

const res = await hämtning( "https://statistics-api.telavox.se/graphql" , {

metod: "POST" ,

rubriker: {

    "Innehållstyp" : "applikation/json" ,

Auktorisering: `Bärare ${ process.env.TELAVOX_TOKEN }` ,

},

kropp: JSON .stringify({

fråga: `query Queues($startDate: DateTime, $endDate: DateTime) {

köer(filter: { startdatum: $startdatum, slutdatum: $slutdatum }, första: 25) {

data { idCall kö { id namn } duration { kö vänta prata } svarade }

totalCount-markören harNästaSida

}

}` ,

variabler: {

startdatum: "2025-10-01T00:00:00Z" ,

slutdatum: "2025-10-06T23:59:59Z" ,

},

}),

});

const { data } = await res.json();

console.log(data.köer);


Kör det från Python

importera operativsystem, förfrågningar

 

QUERY = """query Queues($startDate: DateTime, $endDate: DateTime) {

köer(filter: { startdatum: $startdatum, slutdatum: $slutdatum }, första: 25) {

data { idCall kö { id namn } duration { kö vänta prata } svarade }

totalCount-markören harNästaSida

}

}"""

 

res = requests.post(

    "https://statistics-api.telavox.se/graphql" ,

rubriker={

        "Innehållstyp" : "applikation/json" ,

        "Auktorisering" : f"Bärare { os.environ[ 'TELAVOX_TOKEN' ] }" ,

},

json={

        "fråga" : FRÅGA,

        "variabler" : {

            "startdatum" : "2025-10-01T00:00:00Z" ,

            "slutdatum" : "2025-10-06T23:59:59Z" ,

},

},

)

print (res.json()[ "data" ][ "köer" ])


Fältreferens

Fältnamn använder camelCase. Källa: GraphQL-schemaintrospektion av QueueOverviewRecord.

{

  "idCall" : "Sträng" ,

  "callDirection" : "Sträng" ,

  "aktiv" : "Int" ,

  "svarade" : "Int" ,

  "agentFörst" : {

    "id" : "Int" ,

    "konto-ID" : "Int" ,

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "e-post" : "Sträng" ,

    "svarade" : "Datum/Tid" ,

    "attÖverföra" : "Int" ,

    "frånÖverföring" : "Int" ,

    "licens" : {

      "ccpro" : "Int" ,

      "typ" : "Sträng"

}

},

  "agentLast" : {

    "id" : "Int" ,

    "konto-ID" : "Int" ,

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "e-post" : "Sträng" ,

    "svarade" : "Datum/Tid" ,

    "attÖverföra" : "Int" ,

    "frånÖverföring" : "Int" ,

    "licens" : {

      "ccpro" : "Int" ,

      "typ" : "Sträng"

}

},

  "ivr" : {

    "id" : "Int" ,

    "konto-ID" : "Int" ,

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "tidsstämpel" : "Datum/Tid"

},

  "kö" : {

    "id" : "Int" ,

    "konto-ID" : "Int" ,

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "strategi" : "Sträng" ,

    "tidsstart" : "DatumTid" ,

    "misslyckandeorsak" : "Sträng"

},

  "kundMål" : {

    "nummer" : "Sträng"

},

  "onHookedCalls" : "Int" ,

  "överföring" : "Int" ,

  "inspelad" : "Intern" ,

  "tid" : {

    "start" : "Datum och tid" ,

    "slut" : "Datum/Tid"

},

  "varaktighet" : {

    "totalt" : "Int" ,

    "kö" : "Heltal" ,

    "ring" : {

      "första" : "Int" ,

      "sista" : "Int" ,

      "totalt" : "Int"

},

    "prata" : "Int" ,

    "håll" : "Int" ,

    "vänta" : "Int"

},

  "samtidaEnhetssamtal" : "Int" ,

  "agentEndReason" : "Sträng" ,

  "röstbrevlåda" : "Intern" ,

  "intern" : "Int"

}


3.4 Översikt över agenter

Ett dokument per (samtal, agent) erbjudande. En agent som ringer men inte svarar producerar ändå en inspelning; samtal som aldrig når en agent avger ingenting.

Fält

Värde

Rotfråga

agenter

Returtyp

AgentÖversiktAnslutning!

Posttyp

AgentÖversiktPost

Levande motsvarighet

`/agenter` (§ 2.3)

hölje

kamelFall


Exempelfråga

fråga Ålder nts ( $ s startdatum : DateTime , $ en dDate : DateTime ) {

ålder nts ( filter : { start Date : $ start Date , endDate : $ endDate } , f irs t : 25 ) { ;

da ta

idCall

ålder nt { mitt id }

kö { mitt id }

varaktighet { totalt  prata k håll }

ålder nt AndReason

} }

    totalt antal markören harNästa sida

} }

} }


Kör det från Node.js

const res = await hämtning( "https://statistics-api.telavox.se/graphql" , {

metod: "POST" ,

rubriker: {

    "Innehållstyp" : "applikation/json" ,

Auktorisering: `Bärare ${ process.env.TELAVOX_TOKEN }` ,

},

kropp: JSON .stringify({

fråga: `query Agents($startDate: DateTime, $endDate: DateTime) {

agenter(filter: { startdatum: $startdatum, slutdatum: $slutdatum }, första: 25) {

data { idCall agent { id namn } duration { total samtalshållning } agentEndReason }

totalCount-markören harNästaSida

}

}` ,

variabler: {

startdatum: "2025-10-01T00:00:00Z" ,

slutdatum: "2025-10-06T23:59:59Z" ,

},

}),

});

const { data } = await res.json();

console.log(data.agents);


Kör det från Python

importera operativsystem, förfrågningar

 

QUERY = """query Agents($startDate: DateTime, $endDate: DateTime) {

agenter(filter: { startdatum: $startdatum, slutdatum: $slutdatum }, första: 25) {

data { idCall agent { id namn } duration { total samtalshållning } agentEndReason }

totalCount-markören harNästaSida

}

}"""

 

res = requests.post(

    "https://statistics-api.telavox.se/graphql" ,

rubriker={

        "Innehållstyp" : "applikation/json" ,

        "Auktorisering" : f"Bärare { os.environ[ 'TELAVOX_TOKEN' ] }" ,

},

json={

        "fråga" : FRÅGA,

        "variabler" : {

            "startdatum" : "2025-10-01T00:00:00Z" ,

            "slutdatum" : "2025-10-06T23:59:59Z" ,

},

},

)

print (res.json()[ "data" ][ "agenter" ])


Fältreferens

Fältnamn använder camelCase. Källa: GraphQL-schemaintrospektion av AgentOverviewRecord.

{

  "idCall" : "Sträng" ,

  "callDirection" : "Sträng" ,

  "aktiv" : "Int" ,

  "svarade" : "Int" ,

  "agent" : {

    "id" : "Int" ,

    "konto-ID" : "Int" ,

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "e-post" : "Sträng" ,

    "svarade" : "Datum/Tid" ,

    "attÖverföra" : "Int" ,

    "frånÖverföring" : "Int" ,

    "licens" : {

      "ccpro" : "Int" ,

      "typ" : "Sträng"

}

},

  "ivr" : {

    "id" : "Int" ,

    "konto-ID" : "Int" ,

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "tidsstämpel" : "Datum/Tid"

},

  "kö" : {

    "id" : "Int" ,

    "konto-ID" : "Int" ,

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "strategi" : "Sträng" ,

    "tidsstart" : "DatumTid" ,

    "misslyckandeorsak" : "Sträng"

},

  "kundMål" : {

    "nummer" : "Sträng"

},

  "onHookedCalls" : "Int" ,

  "överföring" : "Int" ,

  "inspelad" : "Intern" ,

  "tid" : {

    "start" : "Datum och tid" ,

    "slut" : "Datum/Tid" ,

    "svarade" : "Datum/Tid"

},

  "varaktighet" : {

    "totalt" : "Int" ,

    "ring" : "Int" ,

    "prata" : "Int" ,

    "håll" : "Int"

},

  "samtidaEnhetssamtal" : "Int" ,

  "agentEndReason" : "Sträng" ,

  "röstbrevlåda" : "Intern" ,

  "intern" : "Int"

}


3.5 Profilhistorik

Tidslinje för profilplats per agent. Varje post täcker en sammanhängande period för en agent i en given profil, plus en sammanfattning av de samtal de hanterade inom den platsen.

Fält

Värde

Rotfråga

profilhistorik

Returtyp

ProfilHistorikÖversiktAnslutning!

Posttyp

ProfilHistorikÖversiktPost

Levande motsvarighet

`/profilhistorik` (§ 2.5)

hölje

kamelFall


Exempelfråga

query Prof ilHis t ory ($s tart Date : Date Time , $e n dDate : Date Time ) {

pro f ile_his t ory ( filter : { startdatum : $s tart date , e n dDate : $ e n dDa te } , f irs t : 25 ) {

da ta

ålder nt { id namn mig }

slot t { startdatum te e n dDa te  Tiden är upptagen

pro f ileAvailable { namn användning upptagen är Wrapup }

samtalssammanfattning { totalt antal samtal totala svar varaktighet { samtal } }

}

    Totalt antal markören har Nästa sida

}

}


Kör det från Node.js

const res = await hämtning( "https://statistics-api.telavox.se/graphql" , {

metod: "POST" ,

rubriker: {

    "Innehållstyp" : "applikation/json" ,

Auktorisering: `Bärare ${ process.env.TELAVOX_TOKEN }` ,

},

kropp: JSON .stringify({

fråga: `query ProfileHistory($startDate: DatumTid, $slutDate: DatumTid) {

profile_history(filter: { startDate: $startDate, endDate: $endDate }, first: 25) {

data { agent { id name } slot { startDate endDate } callSummary { totalCalls } }

totalCount-markören harNästaSida

}

}` ,

variabler: {

startdatum: "2025-10-01T00:00:00Z" ,

slutdatum: "2025-10-06T23:59:59Z" ,

},

}),

});

const { data } = await res.json();

console.log(data.profile_history);


Kör det från Python

importera operativsystem, förfrågningar

 

QUERY = """query ProfileHistory($startDate: DateTime, $endDate: DateTime) {

profile_history(filter: { startDate: $startDate, endDate: $endDate }, first: 25) {

data { agent { id name } slot { startDate endDate } callSummary { totalCalls } }

totalCount-markören harNästaSida

}

}"""

 

res = requests.post(

    "https://statistics-api.telavox.se/graphql" ,

rubriker={

        "Innehållstyp" : "applikation/json" ,

        "Auktorisering" : f"Bärare { os.environ[ 'TELAVOX_TOKEN' ] }" ,

},

json={

        "fråga" : FRÅGA,

        "variabler" : {

            "startdatum" : "2025-10-01T00:00:00Z" ,

            "slutdatum" : "2025-10-06T23:59:59Z" ,

},

},

)

skriv ut (res.json()[ "data" ][ "profilhistorik" ])


Fältreferens

{

  "agent" : {

    "id" : "Int" ,

    "konto-ID" : "Int" ,

    "namn" : "Sträng" ,

    "telefon" : "Sträng" ,

    "e-post" : "Sträng" ,

    "svarade" : "Datum/Tid" ,

    "attÖverföra" : "Int" ,

    "frånÖverföring" : "Int" ,

    "licens" : {

      "ccpro" : "Int" ,

      "typ" : "Sträng"

}

},

  "plats" : {

    "startdatum" : "Flytande" ,

    "slutdatum" : "Flytande" ,

    "tidsintervall" : "Heltal" ,

    "upptagen" : "Int"

},

  "profilTillgänglig" : {

    "id" : "Int" ,

    "namn" : "Sträng" ,

    "användning" : "Int" ,

    "upptagen" : "Int" ,

    "tillgänglig" : "Booleskt" ,

    "aktiv" : "Booleskt" ,

    "isWrapup" : "Booleskt värde" ,

    "tiderIProfil" : "Int" ,

    "timeStart" : "Flytande"

},

  "samtalsammanfattning" : {

    "totaltAntal" : "Int" ,

    "totaltBesvarat" : "Int" ,

    "varaktighet" : {

      "prata" : "Int"

},

    "idCalls" : "[Sträng!]" ,

    "answeredCalls" : "[Sträng!]" ,

    "avslutadeAnrop" : "[Sträng!]" ,

    "activeCalls" : "[Sträng!]"

}

}

Radera