Ajouter une fonction de conversation au robot slack (créé par python) à l'aide de l'API Talk de Recruit

Que faire dans cet article

Ajoutez des fonctionnalités conversationnelles au bot slack. bot est fait avec la série python3 Si vous créez un bot normalement, vous ne renvoyez qu'un mot fixe pour un mot fixe, mais c'est plutôt ennuyeux. Rendez possible de parler comme suit chaque fois que vous faites un mignon

スクリーンショット 2017-08-09 23.05.54.png

Comment faire un bot

Veuillez vous référer à ce qui suit pour savoir comment émettre l'API et vous inscrire à slack. Créer un bot Slack avec la bibliothèque slackbot de Python

Si vous poursuivez la procédure après l'installation de pip slackbot, vous constaterez qu'un groupe de fichiers sera créé avec la structure de répertoires suivante.

slackbot         #Un annuaire qui organise les programmes. N'importe quel nom va bien
├─ run.py        #Démarrez le bot en exécutant ce programme
├─ slackbot_settings.py   #Fichier pour écrire les paramètres liés au bot
└─ plugins                #Ajouter une fonctionnalité de bot à ce répertoire
   ├─ __init__.py         #Un fichier pour indiquer le module. Vider c'est bien
   └─ my_mention.py       #Un fichier qui ajoute chaque fonction de bot. Modifiez ce fichier cette fois

Commencez par supprimer la partie DEFAULT_REPLY du fichier slackbot_settings.py

[root@localhost slackbot]# more slackbot_settings.py
# coding: utf-8

#Spécifier le jeton pour le compte de bot
API_TOKEN = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

#Chaîne de réponse lorsqu'un message adressé à ce bot ne s'applique à aucune réponse
#Liste des noms de sous-répertoires où se trouve le script de plug-in
PLUGINS = ['plugins']

#Supprime ça!
DEFAULT_REPLY = "Je ne sais pas de quoi tu parles"

Ensuite, modifiez my_mention.py

Je pense que l'état initial est le suivant. Je vais modifier cela

# coding: utf-8

from slackbot.bot import respond_to     # @botname:Décodeur qui réagit avec
from slackbot.bot import listen_to      #Décodeur qui répond aux remarques dans le canal
from slackbot.bot import default_reply  #Décodeur qui réagit lorsqu'il n'y a pas de réponse correspondante

# @respond_to('string')Message au bot
#la chaîne peut être une expression régulière "r'string'」
# @listen_to('string')Messages autres que pour bot dans la chaîne
#                           @botname:Notez qu'il ne réagit pas
#Réagissez lorsque vous en parlez aux autres
#Peut être exprimé normalement
# @default_reply()          DEFAULT_Même fonction que REPLY
#Si vous spécifiez une expression régulière, elle n'atteindra pas les autres décodeurs
#Réagir lors de la mise en correspondance d'une expression régulière
#... Mais est-ce une erreur si je spécifie une expression régulière?

# message.reply('string')   @Nom du haut-parleur:Envoyer un message avec une chaîne
# message.send('string')Envoyer la chaîne
# message.react('icon_emoji')Réaction au message de l'orateur(timbre)Faire
#Dans la chaîne':'Je n'ai pas besoin
@respond_to('Mention')
def mention_func(message):
    message.reply('Que faites-vous quand vous dites me mentionner') #Mention

@listen_to('Ecoutez')
def listen_func(message):
    message.send('Quelqu'un semble avoir posté avec écoute')      #Juste un post
    message.reply('Tu?')                           #Mention

Mise en œuvre de la fonction de conversation

Pour la mise en œuvre, nous utiliserons l'API Talk fournie par Recruit. Je l'ai comparé en regardant ce qui suit, mais il semble que la précision du message renvoyé soit élevée gratuitement. Résumé des API, bibliothèques et services de conversation pouvant être utilisés avec BOT

Talk API

■Talk API Talk API est une API permettant de créer un chatbot. Il fournit une fonction de réponse de conversation quotidienne en générant une phrase de réponse à partir d'une phrase d'entrée à l'aide du réseau neuronal récurrent (LSTM). Chatbot, qui utilise l'API Talk, automatise l'interaction des utilisateurs sur diverses applications et peut répondre aux demandes des utilisateurs immédiatement à tout moment.

Inscrivez-vous en tant que membre et obtenez une clé API. Après l'enregistrement, essayez d'appuyer sur l'API avec curl comme indiqué ci-dessous et vous devriez obtenir une réponse

root@localhost slackbot]# curl -X POST https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk -F "apikey=XXXXXXXXXXXXXXXXXXXX" -F "query=Bonjour"

{"status": 0, "message": "ok", "results": [{"perplexity": 0.07743213382788067, "reply": "\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059"}]}

C'est très simple à mettre en œuvre. Il semble que python fournit une bibliothèque appelée pya3rt, alors utilisons-la Obtenez ** pip install pya3rt **.

Le code lui-même ajoute simplement la partie suivante à my_mention.py

import pya3rt
@default_reply()
def send_message(message):
    apikey = "XXXXXXXXXXXXXXXXXXXXXXX"
    client = pya3rt.TalkClient(apikey)
    reply_message = client.talk(message.body['text'])
#Puisque json est retourné au format suivant, retirez la partie réponse
# {'status': 0, 'message': 'ok', 'results': [{'perplexity': 1.2802554542585969, 'reply': 'je ne suis pas sûr'}]}
    message.reply(reply_message['results'][0]['reply'] + "Pome" )

@default_reply () est un collator qui est appelé lorsque vous sautez une mention à un bot et il ne correspond à aucun mot dans my_mention.py. Utilisez pya3rt.TalkClient (apikey) pour publier sur l'API Talk fournie par Recruit. Vous pouvez obtenir le contenu suivant avec json par défaut.

# {'status': 0, 'message': 'ok', 'results': [{'perplexity': 1.2802554542585969, 'reply': 'je ne suis pas sûr'}]}

Puisque la seule partie requise ci-dessus est la valeur de la réponse, cela donne l'impression de la retirer avec ['results'] [0] ['reply'] et de la stocker dans le message de réponse du bot.

Si vous le faites avec curl, vous pouvez également l'implémenter comme suit à l'aide de la méthode subprocess. Cependant, le résultat de check_output n'est pas retourné par json, il est donc nécessaire d'obtenir une réponse avec split ou quelque chose.

import subprocess
@default_reply()
def send_message(message):
    curl_cmd = 'curl -X POST https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk -F "apikey=XXXXXXXXXXXXXXXXXXXXXX" -F "query=message.body['text']"'
    message = subprocess.check_output(curl_cmd, shell=True)

Après l'implémentation, si vous démarrez slack bot avec python run.py, je pense que le bot peut parler comme au début

Recommended Posts

Ajouter une fonction de conversation au robot slack (créé par python) à l'aide de l'API Talk de Recruit
Ajouter une fonction pour indiquer la météo d'aujourd'hui au bot slack (fabriqué par python)
[Python] Talk en utilisant OpenJTalk et l'API Talk (jusqu'à la sortie vocale)
Demandez au bot de vous indiquer la météo (informations sur les précipitations) à l'aide de l'API d'informations météorologiques (YOLP) fournie par Yahoo ~ développement de bot slack avec python ④ ~
Client API Slack simple réalisé avec Python
Connectez-vous à Slack à l'aide de requêtes en Python
Fonction pour enregistrer les images par date [python3]
Développement de slack bot avec python en utilisant chat.postMessage
Procédure pour utiliser l'API WEB de TeamGant (en utilisant python)
[Python] Mention à plusieurs personnes avec l'API de Slack
Notification PUSH de Python vers Android à l'aide de l'API de Google
[Question] À propos de la conversion API du chat bot à l'aide de Python
[Python] Utilisation de l'API Line [1ère création de Beauty Bot]
Reconnaissance vocale des fichiers par l'API Google Speech v2 à l'aide de Python
Comment faire fonctionner l'API Discord avec Python (enregistrement de bot)
Créez un bot Mastodon avec une fonction pour répondre automatiquement avec Python
Ajoutez une fonction à heatrapy qui peut transférer chaleur + chaleur à température
Pour renvoyer char * dans une fonction de rappel à l'aide de ctypes en Python
Exportez les informations produit au format CSV à l'aide de l'API de recherche de produits Rakuten [Python]
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python