[PYTHON] [LINE Messaging API] Je souhaite envoyer un message du programme à tout le monde LINE

Aperçu

line18.jpg

Une page avec un contenu similaire est déjà sur le net. Cependant, je pense que ce serait bien d'avoir une page qui répond aux questions suivantes que j'ai, et j'écrirai un article pour que quelqu'un avec des questions similaires soit poignardé.

Question

―― J'ai recherché «Envoyer un message depuis le programme LINE», mais je ne suis pas sûr car LINE Notify, le compte officiel LINE, LINE @, etc. sont sortis. ――Je veux juste l'envoyer, mais quand je regarde l'article sur le net, je suis confus car le serveur apparaît soudain en disant "Préparons un serveur".

Une réponse simple et grossière ...

―― L'API de messagerie LINE qui peut être utilisée après l'acquisition du compte LINE officiel est utilisée. ―― Vous pouvez «envoyer» depuis votre propre emplacement (sans serveur), mais vous avez besoin de l'ID de l'utilisateur de destination pour spécifier la destination. Vous aurez besoin d'un serveur pour l'obtenir. Mais ce n'est pas grave car vous pouvez le faire gratuitement avec Heroku.

Pourquoi l'API LINE Messaging

Nous répondrons à "Je ne sais pas si LINE Notify, compte officiel LINE, LINE @, etc. sortira".

Alors, créez d'abord un compte LINE officiel, puis utilisez l'API de messagerie LINE.

Frais

Vous pouvez le trouver dans Qu'est-ce qu'un compte officiel LINE? Introduction des prix. Peut-être que vous pouvez utiliser autant de réponses automatiques que vous le souhaitez gratuitement, et vous pouvez utiliser jusqu'à 1000 fonctions push (envoi actif, l'objectif de ce que vous voulez faire cette fois) gratuitement par mois.

Organisez ce que vous allez faire

Cela ressemble à ceci lorsqu'il est illustré. Si vous regardez la figure, vous pouvez voir pourquoi vous avez besoin d'un serveur.

line17.png

Créer une chaîne

Ce n'est pas le "compte officiel LINE" qui envoie des messages à chaque utilisateur. C'est une "chaîne".

line15.jpg

Sur le côté gauche, l'interlocuteur n'est pas un compte officiel mais une chaîne. Alors, créez d'abord un "compte officiel LINE", créez un "fournisseur" pour cet élément enfant, puis créez un "canal" pour cet élément enfant.

Jusqu'à la création d'une nouvelle chaîne

Partons du principe que "compte officiel LINE" et "fournisseur" ont déjà été créés.

line01.jpg

line02.jpg

line03.jpg

line04.jpg

line05.jpg

line06.jpg

line07.jpg

line08.jpg

Une fois que vous avez créé une chaîne et enregistré comme ami, vous pouvez parler sur https://manager.line.biz/ à ce stade.

Acquisition de jetons

Obtenez le "Channel Secret" et "Access Token" dans les préférences du canal.

line09.jpg

line10.jpg

Préparez un serveur

Comme mentionné ci-dessus, vous avez besoin de l'ID de cet utilisateur pour envoyer automatiquement un message à quelqu'un.

L'identifiant de l'utilisateur peut être obtenu auprès de Json, auquel l'utilisateur envoie un message au canal une fois, puis le canal l'envoie à son serveur. Ensuite, créez une application Web en Python à déployer sur le serveur.

Créer un script Python

Dans mon cas, j'utilise pipenv, donc je prépare l'environnement comme ça.

pipenv install flask line-bot-sdk gunicorn

J'ai nommé le script Python my_flask_script.py. Le code de base a été extrait de la documentation line-bot-sdk et modifié.

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,
)

#Pour obtenir des variables d'environnement.
import os

#Pour sortir le journal.
import logging
import sys

app = Flask(__name__)

#Connectez-vous à la sortie standard. journaux heroku--C'est à vérifier avec la queue.
# app.logger.Puisqu'il est émis par info, réglez le niveau sur INFO.
app.logger.addHandler(logging.StreamHandler(sys.stdout))
app.logger.setLevel(logging.INFO)

#Obtenez des informations importantes à partir des variables d'environnement.
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)


#Bien que ce ne soit pas essentiel, j'ajouterai une première page pour vérifier quand il s'agit du serveur.
@app.route('/')
def top_page():
    return 'Here is root page.'


#Cette URL est accessible lorsque l'utilisateur envoie un message.
@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 de réponse.
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text='Cela sera envoyé à partir du processus de rappel:'+event.message.text))


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

Créer un fichier pour Heroku

# runtime.txt:Décrit la version Python.
echo python-3.7.4 > runtime.txt

# requirements.txt:Description des bibliothèques dépendantes.
pip freeze > requirements.txt

# Procfile:Décrit comment exécuter le programme.
echo web: gunicorn my_flask_script:app --log-file - > Procfile

Procfile n'a pas fonctionné pour une raison quelconque dans web: python my_flask_script.py. Le Procfile --log-file est une option pour cracher les journaux. - pointe vers stdout. En définissant cela, vous pouvez vérifier les journaux plus tard avec heroku logs --tail.

Jusqu'à Heroku

Supposons que vous ayez déjà un compte Heroku.

#Créez un référentiel Git.
git init
#En tant que passe-temps personnel, créez d'abord un commit vide.
git commit --allow-empty -m "Initial Commit"
#Validez tous les fichiers.
git add --all
git commit -m "Add all files"

#Le nom de l'application cette fois est line-messaging-py-py-Essayez de le faire py.
heroku create line-messaging-py-py-py

#Définissez les variables d'environnement.
heroku config:set CHANNEL_ACCESS_TOKEN="Copiez le jeton d'accès depuis la page des préférences de la chaîne" --app line-messaging-py-py-py
heroku config:set CHANNEL_SECRET="Copiez le secret de la chaîne depuis la page Préférences de la chaîne" --app line-messaging-py-py-py

#Téléchargé dans le référentiel de Heroku.
git push heroku master

#Si quelque chose ne va pas en cours de route, supprimez-le avec destroy et recommencez avec create.
# heroku apps:destroy --app line-messaging-py-py-py

J'ai également créé une méthode pour la page supérieure, je vais donc l'ouvrir.

line11.jpg

J'ai trouvé que le téléchargement était réussi.

Abonnez l'URL Heroku à la chaîne

Enregistrez l'URL du webhook sur la page des préférences de la chaîne pour activer l'envoi de webhook. Dans le script Python ci-dessus, l'URL qui accepte les rappels est / callback, donc cette fois l'URL du Webhook est https: // line-messaging-py-py-py.herokuapp.com / callback.

Je n'en suis pas sûr, mais lorsque je fais une "vérification de connexion", une lettre rouge apparaît, ce qui nous met mal à l'aise. Cependant, il n'y a pas eu de problème si je procédais comme ça ...

line12.jpg

Essayez d'utiliser reply_message

Il y a un code QR au bas de la page des préférences de la chaîne, à partir duquel vous pouvez enregistrer cette chaîne en tant qu'ami.

line13.jpg

line14.jpg

line15.jpg

Vous pouvez voir que le message a été renvoyé après avoir suivi le processus de rappel écrit en Python. À l'heure actuelle, le paramètre de canal est la valeur par défaut, donc j'obtiens beaucoup de réponses automatiques, mais j'espère pouvoir le modifier plus tard.

Contenu de l'événement et userId

Dans my_flask_script.py, ʻapp.logger.infoaffiche les informations envoyées à ce script. Vous pouvez le vérifier avecheroku logs --tail`.

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

Prenez note de ʻuserId` ici car vous voulez l'utiliser plus tard pour push_message. Si vous voulez l'inclure dans votre code, obtenez-le comme ceci:

event.source.user_id

Essayez d'utiliser push_message

Tel est le but. Vous pouvez envoyer activement des messages en utilisant le "jeton d'accès" et "userId" que vous avez notés ci-dessus. Bien sûr, cela n'a pas besoin d'être téléchargé sur Heroku, vous pouvez l'essayer localement.

push_message.py


from linebot import LineBotApi
from linebot.models import TextSendMessage

CHANNEL_ACCESS_TOKEN = 'CHANNEL utilisé ci-dessus_ACCESS_Identique à TOKEN'
USER_ID = 'La valeur de userId notée ci-dessus'

line_bot_api = LineBotApi(CHANNEL_ACCESS_TOKEN)

line_bot_api.push_message(
    USER_ID,
    TextSendMessage(text='C'est Pushumesseji. salut!'))

line16.jpg

Comme vous pouvez le voir, vous pouvez toujours envoyer un message en gardant ʻuser_id`, qui est unique pour chaque utilisateur. fin. Ça a été un long article ...

Recommended Posts

[LINE Messaging API] Je souhaite envoyer un message du programme à tout le monde LINE
Je souhaite envoyer un message de Python à LINE Bot
Je souhaite envoyer un signal uniquement du sous-thread au thread principal
J'ai créé une bibliothèque Python pour appeler l'API de LINE WORKS
Envoyer un message du serveur à l'extension Chrome à l'aide de Google Cloud Messaging pour Chrome
Comment envoyer un message à LINE avec curl
Je veux voir le nom de fichier de DataLoader
Je souhaite envoyer automatiquement un e-mail de création d'entreprise
Comment publier un ticket depuis l'API Shogun
[Python] J'ai créé un système pour introduire "la recette que je veux vraiment" depuis le site de recettes!
Envoyer un message Push à LINE Bot lorsque le bouton LTE-M est enfoncé [SORACOM]
Comment installer NPI + envoyer un message à la ligne avec python
Je souhaite enregistrer les photos envoyées par LINE vers S3
Je veux démarrer beaucoup de processus à partir de python
Je souhaite calculer le temps d'arrêt autorisé à partir du taux de fonctionnement
Je veux installer le package de requirements.txt avec poésie
J'ai essayé d'obtenir diverses informations de l'API codeforces
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python
Je veux créer un Dockerfile pour le moment.
Je ne voulais pas écrire la clé AWS dans le programme
Un script qui facilite la création de menus riches avec l'API de messagerie LINE
Je veux trouver l'intersection d'une courbe de Bézier et d'une ligne droite (méthode de découpage de Bézier)
J'ai essayé de faire un programme pour résoudre (indice) la recherche d'erreur de Saiseriya
Je souhaite enregistrer l'heure d'exécution et conserver un journal.
Je veux trouver automatiquement des pièces de haute qualité à partir des vidéos que j'ai tournées
Je veux connaître la météo avec LINE bot avec Heroku + Python
Je veux créer un système pour éviter d'oublier de serrer la clé 1
Comment extraire la chaîne de caractères souhaitée à partir d'une ligne 4 commandes
Je souhaite créer une liste de paramètres à partir du code CloudFormation (yaml)
Je veux faire de la deuxième ligne le nom de la colonne dans pandas
J'ai essayé de couper une image fixe de la vidéo
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python (2) ~ Server ~
Comment envoyer une requête à l'API DMM (FANZA) avec python
Je veux obtenir des informations de fstab à la destination de la connexion ssh et exécuter la commande
[Python] J'ai essayé de créer un programme simple qui fonctionne sur la ligne de commande en utilisant argparse
Je souhaite améliorer l'efficacité avec Python même dans le système expérimental (5) Je souhaite envoyer une notification à la fin de l'expérience avec l'API slack
Je veux épingler Spyder à la barre des tâches
Je veux sortir froidement sur la console
Si vous voulez être guéri par l'image de Mia Nanasawa, appuyez sur l'API Twitter ♪
Je veux imprimer dans la notation d'inclusion
Je veux gérer la rime part1
[Mémo Python] Je souhaite obtenir un nombre hexadécimal à 2 chiffres à partir d'un nombre décimal
Je veux gérer la rime part3
Je veux utiliser jar de python
Je veux créer un environnement Python
J'ai essayé de créer un LINE BOT "Sakurai-san" avec API Gateway + Lambda
Je souhaite trier une liste dans l'ordre des autres listes
J'ai créé un programme pour vous avertir par LINE lorsque les commutateurs arrivent
J'ai essayé de toucher l'API COTOHA
Je veux afficher la barre de progression
J'ai essayé d'envoyer un e-mail de fin d'inscription depuis Gmail avec django.
Je veux faire un programme d'automatisation!
J'ai créé une API Web
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
Python: je souhaite mesurer proprement le temps de traitement d'une fonction
Je veux gérer la rime part2
Je veux gérer la rime part5
Je veux gérer la rime part4