初めに
現在の自然言語処理領域では、人と対話をするアンドロイドの研究が多くされています。人と対話をするアンドロイドを作成するにあたって、重要な役割を担うchatbotの作成方法を紹介します。
今回はtelegramを使って、chatbotを作成します。
WindowsPCにtelegramをインストールする方法
1. https://telegram.softonic.jp/からインストールを行います。
2. 「無料ダウンロード」をクリックします。そうするとプログラムファイルがダウンロードされるので、クリックして展開します。
3. プログラムを起動すると、言語を選択する画面が表示されます。Telegramは日本語には対応していませんので、Englishを選択してOKボタンを押しましょう。
4. インストールする先のフォルダが表示されます。フォルダを変更したい人以外は、「Next」を押して次へ進みます。そうするとスタートメニューにショートカットを追加するか聞かれます。
5.スタートメニューに追加したい人はそのまま「Next」ボタンを押しましょう。ショートカットが不要な方は「Don't create a Start Menu folder」にチェックを入れてから「Next」ボタンを押します。
6. デスクトップにショートカットボタンを作成するかどうか聞かれます。不要な方は「Create a desktop shortcut」のチェックを外して「Next」ボタンを押しましょう。
7. 「Install」ボタンを押すとインストールが始まります。
WindowsでのTelegram (テレグラム) のアカウントと登録方法
1. Telegramを起動して「START MESSAGING」をクリックします。
2. 携帯電話番号を入力する画面になります。最初の「0」を抜いた携帯電話番号を入力しましょう。
3. 携帯電話にショートメールが届きます。ショートメールに書かれているコードを入力しましょう。
3. 名前を入力しましょう。First Name欄に名前を、Last Name欄に名字を入力します。
4. 「SIGN UP」をクリックするとアカウント登録は完了です。
Telegramでチャットボットの開発
1. Telegramで「@BotFather」を検索
pythonで開発するためのaccess tokenの取得
1. @BotFatherに「/newbot」と送信
2. botの名前を送信
「○○_bot」と送信し、botの名前を決定します。
3. botのIDを送信(重複不可)
作成したbotを検索する際に使用するIDを決定します。ただし、他のbotと重複しないようにします。
4. access TOKENを取得
pythonでbotを開発する際に使用するaccess TOKENを取得します。
pythonでchatbotを開発
今回はTelegram上で簡易的なchatbotを作成しました。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
import datetime
import pytz
# アクセストークンを入れてください
TOKEN = "_______"
# 以下の部分を各自書き換えれば自分のシステムができる
# ctrl-cで強制終了
class SampleBot:
def __init__(self):
self.counter = 0
pass
#「/start」が入力されたからシステムが発話
def start(self, bot, update):
#update.message.reply_text()内にテキストを入れるとtelegramに送信
update.message.reply_text('システム応答待機。ロボットを起こしてください')
#この関数の中でシナリオを作成
def message(self, bot, update):
#カウンターで状態を遷移させる
print('カウンター:', self.counter)
# 挨拶
if self.counter == 0:
#update.message.textでtelegramのユーザーからの入力を取得
text = 'システム起動!!!\n'
#import pdb; pdb.set_trace()
#現在時刻を取得
now = datetime.datetime.now(pytz.timezone('Asia/Tokyo'))
#現在時刻によって挨拶を変える
if now.hour > 0 and now.hour <=11:
text += f'おはようございます。今は{now.hour}時{now.minute}分{now.second}秒です。\n'
elif now.hour > 11 and now.hour <=16:
text += f'こんにちは。今は{now.hour}時{now.minute}分{now.second}秒です。\n'
elif now.hour > 16 and now.hour <=24:
text += f'こんばんは。今は{now.hour}時{now.minute}分{now.second}秒です。\n'
text = text + '僕の名前は、はるきです。あなたの名前は何ですか?'
update.message.reply_text(text)#システムの発話
self.counter += 1
# 名前確認
elif self.counter == 1:
name = update.message.text #ユーザの発話
text = name + 'さんですか。いい名前!\n' + 'よろしくお願いします。\n' + name + 'さんの好きなスポーツは何ですか?'
update.message.reply_text(text)
self.counter += 1
# 好きなスポーツ
elif self.counter == 2:
if 'サッカー' in update.message.text:
text = 'サッカーですか!今ワールドカップやっていて熱いですよね!!アルゼンチンが優勝すると思います。\n'
else:
text = update.message.text + 'ですか。いいですね。僕はワールドカップを見ています!\n'
text += '話は変わりますが、言語処理分野に興味はありますか?'
update.message.reply_text(text)
self.counter += 1
# 言語処理への興味
elif self.counter == 3:
self.counter = 0
yes_list = ['はい', 'そうですね', 'ええ', 'もちろん', 'あります']
text = 'そうですか...私は言語処理分野の勉強をしているので、いつか興味でたら声かけてみてくださいね!'
for yes in yes_list:
if yes in update.message.text:
text = '本当ですか!私も言語処理分野の勉強をしているので、言語処理分野なら私に聞いてくださいね!!!'
break
text += '\n...システム停止'
update.message.reply_text(text)
#telegramの動作コマンド(変えなくても動くはず)
def run(self):
updater = Updater(TOKEN)
dp = updater.dispatcher
dp.add_handler(CommandHandler("start", self.start))
dp.add_handler(MessageHandler(Filters.text, self.message))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
mybot = SampleBot()
mybot.run()
telegram上での動作
sample.pyを実行して、chat botと対話してみました。問題なくシナリオ通りに動作しました。
終わりに
今回はTelegram上で簡易的なchatbotを作成してみました。シナリオが簡易的なものになってしまったので、今後は手の込んだchatbotを開発したいです。
もしchatbotの作成に興味が湧いたら、この投稿を見ながら作成してみてください。そして、僕に体験させてください!!!待っています!