Telegramでchatbotを作ってみる

# 初めに
現在の自然言語処理領域では、人と対話をするアンドロイドの研究が多くされています。人と対話をするアンドロイドを作成するにあたって、重要な役割を担うchatbotの作成方法を紹介します。
今回は[telegram](https://telegram.softonic.jp/)を使って、chatbotを作成します。

# WindowsPCにtelegramをインストールする方法
1\. [https://telegram.softonic.jp/](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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2998598/e110170c-3f46-fe7d-9f52-ab0167c25668.png)

# pythonで開発するためのaccess tokenの取得
1\. @BotFatherに「/newbot」と送信
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2998598/ec3e3970-b09c-26b5-776f-4e708c7ca305.png)
2\. botの名前を送信
「○○_bot」と送信し、botの名前を決定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2998598/48bce158-a66a-e0b9-ce0c-3e6447cc3e78.png)
3\. botのIDを送信（重複不可）
作成したbotを検索する際に使用するIDを決定します。ただし、他のbotと重複しないようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2998598/9362728d-d6c6-3dcb-d86a-d8278272e72f.png)
4\. access TOKENを取得
pythonでbotを開発する際に使用するaccess TOKENを取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2998598/b8f3e08c-e237-60b2-7460-729e5cc77108.png)

# pythonでchatbotを開発
今回はTelegram上で簡易的なchatbotを作成しました。
```python: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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2998598/da39ecc1-3f55-d740-eeaa-3f4900aa973d.png)

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

# 参考文献
[Telegram (テレグラム) をPCでのインストール方法や使い方を紹介](https://kasobu.com/articles/telegram-pc)