――Il est intéressant de voir les photos du lycée et du collège récemment ――Mais c'est ennuyeux de le trouver tous les jours
--Je veux commencer à toucher AWS
tl;dr L'objectif est ** dans une salle de groupe contenant Bot, lorsqu'un mot spécifique apparaît, une image est acquise aléatoirement à partir de l'image placée dans S3, et Bot renvoie la photo **
Est-ce le flux?
De plus, nous allons l'implémenter afin que nous puissions également acquérir l''identifiant source ', qui est un goulot d'étranglement dans la création d'un LINE Bot.
Dans cet article, comme première étape, j'aimerais utiliser Lambda pour vérifier la communication et jouer avec diverses choses.
https://business.line.me/ja/
Tout d'abord, enregistrons un compte professionnel ici.
On vous demandera le type d'emploi, mais c'est généralement approprié et ok (je ne me souviens pas des détails, car j'ai créé un compte l'année dernière ,,,) L'occupation de l'écrivain est la beauté
Ensuite, il y a "Créer un compte professionnel" en bas de l'écran "Liste des comptes", alors allez ici.
Ensuite, on vous demandera quel type de service votre compte propose, mais ici sélectionnons le petit "Start Developer Trial" en bas de la ** API de messagerie **
Cela fera de votre compte un essai pour les développeurs. La grande différence avec le plan gratuit général est
developper | gratuit | |
---|---|---|
pushAPI | OK | NG |
Nombre d'amis pouvant être ajoutés | 50 | Sans limites |
L'essai développeur suffit si vous en faites un passe-temps
Entrez le nom du compte, l'image, le type de travail, etc. et postulez Après cela, il est facile d'oublier cette partie, mais veuillez passer à ** LINE @ MANAGER **
Ensuite, vous devriez tomber sur cet écran (Paramètres du compte> Paramètres de l'API de messagerie)
Continuons comme c'est Maintenant, il fait beau et la création du compte Bot est terminée
Ici, notons ** CHANNEL_ACCESS_TOKEN ** pour connecter le serveur LINE et Lambda.
Ensuite, je voudrais créer un serveur sans serveur avec Lambda et également définir la connexion au serveur Lambda => LINE.
AWS Lambda vous permet d'exécuter votre code sans provisionnement ni gestion de serveur. Vous ne payez que pour le temps de calcul réel que vous utilisez, et vous ne payez pas lorsque le code n'est pas en cours d'exécution. Avec Lambda, vous pouvez exécuter pratiquement n'importe quel type d'application ou de service de backend sans avoir besoin de gestion. Une fois que vous avez téléchargé votre code, Lambda fait tout ce dont vous avez besoin pour exécuter et mettre à l'échelle votre code pour une haute disponibilité. Le code peut être configuré pour se déclencher automatiquement à partir d'autres services AWS, ou il peut être configuré pour appeler directement à partir de l'application Web ou mobile.
Lambda
dans la console AWSCréer une fonction
, étape à déployer:
prod`python3.6
Cette fois, j'utiliserai python3.6
(w parce que je l'aime récemment)
En fait, lorsque vous essayez de faire quelque chose pour une salle de groupe d'utilisateurs particulière à l'aide de l'API Messagein de LINE, vous obtenez un identifiant de destination. c'est,
Vous pouvez spécifier les identifiants de l'utilisateur, du groupe et de la salle de discussion source pour les événements Webhook comme identifiants de destination. Vous ne pouvez pas spécifier l'ID de ligne utilisé dans l'application LINE.
Il paraît que. Même si l'utilisateur qui développe le bot a son propre identifiant de destination écrit dans LINE Developers, il ne connaît pas du tout les identifiants des autres groupes d'utilisateurs.
Donc, tout d'abord, le code implémenté dans Lambda ** renverra l'identifiant de destination de l'utilisateur du groupe qui a envoyé au Bot **.
Voici l'exemple de code que j'ai créé
import urllib.request, json, os, ast
def lambda_handler(event, context):
#Se préparer à frapper le serveur LINE
url = "https://api.line.me/v2/bot/message/push"
method = "POST"
headers = {
'Authorization': os.getenv("CHANNEL_ACCESS_TOKEN"),
'Content-Type': 'application/json'
}
#Analyser la chaîne en type de dict
apiParam = ast.literal_eval(event['body'])
source = apiParam['events'][0]['source']
sourceList = []
for key, value in source.items():
sourceList.append({"type": "text", "text": key + "#" + value})
obj = {
#Les demandes de la chambre sont renvoyées dans la chambre. D'autres reviennent à l'appelant.
"to": source["roomId"] if "roomId" in source else source["userId"],
"messages": sourceList
}
json_data = json.dumps(obj).encode("utf-8")
#Préparer la requête http et le POST
request = urllib.request.Request(url, data=json_data, method=method, headers=headers)
with urllib.request.urlopen(request) as response:
response_body = response.read().decode("utf-8")
return 0
Gestionnaire: index.lambda_handler
Rôle: créer un rôle personnalisé
=> Ajoutez maintenant Accès en lecture seule aux objets S3
au modèle de politique. Faisons les autres de manière appropriée.
Définissez également les éléments suivants dans la partie variable d'environnement
CHANNEL_ACCESSS_TOKEN:{CHANNEL que j'ai noté sur l'écran LINE plus tôt_ACCESS_TOKEN}
Collez ceci et sauvegardons
test
ici, il ne peut pas être testé correctement car ce n'est pas la réponse du serveur LINE réel.Enfin, nous allons configurer la connexion du serveur LINE à Lambda.
À partir de l'élément déclencheur Lambda créé précédemment (voir la figure ci-dessous)
Je vais chercher l'URL, je suis Méthode: AMY, donc si vous frappez cette URL avec GET ou POST, le code écrit en Lambda sera exécuté.
Maintenant, définissez l'URL de ce déclenchement sur le serveur LINE.
Connectez-vous à LINE Developers et définissez-le sur URL Webhook
À ce stade, assurez-vous d'ajouter le numéro de port 443. Semble être joué (pas essayé)
Ceci complète le LINE Bot par une journée ensoleillée.
Inscrivez-vous en tant qu'ami à partir du code QR de LINE Developers et envoyez quelque chose dans la salle appropriée 1to1 ça devrait ressembler à ça Ce sont les identifiants de destination, dans ce cas mon propre identifiant et l'identifiant de la chambre que j'ai envoyée sont affichés
Dans Lambda, vous pouvez uniquement écrire du code et y accéder, donc dans l'état initial, vous ne pouvez utiliser que des bibliothèques de base. Ainsi, quand j'ai frappé l'API de Lambda, je ne pouvais pas utiliser urllib2 et utilisé urllib en le poussant. En fait, si vous téléchargez le code compressé et l'ensemble des bibliothèques, vous pouvez utiliser la bibliothèque, mais je l'introduirai la prochaine fois
Une lecture rapide de la Référence API LINE La demande de webhook a été écrite comme suit.
{
"events": [
{
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
"type": "message",
"timestamp": 1462629479859,
"source": {
"type": "user",
"userId": "U206d25c2ea6bd87c17655609a1c37cb8"
},
"message": {
"id": "325708",
"type": "text",
"text": "Hello, world"
}
}
]
}
D'autre part, les arguments de Lambda sont les suivants
def lambda_handler(event, context):
Ils sont inclus dans l'argument «événement».
{
~~~~~Abréviation~~~~~~~
"body": "{"events":[{"type":"message","replyToken":"cd8477b1e2844fb7ac535ba8cfb7e604","source":{"userId":"Ue49159d045ba254087865fb1c09ce0e7","type":"user"},"timestamp":1504100774524,"message":{"type":"text","id":"6623088374597","text":"fewgvlkwgw"}}]}"
~~~~~Abréviation~~~~~~~
}
Il est stocké sous forme de chaîne de caractères ... Je pensais que c'était un type dict
, et j'en étais accro ...
Alors
apiParam = ast.literal_eval(event['body'])
Voilà comment j'analyse
――Parce qu'il est sans serveur, il y a peu d'éléments addictifs
||
Maisor
Ou en phparray_key_exist()
Mais en pythonA in B
Peut être ressenti dela prochaine fois ** Édition à verrouillage RDS et S3 **, donc si vous envoyez "s'il vous plaît", nous ferons quelque chose qui répond aux photos aléatoires de RDS (S3)
Recommended Posts