ネストを使用してチャットボットを構築する.JSと電報



導入


このチュートリアルでは、ネストを使用して電報の基本的なチャットボットを構築する方法を示します.jsこれは、他のものの中で、どのように電報ボットの仕事の概要とそれらを行うことができます.
電報ボットは、設定する追加の電話番号を必要としないだけのアカウントです.ユーザーは、コマンドを介してそれらと対話することができます:直接チャットを開いたり、チャットの入力フィールドからの要求を直接ボットの@ユーザー名を入力して送信します.

我々は何を構築する


我々は、ユーザ名の新しい巣ボットと電報ボットを構築することが、新しい電報ボットを登録するときに、自分の好みの名前を選択することができます.
このボットは、アプリケーションのバックエンドで実装されているロジックから直接定義された応答で送信されたテキストメッセージに応答するように構築されました.

必要条件


タイプスクリプトとノードの基本的な理解.JSは、このチュートリアルのベストを得るのを助ける.私は、それ以外の場合は、すぐに別の手順とインストール手順のNode.jsnpmをチェックした場合、ノードとNPMがインストールされていると仮定します.
また、電報のアカウントは、チャットを開始するか、ボットを作成するいずれかの電報サービスにアクセスする必要があります.あなたが口座を持っていないならば、私はTelegram web clientを使うことを勧めます
最後に、このポストで使用する技術の簡単な概要を示します.

  • Nest.js :効率的でスケーラブルなサーバサイドアプリケーションを構築するためのプログレッシブフレームワーク近代的なJavaScriptの利点を取るが、まだ純粋なJavaScriptとの互換性を維持するために構築.

  • Node-telegram-bot-api :ノード.JSモジュールは、公式Telegram Bot APIと対話する.
  • プロジェクトの設定


    まず最初に、GITを使用してNest.jsスタータープロジェクトをGithubにインストールする必要があります.これを行うには、あなたのマシン上のネスト電報チャットボットという名前の新しいプロジェクトフォルダにスターターリポジトリをクローン化するコマンドを実行しましょう.端末またはコマンドプロンプトを開き、以下のコマンドを実行します.
    $ git clone https://github.com/nestjs/typescript-starter.git nest-telegram-chat-bot
    
    先に進んで、新しく作成したフォルダにディレクトリを変更し、プロジェクトのすべての依存関係をインストールします.
    // change directory
    cd nest-telegram-chat-bot
    
    // install dependencies
    npm install
    

    サーバ依存のインストール


    このアプリケーションに必要なサーバ依存性はnode-telegram-bot-apiです.以下のコマンドを実行してインストールします.
    $ npm install --save node-telegram-bot-api
    

    電報ボットを作成する


    私たちは基本的には電報ボットAPIと相互作用するでしょう.これを行うには、アクセストークンを取得する必要があります.Telegram appを開く
    とチャットを開始します.新しいbotを作成するために/newbotコマンドを使用してください.アクセストークンを生成する前に、名前とユーザー名のような質問の2つの質問をする.

    すべての指示に従ってください、そして、一旦完了されるならば、あなたのために生成される電報ボットAPIへの要求を送ることを要求されるトークン.下記の通り.

    今、我々は首尾よくボットを作成しました、しかし、それがチャットに応じるように構成されなかったので、それは現在受動的です.

    リクエスト作成


    ブラウザで新しいタブを開き、このURLを使用してHTTPSリクエストを電報ボットAPIに作成してテストします.
    https://api.telegram.org/bot\<YOUR\_ACCESS\_TOKEN\>/getMe
    
    これは、BONのID、名前、およびユーザ名を持つJSON形式でレスポンスを返します.
    {"ok":true,"result":{"id":591836832,"is\_bot":true,"first\_name":"new-nest-bot","username":"nest\_demo\_bot"}}
    

    アプリケーションコントローラを初期化する


    ユーザーが電報の上で我々のロボットと対話するとき、Telegram Bot APIは我々の巣へのインタラクションに関する詳細を送ります.HTTPリクエストと応答の上のJSアプリケーションは、ボットがどのように対応すべきかについての指示で送り返されます.アプリケーションロジックを設定しましょう.
    ネスト.JSスタータープロジェクトは、アプリケーションという名前の既定のコントローラをインストールしました.コントローラ.このファイルを開き、以下のコードで更新します.
    // ./src/app.controller.ts
    
    import { BotService } from './bot/bot.service';
    import { Get, Controller, Res, HttpStatus } from '@nestjs/common';
    
    @Controller()
     export class AppController {
     constructor( private botService:BotService) {}
    
     @Get()
     getBotDialog(@Res() res) {
     this.botService.botMessage();
     res.status(HttpStatus.OK).send("Bot service started");
     }
    }
    
    アプリケーションを起動すると、このコントローラは着信要求を処理し、適切な応答を返します.前述のように、我々はbotserviceを輸入して、それをコンストラクタを通してコントローラに注入しました.これは、アプリケーションを確保することです.コントローラ.TSはHTTPリクエストのみを処理し、複雑なロジックをサービスに要約します.次のセクションでこれを設定します

    ボットサービスの設定


    当社のAppControllerは、指定されたロジックに基づいて私たちの電報ボットとの相互作用に応答するbotserviceという名前のサービスに依存します.このサービスを作成しましょう.srcの中にボットフォルダを作成し、新しいファイルを作成するに進みます.サービスその中のts.次に、新しく作成したファイルを開き、以下のコードをペーストします.
    // ./src/bot/bot.service.ts
    
    import { Component} from '@nestjs/common';
    
    @Component()
     export class BotService {
    
     botMessage() { 
     process.env.NTBA\_FIX\_319 = "1";
     const TelegramBot = require('node-telegram-bot-api');
    
    const token = 'YOUR\_ACCESS\_TOKEN';
    
    const bot = new TelegramBot(token, { polling: true });
    
     bot.on('message', (msg) =\> {
    let Hi = "hi";
    if (msg.text.toString().toLowerCase().indexOf(Hi) === 0) {
     bot.sendMessage(msg.from.id, "Hello " + msg.from.first\_name + " what would you like to know about me ?");
     }
     }
    }
    
    ここでは、botmessage ()という名前のメソッドを作成し、その中でノード電報ボットAPIモジュールを必要とし、それからボトムから受信されたアクセサリトークンをトークン変数に代入しました.このトークンは後で新しいtelegrambot ()を作成するための引数として使われました.番目の引数はnew telegrambot ()に渡されます.我々がここでしたことは、それをtrueにセットすることによってlong polling構成で我々のロボットをつくることです.
    これは、実際には2つの方法でサーバーと対話することができます.

  • Webhook :専用のURLまたはWebコールバックとも言うことができます.

  • Long Polling :これは、専用のサーバーまたは外部アドレスを必要とせずにローカルにアプリケーションを実行することができます.
  • コンポーネントを登録する


    現時点では、我々のアプリケーションは、新しく作成されたサービスを認識しません.モジュールファイルアプリケーションを編集してこれを変更しましょう.モジュールです.これを行うには、@ module ()デコレータの'コンポーネント'配列にサービスを入れます.
    // ./src/app.module.ts
    
    import { Module } from '@nestjs/common';
    import { AppController } from './app.controller';
    import { BotService } from 'bot/bot.service';
    
    @Module({
     imports: [],
     controllers: [AppController],
     components: [BotService],
    })
    export class AppModule {}
    

    アプリケーションの実行


    アプリケーションを起動します.
    $ npm start
    
    これはネストで使用される既定のポートでアプリケーションを起動します.jsブラウザを開き、http://localhost:3000に移動します.

    次に、Telegram appを開き、別の名前を選択する場合は、新しい巣ボットまたはあなたの電報ボットの名前を検索します.

    今、スタートボタンをクリックしてチャットを開始することができます.

    場合は、現在の応答を取得しない場合は、別のタブで開いている場合は、単にアプリケーションをリフレッシュ心配しないでください.

    サービスを更新


    ページを常にリフレッシュしないようにするには、nestからonmoduleinitという名前のライフサイクルイベントを使用します.BotMessageメソッドを初期化するコンポーネント内のJS.
    // ./src/bot/bot.service.ts
    
    import { Component, OnModuleInit } from '@nestjs/common';
    
    @Component()
     export class BotService implements OnModuleInit {
    
     onModuleInit() {
     this.botMessage();
     }
    
     botMessage() { 
     ...
     }
    }
    
    現在開発中のサーバーを再起動し、新しいネストを試してみましょう

    あなたは完全なボットを見つけることができます.サービスTSファイルhere . githubの完全なダイアログで.

    結論


    ここでは、我々は他のユーザーからのチャットにあらかじめ定義された応答で電報chatbotを構築することができました.意図は、改善することができますし、はるかに行うことができますアメージングchatbotを構築する一般的なビルディングブロックを与えることでした.
    私は、このチュートリアルが有用であったことを願って、十分な情報を他のユースケースのために設計されたボットを起動するために必要な場合は、あなたの組織では、フィットするように与えた.
    このチュートリアルのソースコードは、Githubにhereを見つけることができます.自由に探検してください.