[PYTHON] Créer un service SlackBot sur Pepper

Je voulais exécuter SlackBot dans Pepper.

Jusqu'à présent, Slack et Pepper étaient liés à l'aide du crochet Web entrant de Slack. Je postais en utilisant le module de demande de l'application de travail, Je voulais pouvoir recevoir des notifications du côté Slack, alors j'ai pensé à installer SlackBot dans Pepper.

Je souhaite l'utiliser dans toutes les applications professionnelles.

Ce que je voulais faire avec SlackBot.

--Créez une chaîne qui collecte le Bot de Pepper.

De plus, je voulais l'utiliser dans tous les domaines quelle que soit l'application de travail, je l'ai donc implémenté en tant que service en me référant à cet article. http://qiita.com/yacchin1205/items/11301d79380d08d2dbf6

Environnement de développement

Mac OS Sierra Python 2.7.10

Activer le bot dans Slack

キャプチャ.PNG

Environnement

Installez QiBuild

pip install qibuild

Installation du SDK Python

Veuillez supprimer la version suivante au lieu de la dernière version. La dernière version (2.5.5 au moment de la rédaction) semble avoir de nombreux changements, et il y avait peu d'informations qui pouvaient être utilisées comme référence, j'ai donc téléchargé 2.4.3.

pynaoqi-python2.7-2.4.3.28-mac64

Laissez-le à travers le chemin. Ajoutez-le également à .bash_profile.

$ export PYTHONPATH=${PYTHONPATH}:/path/to/pynaoqi-python2.7-2.4.3.28-mac64
$ export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/path/to/pynaoqi-python2.7-2.4.3.28-mac64

Les commandes suivantes peuvent être utilisées si le chemin est correct.

$ python

>> import qi
>> import naoqi

Préparation de l'arbre de travail

L'environnement final requis est le suivant.

SlackBotService
 qiproject.xml
 manifest.xml
 slackbotservice.py
 slackbotservice.pml
 bot_settings.py
 lib
  backports
  slackbot
  slacker
  websocket
  six.py
  plugins
   __init__.py
   mention.py
   proxy.py

Exécutez la commande suivante dans la même hiérarchie que le répertoire du projet. Diverses constructions et emballages seront possibles dans la hiérarchie inférieure.

$ pwd
/path/to/SlackBotService
$ qibuild init
$ qipy bootstrap

Installez le module slackbot

$ pip install slackbot

Les modules requis seront installés ensemble. Copiez les modules installés suivants sous SlackBotService / lib.

$ pwd
/path/to/SlackBotService/lib
$ ls
backports/
slackbot/
slacker/
websocket/
six.py

Copiez websocket / cacert.pem sous SlackBotService / lib.

$ pwd
/path/to/SlackBotService/lib
$ ls
backports/
slackbot/
slacker/
websocket/
six.py
cacert.pem

Implémenter SlackBot

Décrivez les paramètres

Décrivez les paramètres de SlackBot.

SlackBotService/bot_settings.py
# -*- coding: utf-8 -*-

import os
from slackbot import settings

settings.API_TOKEN = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
settings.DEFAULT_REPLY = u"Ce n'est pas bien compris."
settings.PLUGINS = [
    'plugins',
]

os.environ['WEBSOCKET_CLIENT_CA_BUNDLE'] = os.path.join('./bin', 'cacert.pem')

La partie suivante charge le fichier de clé ci-dessus qui n'est pas fourni au moment de l'emballage. Bien sûr, je reçois un avertissement, mais je ne voulais pas polluer l'environnement de Pepper lui-même, alors je l'ai fait une fois.

os.environ['WEBSOCKET_CLIENT_CA_BUNDLE'] = os.path.join('./bin', 'cacert.pem')

Implémentation du script principal démarré en tant que service

Exécutez SlackBot lors de l'exécution du script.

SlackBotService/slackbotservice.py
# -*- coding: utf-8 -*-

from slackbot.bot import Bot
from bot_settings import *


class SlackBotService:
    def __init__(self):
        self.bot = Bot()
        self.bot.run()


def main():
    slackbotservice = SlackBotService()


if __name__ == "__main__":
    main()

Implémentation du plugin SlackBot

Si quelque chose est dit, essayez Pepper de parler.

SlackBotService/lib/plugins/mention.py
# -*- coding: utf-8 -*-

from slackbot.bot import respond_to, listen_to
from slacker import Slacker
from plugins import proxy
from bot_settings import settings

slack = Slacker(settings.API_TOKEN)


@respond_to(u'')
def respond_any_word(message):
    """
Recevez n'importe quel personnage.
    :param message:Objet de message reçu
    """
    _text = message.body.get('text', '')
    _ts = message.body.get('ts', '')
    _user = message.body.get('user', '')
    _team = message.body.get('team', '')
    _type = message.body.get('type', '')
    _channel = message.body.get('channel', '')
    proxy.animated_speech(_text)
    message.reply("done")

Implémentation d'un proxy pour faire parler Pepper

SlackBotService/lib/plugins/proxy.py
# -*- coding: utf-8 -*-

from naoqi import ALProxy

animatedSpeechProxy = ALProxy("ALAnimatedSpeech", "127.0.0.1", 9559)


def animated_speech(text):
    _text = text if isinstance(text, str) else text.encode("utf-8")
    configuration = {"bodyLanguageMode": "contextual"}
    animatedSpeechProxy.say(_text, configuration)

Package de l'application

qiproject.xml Définissez le module à regrouper. Tous les modules nécessaires tels que les bibliothèques et les scripts sont définis.

<project version="3">
    <qipython name="slackbotservice">
        <package name="backports" src="lib" />
        <package name="slackbot" src="lib" />
        <package name="slacker" src="lib" />
        <package name="websocket" src="lib" />
        <package name="plugins" src="lib" />
        <script src="lib/six.py" />
        <script src="lib/cacert.pem" />
        <script src="slackbotservice.py" />
        <script src="bot_settings.py" />
    </qipython>
</project>

manifest.xml Définissez le service. La balise \ définit les informations comme un service reconnu dans Pepper.

<package uuid="slackbotservice" version="0.1.0">
    <services>
        <service name="SlackBotService" autorun="true"
            execStart="/bin/bash ./python bin/slackbotservice.py" />
        <executableFiles>
            <file path="python" />
        </executableFiles>
    </services>
    <requirements>
        <naoqiRequirement minVersion="2.3"/>
        <robotRequirement model="JULIETTE"/>
    </requirements>
</package>

fichier .pml

Définissez le package.

<?xml version="1.0" encoding="UTF-8" ?>
<Package name="slackbotservice" format_version="4">
    <Manifest src="manifest.xml" />
    <qipython name="slackbotservice" />
</Package>

Emballage de projet

$ qipy install slackbotservice
$ qipkg make-package slackbotservice.pml

Déployer le package

$ qipkg deploy-package slackbotservice-0.1.0.pkg --url nao@<IP de Pepper>

Vérifiez le fonctionnement

キャプチャ.PNG

Vous pouvez maintenant faire parler Pepper via Slack!

à partir de maintenant

C'était très pratique car il devenait possible d'appeler différents modules AL via Slack. Pour le moment, il n'est pas enregistré en tant que service, vous ne pouvez donc pas utiliser SlackBot à partir de diverses applications professionnelles. En vous inscrivant en tant que service, vous pourrez démarrer et arrêter le SlackBot lui-même, échanger des messages avec des applications professionnelles, etc.

Je pense que si vous utilisez bien SlackBot, vous pouvez l'utiliser pour la coopération entre les applications professionnelles et la communication entre Peppers.

Recommended Posts

Créer un service SlackBot sur Pepper
Créer une salle de classe sur Jupyterhub
Créer un environnement Python sur Mac (2017/4)
Créer un environnement Linux sur Windows 10
Créer un environnement python dans centos
Créez un environnement python sur votre Mac
Faire de Jupyter Notebook un service sur CentOS
Faire de Unity Accelerator un service sous Linux
Créer une machine virtuelle Linux sous Windows
Créer un service Web avec Docker + Flask
Flask-Créer un service Web avec SQLAlchemy + PostgreSQL
[Venv] Créer un environnement virtuel python sur Ubuntu
Essayez de créer une nouvelle commande sous Linux
Créer un environnement d'exécution Python sur IBM i
Créez une interface graphique sur le terminal à l'aide de curses
Créer un planning Django
Créer un module Python
Retour sur la création d'un service Web avec Django 1
Créez un code QR pour l'URL sous Linux
Créez un environnement de développement Python 3 (Anaconda) confortable avec Windows
Retour sur la création d'un service Web avec Django 2
Créer un LV amorçable
Créer un environnement Python
[kotlin] Créez une application de reconnaissance d'images en temps réel sur Android
Créez un environnement shell et python décent sur Windows
Créer un environnement de développement Python avec OS X Lion
Créer un bot slack
Créez une PythonBox qui sort avec Random après l'entrée PEPPER
Créer un nouveau csv avec des pandas basé sur le csv local
Créer un environnement de développement Python (pyenv / virtualenv) sur Mac (Homebrew)
[Python] Créez un linebot qui dessine n'importe quelle date sur une photo
Définir la clé de compte de service Google Cloud dans heroku
Créer un script Python pour Wake on LAN (Wake on LAN over NAT [5])
Créer un environnement virtuel pour python sur mac [Très facile]
Créer un plugin Wox (Python)
Créer un référentiel pypi local
Créer une fonction en Python
Créer un dictionnaire en Python
Un commentaire sur l'algorithme de Boruta
Créer un serveur REST (simple)
Créer une page d'accueil avec django
Créer des raccourcis de commande sur Ubuntu 16.04
Tutoriel Pepper (5): Utilisation d'une tablette
Créer un tableau numpy python
Créer un fichier de données factice
Faire de Responder un démon (service)
Créer un écran de connexion Django
Créer un serveur textlint simple
Créer un répertoire avec python
Créer un packer ELF rudimentaire
Concurrence avec VS Code Créez un environnement Python pour les professionnels sous Windows
J'ai essayé de créer un environnement serveur qui fonctionne sous Windows 10
[MariaDB] Installez MariaDB sous Linux et créez une base de données et un utilisateur opérationnel.
[AWS Hands-on] Créons un service d'identification des célébrités avec une architecture sans serveur!
Créez un nuage de mots avec uniquement des mots positifs / négatifs sur Twitter
Créer une image de conteneur Docker avec JRE8 / JDK8 sur Amazon Linux
Je souhaite créer un service d'apprentissage automatique sans programmation! API Web