Entwickeln Sie Anruf- und Online-Meeting-Bots auf Ihrem lokalen PC
Unter Ausführen und Debuggen Ihrer App wird erläutert, wie Sie ngrok verwenden, um einen Tunnel zwischen Ihrem lokalen Computer und dem Internet zu erstellen. In diesem Thema erfahren Sie, wie Sie ngrok und Ihren lokalen PC auch verwenden können, um Bots zu entwickeln, die Anrufe und Online-Meetings unterstützen.
Messaging-Bots verwenden HTTP, aber Anruf- und Online-Meeting-Bots verwenden das niedrigere TCP. Ngrok unterstützt TCP-Tunnel zusätzlich zu HTTP-Tunneln.
Konfigurieren Sie ngrok.yml
Gehen Sie zu ngrok und registrieren Sie sich für ein kostenloses Konto oder melden Sie sich bei Ihrem bestehenden Konto an. Nachdem Sie sich angemeldet haben, gehen Sie zum Dashboard und rufen Sie Ihr Authentifizierungstoken ab.
Erstellen Sie eine ngrok-Konfigurationsdatei, ngrok.yml
und fügen Sie die folgende Zeile hinzu. Weitere Informationen darüber, wo sich die Datei befinden kann, finden Sie unter ngrok:
authtoken: <Your-AuthToken>
Einrichten der Signalisierung
In Anruf- und Online-Meeting-Bots haben wir die Anrufsignalisierung darüber besprochen, wie Bots neue Anrufe und Ereignisse während eines Anrufs erkennen und darauf reagieren. Anrufsignalisierungsereignisse werden über HTTP POST an den aufrufenden Endpunkt des Bots gesendet.
Wie bei der Messaging-API des Bots muss Ihr Bot über das Internet erreichbar sein, damit die Echtzeit-Medienplattform mit Ihrem Bot kommunizieren kann. Ngrok macht das einfach. Fügen Sie Ihrer ngrok.yml die folgenden Zeilen hinzu:
tunnels:
signaling:
addr: 12345
proto: http
Einrichten lokaler Medien
Hinweis
Dieser Abschnitt ist nur für von Anwendungen gehostete Medienbots erforderlich und kann übersprungen werden, wenn Sie keine Medien selbst hosten.
Anwendungsgehostete Medien verwenden Zertifikate und TCP-Tunnel. Die folgenden zwei Schritte sind dazu erforderlich:
Die öffentlichen TCP-Endpunkte von Ngrok haben feste URLs. Sie sind
0.tcp.ngrok.io
,1.tcp.ngrok.io
usw. Sie müssen über einen DNS-CNAME-Eintrag für Ihren Dienst verfügen, der auf diese URLs verweist. Sagen wir zum Beispiel0.bot.contoso.com
bezieht sich auf0.tcp.ngrok.io
,1.bot.contoso.com
bezieht sich auf1.tcp.ngrok.io
und so weiter.Für Ihre URLs ist ein SSL-Zertifikat erforderlich. Verwenden Sie zur Vereinfachung ein SSL-Zertifikat, das für eine Wildcard-Domain ausgestellt wurde. In diesem Fall wäre es
*.bot.contoso.com
. Dieses SSL-Zertifikat wird vom Medien-SDK validiert, daher muss es mit der öffentlichen URL Ihres Bots übereinstimmen. Notieren Sie sich den Fingerabdruck und installieren Sie ihn in Ihren Maschinenzertifikaten.Richten Sie nun einen TCP-Tunnel ein, um den Datenverkehr an localhost weiterzuleiten. Schreiben Sie die folgenden Zeilen in Ihre ngrok.yml:
media: addr: 8445 proto: tcp
Starten Sie ngrok
Nachdem die ngrok-Konfiguration fertig ist, starten Sie sie:
ngrok.exe start -all -config <Path to your ngrok.yml>
Dadurch wird ngrok gestartet und die öffentlichen URLs definiert, die die Tunnel für Ihren localhost bereitstellen. Es folgt ein Beispiel für die Ausgabe:
Forwarding http://signal.ngrok.io -> localhost:12345
Forwarding https://signal.ngrok.io -> localhost:12345
Forwarding tcp://1.tcp.ngrok.io:12332 -> localhost:8445
Hier 12345
ist der Signalisierungsport, 8445
der von der Anwendung gehostete Port und 12332
der von ngrok bereitgestellte Remote-Medienport. Beachten Sie, dass wir eine Weiterleitung von bis 1.bot.contoso.com
haben 1.tcp.ngrok.io
. Dies wird als Medien-URL für den Bot verwendet. Natürlich sind diese Portnummern nur Beispiele und Sie können jeden verfügbaren Port verwenden.
Aktualisieren des Codes
Nachdem ngrok betriebsbereit ist, aktualisieren Sie den Code, um die gerade eingerichtete Konfiguration zu verwenden.
Signalisierung aktualisieren
Ändern Sie im BotBuilder-Aufruf NotificationUrl
die in die von ngrok bereitgestellte Signalisierungs-URL.
statefulClientBuilder.SetNotificationUrl(
new Uri("https://signal.ngrok.io/notificationEndpoint"))
Hinweis
Ersetzen Sie signal durch das von ngrok bereitgestellte und NotificationEndpoint
durch den Controller-Pfad, der die Benachrichtigung erhält.
Wichtig
- Die URL in
SetNotificationUrl
muss HTTPS sein.
Ihre lokale Instanz muss HTTP-Datenverkehr am Signalisierungsport überwachen. Die Anforderungen der Plattform für Anrufe und Onlinebesprechungen erreichen den Bot als localhost-HTTP-Datenverkehr, es sei denn, die End-to-End-Verschlüsselung ist eingerichtet.
Medien aktualisieren
Aktualisieren Sie Ihre wie MediaPlatformSettings
folgt:
var mediaPlatform = new MediaPlatformSettings
{
ApplicationId = <Your application id>
MediaPlatformInstanceSettings = new MediaPlatformInstanceSettings
{
CertificateThumbprint = <Your SSL Cert thumbprint>,
InstanceInternalPort = <Localhost media port>,
InstancePublicPort = <Ngrok exposed remote media port>,
InstancePublicIPAddress = new IPAddress(0x0),
ServiceFqdn = <Media url for bot (eg: 1.bot.contoso.com)>,
},
}
Hinweis
Der in bereitgestellte Fingerabdruck des Zertifikats muss mit MediaPlatformSettings
dem Dienst-FQDN übereinstimmen. Deshalb werden die DNS-Einträge benötigt.
Vorbehalte
- Kostenlose Ngrok-Konten bieten keine Ende-zu-Ende-Verschlüsselung. Die HTTPS-Daten enden bei der ngrok-URL und die Daten fließen unverschlüsselt von ngrok nach
localhost
. Wenn Sie eine Ende-zu-Ende-Verschlüsselung benötigen, ziehen Sie ein kostenpflichtiges ngrok-Konto in Betracht. Siehe TLS-Tunnel für Schritte zum Einrichten sicherer End-to-End-Tunnel. - Da die Bot-Callback-URL dynamisch ist, erfordern eingehende Anrufszenarien, dass Sie Ihre ngrok-Endpunkte häufig aktualisieren. Eine Möglichkeit, dies zu beheben, ist die Verwendung eines kostenpflichtigen ngrok-Kontos, das feste Unterdomänen bereitstellt, auf die Sie Ihren Bot und die Plattform verweisen können.
- Ngrok-Tunnel können auch mit Azure Service Fabric verwendet werden. Ein Beispiel dafür finden Sie in der HueBot-Beispiel-App.