LoginSignup
6
7

More than 5 years have passed since last update.

GoogleAppsScriptでTelegram BOTを作る ~第1回 はじめてのTelegram BOT

Last updated at Posted at 2018-10-26

TelegramのちょっとしたBOTを作りたいな~
でもサーバー用意したりとかメンテしたりとかめんどくさいんだよな~

なんか手軽なPaaS的環境ないかな~
Googleアカウントがあれば使えるような手軽なやつないかな~

せや!GASがあるやんけ!

ちょっと前からこんな感じのモチベーションでGASをゴリゴリ書いてたらなんとなくノウハウが溜まってきたので小分けにして投下していこうかと思います。
まず初回はBOTアカウントを登録してからGASからシンプルなメッセージを投稿するまでをまとめました。

BOTアカウントの登録

まずはBOTアカウントを登録する必要があります。
BOTアカウントは通常のアカウントのように電話番号認証をするのではなく、Telegram上の@BotFatherというアカウントを通して登録し、APIを通して登録したBOTにアクセスします。

新しいBOTを作る

BOTの登録は@BotFatherというBOTとの個別チャットで対話的に行います。
@BotFather/newbotと送ることでBOTの登録が開始されます。

BOTの登録開始

BOTの名前とユーザー名(@username)を聞かれるので入力してください。
ユーザー名は末尾がbotで終わる必要があり、後から変更できないものなので注意してください。

BOTのAPIトークン

BOTの登録が終わるとAPIトークンが表示されます。
このAPIトークンを通してBOTにアクセスすることになります。
APIトークン

BOTのアイコン設定

/setuserpicと送るとBOTのアイコンが設定できます。
アイコンの設定

ユーザー名以外の設定は@BotFatherとの会話で後から変更することが可能です。

BOTのプライバシー設定

BOTはデフォルトでは/から始まるメッセージ以外にアクセスすることはできないように設定されています。
この設定は/setprivacyで無効化できるので適宜設定してください。
IMG_0493.PNG

BOTプログラムの用意(GoogleAppsScript)

GoogleAppsScript(GAS)ってなに?

GoogleAppsScript(GAS)とは、GmailやGoogleDrive、GoogleカレンダーなどのGoogle製のサービスをプログラミングにより操作できるJavaScriptベースの開発環境です。

ちょうどMicrosoftOfficeなんかで使うVBAに近いものではありますが、ひとつの大きな違いとして、サーバーサイドのスクリプト言語であるということが挙げられます。
つまり、Googleのサーバー上で動作するのでPCを立ち上げていなくても特定の時間に実行したり、スプレッドシートが更新されたことをトリガーにしてスクリプトを実行することが可能です。
GAS上の関数を実行できるWebアプリケーションを作成することも可能です。

メッセージを送信するスクリプトの作成

GASの新規作成に関してはこちらの記事を参照してください。
https://qiita.com/takanakahiko/items/0da4502f3d8e321e17c0

まずは簡単に指定のチャットにメッセージを送信するスクリプトを書いていきます。

コード.gs
function sendMessage() {
  // 以下2行は自分の環境に合わせて設定してください
  var chatId = NNNNNNNNNN;
  var token = XXXX:YYYY;

  sendTelegram(chatId, 'Hello World!', token);

}

function sendTelegram(chatId, text, token) {
  var payload = {
    'method': 'sendMessage',
    'chat_id': chatId,
    'text': text,
    'parse_mode': 'HTML'
  }

  var data = {
    'method': 'post',
    'payload': payload
  }

  UrlFetchApp.fetch('https://api.telegram.org/bot' + token + '/', data);

}

4行目のtokenには上で書いた方法で取得したBOTのAPI Tokenを設定してください。
3行目のchatIdはメッセージを送信するchatのIDですが、これは後述します。

sendTelegram関数ではBot APIに送信するデータを生成しています。
どのチャットに対して、どのようなメソッドで、どのような文字列を、どのような書式で送信するかをpayloadデータとしてまとめます。

このpayloadデータをPOSTメソッドでBot APIに送信しているのがsendTelegram関数の末尾の部分です。

UrlFetchApp.fetch('https://api.telegram.org/bot' + token + '/', data);
この部分でBot APIを叩いてメッセージを送信しています。

GASではこのUrlFetchAppクラスを使って外部のサイトやWebAPIなどアクセスしてサーバーサイドで情報を取得したりすることができます。
非常に便利な関数ですが1日の使用上限があるので注意してください(Googleの無料アカウントで20,000回/日だったか)。

Chat IDの取得

メッセージを送信したいグループのChat IDの取得についてですが、まずBOTをグループに招待してtestとか適当なメッセージを送信してください。
続いて以下のURLにアクセスしてUpdateをJSON形式で取得します。
https://api.telegram.org/botXXXX:YYYY/getUpdates/
XXXX:YYYYの部分はBOTのAPI Tokenになります。
するとこのようなJSONが取得できます。

{
    "ok": true,
    "result": [
        {
            "update_id": 503750892,
            "message": {
                "message_id": 147,
                "from": {
                    "id": 187814189,
                    "is_bot": false,
                    "first_name": "\ud83d\udc15\u3044\u307e\u3069\u3093",
                    "last_name": "(nowdon) @Osaka\ud83e\udd80",
                    "username": "nowdon",
                    "language_code": "ja-US"
                },
                "chat": {
                    "id": "NNNNNNNNNN",
                    "title": "\u7b2c1 Bot\u958b\u767a\u5ba4",
                    "type": "supergroup"
                },
                "date": 1533606908,
                "text": "test"
            }
        }
    ]
}

この"chat": {"id": NNNNNNNNNNの部分がChat IDになります。

関数の実行

プログラム側が用意できたらBOTにメッセージを送信する関数を実行してみます。
GASのメニューから[実行]→[関数を実行]→[sendMessage]を実行します。
実行結果

まとめ

今回はTelegramのBOTアカウントを登録し、GASからメッセージを送信する方法を書きました。
次回はWebHookを使ったメッセージの受信について書こうと思います。

質問とか間違いの指摘なんかはコメントかもしくはTelegramの私のアカウント(@nowdon )宛にお願いします。

6
7
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
6
7