Dokumentation
pascom Produkt Dokumentation und Release Notes
Analytics Anpassungen
Nachdem Sie sich mit den Grundlagen von pascom Analytics vertraut gemacht haben können Sie hier lernen wie Sie eigene Anpassungen vornehmen können.
Übersicht
Sie können nur Datenbankabfragen anpassen! Die Datenquellen für Live-Dashboard werden von pascom statisch generiert.
Mit pascom Analytics können Sie nicht nur eigene Dashboards mit vorhanden Graphen erstellen, sondern auch die darunterliegenden Datenquellen. frei anpassen.
Voraussetzung dafür ist, dass Sie mit den Grundlagen von pascom Analytics sowie SQL vertraut sind.
Einstieg
Die einfachste Möglichkeit die verwendeten SQL Abfragen zu verstehen ist, vorhandene Grafen zu editieren. Kopieren Sie hierzu zunächst ein vorhandenes Dashboard (Siehe Neues Dashboard erstellen). Danach können Sie Graphen und Tabellen editieren und das SQL anpassen.
Klicken Sie bei einem beliebigen Graphen oder einer Tablle auf :
Nun können Sie das SQL anpassen und testen:
Weitere Informationen, insbesondere zu Variablen, finden Sie im Editor unter .
Die verwendete Datenbank ist PostgreSQL. Informationen zu PostgreSQL in Zusammenhang mit Grafana (von pascom verwendete Analytics Tool) finden Sie unter Using PostgreSQL in Grafana.
SQL Funktionen
pascom stellt SQL Funktionen zur Abfrage von Daten bereit. Diese können, ähnlich wie Tabellen, in SQL Abfragen genutzt werden.
filter_calls()
Diese Funktion gibt alle abgeschlossenen Anrufe zurück. Anrufe die im Moment der Abfrage noch aktiv sind (live) werden nicht berücksichtigt.
Parameter
filter_calls(
from_timestamp,
to_timestamp,
call_type,
filter_user,
filter_label,
filter_from_name,
filter_from_number,
filter_to_name,
filter_to_number
)
Parameter | Beschreibung |
---|---|
from_timestamp | Anrufe seit diesem Zeitpunkt. Üblicherweise Dasboard-Variable $__timeFrom() für selektierten Zeitraum. |
to_timestamp | Anrufe bis zu diesem Zeitpunkt. Üblicherweise Dashboard-Variable $__timeTo() für selektierten Zeitraum. |
call_type | Mögliche Werte: all = alle Anrufe, inbound = Nur eingehende Anrufe, outbound = Nur ausgehende Anrufe, internal = Nur interne Anrufe |
filter_user | Filter nach Benutzername (nicht Anzeigename). * = Alle Benutzer. Mehrere Benutzer per Kommagetrennter Liste möglich z.B. ‘user1, user2’. |
filter_label | Filter nach Labelname. * = Alle Label. Mehrere Label per Kommagetrennter Liste möglich z.B. ‘label1, label2’. |
filter_from_name | Filter nach Anrufer Namen. Anzeigenamen des Anrufers, z.B. aus Telefonbuch falls vorhanden. Lassen Sie den Parameter leer um keinen Filter anzuwenden. |
filter_from_number | Filter nach Anrufer Nummer. Lassen Sie den Parameter leer um keinen Filter anzuwenden. |
filter_to_name | Filter nach Angerufenem Namen. Anzeigenamen des Angerufenen, z.B. aus Telefonbuch, falls vorhanden. Lassen Sie den Parameter leer um keinen Filter anzuwenden. |
filter_to_number | Filter nach Angerufenem Nummer. Lassen Sie den Parameter leer um keinen Filter anzuwenden. |
Rückgabewerte
Rückgabewert | Beschreibung |
---|---|
record_timestamp | Zeitpunkt zu dem dieser Anruf gestartet wurde. |
record_id | ID dieses Datensatzes. |
from_internal | Anrufer intern?: t = ja, f = nein. |
from_number | Anrufer Nummer. |
from_name | Anrufer Anzeigename, z.B. aus Telefonbuch, falls vorhanden. |
to_internal | Angerufener intern?: t = ja, f = nein. |
to_number | Angerufener Nummer. |
to_name | Angerufener Anzeigenamen, z.B. aus Telefonbuch falls vorhanden. |
status | Mögliche Werte: hangup = Anruf wurde normal aufgelegt, transfer = Anruf wurde verbunden, noanswer = Anruf wurde nicht beantwortet. |
direction | Mögliche Werte: inbound = Eingehender Anruf, outbound = Ausgehender Anruf, internal = Interner Anruf. |
total_duration | Gesamtdauer des Anrufes. Der Anruf startet sobald der Benutzer oder das Team gerufen wird. IVR, Anrufverteiler, etc. werden nicht mitgezählt. |
ringing_duration | Dauer bis der Anruf durch einen Benutzer beantwortet wird. |
talking_duration | Dauer des Gesprächs inklusive hold_duration. |
hold_duration | Dauer die der Anruf gehalten wurde. |
data | Anrufdaten im JSON Format. |
record_chain | Jeder Anruf ist mit mehreren Einzelaktionen über die record_chain verknüpft. Die Einzelaktionen stehen in der Tabelle mdphonecallrecord, die Chain in der Spalte phonecallrecord_chain. |
filter_queue_calls()
Diese Funktion gibt alle abgeschlossenen und eingehenden Anrufe zurück die über ein Team gelaufen sind. Anrufe die im Moment der Abfrage noch aktiv sind (live) werden nicht berücksichtigt.
Parameter
filter_queue_calls(
from_timestamp,
to_timestamp,
filter_team,
filter_user,
filter_from_name,
filter_from_number,
filter_label
)
Parameter | Beschreibung |
---|---|
from_timestamp | Anrufe seit diesem Zeitpunkt (Timestamp ohne Zeitzone). Üblicherweise Dasboard-Variable $__timeFrom() für selektierten Zeitraum. |
to_timestamp | Anrufe bis zu diesem Zeitpunkt (Timestamp ohne Zeitzone). Üblicherweise Dashboard-Variable $__timeTo() für selektierten Zeitraum. |
filter_team | Filter nach Teamname. * = Alle Teams. Mehrere Teams per kommagetrennter Liste möglich z.B. ‘team1, team2’. |
filter_user | Filter nach Benutzername (nicht Anzeigename). * = Alle Benutzer. Mehrere Benutzer per kommagetrennter Liste möglich z.B. ‘user1, user2’. |
filter_from_name | Filter nach Anrufer Namen. Anzeigenamen des Anrufers, z.B. aus Telefonbuch, falls vorhanden. Lassen Sie den Parameter leer um keinen Filter anzuwenden. |
filter_from_number | Filter nach Anrufer Nummer. Lassen Sie den Parameter leer um keinen Filter anzuwenden. |
filter_label | Filter nach Labelname. * = Alle Label. Mehrere Label per Kommagetrennter Liste möglich z.B. ‘labe1, label2’. |
Rückgabewerte
Rückgabewert | Beschreibung |
---|---|
id | ID dieses Datensatzes. |
chain | Jeder Anruf ist mit mehreren Einzelaktionen über die record_chain verknüpft. Die Einzelaktionen stehen in der Tabelle mdphonecallrecord, die Chain in der Spalte phonecallrecord_chain. |
from_internal | Anrufer intern?: t = ja, f = nein. |
from_number | Anrufer Nummer. |
from_name | Anrufer Anzeigename, z.B. aus Telefonbuch, falls vorhanden. |
total_duration | Gesamtdauer des Anrufes. Der Anruf startet sobald das Team gerufen wird. IVR, Anrufverteiler, etc. werden nicht mitgezählt. |
talking_duration | Dauer des Gespräches inklusive hold_duration. |
moh_duration | Dauer in der Musik On Hold gespielt wurde. |
hold_duration | Dauer die der Anruf gehalten wurde, exclusive moh_duration. |
status | Mögliche Werte: hangup = Anruf wurde normal aufgelegt, transfer = Anruf wurde verbunden, noanswer = Anruf wurde nicht beantwortet. |
queue_timestamp | Zeitpunkt zu dem dieser Anruf gestartet wurde. |
queue_name | Name des Teams. |
data | Anrufdaten im JSON Format. |
agent_record_id | ID des Teammitgliedes, der den Anruf beantwortet oder transferiert hat. Alle agent_ Felder sind nur gefüllt wenn der Anruf beantwortet oder transferiert wurde. |
agent_chain | Gleicher Wert wie chain. |
agent_timestamp | Zeitpunkt wenn das Teammitglied gerufen wird. |
agent_name | Benutzername (nicht Anzeigename) des Teammitgliedes. |
agent_number | Interne Durchwahl des Teammitgliedes. |
agent_ringing | Rufdauer des Teammitgliedes. |
SQL Tabellen
mdphonecallrecord
In mdphonecallrecord wird jeder einzelne Schritt, den ein Anruf durch die Telefonanlage nimmt, gespeichert. Ein Anruf erzeugt also viele Einträge in der mdphonecallrecord. Die einzelnen Einträge werden via Feld phonecallrecord_chain zu einem Anruf verkettet.
Nutzen Sie bitte vorwiegend die von pascom angebotenen SQL Funktionen und greifen nur für etwaige Details auf diese Tabelle zu.
Beispiel: Verbinden mit Rücksprache
In der mdphonecallrecord entsteht für jeden einzelnen Schritt ein Eintrag.
Als Schritt verstehen wir jedes Objekt in pascom, dass über eine Durchwahl erreichbar ist.
In unserem Beispiel ist der Anruffluss wie folgt:
- Anrufer ruft Benutzer A direkt an (Durchwahl 101).
- Benutzer A legt Benutzer A auf “hold” und ruft Benutzer B an (Durchwahl 102).
- Benutzer A verbindet Anrufer mit Benutzer B (Durchwahl 102).
Der Beispiel-Anruffluss erzeugt demnach drei Einträge in der Datenbank (Nur auszugsweise):
Feldname (phonecallrecord_) | Schritt 1 | Schritt 2 | Schritt 3 |
---|---|---|---|
id | 1 | 2 | 3 |
timestamp | 2020-04-03 12:47:32 | 2020-04-03 12:47:56 | 2020-04-03 12:48:13 |
srcnumber | 004989123123 | 101 | 004989123123 |
dstname | Benutzer A | Benutzer B | Benutzer B |
dstnumber | 101 | 102 | 102 |
parentid | 1 | 2 | |
chain | 158589 9721877_10 | 158589 9721877_10 | 158589 9721877_10 |
result | transfer | transfer | hangup |
resultdetails | dst | src | |
via | transfer | ||
viadetails | |||
duration | 41 | 16 | 18 |
connected | 29 | 12 | 18 |
holdduration | 16 | 0 | 0 |
An den Daten lässt sich folgendes ablesen:
- Der Anrufer hat 13 Sekunden mit Benutzer A gesprochen (connected - holdduration).
- Benutzer A hat 12 Sekunden mit Benutzer B gesprochen und dann den Anrufer an Benutzer B transferiert.
- Benutzer A hat Benutzer B 4 Sekunden lang (duration - connected) gerufen bevor dieser abgehoben hat.
Beispiel: Anruf über IVR und Team
In der mdphonecallrecord entsteht für jeden einzelnen Schritt ein Eintrag.
Als Schritt verstehen wir jedes Objekt in pascom, dass über eine Durchwahl erreichbar ist.
In unserem Beispiel ist der Anruffluss wie folgt:
- Anrufer wird im IVR Menü nach dem Team gefragt und entscheidet sich für 1 (Durchwahl 501).
- Das Team begrüßt den Anrufer durch eine Ansage und ruft die Mitglieder parallel (Durchwahl 201).
- Benutzer A wird gerufen und beantwortet den Anruf nicht (Durchwahl 101).
- Benutzer B wird gerufen und beantwortet den Anruf (Durchwahl 102).
Der Beispiel-Anruffluss erzeugt demnach vier Einträge in der Datenbank (Nur auszugsweise):
Feldname (phonecallrecord_) | Schritt 1 | Schritt 2 | Schritt 3 | Schritt 4 |
---|---|---|---|---|
id | 1 | 2 | 3 | 4 |
timestamp | 2020-04-03 09:42:13 | 2020-04-03 09:42:17 | 2020-04-03 09:42:19 | 2020-04-03 09:42:19 |
srcnumber | 004989123123 | 004989123123 | 004989123123 | 004989123123 |
dstname | IVR | Team | Benutzer A | Benutzer B |
dstnumber | 501 | 201 | 101 | 102 |
parentid | 1 | 1 | 1 | |
chain | 158589 9721877_10 | 158589 9721877_10 | 158589 9721877_10 | 158589 9721877_10 |
result | transfer | hangup | noanswer | hangup |
resultdetails | dst | caller | elsewhere | caller |
via | queue | queue | queue | |
viadetails | caller | agent | agent | |
duration | 4 | 33 | 10 | 30 |
connected | 0 | 20 | 0 | 20 |
holdduration | 0 | 6 | 0 | 6 |
An den Daten lässt sich folgendes ablesen:
- Schritt 2 bis 4 laufen parallel. Dies ist durch die selbe parentid erkennbar.
- Das Team (Schritt 2) läuft so lange bis der Anruf durch einen Benutzer abgearbeitet wurde.
- Die Gesamtdauer des Anrufes ist daher die Dauer von Schritt 1 und Schritt 2, also 37 Sekunden.
- Benutzer A und Benutzer B wurden parallel gerufen (Siehe timestamp).
- Bei Benutzer A hat der Anruf 10 Sekunden lange geläutet, wurde aber nicht beantwortet (duration - connected = 10).
- Benutzer B hate den Anruf nach 10 Sekunden beantwortet (duration - connected = 10) und 20 Sekunden gesprochen.
- Benutzer B hat den Anrufer 6 Sekunden lang auf “Hold” gelegt.
Feldbescheibung mdphonecallrecord
Feldname | Beschreibung |
---|---|
phonecallrecord_id | ID dieses Schrittes. |
phonecallrecord_timestamp | Zeitpunkt zu dem dieser Schritt begonnen wurde. |
phonecallrecord_parentid | ID des vorangegangenen Schrittes. |
phonecallrecord_chain | Über diese ID werden die Schritte zu einem Anruf verkettet. |
phonecallrecord_result | Ergebnis dieses Schrittes. Mögliche Rückgabewerte siehe Tabelle phonecallrecord_result. |
phonecallrecord_resultdetails | Ergebnisdetails dieses Schrittes. Mögliche Rückgabewerte siehe Tabelle phonecallrecord_resultdetails. |
phonecallrecord_via | Über welchen vorangegangenen Schritt wurde dieser Schritt ausgelöst. Mögliche Rückgabewerte siehe Tabelle phonecallrecord_via. |
phonecallrecord_viadetails | Details zum vorangegangenen Schritt. Mögliche Rückgabewerte siehe Tabelle phonecallrecord_viadetails. |
phonecallrecord_recordid | ID des Mitschnitts, falls vorhanden. |
phonecallrecord_duration | Gesamtdauer dieses Schrittes. |
phonecallrecord_connected | Dauer des Gespräches in diesem Schritt. (Ansagen und Wartemusik zählen nicht als Gespräch) |
phonecallrecord_srcinternal | Anrufer intern?: t = ja, f = nein. |
phonecallrecord_srcuserid | Anrufer Benutzer-ID. Nur bei internen Teilnehmern. |
phonecallrecord_srcusername | Anrufer Benutzername. Nur bei internen Teilnehmern. |
phonecallrecord_srcname | Anrufer Anzeigename, z.B. aus Telefonbuch, falls vorhanden. |
phonecallrecord_srcdeviceid | Anrufer Endgerät-ID. Nur bei internen Teilnehmern. |
phonecallrecord_srcdevicename | Anrufer Endgerät-Name. Nur bei internen Teilnehmern. |
phonecallrecord_srclocationid | Anrufer Arbeitsplatz-ID. Nur bei internen Teilnehmern. |
phonecallrecord_srclocationname | Anrufer Arbeitsplatz-Name. Nur bei internen Teilnehmern. |
phonecallrecord_srcprefix | Anrufer Prefix. Nur bei eingehnden Anrufern. Präfix des Amtes über die der Anruf gekommen ist. |
phonecallrecord_srcnumber | Anrufer Telefonnummer. |
phonecallrecord_srcextension | Anrufer Durchwahl. |
phonecallrecord_dstinternal | Angerufener intern?: t = ja, f = nein. |
phonecallrecord_dstuserid | Angerufener Benutzer-ID. Nur bei internen Teilnehmern. |
phonecallrecord_dstusername | Angerufener Benutzername. Nur bei internen Teilnehmern. |
phonecallrecord_dstname | Angerufener Anzeigename, z.B. aus Telefonbuch, falls vorhanden. |
phonecallrecord_dstdeviceid | Angerufener Endgerät-ID. Nur bei internen Teilnehmern. |
phonecallrecord_dstdevicename | Angerufener Endgerät-Name. Nur bei internen Teilnehmern. |
phonecallrecord_dstlocationid | Angerufener Arbeitsplatz-ID. Nur bei internen Teilnehmern. |
phonecallrecord_dstlocationname | Angerufener Arbeitsplatz-Name. Nur bei internen Teilnehmern. |
phonecallrecord_dstprefix | Angerufener Prefix. Nur bei ausgehenden Anrufern. Präfix des Amtes über die der Anruf gegangen ist. |
phonecallrecord_dstnumber | Angerufener Telefonnummer. |
phonecallrecord_dstextension | Angerufener Durchwahl. Nur bei internen Teilnehmern. |
phonecallrecord_srcphonebookentryid | Anrufer ID des Telefonbucheintrages, falls vorhanden. |
phonecallrecord_dstphonebookentryid | Angerufener ID des Telefonbucheintrages, falls vorhanden. |
phonecallrecord_data | Labels, Voicemail, Queuedetails. |
phonecallrecord_holdcount | Wie oft wurde der Anruf in diesem Schritt gehalten. |
phonecallrecord_holdduration | Wie lange wurde der Anruf in diesem Schritt gehalten. |
phonecallrecord_phonecallid | ID für internen gebrauch. |
phonecallrecord_result
Rückgabewert | Beschreibung |
---|---|
noanswer | In diesem Schritt nicht beantwortet. |
hangup | In diesem Schritt behandelt. |
transfer | Von diesem Schritt zum nächsten verbunden. |
phonecallrecord_resultdetails
Rückgabewert | Beschreibung |
---|---|
voicemail | Schritt endete in Voicemailbox. |
src | Anrufer hat weiter verbunden. |
dst | Angerufener hat weiter verbunden. |
abandon | Anrufer hat aufgelegt, bevor der Angerufene geantwortet hat. |
elsewhere | Anrufer wurde von einem anderen Teilnehmer angenommen (nicht in diesem Schritt). |
timeout | Timeout in diesem Schritt erreicht. |
picked | Pickup (Heranholen) wurde ausgeführt. |
caller | Anrufer hat die letzte Aktion ausgeführt. |
agent | Angerufener hat die letzte Aktion ausgeführt. |
phonecallrecord_via
Rückgabewert | Beschreibung |
---|---|
noanswer | Der Anruf wurde in diesem Schritt beendet, da er nicht beantwortet wurde. |
transfer | Der Anruf wurde in diesem Schritt beendet, da er verbunden wurde. |
queue | Der Anruf wurde in diesem Schritt beendet, da es ein Team-Anruf war. |
fax | Der Anruf wurde in diesem Schritt beendet, da es ein Fax war. |
phonecallrecord_viadetails
Rückgabewert | Beschreibung |
---|---|
action | Der Anruf wurde in diesem Schritt beendet, da er durch eine Aktion verbunden wurde. |
src | Der Anruf wurde in diesem Schritt beendet, da er durch den Anrufer verbunden wurde. |
dst | Der Anruf wurde in diesem Schritt beendet, da er durch den Angerufenen verbunden wurde. |
caller | Team-Anruf aus Sicht des Anrufers. |
agent | Team-Anruf aus Sicht des Team-Mitgliedes. |
picked | Herangeholter Anruf. |