Hallo. In dieser Serie habe ich Ruby und Sinatra mehrmals verwendet.
Ich möchte einen LINE Bot namens "Honmemo!"
In diesem Artikel erstellen wir einen LINE-Bot, der Papageien zurückgibt. Der Programmablauf ist wie folgt. (** Service ** ist das diesmal erstellte Programm)
Lassen Sie uns zunächst eine Vorlage für das Projekt erstellen. Wenn Sie bereits eine Vorlage haben oder diese in Ihren vorhandenen Code integrieren möchten, fahren Sie mit dem nächsten Kapitel fort.
Terminal
$ bundle init
Generieren Sie eine Gem-Datei mit dem Befehl bundle init
.
Und lassen Sie uns das folgende Juwel hinzufügen.
Gemfile
#Unterlassung
gem "sinatra"
gem "sinatra-contrib"
gem "dotenv"
gem "line-bot-api"
Installieren Sie die Beschreibung nach Abschluss mit dem Befehl "bundle".
Terminal
$ bundle
Als nächstes erstellen wir die Kerndatei. Diesmal lautet der Dateiname "app.rb".
app.rb
require 'bundler/setup'
Bundler.require
require 'sinatra/reloader' if development?
get '/' do
"Hello world!"
end
Lassen Sie es uns jetzt ausführen und seine Funktion testen.
Terminal
$ ruby app.rb -o 0.0.0.0
Geben Sie den Befehl ein, um das Programm zu starten. Die Standardportnummer für Sinatra ist 4567, gehen wir also zu http: // localhost: 4567 /. Wenn "Hallo Welt!" Angezeigt wird, ist Sinatras Umgebungskonstruktion abgeschlossen! (Die Portnummern in den Screenshots sind unterschiedlich, weil Sie Docker beißen. Machen Sie sich also keine Sorgen>>)
https://developers.line.biz/ja/ Gehen Sie zu und melden Sie sich an. Wenn Sie normalerweise LINE verwenden, können Sie sich mit einem QR-Code anmelden.
Wenn Sie sich anmelden, sollte ein Bildschirm wie der folgende angezeigt werden. Derzeit können Sie die Sprache über die Schaltfläche unten rechts ändern, um die Verwendung von Japanisch zu vereinfachen.
Wann immer Sie einen LINE Bot entwickeln, werden die Wörter "Provider" und "Channel" angezeigt. Diese können grob erklärt werden
Es bedeutet, dass · · · Anbieter werden in Einheiten wie Unternehmen, Einzelpersonen und Gruppen von Entwicklern erstellt, und Kanäle gehören zu einem Anbieter.
Erstellen wir also zuerst einen Anbieter. Wenn Sie auf "Neuen Anbieter erstellen" klicken, wird ein Bildschirm zur Eingabe des Anbieternamens angezeigt. Geben Sie daher den gewünschten Anbieternamen ein.
Der hier eingegebene Anbietername wird als Autor des Bots ** veröffentlicht **. Sie sollten Ihren richtigen Namen aufschreiben. Klicken Sie auf die Schaltfläche Erstellen, um den Anbieter zu erstellen.
Als nächstes erstellen wir einen Kanal, der ein Bot-Konto ist. Der von Bot verwendete Kanal ist "Messaging-API". Klicken Sie daher auf Messaging-API.
Der Einstellungsbildschirm für den neu erstellten Kanal wird angezeigt. Füllen wir den notwendigen Inhalt aus.
Artikel | Inhalt |
---|---|
Kanaltyp | Messaging API |
Anbieter | Was ich früher gemacht habe |
Kanalsymbol | Sie müssen es jetzt nicht einstellen |
Kanal Name | Bot Name |
Kanal Beschreibung | Bot Beschreibung |
Großindustrie | Bot-Genre |
Kleinindustrie | Detailliertes Genre von Bot |
Mail Adresse | Die E-Mail-Adresse, unter der Sie über Bot kontaktiert werden. Es ist eine gute Idee, eine E-Mail-Adresse zu verwenden, mit der Sie Kontakt aufnehmen können. |
Datenschutz URL | Sie müssen es jetzt nicht einstellen |
Nutzungsbedingungen URL | Sie müssen es jetzt nicht einstellen |
Nachdem Sie den erforderlichen Bedingungen zugestimmt haben, klicken Sie auf die Schaltfläche Erstellen, um den Kanal zu erstellen.
Nachdem Sie die Kanäle haben, die Sie für Ihren Bot benötigen, schreiben wir die Schlüssel und Geheimnisse in die ENV-Datei. Sie können es direkt in das Programm schreiben, aber es ist aus Sicherheitsgründen nicht sehr gut.
.env
LINE_CHANNEL_ID=xxxxxxxxxx
LINE_CHANNEL_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
LINE_CHANNEL_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Kanal-ID und Kanalgeheimnis sind "Kanal-Grundeinstellungen" Das Kanal-Token ist in den "Messaging-API-Einstellungen" unter dem Namen "Kanalzugriffstoken (langfristig)" aufgeführt. Wenn es nicht angezeigt wird, klicken Sie auf die Schaltfläche "Veröffentlichen", um es zu veröffentlichen.
Schreiben Sie Dotenv.load unter require, damit die in .env beschriebenen Variablen im Programm verwendet werden können.
app.rb
require 'bundler/setup'
Bundler.require
require 'sinatra/reloader' if development?
Dotenv.load # <-Nachtrag
get '/' do
"Hello world!"
end
Webhook ist ein Mechanismus, mit dem der Inhalt des Ereignisses an die voreingestellte URL gesendet wird, wenn ein Ereignis im Dienst des anderen Teilnehmers auftritt (LINE in diesem Artikel).
Wenn Sie beispielsweise die URL / callback
Ihres Dienstes auf den LINE-Kanal setzen, können Sie / callback
den Inhalt der Nachricht POSTEN lassen, wenn eine Nachricht auf dem Kanal eintrifft.
Da es sich jedoch um eine URL handeln muss, auf die vom LINE-Server aus zugegriffen werden kann, funktioniert sie nicht ordnungsgemäß, wenn der Dienst nicht tatsächlich veröffentlicht wird. Beispielsweise ist localhost: 4567 in der Entwicklung eine URL, auf die nur von Ihrem eigenen PC aus zugegriffen werden kann. Selbst wenn eine Nachricht mit "localhost: 4567 / callback" eingestellt ist, wird "localhost: 4567 / callback" nicht aufgerufen.
Aufgrund dieser Spezifikation ist es grundsätzlich erforderlich, jedes Mal bei der Entwicklung eines LINE-Bots bereitzustellen. Wenn Sie den Port öffnen, können Sie die Probleme bei der Bereitstellung jedes Mal sparen, es besteht jedoch ein Sicherheitsrisiko, sodass wir ihn hier nicht vorstellen.
Es ist im Grunde dasselbe wie README auf GitHub, aber es ist ein einfacher Code ohne Bildverarbeitung. https://github.com/line/line-bot-sdk-ruby
app.rb
require 'bundler/setup'
Bundler.require
require 'sinatra/reloader' if development?
Dotenv.load
# ======Nachtrag von hier======
def client
@client ||= Line::Bot::Client.new { |config|
config.channel_id = ENV["LINE_CHANNEL_ID"]
config.channel_secret = ENV["LINE_CHANNEL_SECRET"]
config.channel_token = ENV["LINE_CHANNEL_TOKEN"]
}
end
post '/callback' do
body = request.body.read
signature = request.env['HTTP_X_LINE_SIGNATURE']
unless client.validate_signature(body, signature)
error 400 do 'Bad Request' end
end
events = client.parse_events_from(body)
events.each do |event|
if event.is_a?(Line::Bot::Event::Message)
if event.type === Line::Bot::Event::MessageType::Text
message = {
type: 'text',
text: event.message['text']
}
client.reply_message(event['replyToken'], message)
end
end
end
"OK"
end
# ======Nachtrag bis hierher======
get '/' do
"Hello wolrd!"
end
Ich werde den Code unten erklären.
def client
@client ||= Line::Bot::Client.new { |config|
config.channel_id = ENV["LINE_CHANNEL_ID"]
config.channel_secret = ENV["LINE_CHANNEL_SECRET"]
config.channel_token = ENV["LINE_CHANNEL_TOKEN"]
}
end
Dies ist der Code, mit dem der "Client" den LINE-Bot bedienen kann (dies ist eine Funktion von "line-bot-api").
Sie können einen Client mit Line :: Bot :: Client.new
erstellen, dieser wird jedoch wie folgt implementiert, da ein Client für einen Service ausreicht.
||=Mit dem Operator@Wenn der Client leer istLine::Bot::Client.new
Und gib es weiter.@Wenn der Client bereits angemeldet ist, übergeben Sie ihn. Die Verarbeitung wird realisiert.
post '/callback' do
body = request.body.read
signature = request.env['HTTP_X_LINE_SIGNATURE']
unless client.validate_signature(body, signature)
error 400 do 'Bad Request' end
end
Der Block "post" / callback'do ist etwas lang, daher werde ich ihn separat erläutern.
body = request.body.read
weist die gesendeten Daten nur der body-Variablen zu.
Nach der Signatur prüfen wir, ob die gesendeten Daten wirklich vom LINE-Server stammen.
Die vom LINE-Server gesendeten Daten enthalten immer "HTTP_X_LINE_SIGNATURE". Sie können anhand des Inhalts überprüfen, ob es sich um die vom LINE-Server gesendeten Daten handelt.
Die Bestätigung, ob es sich um einen LINE-Server handelt, ist in line-bot-api
implementiert und kann über den zuvor erstellten Client verwendet werden.
Der Überprüfungsprozess wird in dem Teil ausgeführt, der "client.validate_signature (body, Signatur)" heißt.
Dies ist ein wichtiger Code, der überprüft, ob eine böswillige Person den LINE-Server fälscht und eine Nachricht sendet.
events = client.parse_events_from(body)
events.each do |event|
if event.is_a?(Line::Bot::Event::Message)
if event.type === Line::Bot::Event::MessageType::Text
message = {
type: 'text',
text: event.message['text']
}
client.reply_message(event['replyToken'], message)
end
end
end
"OK"
end
In "events = client.parse_events_from (body)" werden die gesendeten Daten in eine Form konvertiert, die mit Ruby einfach zu handhaben ist. Das Ergebnis der Konvertierung ist ein Array von Ereignissen, wie Sie anhand der Namensereignisse sehen können.
events.each do |event|
Verarbeitet mehrere Ereignisse nacheinander. Dies liegt daran, dass möglicherweise mehrere Ereignisse gleichzeitig gesendet werden.
if event.is_a? (Line :: Bot :: Event :: Message)
prüft, ob der Ereignistyp Message ist. Nicht-Nachrichtenereignisse umfassen "Freund hinzufügen" und "Blockierung aufheben".
if event.type === Line :: Bot :: Event :: MessageType :: Text
bestätigt, dass der Nachrichtentyp Text ist. Zu den Nicht-Textnachrichtentypen gehören Bilder, Videos und Stempel.
Mit anderen Worten, der Code aus den oberen 4 Zeilen wird verwendet, um "die übertragenen Daten zu analysieren und nur die Textnachricht einzugrenzen".
Schauen wir uns als nächstes den Code in der if-Anweisung an
message = {
type: 'text',
text: event.message['text']
}
client.reply_message(event['replyToken'], message)
Die oberen vier Zeilen bilden die Nachricht, die an den LINE-Server gesendet werden soll, und die letzte Zeile sendet die Antwort. event ['replyToken'] ist das im Ereignis enthaltene Antworttoken.
Am Ende habe ich "OK" geschrieben, aber es folgt der Regel der LINE Bot API, dass es notwendig ist, die richtige Antwort zurückzugeben, wenn der Prozess normal erfolgreich ist. Es ist in Ordnung, etwas zurückzugeben.
Nachdem der Code vollständig ist, können wir ihn ausführen! Leider funktioniert es, wie ich zuvor erklärt habe, nicht, wenn es lokal ausgeführt wird. Also werde ich es dieses Mal für Heroku bereitstellen.
Ich werde die Details der Bereitstellung in Heroku weglassen, aber lassen Sie uns nur Procfile erstellen.
Procfile
web: bundle exec ruby app.rb -o 0.0.0.0 -p $PORT
Terminal
$ git init
$ git add -A
$ git commit -m "first commit"
$ heroku create
$ git push heroku master
Öffnen Sie nach der Bereitstellung die Anwendung. Wenn "Hallo Welt!" Angezeigt wird, ist die Bereitstellung abgeschlossen!
Gehen Sie zur LINE Developers-Site und zum Bildschirm mit den Kanaleinstellungen. Öffnen Sie die Messaging-API-Einstellungen und klicken Sie auf Webhook-URL bearbeiten. Ein Feld zur Eingabe der URL wird angezeigt. Geben Sie also "URL + / Rückruf" ein, den Sie gerade bereitgestellt haben, und klicken Sie auf die Schaltfläche "Aktualisieren".
Die bereitgestellte URL lautet beispielsweise
https://xxxxxxx-yyyyyy-zzzzz.herokuapp.com
Wenn ja
https://xxxxxxx-yyyyyy-zzzzz.herokuapp.com/callback`
Es wird sein.
Lassen Sie uns danach die Verwendung von Webhook überprüfen.
`![Screenshot 2020-07-12 4.14.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672451/d25d1f73-bcee-6424-c5f3 -0b65709b2414.png)
Sie können den Betrieb des Servers überprüfen, indem Sie auf die Bestätigungstaste klicken. Wenn es als erfolgreich angezeigt wird, gibt es kein Problem.
Außerdem können derzeit keine Bot-Nachrichten gesendet werden, da Nachrichten mit automatischer Antwort aktiviert sind. Deaktivieren Sie also die automatische Telefonzentrale.
Klicken Sie in den Einstellungen der Messaging-API auf die Schaltfläche Antwortnachricht bearbeiten. Anschließend wird eine Seite mit den Namen Antworteinstellungen angezeigt, also in den folgenden detaillierten Einstellungen
Einstellen.
Jetzt können Sie den Webhook verwenden.
Nun, alles ist fertig! Fügen Sie Ihren Freunden einen Bot hinzu und senden Sie eine Nachricht! In den "Messaging-API-Einstellungen" befindet sich ein QR-Code. Lesen Sie ihn daher mit LINE. Sie sollten in der Lage sein, sich mit dem von Ihnen erstellten Bot anzufreunden.
Wenn Sie Freunde finden können, senden Sie eine Nachricht. Wenn Sie dieselbe Nachricht erhalten, die Sie gesendet haben, sind Sie erfolgreich! Danke für Ihre Unterstützung!
In diesem Artikel habe ich einen Bot erstellt, der einen Papagei der gesendeten Nachricht zurückgibt. Es ist sehr einfach, aber es enthält viele wichtige Codes, die für die Erstellung eines Bots unerlässlich sind. Es ist daher eine gute Idee, sich damit vertraut zu machen!
Der nächste Artikel ist hier
Recommended Posts