Datenbank - Eingehender bzw. ausgehender Anruf?

Günter

Customer
Mitglied seit
25. November 2024
Beiträge
12
Hallo,
Frage bezüglich der Datenbank.
Mit liegt hiefür diese Doku vor: https://www.3cx.com/docs/call-detail-record-guide

Mein Problem ist aktuell, dass ich nicht sicher bin, wie ich aus der Datenbank herausfinde, ob ein Anruf ein eingehender Anruf oder ein ausgehender Anruf war. Ich dachte zunächst das wären die Spalten source_participant_is_incoming bzw. destination_participant_is_incoming, aber anscheinend ist das nicht der Fall. Auch wenn ich einen Anruf tätige, steht immer bei ersterer TRUE und bei zweiter false, genauso wie wenn jemand bei uns anruft.
Kann mir hier bitte jemand kurz auf die Sprünge helfen, welches Datenbankfeld hierfür zuständig ist?

Vielen Dank im Voraus :-)
Gruß Günter
 
Da gibt es wie so oft mehrere Möglichkeiten, z.B. Felder 16 bis 19 (bill...) enthalten nur Daten bei ausgehenden Anrufen, Feld 15 final-dn und Feld 11 to-dn ist die DN des SIP Trunk (möglich auch Bridge?), d.h. 5stellig und beginnt mit einer Zahl ab 10000 usw..
 
dest_dn, src_dn sind zwei gute Indikatoren. Zudem müsste eigtl. Eine Spalte existieren die zeigt ob es internal or external ist. Ich meine src_is_internal oder _external
 
Wenn du from_dn oder to_dn meinst: kann man machen.
Wir verwenden i.d.R. final_dn da genauso oder gar besser geeignet, s.o. . Rein als Indikator sind die bills_ Felder gut: ausgehende Anrufe über SIP Trunks kosten halt Geld.


gibt's leider nicht

Anhang anzeigen 19638
In der Tabelle cdroutput gibt es noch mehr Felder, die man über die CDR-Auswahl nicht sehen kann/bekommt. Ich war gedanklich allerdings noch bei der V18-Tabelle unterwegs. In V20 lässt sich das relativ eindeutig über die Spalte "source_entity_type" feststellen.

Bei einem von extern eingehenden Anruf hat das Feld den Wert "external_line".
Bei einem von intern nach außen gehenden Anruf ist der Wert "extension" oder ein anderer entsprechender String.

Zur 100%igen Validierung kann man den Wert zusätzlich gegen die Spalte "destination_entity_type" prüfen. Alle Werte außer "outbound_rule" und "external_line" sollten internen Zielen entsprechen. Entsprechend sollte der folgende Query ein passendes Ergebnis liefern:

SQL:
SELECT
    *
FROM cdroutput
WHERE source_entity_type = 'external_line'
  AND destination_entity_type NOT IN ('outbound_rule', 'external_line');

Der Query gibt eine Liste der eingehenden Anrufe zurück. Das WHERE kann dann entsprechend erweitert werden um z.B. das Suchen nach einer bestimmten Nummer zu ermöglichen, dafür sollte man dann die Spalten "source_participant_phone_number" und/oder "destination_participant_phone_number" nutzen. Eine Kombination aus beiden könnte so aussehen:

SQL:
AND (
   regexp_replace(source_participant_phone_number, '^(\\+|00|0)', '') = '+49123412345678'
   OR regexp_replace(destination_participant_phone_number, '^(\\+|00|0)', '') = '+49123412345678'
)

Um eine Liste ausgehender Anrufe zu erhalten nutzt man dann:
SQL:
SELECT
    *
FROM cdroutput
WHERE source_entity_type NOT IN ('external_line', 'outbound_rule')
  AND destination_entity_type = 'external_line';
 
Zuletzt bearbeitet:
  • Like
Reaktionen: fxbastler
  • Like
Reaktionen: patrickb
Anbei noch eine Idee wie man es mittels API herausfindet/filtern kann.

Inbound:
https://pbx.url/xapi/v1/ReportInboundCalls/Pbx.GetInboundCalls(periodFrom=2025-12-28T23%3A00%3A00.000Z,periodTo=2025-12-29T23%3A00%3A00.000Z,trunkDns='',callsType=0)?%24top=101&%24skip=0&%24search=%22012345678%22

Outbound:
https://pbx.url/xapi/v1/ReportOutboundCalls/Pbx.GetOutboundCalls(periodFrom=2025-12-28T23%3A00%3A00.000Z,periodTo=2025-12-29T23%3A00%3A00.000Z,trunkDns='',callsType=0)?%24top=101&%24skip=0&%24search=%22012341234%22

Beides via GET mit entsprechendem Token anfragen. Filter entsprechend anpassen und ab gehts. Das JSON was zurückkommt kann man dann entsprechend weiterverarbeiten z.B. auch in einem Call Flow usw.
 
Zuletzt bearbeitet:

Statistik des Forums

Themen
44.429
Beiträge
232.767
Mitglieder
78.337
Neuestes Mitglied
ricardo.silva