甘やかす。 GoogleスクリプトでTelegramボットを作成しています

目標、タスク、狂気の言い訳。



コメントのHabrachiansの1人が、Google Translateをシノニマイザーとして使用することについて語ったという事実から始まりました。 彼はテキストをある言語から別の言語に、またはその逆に翻訳することを提案し、かなりの割合の違いとテキストの意味の保存を約束した。 しかし、これは正確ではありません。



「はい」という答えを得ることにした質問





すべての仕組み



最初にボットを作成し、APIキーを取得しました。 私はこれを行う方法については書きません。この情報はハブで何度も公開されており、簡単にグーグルです。



http要求をTelegramサーバーに送信できることがすぐに明らかになりました。 Webフックについては考えませんでした。 Googleサイトで使用できる可能性はありますが、このアイデアはまったく確認しませんでした。



次に、2つのシートを含むスプレッドシートドキュメントを作成しました。 最初のシートには、まだ受信していないボットへのメッセージを受信するために必要なオフセットパラメーターが含まれています。 同じシートの2行目には、最終更新日があります。 2番目のシートには、受信メッセージのログとブルガリア語への翻訳の結果、およびその逆のログがあります。



ブルガリア語はロシア語に近いため選択されましたが、残念ながら、これは不慣れな単語を音訳に変換することから救いませんでした。



スクリプトのプロジェクトトリガーを通じて、データ収集機能の実行を毎分設定します。



この関数は、最後のメッセージのID +1を使用して、ボットへの最新のメッセージを受け取ります。 さらに、すべてのメッセージは変換を実行され、返送されます。









短所と不快な機能



当然、ボットの実装に選択された「ツール」には多くの制限があります。 まず、ボットは長い遅延(最大1分)でメッセージに応答します。 次に、Google翻訳はGoogleスクリプト内で使用されるという事実にもかかわらず、1秒あたりのリクエスト数と1日あたりの合計数にはまだ制限があります。 明らかな理由から、Webフックを使用する可能性はありません。



類義語としてのGoogle翻訳の品質について話す必要はありません。 この方法は完全に不適切です。 おそらく、テキストを文章に、文章を単語に分解するのが理にかなっています。



/** *        */ function getMessages() { var botId = 'TELEGRAM_BOT_API_KEY'; var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheets = ss.getSheets(); var offset = sheets[0].setActiveSelection('B1').setNumberFormat('@STRING@').getValue(); var updates = UrlFetchApp.fetch("https://api.telegram.org/bot"+botId+"/getUpdates?offset="+ offset + '&limit=40&timeout=1'); var transferLanguage = 'bg'; //    var sourceLanguage = 'ru'; //   updates = JSON.parse(updates); Logger.log(updates); if (updates.ok) { for (var i in updates.result) { var update = updates.result[i]; offset = update.update_id + 1; sheets[0].setActiveSelection('B1').setValue(offset); sheets[0].setActiveSelection('B2').setValue(new Date(update.message.date * 1000)); //    var text = update.message.text; if (text.length >= 4096) { text = '   ,     '; } else { if (text == '/start') { text = '  ,   .       .'; } else { Utilities.sleep(1000); text = LanguageApp.translate(LanguageApp.translate(text, sourceLanguage, transferLanguage), transferLanguage, sourceLanguage); } writeLog({ date: new Date(update.message.date * 1000), inMessage: update.message.text, outMessage: text, userName: update.message.from.first_name + ' ' + update.message.from.last_name, userId: update.message.from.id, userUsername: update.message.from.username }); } UrlFetchApp.fetch("https://api.telegram.org/bot"+botId+"/sendMessage", { 'method' : 'post', 'payload' : { chat_id: update.message.chat.id, text: text } }); } } } /** *        "" */ function writeLog(data) { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheets()[1]; var lastRow = sheet.getLastRow() + 1; sheet.setActiveSelection('A' + lastRow).setNumberFormat('@STRING@').setValue(data.date); sheet.setActiveSelection('B' + lastRow).setNumberFormat('@STRING@').setValue(data.userUsername); sheet.setActiveSelection('C' + lastRow).setNumberFormat('@STRING@').setValue(data.userId); sheet.setActiveSelection('D' + lastRow).setNumberFormat('@STRING@').setValue(data.userName); sheet.setActiveSelection('E' + lastRow).setNumberFormat('@STRING@').setValue(data.inMessage); sheet.setActiveSelection('F' + lastRow).setNumberFormat('@STRING@').setValue(data.outMessage); }
      
      





結果は何ですか?



私の実験では、個人的な目的でGoogleサービスをTelegramボットに簡単に接続し、情報の収集を自動化して非常に迅速に受信できることが示されました。 一部のAvitoのパーサーを簡単に作成し、関心のあるリクエストに電報で新しいアナウンスを送信できます。 この場合、メッセージに対するボットの応答速度でさえ重要な役割を果たしません。



もちろん、同義語はまあまあであることが判明しました。



このログはドキュメントで確認できます。







UPD: Pyloramaは彼の解説で WebHookの作り方について話しました。



All Articles