[PYTHON] Erstellen Sie einen SlackBot-Dienst für Pepper

Ich wollte SlackBot in Pepper ausführen.

Bisher wurden Slack und Pepper mit Slacks Incoming Web Hook verknüpft. Ich habe mit dem Anforderungsmodul aus der Arbeits-App gepostet. Ich wollte Benachrichtigungen von der Slack-Seite erhalten können, also dachte ich darüber nach, SlackBot in Pepper zu installieren.

Ich möchte es für alle Arbeits-Apps verwenden.

Was ich mit SlackBot machen wollte.

--Erstelle einen Kanal, der Peppers Bot sammelt.

Außerdem wollte ich es unabhängig von der Arbeitsanwendung allgemein verwenden, daher habe ich es als Service implementiert, indem ich auf diesen Artikel verwiesen habe. http://qiita.com/yacchin1205/items/11301d79380d08d2dbf6

Entwicklungsumgebung

Mac OS Sierra Python 2.7.10

Aktiviere Bot in Slack

キャプチャ.PNG

Umgebung

Installieren Sie QiBuild

pip install qibuild

Installieren des Python SDK

Bitte lassen Sie die folgende Version anstelle der neuesten Version fallen. Die neueste Version (2.5.5 zum Zeitpunkt des Schreibens) scheint viele Änderungen zu haben, und es gab wenig nützliche Informationen, so dass ich 2.4.3 heruntergeladen habe.

pynaoqi-python2.7-2.4.3.28-mac64

Lass es durch den Weg. Fügen Sie es auch zu .bash_profile hinzu.

$ 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

Die folgenden Befehle können verwendet werden, wenn der Pfad korrekt ist.

$ python

>> import qi
>> import naoqi

Arbeitsbaumvorbereitung

Die endgültig erforderliche Umgebung ist wie folgt.

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

Führen Sie den folgenden Befehl in derselben Hierarchie wie das Projektverzeichnis aus. In der unteren Hierarchie sind verschiedene Builds und Verpackungen möglich.

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

Installieren Sie das Slackbot-Modul

$ pip install slackbot

Die erforderlichen Module werden zusammen installiert. Kopieren Sie die folgenden installierten Module unter SlackBotService / lib.

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

Kopieren Sie websocket / cacert.pem unter SlackBotService / lib.

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

Implementieren Sie SlackBot

Beschreiben Sie die Einstellungen

Beschreiben Sie die Einstellungen von SlackBot.

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

import os
from slackbot import settings

settings.API_TOKEN = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
settings.DEFAULT_REPLY = u"Es ist nicht gut verstanden."
settings.PLUGINS = [
    'plugins',
]

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

Der folgende Teil lädt die obige Schlüsseldatei, die zum Zeitpunkt des Verpackens nicht gebündelt ist. Natürlich bekomme ich eine Warnung, aber ich wollte die Umgebung von Pepper selbst nicht verschmutzen, also habe ich das einmal gemacht.

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

Implementiert wurde das Hauptskript als Dienst gestartet

Führen Sie SlackBot aus, wenn Sie das Skript ausführen.

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

SlackBot Plugin implementiert

Wenn etwas gesprochen wird, versuchen Sie, Pepper zum Sprechen zu bringen.

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):
    """
Erhalte einen beliebigen Charakter.
    :param message:Empfangenes Nachrichtenobjekt
    """
    _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")

Implementierte einen Proxy, um Pepper zum Sprechen zu bringen

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)

Packen Sie die App

qiproject.xml Definieren Sie das zu bündelnde Modul. Alle notwendigen Module wie Bibliotheken und Skripte sind definiert.

<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 Definieren Sie den Service. Das Tag \ definiert Informationen als einen in Pepper erkannten Dienst.

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

PML-Datei

Definieren Sie das Paket.

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

Projektverpackung

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

Paket bereitstellen

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

Überprüfen Sie den Betrieb

キャプチャ.PNG

Sie können Pepper jetzt über Slack sprechen lassen!

von jetzt an

Es war sehr praktisch, da es möglich wurde, verschiedene AL-Module über Slack aufzurufen. Derzeit ist es nicht als Dienst registriert, sodass Sie SlackBot nicht über verschiedene Arbeitsanwendungen bedienen können. Wenn Sie sich als Dienst registrieren, können Sie den SlackBot selbst starten und stoppen, Nachrichten mit Arbeits-Apps austauschen usw.

Ich denke, wenn Sie SlackBot gut verwenden, können Sie es für die Zusammenarbeit zwischen Arbeits-Apps und die Kommunikation zwischen Peppers verwenden.

Recommended Posts

Erstellen Sie einen SlackBot-Dienst für Pepper
Erstellen Sie ein Klassenzimmer auf Jupyterhub
Erstellen Sie eine Python-Umgebung auf dem Mac (2017/4)
Erstellen Sie eine Linux-Umgebung unter Windows 10
Erstellen Sie eine Python-Umgebung in Centos
Erstellen Sie eine Python-Umgebung auf Ihrem Mac
Machen Sie Jupyter Notebook zu einem Dienst unter CentOS
Machen Sie Unity Accelerator zu einem Dienst unter Linux
Erstellen Sie eine virtuelle Linux-Maschine unter Windows
Erstellen Sie einen Webdienst mit Docker + Flask
Flask-Erstellen Sie einen Webdienst mit SQLAlchemy + PostgreSQL
[Venv] Erstellen Sie eine virtuelle Python-Umgebung unter Ubuntu
Versuchen Sie, einen neuen Befehl unter Linux zu erstellen
Erstellen Sie eine Python-Ausführungsumgebung unter IBM i
Erstellen Sie eine GUI auf dem Terminal mit Flüchen
Erstellen Sie einen Django-Zeitplan
Erstellen Sie ein Python-Modul
Rückblick auf die Erstellung eines Webdienstes mit Django 1
Erstellen Sie unter Linux einen QR-Code für die URL
Erstellen Sie eine komfortable Python 3 (Anaconda) -Entwicklungsumgebung mit Windows
Rückblick auf die Erstellung eines Webdienstes mit Django 2
Erstellen Sie eine bootfähige LV
Erstellen Sie eine Python-Umgebung
[kotlin] Erstelle eine Echtzeit-Bilderkennungs-App auf Android
Erstellen Sie unter Windows eine anständige Shell- und Python-Umgebung
Erstellen Sie eine Python-Entwicklungsumgebung mit OS X Lion
Erstellen Sie einen Slack Bot
Erstellen Sie eine PythonBox, die nach der PEPPER-Eingabe mit Random ausgegeben wird
Erstellen Sie eine neue CSV mit Pandas basierend auf der lokalen CSV
Erstellen Sie eine Python-Entwicklungsumgebung (pyenv / virtualenv) auf einem Mac (Homebrew).
[Python] Erstellen Sie einen Linebot, der ein beliebiges Datum auf ein Foto zeichnet
Legen Sie den Google Cloud-Dienstkontoschlüssel in Heroku fest
Erstellen Sie ein Python-Skript für Wake on LAN (Wake on LAN über NAT [5])
Erstellen einer virtuellen Umgebung für Python auf dem Mac [Sehr einfach]
Erstellen Sie ein Wox-Plugin (Python)
Erstellen Sie eine Funktion in Python
Erstellen Sie ein Wörterbuch in Python
Ein Kommentar zum Boruta-Algorithmus
Erstellen Sie einen (einfachen) REST-Server
Erstellen Sie eine Homepage mit Django
Erstellen Sie Befehlsverknüpfungen unter Ubuntu 16.04
Pfeffer-Tutorial (5): Verwenden eines Tablets
Erstellen Sie ein Python-Numpy-Array
Erstellen Sie eine Dummy-Datendatei
Machen Sie Responder zu einem Daemon (Dienst)
Erstellen Sie einen Django-Anmeldebildschirm
Erstellen Sie einen einfachen Textlint-Server
Erstellen Sie ein Verzeichnis mit Python
Erstellen Sie einen rudimentären ELF-Packer
Wettbewerb mit VS-Code Erstellen Sie eine Python-Umgebung für Profis unter Windows
Ich habe versucht, eine Serverumgebung zu erstellen, die unter Windows 10 ausgeführt wird
[MariaDB] Installieren Sie MariaDB unter Linux und erstellen Sie eine Datenbank und einen Benutzer.
[AWS Hands-on] Erstellen wir einen Promi-Identifikationsdienst mit einer serverlosen Architektur!
Erstellen Sie eine Wortwolke mit nur positiven / negativen Wörtern auf Twitter
Erstellen Sie ein Docker-Container-Image mit JRE8 / JDK8 unter Amazon Linux
Ich möchte einen maschinellen Lerndienst ohne Programmierung erstellen! Web-API