ホームページ >ウェブフロントエンド >jsチュートリアル >node.jsで最初の電報チャットボットを構築する方法
それで、今朝、あなたはあなたが読んだ興味深い記事を保存してラベル付けする方法を開発するというアイデアで目を覚ましました。このアイデアで遊んだ後、あなたは電報チャットボットがこの問題の最も便利なソリューションであると考えています。 このガイドでは、javaScriptとnode.js.
を使用して、最初の電報チャットボットを構築するために知っておくべきことをすべて説明します。開始するには、APIアクセストークンを受け取るには、いわゆるボットファーザーと新しいボットを登録する必要があります。
キーテイクアウト
2。新しいボットの登録
ボットファーザーを見つけました、彼と話しましょう! Typing /Newbotで会話を開始できます。ボットファーザーは、あなたの両方の名前を選ぶように頼みます。この名前は何でもかまいません。ユニークである必要はありません。物事をシンプルに保つために、私は私のボットのarticlebotに名前を付けました。
fatherbotは、Telegram HTTP APIにアクセスするためにトークンで成功メッセージを返します。このトークンを安全に保管してください。確かに他の人と共有しないでください。
私のボットについては、コマンドブックマークを設定します - 興味深い記事のurlを保存します。
ボットを調べると、利用可能なコマンドを表示するコマンドアイコンがチャットボックスに表示されます。ボットファーザーを介してそれらをリストしないで、作業を行うより多くのコマンドを作成できます。ただし、UXの観点からは、Votfatherに利用可能なすべてのコマンドを登録することをお勧めします。
この設定は無効にすることができます。つまり、ボットはグループに送信されるすべてのメッセージを受信できます。これらのすべてのメッセージを受信するには、グループにボットを追加する必要があります。
最後に、私たちはすべてコーディングを開始する予定です。 APIアクセストークンの準備ができていることを確認してください 最初のボットコマンドのコーディング
まず、このチュートリアルでは、準備した次のコードを使用します。
1。プロジェクトのセットアップ
接続が機能することを確認するには、端末のプロジェクトのルートに移動し、NPMの開始を実行します。 npm startコマンドはapp.jsファイルを実行し、ボットに接続する必要があります。エラーが表示されない場合は、行ってもいいです!
まず、APIアクセストークンを渡し、ポーリングオプションをtrueに設定して、ボットを作成する必要があります。これは、ボットが定期的な間隔で着信メッセージをチェックすることを意味します。
<span>require('dotenv').config(); </span><span>const TelegramBot = require('node-telegram-bot-api'); </span> <span>const token = process.env.TOKEN; </span> <span>// Created instance of TelegramBot </span><span>const bot = new TelegramBot(token, { </span> <span>polling: true </span><span>}); </span>ボットが作成されました。 /ブックマークコマンドを表すコードの次のスニペットを見てみましょう。受信テキストメッセージのリスナーを設定し、ONTEXTを設定し、REGEX文字列で指定しているため、 /ブックマークから始まるメッセージを探すように指定します。
メッセージが /ブックマークから始まると、コードが実行されます。まず第一に、このユーザーのチャットにメッセージを送り返すことができるようにしたいので、チャットIDを保存します。
次に、ユーザーがコマンドを正しく使用しているかどうかを確認します。このようなコマンドを使用してURLに渡されると予想されます: /ブックマークwww.google.com。指定されているURLがない場合は、保存されているChatIDにメッセージを送り返し、URLを提供するようユーザーに指示します。彼らがURLを送信する場合、URLを保存して成功メッセージを送信します。
コールバック関数MSGと一致に2つのパラメーターを使用していることに気付いたかもしれません。 MSGプロパティは、受信した完全なメッセージを表し、一致すると、定義した正規表現の結果を表します。下の画像は完全なMSGを示しています。
ボットとのチャットでコマンドを試してみると、次の結果が得られます。
<span>// Listener (handler) for telegram's /bookmark event </span>bot<span>.onText(<span>/<span>\/bookmark</span>/</span>, (msg<span>, match</span>) => { </span> <span>const chatId = msg.chat.id; </span> <span>const url = match.input.split(' ')[1]; </span> <span>// 'msg' is the received Message from Telegram </span> <span>// 'match' is the result of executing the regexp above on the text content </span> <span>// of the message </span> <span>if (url === undefined) { </span> bot<span>.sendMessage( </span> chatId<span>, </span> <span>'Please provide URL of article!', </span> <span>); </span> <span>return; </span> <span>} </span> <span>URLs.push(url); </span> bot<span>.sendMessage( </span> chatId<span>, </span> <span>'URL has been successfully saved!', </span> <span>); </span><span>}); </span>同じ結果が表示されたら、おめでとうございます!最初のボットコマンドを作成しました。事前定義されたオプションでキーボードを送信するなど、より高度なオプションを見てみましょう。
3。キーボードオプション
で答えるように制限するのと同じくらい簡単です
3.1通常のキーボード次のコードのスニペットを見てみましょう。 bot.sendmessage関数に3番目のパラメーターを追加しました。このオブジェクトは、キーボードのオプションを定義します。 Reply_markup.keyboardを詳しく見ると、より多くの配列を含む配列があります。ここのすべての配列は、オプションのある行を表します。これは、より重要な、またはボタンテキストが長いフォーマットオプションを使用するのに役立ちます。
さらに、オプションごとに追加のデータを使用してインラインキーボードを定義することもできます。
インラインキーボードがチャットに表示され、メッセージ入力ボックスの下ではありません。送信したURLにラベルを付けるため、ユーザーに利用可能なカテゴリを表示することでこれを行うことができます。これが私たちのキーボードの見た目です:
下のコードを見てみましょう。 Reply_markupは、プロパティInline_Keyboardを定義するようになりました。残りのマークアップは同じままです。すべての配列は行を表します。ただし、テキストを渡すだけでなく、テキストとcallback_dataを渡すオブジェクトを渡して、選択したオプションを知ることもできます。
<span>require('dotenv').config(); </span><span>const TelegramBot = require('node-telegram-bot-api'); </span> <span>const token = process.env.TOKEN; </span> <span>// Created instance of TelegramBot </span><span>const bot = new TelegramBot(token, { </span> <span>polling: true </span><span>}); </span>次のセクションでは、コールバックデータを受信するためにハンドラーを使用する方法について説明します。
3.2キーボードからのコールバック
callbackqueryのメッセージプロパティには、ユーザーからのメッセージ全体が含まれています。データプロパティには、カテゴリコールバックデータが含まれています
今までに設計エラーが発見された可能性があります。コールバックデータを送信する2つのコマンドがある場合はどうなりますか?非常に奇妙な動作や返信が得られるかもしれません。<span>// Listener (handler) for telegram's /bookmark event </span>bot<span>.onText(<span>/<span>\/bookmark</span>/</span>, (msg<span>, match</span>) => { </span> <span>const chatId = msg.chat.id; </span> <span>const url = match.input.split(' ')[1]; </span> <span>// 'msg' is the received Message from Telegram </span> <span>// 'match' is the result of executing the regexp above on the text content </span> <span>// of the message </span> <span>if (url === undefined) { </span> bot<span>.sendMessage( </span> chatId<span>, </span> <span>'Please provide URL of article!', </span> <span>); </span> <span>return; </span> <span>} </span> <span>URLs.push(url); </span> bot<span>.sendMessage( </span> chatId<span>, </span> <span>'URL has been successfully saved!', </span> <span>); </span><span>}); </span>したがって、
コールバックデータが属するコマンドを識別するためのラベルも保持しているStringified JSONオブジェクトを送り返すことをお勧めします。次のベストプラクティスをご覧ください:
コマンドオプションのデータを使用して、このコマンドの特定のビジネスロジックに切り替えることができます。
私たちは電報ボットジェディスになるために順調に進んでいます。完全に学習したマスターになるには、データリクエストを調べてみましょう
3.3データリクエスト - 電話番号<span>// Listener (handler) for showcasing different keyboard layout </span>bot<span>.onText(<span>/<span>\/keyboard</span>/</span>, (msg) => { </span> bot<span>.sendMessage(msg.chat.id, 'Alternative keybaord layout', { </span> <span>'reply_markup': { </span> <span>'keyboard': [['Sample text', 'Second sample'], ['Keyboard'], ['I\'m robot']], </span> <span>resize_keyboard: true, </span> <span>one_time_keyboard: true, </span> <span>force_reply: true, </span> <span>} </span> <span>}); </span><span>}); </span>
人の電話番号やジオロケーションなど、データをリクエストすることができます。このチュートリアルでは、代替キーボードを使用して電話番号をリクエストする方法を紹介します。
ユーザーはチャットで次のリクエストを受け取ります:
これは、アクセスを提供する後の見方です:
<span>// Listener (handler) for telegram's /label event </span>bot<span>.onText(<span>/<span>\/label</span>/</span>, (msg<span>, match</span>) => { </span> <span>const chatId = msg.chat.id; </span> <span>const url = match.input.split(' ')[1]; </span> <span>if (url === undefined) { </span> bot<span>.sendMessage( </span> chatId<span>, </span> <span>'Please provide URL of article!', </span> <span>); </span> <span>return; </span> <span>} </span> tempSiteURL <span>= url; </span> bot<span>.sendMessage( </span> chatId<span>, </span> <span>'URL has been successfully saved!', </span> <span>{ </span> <span>reply_markup: { </span> <span>inline_keyboard: [[ </span> <span>{ </span> <span>text: 'Development', </span> <span>callback_data: 'development' </span> <span>}, { </span> <span>text: 'Lifestyle', </span> <span>callback_data: 'lifestyle' </span> <span>}, { </span> <span>text: 'Other', </span> <span>callback_data: 'other' </span> <span>} </span> <span>]] </span> <span>} </span> <span>} </span> <span>); </span><span>}); </span>
最後に!あなたは完全に学習した電報ボットジェダイです。今のところ、詳細とリソースはこちらをご覧ください:
プライベートメッセージとパブリックメッセージの違い
さまざまな種類のイベント
GithubのHosein2398による
を使用して電報チャットボットを構築するための前提条件は何ですか?また、コンピューターにnode.jsとnpm(ノードパッケージマネージャー)をインストールする必要があります。さらに、Botfatherを使用してTelegramにボットを作成する必要があります。これにより、Telegram APIと対話するために使用するトークンが提供されます。 🎜>
ボットファーザーは、新しいボットを作成できるテレグラムのボットです。新しいボットを作成するには、ボットファーザーとのチャットを開始し、プロンプトに従ってください。ボットの名前とユーザー名を選択するように求められます。これを完了すると、ボットファーザーはトークンを提供します。これをTelegram APIと対話するために使用します。 🎜> node.jsを使用してTelegram APIと対話するには、Node-Telegram-Bot-APIパッケージを使用できます。このパッケージは、Telegram APIのシンプルで強力なインターフェイスを提供します。 NPMを使用してインストールしてから、コードに必要です。次に、ボットファーザーが提供するトークンを使用して新しいボットを作成し、パッケージが提供するメソッドを使用してAPIと対話することができます。 Node-Telegram-Bot-APIパッケージは、ボットに送信されたテキストメッセージを処理するために使用できるOntextメソッドを提供します。この方法は、正規表現とコールバック関数を引数として取ります。コールバック関数は、正規表現に一致するメッセージが受信されるたびに呼び出されます。メッセージオブジェクトはコールバック関数に渡され、メッセージに応答するために使用できます。 Node-Telegram-Bot-APIパッケージで提供されるSendMessageメソッドを使用します。このメソッドは、受信者のチャットIDとメッセージのテキストの2つの引数を取ります。 ontextメソッドのコールバック関数に渡されたメッセージオブジェクトからチャットIDを取得できます。ボットを展開するにはどうすればよいですか?サーバーに継続的に実行できるようにします。これには、Heroku、AWS、Google Cloudなどのクラウドプラットフォームや、従来のホスティングプロバイダーなど、多くのオプションがあります。正確なプロセスは、選択したプラットフォームに依存しますが、通常、コードをプラットフォームにプッシュし、プラットフォームのツールを使用してボットを起動します。ノードテレグラムボット-APIパッケージは、さまざまな種類のメッセージを処理する方法を提供します。たとえば、Onphotoメソッドを使用して写真メッセージを処理したり、Stickerメソッドを使用してステッカーメッセージを処理できます。これらのメソッドは、対応するタイプのメッセージが受信されたときに呼び出されるコールバック関数を使用します。 Node-Telegram-Bot-APIパッケージによって提供されるコマンドメソッドを使用して、ボットにカスタムコマンドを追加します。この方法では、引数として文字列とコールバック関数を採用します。文字列はコマンドの名前であり、コールバック関数はコマンドを受信したときに呼び出されます。コールバック関数に渡されたメッセージオブジェクトを使用してコマンドに応答できます。チャットのフィールド。 Node-Telegram-Bot-APIパッケージには、OninlineQueryメソッドが提供されます。これを使用して、インラインクエリを処理できます。このメソッドは、インラインクエリが受信されたときに呼び出されるコールバック関数を取得します。コールバック関数に渡されたインラインクエリオブジェクトを使用してクエリに応答できます。一般的な方法の1つは、コードにconsole.logステートメントを使用して、ボットの状態に関する情報を印刷することです。 Node.jsデバッガーやChrome Devtoolsなどのデバッグツールを使用することもできます。さらに、ノードテレグラムボットAPIパッケージは、ボットの実行中に発生するエラーを処理するために使用できるOnerrorメソッドを提供します。
以上がnode.jsで最初の電報チャットボットを構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。