WhatsApp KI Integration: So verpasst du deinem Chat eine Telefonnummer

KI Whatsapp Integration - gibt dem Chat eine Telefonnummer

In einem spannenden Projekt für die WEB WE DO GmbH haben wir den KI-gestützten Chat zur Job-Suche (hey-ki.such-mir-einen-job.de/ueber_uns) mit WhatsApp verbunden und so eine Blaupause für unsere KI WhatsApp Integration geschaffen. Jetzt hat die KI eine Telefonnummer, und Nutzer können ihr einfach eine Nachricht schicken, um direkt die neuesten Job-Angebote zu erhalten.

So verbindest du eine KI mit WhatsApp: Ein praktischer Leitfaden

Was du dafür brauchst:

  1. Developer Account bei Facebook: Ein Entwicklerkonto, um eine App zu erstellen, die mit der WhatsApp API interagieren kann.
  2. Business Account des Unternehmens bei Facebook: Ein verifiziertes Geschäftskonto des Unternehmens, das als Basis für die App dient.
  3. WhatsApp Business Account: Ein WhatsApp Business-Konto mit einer verknüpften Telefonnummer, über die die KI ansprechbar ist.

Die grobe Lösungsskizze:

  1. Telefonnummer mit der App verbinden: Die Telefonnummer wird in der WhatsApp-App registriert und so mit der API verbunden, dass Nachrichten direkt weitergeleitet werden können.
  2. Webhook einrichten: Die App leitet alle eingehenden WhatsApp-Nachrichten über Webhooks an einen API-Endpunkt weiter, der auf einem eigenen Server gehostet ist.
  3. Nachrichtenverarbeitung durch die KI: Die eingehenden Nachrichten werden von einer KI entgegengenommen. Hier kann jede gewünschte Funktionalität hinzugefügt werden – sei es eine Terminplanung, eine E-Mail-Benachrichtigung, eine Datenerfassung oder wie in unserem Fall eine Job-Suche.
  4. Antwort der KI zurück an WhatsApp: Die generierte Antwort der KI wird über die WhatsApp API wieder an den Nutzer gesendet. Dabei lassen sich verschiedene Nachrichtentypen verwenden:
    • Textnachrichten: Für direkte und einfache Antworten.
    • Interaktive Nachrichten: Mit Buttons, Quick-Replies und anderen interaktiven Optionen für ein dynamischeres Erlebnis.

Besondere Herausforderung: Datenschutz

Eine besondere Herausforderung der KI WhatsApp Integration ist, dass die Telefonnummer als User-ID ankommt – ein kritisches, personenbezogenes Datum. Im Projekt haben wir das so gelöst, dass wir die Telefonnummer zusammen mit einem 256-Bit-Key hashen. Anschließend arbeiten wir nur noch mit diesem Hash. Die Telefonnummer selbst liegt nur im Request-Response-Zyklus im flüchtigen Speicher und wird nie persistiert. Alle restlichen Benutzerdaten (wie etwa der Gesprächsverlauf) werden ebenfalls verschlüsselt. Hierfür erzeugen wir aus dem Hash der Telefonnummer einen starken synchronen Schlüssel, der ebenfalls nur im Request-Response-Zyklus verfügbar ist. So bleiben selbst bei einem möglichen Datenleck alle Informationen geschützt, da ohne die Telefonnummer und unseren geheimen Schlüssel keine Informationen entschlüsselt werden könnten.

Fazit

Nach ersten Einstiegshürden in der Verbindung aller Komponenten war ich von der UX mit der KI über WhatsApp zu chatten total überrascht. Mit diesem Konzept sind unheimlich viele Use-Cases denkbar!
Du willst wissen, wie sich das anfühlt? Probier es selbst aus: https://hey-ki.such-mir-einen-job.de/job-suche-per-whatsapp/

Tab-Navigation per JS – nicht nur in automatisierten Unit-Tests

Als ich letztens am Test-Harness einer Angular9-Komponente gearbeitet habe und die Reaktion auf die Tab-Taste automatisiert testen wollte, war ich doch sehr überrascht, dass dies wohl nach wie vor erst in End-2-End-Tests mit Protractor möglich ist, da die Tab-Taste im Unit-Test nicht simuliert wird. Eine Recherche im Netz ergab, dass das wohl nach wie vor als allgemeines Problem angesehen wird und die einzige Bibliothek (jquery-emulatetab) die ich gefunden habe, setzt auf jQuery auf – eine Abhängigkeit, die so gar nicht in den Stack dieses Angular-Projekts hineinpasst. Da habe ich mich gefragt, ob man ein ähnliches Tool nicht ohne größere Abhängigkeiten umsetzen könnte. Nach einer kurzen Evaluations-Phase war klar, dass dies mit wenigen Zeilen Code gelingen könnte und um das Ergebnis vorweg zu greifen, dieses Tool nennt sich nun „emulate-tab“, bedient sich lediglich nativer Browser-Funktionen und ist per npm unter MIT-Lizenz verfügbar.

Die Herausforderungen dabei bestanden zum einen darin, mögliche Tab-Ziele und deren Reihenfolge zu ermitteln. Dabei stützt sich das Tool auf die „tabindex“-Property, die manuell oder vom Browser gesetzt wird. Anschließend werden noch einige Elemente, beispielsweise unsichtbare Eingabefelder aussortiert. Zum anderen müssen alle Events simuliert werden, die der Browser bei einem echten Tastendruck auslösen würde. Angefangen beim „keydown“ über „blur“, „focus“ und „keyup“ bis hin zum selektieren von Inhalten im Zielfeld. Insgesamt stellten sich diese aber als wesentlich unkomplizierter heraus, als im Vorfeld befürchtet. So dass die eigentliche Komplexität im Verifizieren des Verhaltens in unterschiedlichen Testumgebungen bestand.

Die Beispielprojekte in Angular-9 mit Material Komponenten, Typescript und RequireJs und purem HTML mit JavaScript mit entsprechenden jeweils automatisierten Testumgebungen (alle karma/Jasmine) zeigen, dass sich das Tool nicht nur in Angular, sondern auch jeder anderen Testumgebung einsetzen lässt. Im ursprünglichem (wesentlich größeren) Projekt setzte ich auch Jest als Test-Runner ein. Selbst npm ist nicht zwingend erforderlich – das Script lässt sich auch direkt auf der GitHub-Release-Seite herunterladen und so in andere Projekte einbinden.

Nicht nur für Tests – auch bei der Verbesserung der UX auf produktiven Seiten, kann „emulate-tab“ unterstützen. So habe ich beispielsweise einen Fall, in dem ein Button nach dem drücken deaktiviert wird. Das gewollte Verhalten wäre, dass dabei ein beliebiges Feld nach dem Button in den Fokus rückt – das native Verhalten des Browsers selektiert aber das Feld vor dem Button. Da es sich um eine Wiederverwendbare Komponente handelt, ist das Feld nach dem Button nicht bekannt. Durch ein „emulateTab()“ nach dem deaktivieren des Buttons, stellt dies nun keine Herausforderung mehr dar.

Fazit: Das programmatische auslösen einer Tab-Navigation auf Web-Seiten sollte mit „emulate-tab“, einem einfachem kleinen Tool ohne Abhängigkeiten, zukünftig kein größeres Problem mehr darstellen.

Projektstart Angular 2

Es ist soweit, ich habe mein erstes praktisches Angular 2 Projekt gestartet! Nachdem ich mich jetzt sehr intensiv in das Framework einarbeiten konnte, freue ich mich endlich erste praktische Erfahrungen sammeln zu können. Auch wenn ich hier aufgrund der üblichen Geheimhaltungsvereinbarung natürlich keine Details preisgeben kann, mag ich auf einige grobe Rahmenbedingungen eingehen. Das Team, das ich im Projekt unterstütze, ist wohl schon mit AngularJS gestartet und hat einige Vorgehensweisen, Pattern und Antipattern entwickelt, die nun in Bezug auf Angular 2 geprüft werden müssen.

Ansonsten finde ich es gut, dass wir unser eigenes Device nutzen können – so muss ich keinen klobigen Laptop mitschleppen, sondern kann auf meinem Surface Pro arbeiten. Auch unsere Entwicklungsumgebung können wir frei wählen – ich habe mit Atom angefangen, bin aber sehr schnell auf Microsoft Visual Studio Code umgestiegen. Mal sehen, ob ich zu einem späteren Zeitpunkt mehr über die eingesetzten Technologien und gewonnene Erfahrungen schreiben kann.