LoginSignup
0
0

More than 1 year has passed since last update.

curlでTelegram botを操作

Posted at

概要

curl + Telegram bot でこんなことが実現できる。

  • サーバーの処理が終わったらスマホに通知
  • スマホからサーバーにメッセージを送信

Telegram とは

  • ラインのようなメッセージアプリ
  • 無料
    • 有償プランもあるが、普通に使う分には無料で十分
  • プロトコルがオープン
  • クライアントがクロスプラットフォーム

チャット画面例
image.png

今回は curl + Telegram で、スマホ <-> サーバー間のメッセージの送受信をやってみる。

手順

1. bot を作成する

bot = REST API エンドポイント。

@BotFather にチャットを送信することで、bot が作成できる。

/start を送信するとヘルプが表示される。

image.png

/newbot を送信し、指示に従い bot を作成する。

  • 今回の設定:
    • 表示名: My 20230223 Bot
    • アカウント名: @my20230223_bot (末尾は必ず _bot)

image.png

bot が作成され、トークンが表示された。※bot は削除済み

トークンをシェル変数に保存
$ token=6242345480:AAEm6fDDg1Ww5OAN4aDmkABqILDE0-ss18Q

なお、公式には書いていないが、bot は1人20個までらしい?

REST API エンドポイントは
https://api.telegram.org/bot<token>
なので、今回は
https://api.telegram.org/bot6242345480:AAEm6fDDg1Ww5OAN4aDmkABqILDE0-ss18Q
となる。

bot が受信したメッセージを取得 (/getUpdates)

http://t.me/my20230223_bot にアクセスし、自身のアカウントから bot にチャットを送信する。

右上の START を押す。
image.png

test1 と送信する。(なんでもいい)
image.png

/getUpdates メソッドで、bot が直近24時間に受信したメッセージが取得できる。
result:[] のように結果が空になる場合は、/getUpdates とチャット送信を何度か繰り返すとメッセージを取得できるようになる。初回の /getUpdates 以降に bot が受信したメッセージのみ取得できる?

/getUpdates で直近24時間のチャットを取得
$ curl https://api.telegram.org/bot$token/getUpdates
{"ok":true,"result":[{"update_id":721386731,
"message":{"message_id":2,"from":{"id":5981890605,"is_bot":false,"first_name":"yabeenico","language_code":"en"},"chat":{"id":5981890605,"first_name":"yabeenico","type":"private"},"date":1677165363,"text":"test1"}}]}

なお、webhook にも対応している。

chat_id について

bot がチャットする相手は bot の作成者だけとは限らない。
bot はいろんなユーザーとチャットを行ったりグループチャットに参加できる。
チャットを一意に識別するために、チャットごとに chat_id が払い出される。
chat_id は、/getUpdates の結果の id に書いてある。
今回のチャットの chat_id5981890605 と分かる。

chat_id をシェル変数に保存
$ chat_id=5981890605

bot からユーザーにメッセージを送信 (/sendMessage)

/sendMessage メソッドで、bot からユーザーにメッセージを送信できる。
chat_id による送信先チャットの指定が必要。

/sendMessage で bot からユーザーにメッセージを送信
$ curl https://api.telegram.org/bot$token/sendMessage -d chat_id=$chat_id -d text=test2
{"ok":true,"result":{"message_id":3,"from":{"id":6242345480,"is_bot":true,"first_name":"My 20230223 Bot","username":"my20230223_bot"},"chat":{"id":5981890605,"first_name":"yabeenico","type":"private"},"date":1677167043,"text":"test2"}}

bot からユーザーに test2 を送信できた。

image.png

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