[PYTHON] [LINE Messaging API] Ich möchte eine Nachricht vom Programm an alle LINE senden

Überblick

line18.jpg

Eine Seite mit ähnlichem Inhalt ist bereits im Internet. Ich denke jedoch, es wäre schön, eine Seite zu haben, die die folgenden Fragen beantwortet, und ich werde einen Artikel schreiben, damit jemand mit ähnlichen Fragen erstochen wird.

Frage

――Ich habe nach "Nachricht vom LINE-Programm senden" gesucht, bin mir aber nicht sicher, da LINE-Benachrichtigung, offizielles LINE-Konto, LINE @ usw. herausgekommen sind. ――Ich möchte es nur senden, aber wenn ich mir den Artikel im Internet ansehe, kommt der Server plötzlich heraus und sagt "Lass uns einen Server vorbereiten" und ich bin verwirrt.

Eine grobe und einfache Antwort ...

――Die LINE-Messaging-API, die nach dem Erwerb des offiziellen LINE-Kontos verwendet werden kann, wird verwendet. ――Sie können von Ihrem eigenen Standort aus (ohne Server) "senden", benötigen jedoch die ID des Zielbenutzers, um das Ziel anzugeben. Sie benötigen einen Server, um es zu bekommen. Aber es ist okay, weil du es mit Heroku kostenlos machen kannst.

Warum LINE Messaging API

Wir werden antworten auf "Ich weiß nicht, ob LINE Notify, LINE Official Account, LINE @ usw. herauskommen werden".

Erstellen Sie also zuerst ein offizielles LINE-Konto und verwenden Sie dann die LINE-Messaging-API.

Gebühr

Sie finden es unter Was ist ein offizielles LINE-Konto? Preiseinführung. Möglicherweise können Sie so viele automatische Antworten kostenlos verwenden, wie Sie möchten, und Sie können die Push-Funktion (aktives Senden, das Ziel, was Sie diesmal tun möchten) für bis zu 1.000 Nachrichten pro Monat kostenlos verwenden.

Organisieren Sie, was Sie machen werden

In der Abbildung sieht es so aus. Wenn Sie sich die Abbildung ansehen, können Sie sehen, warum Sie einen Server benötigen.

line17.png

Kanal erstellen

Es ist nicht das "offizielle LINE-Konto", das Nachrichten an jeden Benutzer sendet. Es ist ein "Kanal".

line15.jpg

Auf der linken Seite ist der Gesprächspartner kein offizieller Account, sondern ein Kanal. Erstellen Sie also zuerst ein "offizielles LINE-Konto", erstellen Sie einen "Anbieter" für dieses untergeordnete Element und erstellen Sie dann einen "Kanal" für dieses untergeordnete Element.

Bis zur Erstellung eines neuen Kanals

Gehen wir davon aus, dass bereits "LINE Official Account" und "Provider" erstellt wurden.

line01.jpg

line02.jpg

line03.jpg

line04.jpg

line05.jpg

line06.jpg

line07.jpg

line08.jpg

Sobald Sie einen Kanal erstellt und sich als Freund registriert haben, können Sie an dieser Stelle unter https://manager.line.biz/ sprechen.

Erwerb von Token

Holen Sie sich das "Channel Secret" und "Access Token" aus den Channel-Einstellungen.

line09.jpg

line10.jpg

Bereiten Sie einen Server vor

Wie oben erwähnt, benötigen Sie die ID dieses Benutzers, um automatisch eine Nachricht an jemanden zu senden.

Die Benutzer-ID kann von Json bezogen werden. Der Benutzer sendet einmal eine Nachricht an den Kanal und der Kanal sendet sie dann an seinen Server. Erstellen Sie als Nächstes eine Webanwendung in Python, die auf dem Server bereitgestellt werden soll.

Erstellen Sie ein Python-Skript

In meinem Fall verwende ich pipenv, also bereite ich die Umgebung so vor.

pipenv install flask line-bot-sdk gunicorn

Ich habe das Python-Skript my_flask_script.py genannt. Der Basiscode wurde aus der line-bot-sdk-Dokumentation entnommen und geändert.

my_flask_script.py


from flask import Flask, request, abort

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)

#Umgebungsvariablen abzurufen.
import os

#Protokoll ausgeben.
import logging
import sys

app = Flask(__name__)

#Protokoll zur Standardausgabe. Heroku-Protokolle--Dies ist mit dem Schwanz zu überprüfen.
# app.logger.Da es von info ausgegeben wird, stellen Sie den Pegel auf INFO.
app.logger.addHandler(logging.StreamHandler(sys.stdout))
app.logger.setLevel(logging.INFO)

#Erhalten Sie wichtige Informationen aus Umgebungsvariablen.
CHANNEL_ACCESS_TOKEN = os.environ['CHANNEL_ACCESS_TOKEN']
CHANNEL_SECRET = os.environ['CHANNEL_SECRET']

line_bot_api = LineBotApi(CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(CHANNEL_SECRET)


#Obwohl es nicht erforderlich ist, werde ich eine Top-Seite hinzufügen, um zu überprüfen, ob es um den Server geht.
@app.route('/')
def top_page():
    return 'Here is root page.'


#Auf diese URL wird zugegriffen, wenn der Benutzer eine Nachricht sendet.
@app.route('/callback', methods=['POST'])
def callback_post():
    # get X-Line-Signature header value
    signature = request.headers['X-Line-Signature']

    # get request body as text
    body = request.get_data(as_text=True)
    app.logger.info('Request body: ' + body)

    # handle webhook body
    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        abort(400)

    return 'OK'


@handler.add(MessageEvent, message=TextMessage)
def reply_message(event):
    #Test der Antwort.
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text='Dies wird vom Rückrufprozess gesendet:'+event.message.text))


if __name__ == '__main__':
    app.run()

Datei für Heroku erstellen

# runtime.txt:Beschrieb die Python-Version.
echo python-3.7.4 > runtime.txt

# requirements.txt:Beschreibung der abhängigen Bibliotheken.
pip freeze > requirements.txt

# Procfile:Beschreibt, wie das Programm ausgeführt wird.
echo web: gunicorn my_flask_script:app --log-file - > Procfile

Procfile funktionierte aus irgendeinem Grund in web: python my_flask_script.py nicht. Die Procfile --log-file ist eine Option zum Ausspucken von Protokollen. - zeigt auf stdout. Wenn Sie dies einstellen, können Sie die Protokolle später mit "heroku logs --tail" überprüfen.

Bis zu Heroku

Nehmen wir an, Sie haben bereits einen Heroku-Account.

#Git-Repository erstellen.
git init
#Erstellen Sie als persönliches Hobby zunächst ein leeres Commit.
git commit --allow-empty -m "Initial Commit"
#Übernehmen Sie alle Dateien.
git add --all
git commit -m "Add all files"

#Der App-Name ist diesmal line-messaging-py-py-Versuchen Sie es py zu machen.
heroku create line-messaging-py-py-py

#Umgebungsvariablen festlegen.
heroku config:set CHANNEL_ACCESS_TOKEN="Kopieren Sie das Zugriffstoken von der Seite mit den Kanaleinstellungen" --app line-messaging-py-py-py
heroku config:set CHANNEL_SECRET="Kopieren Sie das Kanalgeheimnis von der Seite Kanaleinstellungen" --app line-messaging-py-py-py

#In Herokus Repository hochgeladen.
git push heroku master

#Wenn unterwegs etwas schief geht, löschen Sie es mit destroy und beginnen Sie erneut mit create.
# heroku apps:destroy --app line-messaging-py-py-py

Ich habe auch eine Methode für die oberste Seite erstellt, damit ich sie öffnen kann.

line11.jpg

Ich habe festgestellt, dass der Upload erfolgreich war.

Abonniere die Heroku-URL für den Kanal

Registrieren Sie die Webhook-URL auf der Seite mit den Kanaleinstellungen, um das Senden von Webhooks zu aktivieren. Im obigen Python-Skript lautet die URL, die Rückrufe akzeptiert, "/ callback". Diesmal lautet die Webhook-URL "https: // line-messaging-py-py-py.herokuapp.com / callback".

Ich bin mir nicht sicher, aber wenn ich eine "Verbindungsprüfung" durchführe, erscheint ein roter Buchstabe, der uns unruhig macht. Es gab jedoch kein Problem, wenn ich so weitermachte, wie es war ...

line12.jpg

Versuchen Sie es mit reply_message

Unten auf der Seite mit den Kanaleinstellungen befindet sich ein QR-Code, über den Sie diesen Kanal als Freund registrieren können.

line13.jpg

line14.jpg

line15.jpg

Sie können sehen, dass die Nachricht zurückgegeben wurde, nachdem Sie den in Python geschriebenen Rückrufprozess durchlaufen haben. Im Moment ist die Kanaleinstellung die Standardeinstellung, daher erhalte ich viele automatische Antworten, aber ich hoffe, dass ich sie später bearbeiten kann.

Inhalt von Ereignis und Benutzer-ID

In my_flask_script.py gibt app.logger.info die an dieses Skript gesendeten Informationen aus. Sie können es mit heroku logs --tail überprüfen.

{
    "events": [
        {
            "type": "message",
            "replyToken": "********************************",
            "source": {
                "userId": "*********************************",
                "type": "user"
            },
            "timestamp": 1572247838104,
            "message": {
                "type": "text",
                "id": "**************",
                "text": "foo bar baz"
            }
        }
    ],
    "destination": "*********************************"
}

Notieren Sie sich hier die Benutzer-ID, da Sie sie später für push_message verwenden möchten. Wenn Sie es in Ihren Code aufnehmen möchten, gehen Sie folgendermaßen vor:

event.source.user_id

Versuchen Sie es mit push_message

Das ist das Ziel. Sie können Nachrichten aktiv senden, indem Sie das oben notierte "Zugriffstoken" und die "Benutzer-ID" verwenden. Natürlich muss dies nicht auf Heroku hochgeladen werden, Sie können es lokal versuchen.

push_message.py


from linebot import LineBotApi
from linebot.models import TextSendMessage

CHANNEL_ACCESS_TOKEN = 'KANAL oben verwendet_ACCESS_Gleich wie TOKEN'
USER_ID = 'Der oben angegebene Wert von userId'

line_bot_api = LineBotApi(CHANNEL_ACCESS_TOKEN)

line_bot_api.push_message(
    USER_ID,
    TextSendMessage(text='Das ist Pushumesseji. Hallo!'))

line16.jpg

Wie Sie sehen, können Sie jederzeit eine Nachricht senden, wenn Sie die Benutzer-ID für jeden Benutzer eindeutig halten. Ende. Es war ein langer Artikel ...

Recommended Posts

[LINE Messaging API] Ich möchte eine Nachricht vom Programm an alle LINE senden
Ich möchte eine Nachricht von Python an LINE Bot senden
Ich möchte nur ein Signal vom Sub-Thread zum Haupt-Thread senden
Ich habe eine Python-Bibliothek erstellt, um die API von LINE WORKS aufzurufen
Senden Sie mithilfe von Google Cloud Messaging für Chrome eine Nachricht vom Server an die Chrome-Erweiterung
So senden Sie eine Nachricht mit Curl an LINE
Ich möchte den Dateinamen von DataLoader sehen
Ich möchte automatisch eine Unternehmensgründungs-E-Mail senden
So veröffentlichen Sie ein Ticket über die Shogun-API
[Python] Ich habe ein System erstellt, um "das Rezept, das ich wirklich will" von der Rezeptseite einzuführen!
Senden Sie eine Push-Nachricht an LINE Bot, wenn die LTE-M-Taste gedrückt wird [SORACOM]
So installieren Sie NPI + Senden Sie eine Nachricht an Python
Ich möchte die von LINE an S3 gesendeten Fotos speichern
Ich möchte viele Prozesse von Python aus starten
Ich möchte die zulässige Ausfallzeit aus der Betriebsrate berechnen
Ich möchte das Paket aus den Anforderungen.txt mit Poesie installieren
Ich habe versucht, verschiedene Informationen von der Codeforces-API abzurufen
Ich habe Chatbot mit LINE Messaging API und Python erstellt
Ich möchte vorerst eine Docker-Datei erstellen.
Ich wollte den AWS-Schlüssel nicht in das Programm schreiben
Ein Skript, mit dem Sie mit der LINE Messaging-API auf einfache Weise umfangreiche Menüs erstellen können
Ich möchte den Schnittpunkt einer Bezier-Kurve und einer geraden Linie finden (Bezier-Clipping-Methode)
Ich habe versucht, ein Programm zu erstellen, um die Fehlersuche von Saiseriya zu lösen (Hinweis)
Ich möchte die Ausführungszeit aufzeichnen und ein Protokoll führen.
Ich möchte automatisch hochwertige Teile aus den von mir aufgenommenen Videos finden
Ich möchte das Wetter mit LINE bot feat.Heroku + Python wissen
Ich möchte ein System erstellen, um zu verhindern, dass vergessen wird, den Schlüssel 1 festzuziehen
So extrahieren Sie die gewünschte Zeichenfolge aus einem Befehl in Zeile 4
Ich möchte eine Parameterliste aus CloudFormation-Code (yaml) erstellen.
Ich möchte die zweite Zeile zum Spaltennamen in Pandas machen
Ich habe versucht, ein Standbild aus dem Video auszuschneiden
Ich habe Chatbot mit der LINE Messaging API und Python (2) ~ Server ~ erstellt
So senden Sie eine Anfrage mit Python an die DMM (FANZA) -API
Ich möchte Informationen von fstab am ssh-Verbindungsziel abrufen und den Befehl ausführen
[Python] Ich habe versucht, mit argparse ein einfaches Programm zu erstellen, das in der Befehlszeile funktioniert
Ich möchte die Effizienz mit Python auch im experimentellen System verbessern. (5) Ich möchte am Ende des Experiments eine Benachrichtigung mit der Slack-API senden
Ich möchte Spyder an die Taskleiste anheften
Ich möchte kühl auf die Konsole ausgeben
Wenn Sie von Mia Nanasawas Bild geheilt werden möchten, klicken Sie auf die Twitter-API ♪
Ich möchte in der Einschlussnotation drucken
Ich möchte mit dem Reim Teil1 umgehen
[Python-Memo] Ich möchte eine zweistellige Hexadezimalzahl aus einer Dezimalzahl erhalten
Ich möchte mit dem Reim part3 umgehen
Ich möchte ein Glas aus Python verwenden
Ich möchte eine Python-Umgebung erstellen
Ich habe versucht, "Sakurai-san" LINE BOT mit API Gateway + Lambda zu erstellen
Ich möchte eine Liste in der Reihenfolge anderer Listen sortieren
Ich habe ein Programm erstellt, um Sie per LINE zu benachrichtigen, wenn Schalter eintreffen
Ich habe versucht, die COTOHA-API zu berühren
Ich möchte den Fortschrittsbalken anzeigen
Ich habe versucht, mit django eine E-Mail zum Abschluss der Registrierung von Google Mail zu senden.
Ich möchte ein Automatisierungsprogramm erstellen!
Ich habe eine Web-API erstellt
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
Ich möchte mit dem Reim part2 umgehen
Ich möchte mit dem Reim part5 umgehen
Ich möchte mit dem Reim part4 umgehen