4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Telegramでchatbotを作ってみる

Posted at

初めに

現在の自然言語処理領域では、人と対話をするアンドロイドの研究が多くされています。人と対話をするアンドロイドを作成するにあたって、重要な役割を担う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」を検索
チャットボット コンペティション - Google スライド - Google Chrome 2022_12_10 14_06_36.png

pythonで開発するためのaccess tokenの取得

1. @BotFatherに「/newbot」と送信
image.png
2. botの名前を送信
「○○_bot」と送信し、botの名前を決定します。
image.png
3. botのIDを送信(重複不可)
作成したbotを検索する際に使用するIDを決定します。ただし、他のbotと重複しないようにします。
image.png
4. access TOKENを取得
pythonでbotを開発する際に使用するaccess TOKENを取得します。
image.png

pythonでchatbotを開発

今回はTelegram上で簡易的なchatbotを作成しました。

sample.py
#!/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と対話してみました。問題なくシナリオ通りに動作しました。
image.png

終わりに

今回はTelegram上で簡易的なchatbotを作成してみました。シナリオが簡易的なものになってしまったので、今後は手の込んだchatbotを開発したいです。
もしchatbotの作成に興味が湧いたら、この投稿を見ながら作成してみてください。そして、僕に体験させてください!!!待っています!

参考文献

Telegram (テレグラム) をPCでのインストール方法や使い方を紹介

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?