Anrufverlauf/-ereignisse an WebAPI senden

Moin die (Damen und) Herren,
ist es möglich bei jeden Anrufevent einen HTTP-Aufruf “abzusetzen”?

Ich möchte folgendes erreichen:

  1. Firma wird angerufen (Person/Team etc.) → API-Aufruf “call incoming: Anrufer, angerufene Nummer” → API legt eintrag an un übermittelt ‘created, id’
  2. Anruf wird angenommen → API-Aufruf “call start” → API bekommt vorherige id mitgegeben
  3. Anruf wird beendet → API-Aufruf “call hangup” → API bekommt vorherige id mitgegeben
  4. Anrufer ist besetzt oder wird nicht angenommen etc. → API call mit Grund und id

Ich möchte alle eingehenden und ausgehenden Anrufe protokollieren und dann in einer eigenen Anwendung einsetzen (Rückrufe, Benachrichtigungen bei besetzt oder abwesend, “Sag mal hat jemand den oder den angerufen”, etc.)
Wenn Pascom selbst eine API hat, aus der ich all diese Informationen abrufen kann, bin ich für jede Info dankbar.
Ich erwarte keine fertige Lösung aber für einen Schubs in die richtige Richtung wäre ich dankbar :smiley:
Ich arbeite mich gern in jedes System ein. Wenn ich das alles mit Asterisk-Skripten realisieren kann, fuchse ich mich auch gern in das Thema ein.

Ein Thema, was immer und immer wieder gewünscht wird, bisher jedoch verhallt und auf keine Resonanz stößt, was auch ich sehr bedauerlich finde.

Ich habe eine ähnliche Anforderung und möchte alle eingehenden und ausgehenden Anrufe in meinem CRM (ZOHO) protokolliert haben, u.a. auch wegen der Abrechnung von Zeiten dem Kunden gegenüber. Mein derzeitiger Kompromiss sieht so aus, dass ich mir einmal täglich über die Rest-API die Gesprächsdaten hole und die Einträge im CRM ablege. Ist dann zwar nicht in Echtzeit aber besser als nix. Und auch wenn das eigentlich banal klingt: Es sind so viele Kleinigkeiten, die da berücksichtigt werden müssen für eine gute Lösung.

Da tauchen dann diverse Fragen auf:

  • Zuordnung der Rufnummer zu einer konkreten Person (im CRM)
  • Was, wenn mehrere Personen eine identische Nummer haben?
  • Was, wenn es die Nummer im CRM (oder wo auch immer Du das speichern willst) noch nicht gibt?
  • Gibt es vielleicht bessere Möglichkeiten als eine Zuordnung über die Rufnummer?
  • Wie könnte man das gut mappen zwischen CRM und Pascom?

Ein paar der v.g. Punkte habe ich für mich gelöst. Völlig ungelöst ist bei mir beispielsweise der Fall, dass ich einen Anruf von einer Nummer erhalte, die ich bisher weder als Telefonbucheintrag in der Pascom haben noch im CRM. Denn selbst wenn ich den Datensatz dann im Telefonbuch anlegen würde, ändert das die per RestAPI ausgelesenen Daten nicht rückwirkend, es gibt also quasi keine Eindeutigkeit.

Alle Vorschläge seitens Pascom liefen bisher darauf hinaus, diese Aufrufe über Aktionen im Client zu machen. Das ist jedoch aus verschiedensten Gründen ungeeignet.

Dein vorgeschlagener Weg würde bei Pascom übrigens derzeit schon daran scheitern, dass Deine Response nirgends auf dem Server gespeichert wird und hierzu umfangreiche Änderungen erforderlich wären.

Offener für die Anbindung von Drittsystemen zu werden, ist schon oft - auch hier im Forum - diskutiert worden und ich sehe das mittlerweile als “must have” an, um überhaupt noch den Anschluß zu behalten in einer mehr und mehr vernetzten Welt. Hoffentlich findet das bei Pascom endlich mal Resonanz.

Meine Idealvorstellung wäre, dass Pascom eine konfigurierbare Aktion (Webhook-Call) im Vorher- und Nachher-Kontext anbietet, wo man dann mittels POST Daten nach extern schicken kann, also ähnlich der Option, Mail, die dort ja inzwischen auch Einzug gehalten hat Ich hatte dazu bereits schon mal einen Lösungsvorschlag an den Support geschickt, sogar mit Screenshots. Leider vergeblich.

Dazu muss ich allerdings sagen, dass der Vorher-Kontext eingentlich auch keine gute Stelle ist, weil dann abhängig von der Konstellation plötzlich ganz viele Webhooks auf einmal geschickt werden (bsp. wenn mehrere Telefone gleichzeitig klingeln). Es müsste daher noch viel früher passieren, quasi noch bevor überhaupt klar ist, wer nun gerade gerufen werden muss. Und selbst dann gibt es noch genug Stolpersteine (wie reagieren, wenn der gerufene Endpunkt nicht antwortet? SIcherheit/Authentifizierung gegenüber dem Endpunkt? Welche Authentifizierungs-Verfahren, also bsp. OAuth, Basic oder what ever)

Ich für meinen Teil habe es aufgegeben. Wenn da mal irgendwann was passiert, freue ich mich. Viel Hoffnung mache ich mir allerdings nicht. Gleichzeit erkenne ich natürlich an, dass es ein sehr komplexes Thema ist, welches nicht mal eben lösbar ist und viele Kapaziäten in der Entwicklung binden würde. Und da muss man dann sicher abwägen, was mit welchem Aufwand umsetzbar und welchen Nutzen kann ich damit erzielen.

Theoretisch kann man mit einem Dialplan per cURL eine HTTP Anfrage senden, immer dann, wenn ein Anruf beendet wurde. Das habe ich aber noch nicht getestet. Würde jedoch Rückmeldung geben sobald ich das getan habe.

Wir rufen derzeit alle 2 Minuten den API Endpoint ab und indexieren alle Anrufe in einem eigenen Format in unserem CRM. Die Zuordnung zu Kunden erfolgt auf Basis der Rufnummern. Die Rest API von Pascom ist sehr schnell und daher sind alle 2 Minuten eine Abfrage überhaupt gar kein Problem. Ich denke sogar, dass minütlich möglich sein sollte.

Welchen Endpunkt nimmst Du denn? CDR mit Unixtimestamp als Filterkriterium?

/cdr?rawdata=1&timefrom={{UNIXT timestamp - 4 Stunden}}&limit=500

Durch rawdata=1 gibt der Endpoint eigentlich alle Anrufdetails zurück die man für das Importieren und Abgleichen benötigt. Da Anrufe aus verschiedenen Anrufketten bestehen und laufende Anrufe nicht aus dem CDR gefiltert werden können, muss man noch den /cdr/live Endpunkt abfragen und alle Teilanrufe aus dem CDR herausfiltern, die noch live geführt werden. Dafür die parentId der laufenden Anrufe mit dem Feld phonecallId der CDR abgleichen und alle verbundenen Anrufe der Kette herausfiltern. Dadurch beinhaltet die CDR nur noch vollständig abgeschlossene Anrufe, die sich nicht mehr verändern sollten. Dennoch prüfe ich jede Kette auf Vollständigkeit und aktualisiere diese, wenn sie sich verändert hat. Das passiert sehr selten, dennoch möchte ich Konsistenz in meinen Daten gewährleistet haben.

Ich habe in den letzten Jahren ein Framework entwickelt um das Beste aus der Pascom API herauszuholen. Mit Filtern und Speichern in der CRM-Datenbank dauert dieser Prozess maximal 150ms. Das kann man problemlos alle 2 Minuten ausführen. Insgesamt sind es lediglich 60 Abfragen (cdr und cdr/live) auf den API Endpoint pro Stunde.

2 Likes

Hallo @hazington,
welches CRM-System nutzt ihr, falls ich fragen darf?

Wir benutzen ein selbst entwickeltes CRM-System. Ich spiele übrigens mit dem Gedanken im nächsten Jahr meine Pascom-Bibliothek für PHP zu veröffentlichen. Mit dieser kann man Gesprächlisten (die nur vollständige und abgeschlossene Anrufe beinhaltet) abrufen, damit diese indexiert werden können, Live-Gespräche abrufen ohne API Bursting, Mitglieder in Teams ein/ausloggen, Rufaufzeichnungen mit Anrufen verknüpfen, genauso Voicemails und den Pascom Client vollständig steuern, um Anrufe anzunehmen, durchzustellen und zu beenden. Die Pascom API ist ziemlich mächtig und sehr sehr schnell. Pascom lässt sich damit (gut gemacht) in nahezu Echtzeit steuern.