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.
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
Mac OS Sierra Python 2.7.10
pip install qibuild
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
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
$ 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
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')
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()
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")
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)
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 \
<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>
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>
$ qipy install slackbotservice
$ qipkg make-package slackbotservice.pml
$ qipkg deploy-package slackbotservice-0.1.0.pkg --url nao@<Peppers IP>
Sie können Pepper jetzt über Slack sprechen lassen!
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