
Teilen Sie:
Phil is Head of Developer Relations at Hookdeck, an asynchronous messaging platform, and a proud Vonage alumni.
Aufbau eines Voice Alerts Broadcast Systems mit Ruby
Lesedauer: 7 Minuten
Manchmal reicht eine Textnachricht nicht aus. Wenn Sie wirklich über etwas Wichtiges benachrichtigt werden wollen, möchten Sie wahrscheinlich einen echten Telefonanruf erhalten, sei es, weil ein Server ausgefallen ist oder weil sich in Ihrem Gebiet eine Naturkatastrophe ereignet hat.
Auch ein Dienstleister oder eine (lokale) Behörde, die mit einem Notfall befasst ist, möchte so viele Menschen wie möglich so schnell wie möglich erreichen, unabhängig davon, ob sie ein Mobiltelefon besitzen.
Die Flood Voice Broadcast Alerts App
In diesem Tutorial fügen wir ein Voice Alerts Broadcast System zu einer bestehenden App hinzufügen, indem wir die Nexmo Text-To-Speech API (TTS). Zu diesem Zweck haben wir die Nexmo Hochwasserwarnungen App entwickelt, die es den Nutzern ermöglicht, Voice-Warnungen für ihre Postleitzahl zu abonnieren.

Diese App dient als Ausgangspunkt für diesen Lehrgang. Sie ist eine grundlegende Sinatra Anwendung, geschrieben in Ruby mit ein paar zusätzlichen Edelsteinen, um die Dinge zu vereinfachen. Wir haben hinzugefügt SQLite3 und ActiveRecord für die Persistenz unserer Abonnenten. Wir haben auch Bootstrap hinzugefügt, um unsere Benutzeroberfläche etwas attraktiver zu gestalten. Schließlich haben wir für dieses Tutorial das Abrufen der Flutdaten als Implementierungsdetail belassen und werden stattdessen die Benachrichtigungen manuell über das Admin-Panel versenden.
Sie können den Startpunkt dieser Anwendung von Github herunterladen:
Dann besuchen Sie localhost:4567 in Ihrem Browser und melden Sie sich mit Ihrer Postleitzahl und Ihrer Telefonnummer für eine Hochwassermeldung an. Danach können Sie das (sehr rudimentäre) Verwaltungsbereich wo Sie Ihr Abonnement sehen sollten.
Den gesamten Code für diesen Ausgangspunkt finden Sie auf der Seite Abonnements Zweig auf Github. Der gesamte Code, den wir im Folgenden hinzufügen werden, befindet sich in der Warnungen Zweig. Zu Ihrer Bequemlichkeit können Sie alle Änderungen zwischen unserem Start- und Endpunkt auch auf Github einsehen.
Nexmo Text-To-Speech API
Vonage API-Konto
Um dieses Tutorial durchzuführen, benötigen Sie ein Vonage API-Konto. Wenn Sie noch keines haben, können Sie sich noch heute anmelden und mit einem kostenlosen Guthaben beginnen. Sobald Sie ein Konto haben, finden Sie Ihren API-Schlüssel und Ihr API-Geheimnis oben auf dem Vonage-API-Dashboard.
In diesem Lernprogramm wird auch eine virtuelle Telefonnummer verwendet. Um eine zu erwerben, gehen Sie zu Rufnummern > Rufnummern kaufen und suchen Sie nach einer Nummer, die Ihren Anforderungen entspricht.
Nexmo Voice ist der einfachste Weg, qualitativ hochwertige Voice Applications in der Cloud zu erstellen. Es hat viele Funktionen und diejenige, die wir uns heute ansehen werden, ist die Text-zu-Sprache-API (TTS). Wir werden diese API nutzen, um Sprachanrufe an Personen zu senden, die ihnen die Hochwasserwarnungen vorlesen. Zu diesem Zweck werden wir die folgenden Änderungen an unserer App vornehmen:
Hinzufügen der Nexmo Rubin Edelstein zu unserer Anwendung
Erstellen Sie ein Formular, mit dem der Administrator auswählen kann, wer die Warnmeldungen erhält.
Senden Sie eine Anfrage an die Nexmo API für eine Text-To-Speech Nachricht
Hinzufügen des Nexmo Ruby Gem zu unserer App
Um eine Text-To-Speech-Nachricht über Nexmo zu versenden, müssen wir das nexmo gem zum Projekt hinzufügen.
# Gemfile
gem 'nexmo'
gem 'dotenv'Wie Sie sehen können, haben wir auch das dotenv gem. Dies ist nur, damit die App die API-Anmeldeinformationen aus einer .env Datei laden kann. Das Nexmo-Gem übernimmt diese Umgebungsvariablen automatisch und verwendet sie zur Initialisierung des Clients. Sie finden Ihre Anmeldedaten auf der der Einstellungsseite deines Nexmo Accounts.
Als Nächstes müssen wir der Anwendung mitteilen, dass sie diese beiden Edelsteine beim Starten verwenden soll.
# app.rb
require 'nexmo'
require 'dotenv'
Dotenv.loadJetzt, wo wir diese 2 Edelsteine geladen haben, können wir einfach Nexmo::Client.new überall ohne Parameter aufrufen, um API-Aufrufe zu starten.
Wählen Sie eine Nummer oder Postleitzahl

Bevor wir damit beginnen, Warnmeldungen an alle zu senden, sollten wir dem Administrator die Möglichkeit geben, auszuwählen, an wen er eine Nachricht senden möchte. Beginnen wir mit dem Hinzufügen eines Formulars zur Verwaltungskonsole.
<!-- views/admin.erb -->
...
</table>
<h2 class='header'>Send an alert</h2>
<form class="form form-vertical" action="/alert" method="post">
<div class="form-group form-inline">
<select class="form-control" name="number">
<option disabled selected value> -- select a number -- </option>
<% Subscriber.pluck(:number).sort.each do |number| %>
<option><%= number %></option>
<% end %>
</select>
</div>
<input type='submit' value='Send' class='btn btn-primary'>
</form>
Ignorieren wir die Bootstrap-Boilerplate, so haben wir hier lediglich ein Formular mit einem Feld erstellt, das uns die Möglichkeit gibt, eine Telefonnummer anzugeben. Fügen wir nun ein zweites Feld nach dem <select> das wir gerade hinzugefügt haben, das uns ebenfalls die Auswahl aus allen Postleitzahlen ermöglicht.
<!-- views/admin.erb -->
</select>
...
or
<select class="form-control" name="postcode">
<option disabled selected value> -- select a postcode -- </option>
<% Subscriber.pluck(:postcode).sort.each do |postcode| %>
<option><%= postcode %></option>
<% end %>
</select>
...
Senden einer Voice Alerts Broadcast Text-To-Speech-Nachricht
Wenn der Administrator dieses Formular absendet, wird er POST eine Anfrage an /alert gesendet, wo wir die ausgewählte Nummer oder Postleitzahl auswerten und die Nexmo-API aufrufen können.
# app.rb
...
post '/alert' do
if params[:number]
send_alert(:number, params[:number])
elsif params[:postcode]
send_alert(:postcode, params[:postcode])
end
redirect '/alert'
endInnerhalb von send_alertdie die Nachricht tatsächlich sendet, werden wir 4 Parameter an die initiate_tts_call Methode der Nexmo::Client.
to- Die Nummer, an die eine Sprachnachricht gesendet werden soll. (erforderlich)text- Die Botschaft, die dem Empfänger mitgeteilt werden soll (erforderlich)from- Die Nexmo Voice Nummer, von der eine Sprachnachricht gesendet werden soll (optional)lg- Die zu verwendende Voice-Sprache. In diesem Fall wird eine britische Voice verwendet. (optional)
Um eine Nexmo Voice Numbers zu erhalten, gehen Sie entweder auf das Nexmo Dashboard und kaufen Sie eine Number, oder verwenden Sie alternativ die Vonage CLI und kaufen Sie eine Nummer direkt in der Kommandozeile. Nach dem Kauf fügen Sie die Nummer in die .env Datei hinzu:
Jetzt können wir unsere Nachricht senden.
# app.rb
def send_alert key, value
Subscriber.where(key => value).each do |subscriber|
Nexmo::Client.new.initiate_tts_call(
to: subscriber.number,
from: ENV['NEXMO_PHONE_NUMBER'],
text: %{
<break time="1s"/> Hello #{subscriber.name}.
This is a flood alert for
<prosody rate="-50%">#{subscriber.postcode}</prosody>.
Thank you for using Nexmo.
},
lg: 'en-gb'
)
end
endHier finden wir alle Subscribers die mit der angegebenen Postleitzahl oder Nummer übereinstimmen, und rufen dann für jede davon die Nexmo-API auf.
Der Parameter der Voice-Nachricht text Parameter hat einige interessante Dinge in den Text eingebettet. Zunächst einmal haben wir das <break/>-Tag verwendet, um zu Beginn des Anrufs eine Sekunde lang zu pausieren. Dies ist nützlich, um zu warten, bis der Empfänger das Telefon an sein Ohr hält. In ähnlicher Weise haben wir das <prosody>-Tag, um die Aussprache der Postleitzahl zu verlangsamen. Mehr über diese Tags finden Sie in unserer Dokumentation.
Schließlich müssen wir nur noch dafür sorgen, dass der Administrator bei der Weiterleitung eine Seite sieht, die bestätigt, dass er die Meldung gesendet hat.
# app.rb
get '/alert' do
erb :alert
end<!-- views/alert.erb -->
<% content_for :title do %>
Alert sent
<% end %>
<p>
Your Nexmo Flood Alert has been sent.
</p>
Das war's, probieren Sie es aus! Stellen Sie sicher, dass Sie Sinatra bei Bedarf neu starten. Wählen Sie Ihre eigene Nummer aus der Auswahlliste und senden Sie das Formular ab. Sie sollten innerhalb weniger Sekunden einen Voice-Anruf erhalten!
Nächste Schritte
Die Nexmo Text-zu-Sprache-API hat eine Menge mehr Optionen als wir hier gezeigt haben, und wir haben sogar ein paar sehr mächtige übersprungen:
Nexmo kann einen Anruf automatisch bis zu 10 Mal für Sie wiederholen
Nexmo kann Anrufbeantworter automatisch erkennen und entweder eine Nachricht hinterlassen oder auflegen
Sie können einen Webhook-Endpunkt angeben, an den Nexmo einen HTTP-Aufruf sendet, nachdem ein Alarm erfolgreich empfangen wurde
Sie können das bevorzugte Geschlecht der Stimme angeben, die Ihren Text in Sprache umwandelt
Mir persönlich gefällt es sehr, dass ich eine Text-To-Speech-Nachricht wie diese senden kann, ohne direkt Webhooks zu benötigen, so dass ich Webhooks nur bei Bedarf oder zu einem späteren Zeitpunkt hinzufügen muss.
Ich würde gerne wissen, was Sie als nächstes hinzufügen würden? Bitte schreiben Sie mir einen Tweet (ich bin @cbetta) mit Ihren Gedanken und Ideen.
