Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Dynamische Flows einrichten
Ein Dynamic Flow ruft zur Laufzeit Ihren eigenen HTTPS-Endpunkt auf, um den Bildschirminhalt abzurufen und über die Navigation zu entscheiden. Statische Flows definieren alle Bildschirme im Flow-JSON. Dynamische Flows verwenden stattdessen die data_exchange Aktion, um jedes Mal, wenn ein Benutzer zwischen Bildschirmen navigiert, Daten von Ihrem Endpunkt anzufordern. Dies ermöglicht personalisierte, datengestützte Erlebnisse, z. B. wenn einem Benutzer seine offenen Bestellungen angezeigt werden, Eingaben serverseitig validiert werden oder Branches auf der Grundlage einer Backend-Entscheidung erstellt werden.
Wenn ein Benutzer mit einem Dynamic Flow interagiert, ruft Meta Ihren Endpunkt direkt mit einer verschlüsselten Anfrage an. Ihr Endpunkt entschlüsselt die Anfrage, führt Ihre Geschäftslogik aus, verschlüsselt die Antwort und gibt sie an Meta zurück. Die verschlüsselte Anfrage und Antwort werden direkt zwischen Meta und Ihrem Endpunkt weitergeleitet, sodass AWS End User Messaging Social niemals Zugriff auf den entschlüsselten Inhalt dieser Austausche hat. AWS End User Messaging Social verwaltet die Steuerungsebene: Es erstellt und aktualisiert Flows, lädt den öffentlichen Verschlüsselungsschlüssel hoch und stellt Flow-Health-Webhooks bereit.
Um einen dynamischen Flow einzurichten, führen Sie die folgenden Schritte aus:
Stellen Sie einen HTTPS-Endpunkt bereit.
Laden Sie einen öffentlichen Unternehmensschlüssel für die Verschlüsselung hoch.
Erstellen Sie den Flow mit Ihrem Endpunkt-URI.
Hängen Sie Ihre Meta-App an, um eine Bestätigung anzufordern.
Veröffentlichen Sie den Flow.
Schritt 1: Stellen Sie einen HTTPS-Endpunkt bereit
Ihr Endpunkt muss die folgenden Anforderungen erfüllen:
Öffentlich zugängliche HTTPS-URL mit einem gültigen TLS-Zertifikat.
Reagiert innerhalb von 10 Sekunden. Meta erzwingt einen harten Timeout und überwacht die p90-Latenz. Endpunkte, die den Latenzschwellenwert ständig überschreiten oder Fehler zurückgeben, können gedrosselt oder blockiert werden.
Akzeptiert POST-Anfragen, die verschlüsselte JSON-Payloads enthalten.
Gibt verschlüsselte Antworten als
text/plain(base64-kodiert) zurück.
Sie können jede Rechenoption verwenden, die eine öffentliche HTTPS-URL bereitstellt. Zu den gängigen Ansätzen gehören:
AWS Lambda Funktions-URL — Eine einzelne Funktion mit einem integrierten HTTPS-Endpunkt. Stellen Sie den Autorisierungstyp auf ein
NONE, da Meta ihn nicht verwendet. Sie authentifizieren Anfragen mit dem von Ihnen konfigurierten Geschäftsverschlüsselungsschlüsselpaar. Schritt 2: Laden Sie einen öffentlichen Unternehmensschlüssel hochAmazon API Gateway mit Lambda — Bietet zusätzliche Steuerelemente wie Ressourcenrichtlinien zur Einschränkung von Quell-IPs, AWS WAF Regeln und Drosselung.
Elastic Load Balancing mit Lambda-Zielen — Nützlich, wenn Sie eine Kombination mit einer vorhandenen Infrastruktur mit Lastenausgleich vornehmen möchten.
Jeder andere HTTPS-Server (Container, Amazon EC2-Instances oder externe Dienste).
Ihr Endpunkt muss den Datenaustauschvertrag von Meta implementieren, der die folgenden Anforderungstypen verarbeitet:
Gesundheitscheck — Meta sendet regelmäßig
pingAnfragen, um zu überprüfen, ob Ihr Endpunkt verfügbar ist. Antworte mit{"data": {"status": "active"}}.INIT — Wird gesendet, wenn ein Benutzer den Flow öffnet. Gibt den Startbildschirm und seine Daten zurück.
data_exchange — Wird jedes Mal gesendet, wenn ein Benutzer einen Bildschirm sendet. Gibt den nächsten Bildschirm und seine Daten zurück.
ZURÜCK — Wird gesendet, wenn ein Benutzer zu einem vorherigen Bildschirm zurückkehrt.
Den vollständigen Leitfaden zur Implementierung von Endpunkten, einschließlich Codebeispielen für Verschlüsselung und Entschlüsselung in mehreren Sprachen, finden Sie unter Implementieren Ihres Flow-Endpunkts
Schritt 2: Laden Sie einen öffentlichen Unternehmensschlüssel hoch
Meta verschlüsselt alle Datenaustauschanfragen durchgängig mithilfe Ihres öffentlichen RSA (Rivest-Shamir-Adleman) -Schlüssels. Ihr Endpunkt entschlüsselt die Anfragen mit dem entsprechenden privaten Schlüssel. AWS End User Messaging Social lädt den öffentlichen Schlüssel in Ihrem Namen auf Meta hoch, greift jedoch niemals auf den privaten Schlüssel zu oder speichert ihn.
Verwenden Sie die PutWhatsAppBusinessPublicKey API, um einen öffentlichen Schlüssel für eine Telefonnummer hochzuladen. Sie müssen genau eine der folgenden Angaben machen:
PEM-encoded Öffentlicher RSA-Schlüssel — Geben Sie den Schlüssel direkt ein. Ihr Endpunkt enthält den entsprechenden privaten Schlüssel zur Entschlüsselung.
AWS Key Management Service Schlüssel-ARN — Geben Sie den ARN eines asymmetrischen RSA-2048 KMS-Schlüssels an. AWS End User Messaging Social liest nur die öffentliche Hälfte, die es verwendet,
kms:GetPublicKeyund lädt es auf Meta hoch. Der private Schlüssel geht AWS KMS niemals weg. Ihr Endpunkt wird verwendetkms:Decrypt, um Anfragen zur Laufzeit zu entschlüsseln.
Wenn Sie beides oder keines von beiden angeben, wird ein InvalidParametersException zurückgegeben.
PEM-Modus
Generieren Sie ein RSA-Schlüsselpaar und laden Sie den öffentlichen Schlüssel hoch:
# Generate a key pair openssl genrsa -out private.pem 2048 openssl rsa -in private.pem -pubout -out public.pem # Upload the public key aws social-messaging put-whatsapp-business-public-key \ --origination-phone-number-id{PHONE_NUMBER_ID}\ --business-public-key "$(cat public.pem)"
Speichern Sie den privaten Schlüssel sicher und stellen Sie ihn Ihrem Endpunkt zur Entschlüsselung zur Verfügung.
AWS KMS mode
Erstellen Sie einen asymmetrischen RSA KMS-Schlüssel und laden Sie seinen ARN hoch:
# Create the KMS key KMS_KEY_ARN=$(aws kms create-key \ --key-spec RSA_2048 \ --key-usage ENCRYPT_DECRYPT \ --description "WhatsApp Dynamic Flow encryption key" \ --query KeyMetadata.Arn --output text) # Upload the KMS key ARN aws social-messaging put-whatsapp-business-public-key \ --origination-phone-number-id{PHONE_NUMBER_ID}\ --kms-key-arn$KMS_KEY_ARN
Die KMS-Schlüsselrichtlinie muss die folgenden Berechtigungen gewähren:
kms:GetPublicKeyan densocial-messaging.amazonaws.com.rproxy.goskope.comDienstprinzipal. Dadurch kann AWS End User Messaging Social den öffentlichen Schlüssel lesen und auf Meta hochladen.kms:Decryptzur Ausführungsrolle Ihres Endpunkts. Dadurch kann Ihr Endpunkt eingehende Datenaustauschanfragen entschlüsseln. AWS End User Messaging Social ruft diesen Schlüssel niemalskms:Decryptauf.
Überprüfung des Schlüssels
Verwenden Sie die GetWhatsAppBusinessPublicKey API, um den gespeicherten Schlüssel zu verifizieren und den Signaturstatus von Meta zu überprüfen:
aws social-messaging get-whatsapp-business-public-key \ --origination-phone-number-id{PHONE_NUMBER_ID}
Die Antwort beinhaltet das gespeicherte PEM und den Signaturstatus (VALIDoderMISMATCH) von Meta. Ein MISMATCH Status zeigt an, dass der gespeicherte Schlüssel nicht den Erwartungen von Meta entspricht. Laden Sie einen neuen Schlüssel hoch, wenn Sie diesen Status sehen.
Schritt 3: Erstellen Sie den Flow mit einem Endpunkt
Wenn Sie einen dynamischen Flow erstellen, geben Sie den --endpoint-uri Parameter mit Ihrer HTTPS-Endpunkt-URL an. Das Flow-JSON muss ebenfalls deklariert werdendata_api_version, was Meta anweist, deinen Endpunkt während Flow-Sitzungen aufzurufen.
aws social-messaging create-whatsapp-flow \ --id{WABA_ID}\ --flow-name "my_dynamic_flow" \ --categories '["OTHER"]' \ --flow-json fileb://flow.json\ --endpoint-uri "https://your-endpoint.example.com/flow"
Du kannst den Endpunkt auch in einem bestehenden DRAFT-Flow hinzufügen oder ändern, indem duUpdateWhatsAppFlow:
aws social-messaging update-whatsapp-flow \ --id{WABA_ID}\ --flow-id{FLOW_ID}\ --endpoint-uri "https://your-endpoint.example.com/flow"
Anmerkung
Wenn Sie einen dynamischen Flow veröffentlichen, führt Meta eine synchrone Integritätsprüfung für Ihren Endpunkt durch. Wenn der Endpunkt nicht reagiert oder einen Fehler zurückgibt, schlägt der Veröffentlichungsvorgang mit einem Metafehler wie 131000 („Stellen Sie sicher, dass der Endpunkt verfügbar ist und dass Sie eine Integritätsprüfung implementiert haben“) fehl. Ein fehlender oder ungültiger öffentlicher Geschäftsschlüssel kann ebenfalls zu diesem Fehler führen. Stellen Sie vor der Veröffentlichung sicher, dass Ihr Endpunkt bereitgestellt ist und auf ping Anfragen reagiert und dass Sie einen gültigen öffentlichen Geschäftsschlüssel hochgeladen haben (sieheSchritt 2: Laden Sie einen öffentlichen Unternehmensschlüssel hoch).
Um den für einen Flow konfigurierten Endpunkt und die Daten-API-Version zu überprüfen, verwenden SieGetWhatsAppFlow:
aws social-messaging get-whatsapp-flow \ --id{WABA_ID}\ --flow-id{FLOW_ID}
Die Antwort enthält die Daten, endpointUri wie sie in Meta enthalten sind, die im Flow dataApiVersion deklarierte JSON-Datei und die aktuell angehängte Dateiapplication.
Schritt 4: Hängen Sie Ihre Meta-App an, um eine Bestätigung anzufordern
Wenn du einen Flow über AWS End User Messaging Social erstellst, wird dieser standardmäßig mit der Meta-App des Dienstes verknüpft. Um zu überprüfen, ob Datenaustauschanfragen an Ihren Endpunkt von Meta stammen, hängen Sie Ihre eigene Meta-App an den Flow an. Wenn deine eigene App nicht angehängt ist, ist eine Überprüfung der Herkunft der Anfrage nicht möglich. Durch das Anhängen Ihrer App erhalten Sie Zugriff auf das App-Geheimnis, das zur Überprüfung des X-Hub-Signature-256 HMAC-Headers erforderlich ist, den Meta bei jeder Anfrage einfügt.
aws social-messaging update-whatsapp-flow \ --id{WABA_ID}\ --flow-id{FLOW_ID}\ --meta-app-id "{YOUR_META_APP_ID}"
Die Meta-App muss demselben Unternehmen gehören, dem auch das WhatsApp Geschäftskonto (WABA) gehört.
Wichtig
Das Anhängen Ihrer eigenen Meta-App ist ein einseitiger Vorgang. Nachdem Sie Ihre App angehängt haben, kann die App des Dienstes nicht erneut angehängt werden. Die Flow-Funktionalität wird dadurch nicht beeinträchtigt. Nur ein neuer Flow setzt die App-Zuordnung zurück.
Du kannst ein --endpoint-uri und --meta-app-id im selben Anruf oder in separaten Aufrufen einrichten. Die beiden Felder sind unabhängig.
Nachdem Sie Ihre App angehängt haben, überprüfen Sie die Konfiguration, indem Sie das application Feld in der Antwort aufrufen GetWhatsAppFlow und überprüfen. Die application.id sollte mit der von Ihnen angegebenen Meta-App-ID übereinstimmen.
Sichern Sie Ihren Endpunkt
Da Meta Ihren Endpunkt direkt aufruft, sollten Sie die folgenden Sicherheitspraktiken berücksichtigen:
-
Überprüfen Sie die Anforderungssignaturen — Wenn Sie Ihre eigene Meta-App angehängt haben (Schritt 4), verwenden Sie das App-Geheimnis, um den
X-Hub-Signature-256HMAC-SHA256 Header bei jeder Anfrage zu überprüfen. Dies bestätigt, dass die Anfrage von Meta stammt. Gibt den HTTP-Status 432 zurück, wenn die Überprüfung fehlschlägt. -
Flow-Token validieren — Generieren Sie einen eindeutigen,
flow_tokenfür jede Flow-Sitzung unvorhersehbaren Wert, wenn Sie den Flow an einen Benutzer senden. Ihr Endpunkt empfängt das Token in der verschlüsselten Nutzlast und sollte es anhand aktiver Sitzungen validieren. Lehnen Sie Anfragen mit unbekannten, abgelaufenen oder bereits abgeschlossenen Tokens ab. Dadurch wird verhindert, dass unautorisierte oder erneut abgespielte Anfragen Ihre Geschäftslogik erreichen. -
Führen Sie Zustandsprüfungen ohne Token-Validierung durch — Meta sendet regelmäßig
pingAnfragen, um den Zustand der Endpunkte zu überwachen. Diese Anfragen enthalten keineflow_token. Reagieren Sie auf Zustandsprüfungen, ohne dass eine Token-Validierung erforderlich ist, da sich die Verfügbarkeitsbewertung Ihres Endpunkts verschlechtert, wenn Sie sie ablehnen. -
Entsprechende Statuscodes zurückgeben — Geben Sie 421 zurück, wenn Ihr Endpunkt die Anfrage nicht entschlüsseln kann (Meta ruft den öffentlichen Schlüssel erneut ab und versucht es erneut). Gib 427 zurück, wenn der ungültig
flow_tokenist (Meta deaktiviert die Flow-Schaltfläche für diese Sitzung).
Einen dynamischen Flow-JSON schreiben
Ein dynamischer Flow-JSON unterscheidet sich in zweierlei Hinsicht von einem statischen Flow-JSON:
Das
data_api_versionFeld der obersten Ebene ist erforderlich. Dadurch wird Meta angewiesen, deinen Endpunkt während Flow-Sitzungen aufzurufen. Unterstützte Werte sind"3.0"und"4.0"(empfohlen).Bildschirmfußzeilen verwenden die
data_exchangeAktion anstelle von.navigateBei jederdata_exchangeAktion werden die Formulardaten an Ihren Endpunkt gesendet, der den nächsten Bildschirm und seinen Inhalt zurückgibt.
Das folgende Beispiel zeigt ein minimales Dynamic Flow-JSON mit zwei Bildschirmen. Der erste Bildschirm erfasst den Namen eines Benutzers und sendet ihn an den Endpunkt. Der Endpunkt gibt auf dem zweiten Bildschirm eine personalisierte Begrüßung zurück.
{ "version": "6.0", "data_api_version": "3.0", "routing_model": { "INPUT": ["RESULT"], "RESULT": [] }, "screens": [ { "id": "INPUT", "title": "Welcome", "data": { "greeting": { "type": "string", "__example__": "Tell us your name" } }, "layout": { "type": "SingleColumnLayout", "children": [ { "type": "TextBody", "text": "${data.greeting}" }, { "type": "Form", "name": "input_form", "children": [ { "type": "TextInput", "name": "user_name", "label": "Your name", "input-type": "text", "required": true }, { "type": "Footer", "label": "Submit", "on-click-action": { "name": "data_exchange", "payload": { "user_name": "${form.user_name}" } } } ] } ] } }, { "id": "RESULT", "title": "Hello", "terminal": true, "data": { "message": { "type": "string", "__example__": "Hello, World!" } }, "layout": { "type": "SingleColumnLayout", "children": [ { "type": "TextBody", "text": "${data.message}" }, { "type": "Footer", "label": "Done", "on-click-action": { "name": "complete", "payload": {} } } ] } } ] }
Die vollständige Flow-JSON-Schemareferenz finden Sie unter Flow JSON
End-to-end Beispiel
Das folgende Beispiel zeigt die vollständige Abfolge von API-Aufrufen zum Einrichten und Veröffentlichen eines dynamischen Ablaufs:
# 1. Upload the business public key (KMS mode) aws social-messaging put-whatsapp-business-public-key \ --origination-phone-number-id{PHONE_NUMBER_ID}\ --kms-key-arn{KMS_KEY_ARN}# 2. Create the Dynamic Flow with an endpoint FLOW_ID=$(aws social-messaging create-whatsapp-flow \ --id{WABA_ID}\ --flow-name "my_dynamic_flow" \ --categories '["OTHER"]' \ --flow-json fileb://flow.json\ --endpoint-uri "https://your-endpoint.example.com/flow" \ --query flowId --output text) # 3. Attach your Meta app for signature verification aws social-messaging update-whatsapp-flow \ --id{WABA_ID}\ --flow-id $FLOW_ID \ --meta-app-id "{YOUR_META_APP_ID}" # 4. Publish the Flow aws social-messaging publish-whatsapp-flow \ --id{WABA_ID}\ --flow-id $FLOW_ID # 5. Verify the configuration aws social-messaging get-whatsapp-flow \ --id{WABA_ID}\ --flow-id $FLOW_ID
Nach der Veröffentlichung kann der Flow in Vorlagennachrichten verwendet werden. Weitere Informationen zum Senden von Flows finden Sie unterWhatsApp Flows an Benutzer senden.