初心者向け：Telegram Bot API入門

## はじめに
この記事では、Telegram APIの多様性を探り、プライバシーや速度、オープン性について強調しました。また、カスタマイズ可能なTelegramボットを構築する方法を、設定の簡便さ、リアルタイム更新、およびリッチメディアのサポートを含めて詳しく説明します。

:::note info
もし、APIやアプリケーションを開発しており、強力なAPIツールとのシームレスな統合が必要であれば、ぜひ無料でApidogをお試しください！[Apidog](http://www.apidog.com/jp/?utm_source=opr&utm_medium=a2takuya)は、洗練されたユーザーインターフェースの構築に集中しながら、APIのスムーズな連携を実現するための理想的なツールです。
:::


## Telegram使用利点
Telegramは、ユニークな機能セットのおかげで、カジュアルユーザーと開発者の両方に人気の選択肢となっています：

- Telegramは複数の理由で目立っています。第一に、プライバシーとセキュリティに重点を置いて設計されており、ユーザーデータが保護されるようにプライベートチャットにエンドツーエンドの暗号化を提供しています。このセキュリティへのコミットメントは、機密情報を扱うアプリケーションを構築したい開発者にとって信頼の置ける選択肢となります
- Telegramの分散型インフラは、迅速であるだけでなく、高い信頼性も提供し、低帯域幅のネットワークでも一貫したパフォーマンスを実現しています。これにより、リアルタイム通信を必要とするユースケースや、さまざまなインターネット接続状況の地域でスムーズに動作する必要があるユースケースに最適です
- Telegramのオープンで無償のAPIは、開発者にとって大きな魅力です。制限や料金を課す他のメッセージングプラットフォームとは異なり、TelegramのAPIはすべての開発者に開放されており、障壁なく革新するための平等な競争の場を提供しています。このオープン性は、迅速にアプリケーションを構築・展開したいスタートアップや独立した開発者にとって特にメリットがあります

:::note info
Telegramを強力にするものは何ですか？
:::

Telegramの本当の力はそのボットAPIにあります。Telegramボットはさまざまなタスクを実行し、ユーザーと対話できる自動化プログラムであり、開発者にとって多用途なツールとなります。Telegramでボットを設定するのは簡単です。Telegramのボット管理インターフェースであるBotFatherを利用することで、開発者は数ステップで新しいボットを作成し、Telegram APIへのアクセスを許可するAPIトークンを受け取ることができます。このセットアップの簡便さにより、開発者は基盤の理解が深くなくても、迅速にプロトタイプを作成しボットを展開できます。

## Telegramボット：真の力の源
Telegramの一般的な機能は印象的ですが、開発者にとって本当に光るのはその[ボットAPI](https://core.telegram.org/bots/tutorial)です。Telegramボットは事前に定義されたタスクを実行し、ユーザーと対話できる自動化プログラムです。ボットはメッセージを送信し、ユーザーの質問に応答し、マルチメディアコンテンツを扱い、全体の会話を自律的に管理することもできます。

### Telegramボットの機能
- **使いやすさと設定の簡便さ**：Telegramでのボット作成はシンプルで、最小限の設定が必要です。[BotFather](https://core.telegram.org/bots/tutorial)（Telegramのボット管理ボット）を使うことで、開発者は数ステップで新しいボットを作成し、Telegram APIと対話するためのAPIトークンを受け取ることができます
- **リッチメディアサポート**：Telegramボットは、テキスト、画像、動画、文書、さらには位置情報データなど、あらゆる種類のコンテンツを扱うことができます。この柔軟性により、開発者はユーザーに魅力的でインタラクティブな体験を提供できます
- **リアルタイム更新のためのウェブフックサポート**：Telegramボットはウェブフックを使用してリアルタイムで更新を受信でき、ユーザーとの瞬時の対話が可能です。これは、カスタマーサービスボット、ゲームボット、リアルタイム通知システムなど、低遅延通信が必要なアプリケーションに最適です
- **カスタムコマンドとキーボード**：開発者はカスタムコマンドやインタラクティブなキーボードを作成し、ユーザーとの対話を向上させることができます。インラインキーボードやカスタム応答は、ユーザーを複雑なワークフローに導いたり、頻繁に使用される機能への迅速なアクセスを提供したりします
- **広範なAPIドキュメンテーションとサポート**：Telegramは包括的なドキュメンテーションと活発な開発者のコミュニティを提供しており、ボットを構築する際にサポートとリソースを見つけやすくしています
- **ボットの数に制限なし**：他のメッセージングプラットフォームとは異なり、Telegramは開発者に無制限のボットを作成・展開することを許可しており、あらゆるプロジェクト規模に対応したスケーラビリティを提供します


これらの機能を活用することで、開発者はシンプルなメッセージングを超えた強力でダイナミックなアプリケーションを構築できます。カスタマーサービス、マーケティング、教育、エンターテインメントのために、Telegramボットはユーザーと対話するための多用途で効率的な方法を提供します。

## Telegramボットの設定
Telegram APIを使用するには、まずTelegramボットを作成する必要があります。次の手順を実行してください：

**Telegramを開き、BotFather**を検索します。

![botfather-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3877124/355403b5-dd2b-56e3-a324-4cb157ad962f.jpeg)

BotFatherとのチャットを開始し、`/newbot` コマンドを使用して新しいボットを作成します。その後、ボットのユーザー名を選択するように求められます。ビジネス名に合ったユーザー名を選択してください。

ボットを作成した後、BotFatherは**APIトークン**を提供します。このトークンを安全に保管してください。これは、Telegram APIと対話するために必要です。

![Screenshot-from-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3877124/e3f8bb17-0576-a13e-2b4b-27c840697635.png)

ご覧のとおり、私のトークンが生成されました。私のトークンを公開した理由について疑問に思われる方もいるかもしれませんが、ボットが削除されるため、そのアクセス・トークンは無用になります :)。

ボットが作成されたので、それと対話することができ、ユーザーや顧客にリンクを送信してチャットすることができます。

## 2つの方法でメッセージを送信するためのTelegram APIの使用

メッセージを送信するためにAPIを使用するには、`chat_id` を取得する必要があります。`chat_id` は、APIがメッセージを送信する相手を識別するために必要です。

[こちらの記事](https://stackoverflow.com/questions/32423837/telegram-bot-how-to-get-a-group-chat-id)では、`chat_id` を取得する方法を説明しています。これも[別の記事です](https://gist.github.com/nafiesl/4ad622f344cd1dc3bb1ecbe468ff9f8a) :)

Telegramには、ボットと対話するために使用できる[さまざまなエンドポイント](https://github.com/Cale-Torino/Telegram_Bot_API_Quick_Example)がありますが、この記事では `SendMessage` エンドポイントに焦点を当てます。

`https://api.telegram.org/bot<bot_id>/sendMessage` 

### Apidogを使用してテストリクエストを送信する：

![apidog-client-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3877124/ea961814-0f9f-1905-36c5-4c6cca2f4dc1.png)

[Apidog](http://www.apidog.com/jp/?utm_source=opr&utm_medium=a2takuya)は、強力なドキュメント、自動テスト、リアルタイムモニタリングを提供することでAPIのセキュリティを強化します。ApidogはGDPRやHIPAAなどの業界標準に準拠するのを支援し、APIがユーザーデータを効果的に保護できるようにします。

さらに、Apidogはチームコラボレーションを支援し、安全性を重視した開発環境の育成を促進します。Apidogを統合することで、安全で信頼性が高く、コンプライアンスに準拠したAPIを構築し、さまざまなセキュリティの脅威からデータとユーザーを保護することができます。

ApidogまたはWebバージョンをインストールしたら、新しいプロジェクトを作成して最初のリクエストを送信できます。

![apidog-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3877124/e2b4e192-6fac-91cc-5ba4-079283d6addf.png)

この場合、私は作成したボットに対して「こんにちは」とメッセージを送り、`chat_id` を渡しました。応答はOKで、応答の結果を確認できます。

![image-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3877124/f1c24135-644f-502d-5091-623d5eaeb177.png)

### React.jsの使用
リクエストを送信し、応答を受け取るためにJavascriptを使用することもできます。これは、ウェブインターフェースを構築してボットを通じて人々と連絡を取りたい場合に便利です。
```
import React, { useState } from 'react';
import axios from 'axios';

const TelegramBot = () => {
  const [message, setMessage] = useState('');  // ユーザーの入力を保存するための状態
  const [isLoading, setIsLoading] = useState(false);  // ローディング状態を管理するための状態
  const [feedback, setFeedback] = useState('');  // ユーザーにフィードバックを提供するための状態

  const sendMessage = async () => {
    if (!message.trim()) {
      setFeedback('メッセージは空にできません。');
      return;
    }

    setIsLoading(true);  // リクエストを送信する際にローディングをtrueに設定
    setFeedback('');  // 前回のフィードバックをクリア

    const botToken = 'YOUR_API_TOKEN';  // あなたのTelegramボットAPIトークンに置き換えてください
    const chatId = 'CHAT_ID';  // メッセージを送信したいチャットIDに置き換えてください
    const url = `https://api.telegram.org/bot${botToken}/sendMessage`;

    try {
      const response = await axios.post(url, {
        chat_id: chatId,
        text: message
      });

      if (response.data.ok) {
        setFeedback('メッセージが正常に送信されました！');
        setMessage('');  // 成功した送信後に入力フィールドをクリア
      } else {
        setFeedback(`エラー: ${response.data.description}`);
      }
    } catch (error) {
      setFeedback(`エラー: ${error.message}`);
    } finally {
      setIsLoading(false);  // ローディング状態をリセット
    }
  };

  return (
    <div>
      <h1>Telegramボットを介してメッセージを送信</h1>
      <input
        type="text"
        value={message}
        onChange={e => setMessage(e.target.value)}
        placeholder="メッセージを入力してください"
        disabled={isLoading}
      />
      <button onClick={sendMessage} disabled={isLoading}>
        {isLoading ? '送信中...' : 'メッセージを送信'}
      </button>
      {feedback && <p>{feedback}</p>}  {/* フィードバックメッセージを表示 */}
    </div>
  );
};

export default TelegramBot;
```

## 終わりに
この記事では、Telegram APIの強力な機能を探求し、特に開発者がそれを利用してダイナミックで魅力的なボットを構築する方法に焦点を当てました。私たちは、プライバシー、速度、オープンアクセスへの強調など、Telegramのユニークな機能の概要から始め、ボット開発に最適なプラットフォームである理由を説明しました。次に、Telegramボットのコア機能、セットアップの簡便さ、リッチメディアのサポート、ウェブフックを使ったリアルタイム更新、広範なカスタマイズオプションについて詳しく見ていきました。

次のボットを構築したりプロセスを自動化したりすることを考えているなら、Telegram APIは素晴らしい選択肢であり、スタートに必要なすべてのツールを提供します。

**最後まで読んでくださり、ありがとうございました！
この記事を読んで少しでも理解を深めていただければ幸いです！**