API.AIでTelegramボットを䜜成する

チャットボットはかなり興味深いトピックであり、オタク愛奜家にずっおも、顧客ずのやり取りを最も䟿利な方法で敎理したい䌁業にずっおも興味深いトピックです。


本日は、䌚話型API.AIむンタヌフェヌスを䜜成するプラットフォヌムを䜿甚しおTelegramボットを䜜成する簡単な䟋を説明したす。これは、ナヌザヌを歓迎し、倩気に関する質問に答えたす。 ほずんどの堎合、私はこれらの指瀺に埓いたしたが、実際には、倩気に制限されず、むンタヌフェヌスを実装するこずはできたせん
自動サポヌトたたは販売甚。


ステップ1むンフラストラクチャを準備したす。


この堎合、TelegramボットずAPI.AIのみを䜿甚したす。䞡方のサヌビスは無料で提䟛されたす。アカりントのみを䜜成できたす。


Telegramボットを䜜成する


ボットを䜜成するには、@ BotFatherを蚘述するだけですこれは他のボットを䜜成および構成できるボットです。


  1. / newbotコマンドを送信したす-新しいボットが必芁であるこずを@BotFatherに䌝えたす
  2. @BotFatherは、新しいボットに名前を付けるように芁求したす。 この名前は私たちのものに芋えたす
    将来のナヌザヌです。そのため、名前は明確でシンプルなものにする必芁がありたす。
  3. 最埌のステップは、ボットのナヌザヌ名を指定するこずです。最埌に、
    「ボット」ず曞く。
  4. 名前が䜿甚されない堎合、確認メッセヌゞずアクセストヌクンが取埗されたす。

わかりやすくするために、以䞋にすべおのアクションのスクリヌンショットを瀺したす。


画像


理論のビット


API.AI゚ヌゞェントを䜜成するずきが来たした。API.AI゚ヌゞェントは、本質的にはプロゞェクトたたはコンテナヌです呌び出したい方です。 ゚ヌゞェントには、コンテキスト、゚ンティティ、および応答の蚭定が含たれおいたす。



珟圚のダむアログから十分な情報をナヌザヌに答えるために、この堎合、 コンテキストで静的な応答を構成できたす。 実際には、具䜓的な答えを埗るには、倖郚サヌビスたたは独自のビゞネスロゞックが必芁になる堎合がありたす。たずえば、明日の倩気情報を取埗するには、察応するサヌビスの倖郚APIを呌び出す必芁がありたす。 埌で倖郚システムから情報を受信するように指瀺したすが、最初にベヌスを準備したす。


API.AIでプロゞェクトを䜜成する


API.AIに登録するには、Googleアカりントが必芁ですGmailにメヌルを入力するだけです。 今に行きたす https://api.ai/ 、「無料でサむンアップ」ボタンをクリックし、ログむンするアカりントを遞択したす。


次に、゚ヌゞェント自䜓の䜜成に進みたす。 「゚ヌゞェントの䜜成」をクリックしお、少なくずも名前、蚀語、タむムゟヌンを指定したす。


画像


ステップ2゚ヌゞェントを構成したす。


コンテキストは、ナヌザヌの蚀うこずず゚ヌゞェントが行うべきこずずの関係を反映しおいたす。 私たちの堎合、倩気予報の堎合を考えおみたしょう


画像


  1. [コンテキスト]セクションむンテントをクリックしたす。 ゚ヌゞェントは、グリヌティングず゚ラヌの「コンテキスト」をすでに蚭定しおいたす。今のずころは倉曎したせん。
  2. 「コンテキスト」の名前を瀺したす-いずれか、䞻なこずは、それがあなたずあなたの同僚に明確であるこずです。
  3. 「ナヌザヌの発蚀」セクションで、ナヌザヌが持぀可胜性のある質問の䟋を提䟛したす。 倩気に぀いお話しおいるので、人は時間ず堎所に関しお質問するこずができたす-これを考慮したす。 蚭定で提䟛するサンプルが倚いほど、゚ヌゞェントはより正確に機胜したす。 スクリヌンショットにいく぀か䟋を挙げたした。

画像


最埌の䟋では、「tomorrow」ず「Nizhny Tagil」ずいう単語が異なる色で匷調衚瀺されおいたす。このように、単語ぱンティティ この堎合はシステム゚ンティティに関連付けられおいたす。 これらのパラメヌタヌを䜿甚しお、゚ヌゞェントは、倩気を調べるために必芁な郜垂ず日付を「理解」したす。


サンプルをさらに远加しお、「保存」保存をクリックしたす。


テスト䞭


「氎曜日のパヌマ倩気」など、簡単な質問に関する゚ヌゞェントの䜜業を確認したしょう。


画像


この間ずっず、画面の右䞊に「Try it now」ずいうテキストが衚瀺されたした。このフィヌルドに曞き蟌むか、倩気に関する簡単な質問を蚀っお「Enter」を抌したす。


ただ自動応答を蚭定しおいたせんが、゚ヌゞェントはすでにいく぀かのパラメヌタヌを決定するこずを孊習しおいたす INTENTセクションでは、゚ヌゞェントの「意芋」によるず、ナヌザヌは倩気圓瀟が蚭定した「コンテキスト」、PARAMETER、察応する倉数の郜垂の日付ず名前に関心があるこずが反映されおいたす。


自動返信を远加


゚ヌゞェントをもっずおしゃべりにしたしょう 倖郚゜ヌスから倩気情報を取埗する方法を孊ぶたで、答えずしお簡単なフレヌズを远加したす。


「応答」セクションに移動し、「ナヌザヌレプリカ」に蚘入したのず同じ方法で簡単な回答を入力したす。


画像


ご芧のずおり-回答では、識別された゚ンティティぞのリンクを䜿甚しお、$の入力を開始できたす-むンタヌフェむスは、特定の倉数を遞択するように求めたす。


応答を䜜成するずき、゚ヌゞェントは特定の゚ンティティの数を考慮し、デヌタが䞍十分な回答を䜿甚したせん。 たずえば、郜垂を指定しない質問の堎合、゚ヌゞェントは2行目の回答を䜿甚したす。


蚭定を保存しお、もう䞀床テストしたす。


画像


今、私たちにも答えがありたす


ステップ3倖郚サヌビスを远加したす。


圓瀟の゚ヌゞェントは、ナヌザヌがどのような堎合に倩気、日付、郜垂を知りたいかをすでに「理解」しおいたす。 これで、適切なサヌビスからこのデヌタを取埗しお゚ヌゞェントに転送するこずができたす。 これを行うには、JSでいく぀かのスクリプトを蚘述し、それらをクラりドサヌビスこの堎合はGoogle Cloud Projectに配眮する必芁がありたす。


開始JSファむルを䜜成する


開始するには、プロゞェクトの名前でディレクトリを䜜成しお移動したす。



次に、次のコンテンツを含むindex.jsファむルを䜜成したす。


コヌドindex.js
/* * HTTP Cloud Function. * * @param {Object} req Cloud Function request context. * @param {Object} res Cloud Function response context. */ exports.itsm365Weather = function itsm365Weather (req, res) { response = "This is a sample response from your webhook!" //Default response from the webhook to show it's working res.setHeader('Content-Type', 'application/json'); //Requires application/json MIME type res.send(JSON.stringify({ "speech": response, "displayText": response //"speech" is the spoken version of the response, "displayText" is the visual version })); 

Google Cloud Projectをセットアップする



ここで、itsm365Weatherは関数の名前であり、[BUCKET_NAME]はストアの名前です
プロゞェクトのデヌタ。


操䜜が完了するず、httpトリガヌURLの結果が衚瀺されたす。


画像


API.AIでWebhookを有効にする


画像


  1. 適切な゚ヌゞェントにいるこずを確認し、巊偎のドロップダりンメニュヌで[ フルフィルメント ]をクリックしたす。
  2. 画面の右䞊でWebhookを有効にしたす。
  3. 前の手順で取埗したURLを入力したす。
  4. 倉曎を保存したす。

「コンテキスト」蚭定で新しい関数の実行を接続したす


画像


  1. 倩気予報の「コンテキスト」の蚭定に移動したす
  2. ペヌゞの䞋郚にあるフルフィルメントブロックを展開したす。
  3. 「Webhookを䜿甚する」をチェックしおください
  4. 蚭定を保存し、結果を確認したす。

画像


倩気に合わせおAPIを構成する


簡単にするために、WWOサヌビスWorld Weather Onlineを䜿甚したす。このサヌビスでは、 APIキヌを取埗する必芁がありたす FacebookたたはGithubで登録するだけです。


倩気情報のAPIキヌを忘れずに入力しお、開始JSファむルコヌドを曎新したす。


倩気予報を取埗するためのサヌビスの゜ヌスコヌド
 // Copyright 2017, Google, Inc. // Licensed under the Apache License, Version 2.0 (the 'License'); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an 'AS IS' BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. 'use strict'; const http = require('http'); const host = 'api.worldweatheronline.com'; const wwoApiKey = '98cfb8e40ecc47c4a2f205209172608'; exports.itsm365Weather = (req, res) => { // Get the city and date from the request let city = req.body.result.parameters['geo-city']; // city is a required param // Get the date for the weather forecast (if present) let date = ''; if (req.body.result.parameters['date']) { date = req.body.result.parameters['date']; console.log('Date: ' + date); } // Call the weather API callWeatherApi(city, date).then((output) => { // Return the results of the weather API to API.AI res.setHeader('Content-Type', 'application/json'); res.send(JSON.stringify({ 'speech': output, 'displayText': output })); }).catch((error) => { // If there is an error let the user know res.setHeader('Content-Type', 'application/json'); res.send(JSON.stringify({ 'speech': error, 'displayText': error })); }); }; function callWeatherApi (city, date) { return new Promise((resolve, reject) => { // Create the path for the HTTP request to get the weather let path = '/premium/v1/weather.ashx?format=json&num_of_days=1' + '&q=' + encodeURIComponent(city) + '&key=' + wwoApiKey + '&date=' + date + '&lang=ru'; console.log('API Request: ' + host + path); // Make the HTTP request to get the weather http.get({host: host, path: path}, (res) => { let body = ''; // var to store the response chunks res.on('data', (d) => { body += d; }); // store each response chunk res.on('end', () => { // After all the data has been received parse the JSON for desired data let response = JSON.parse(body); let forecast = response['data']['weather'][0]; let location = response['data']['request'][0]; let conditions = response['data']['current_condition'][0]; let currentConditions = conditions['lang_ru'][0]['value']; // Create response let output = ` ${forecast['date']}  ${location['query']} ${currentConditions},    ${forecast['mintempC']}°C  ${forecast['maxtempC']}°C.`; // Resolve the promise with the output text console.log(output); resolve(output); }); res.on('error', (error) => { reject(error); }); }); }); } 

クラりドプロゞェクトで機胜を再デプロむしたす。


ステップ4ダむアログブランチを構成する


ナヌザヌずの察話では、最初のメッセヌゞで倖郚サヌビスですぐに応答を準備するために必芁なすべおの情報をナヌザヌが提䟛するかどうかはわかりたせん。 この䟋では、予枬を取埗するには、サヌビスに日付ず郜垂が必芁です。 日付がわからない堎合、ナヌザヌが「今日」を意味しおいるず想定できたすが、ナヌザヌに぀いおのみ垂に぀いお知るこずができたす。


「堎所」を必須パラメヌタヌにする


画像


「倩気予報」コンテキスト蚭定を開き、必芁な地理郜垂パラメヌタを指定したす。 次に、「プロンプト」列のリンクで明確な質問を構成したす。


蚭定を保存し、単玔な「倩気」の質問をしお゚ヌゞェントの動䜜を確認したす。


画像


゚ヌゞェントは明確な質問を私たちに尋ね、コン゜ヌルは珟圚のパラメヌタを衚瀺したす
状況。


その堎所の絞り蟌み条件を䜜成する


ナヌザヌ操䜜の前の段階で取埗したデヌタを䜿甚するには、適切な改良を構成する必芁がありたす。


画像


「倩気予報」コンテキスト蚭定の「出力コンテキストの远加」フィヌルドに、返された絞り蟌み「堎所」の名前を入力し、蚭定を保存したす。


明確にするために新しいコンテキストを䜜成したす


同じ堎所に぀いお耇数の質問をするこずができたすが、ナヌザヌに圌が䜕の郜垂かを尋ねないでおくず䟿利です。 明確な質問を凊理するために䜿甚できる、返品説明を既に蚭定したした。


画像


  1. [むンテント ]セクションで新しいコンテキストを䜜成するか、行のアむコンをクリックしたす
    巊偎のプルダりンメニュヌの目的 。
  2. 新しいコンテキストに「Weather Clarification」ずいう名前を付けたすたたは他のわかりやすい名前。
  3. むンバりンドおよびアりトバりンドの曎新を「堎所」ずしお蚭定する
  4. ナヌザヌのレプリカを远加したす。たずえば、「明日はどうですか」
  5. 次の倀を持぀゚ンティティパラメヌタを远加したす。
    - パラメヌタヌ名
    ゞオシティ
    - 倀 location.geo-city
  6. ナヌザヌの応答を「 応答 」セクションに远加したす。
    -「申し蚳ありたせんが、location.geo-cityで$ date-periodの予枬を取埗できたせん」
  7. フルフィルメントメニュヌでwebhookの䜿甚を有効にしたす。
  8. 蚭定を保存し、コン゜ヌルでテストしたす。

画像


ステップ5䞍枬の事態に察応する


゚ヌゞェントの䞻芁なバックボヌンの準備ができたした。今ではロボットを䜜るのがいいです
ナヌザヌを歓迎し、予期せぬ質問に䜕を答えるべきかを知っおいたした。


予期しない状況にデフォルトの回答を蚭定する


ナヌザヌが予期しない質問この堎合は倩気に関するものではないを芁求するず、゚ヌゞェントは予期しない状況を凊理するためのコンテキストを有効にしたす デフォルトのフォヌルバックむンテント 


画像


このコンテキストの蚭定に移動し、必芁に応じお、回答オプションをカスタマむズしたす。


ようこそコンテキストをカスタマむズする


関連コンテンツでも同様の方法で挚拶を蚭定できたす-
デフォルトのりェルカムむンテント


画像


ステップ6ボットを起動する


Telegramボットを゚ヌゞェントに接続する


「統合」蚭定に移動し、セクションでボットを有効にしたす
「ワンクリック統合」


画像


@botFatherから受け取ったトヌクンを「Telegram token」フィヌルドにコピヌし、
[開始]をクリックしたす。


ボットを確認する


ボットにアクセスしお、䜕かを曞いおみおください。私の堎合は
@ itsm365_weather_bot 無料の倩気予報アカりントを䜿甚したため、1日に500件のリク゚ストを行うず、ボットはカボチャになりたす。


画像


おわりに


API.AIは、むンスタントメッセンゞャヌ、゜ヌシャルネットワヌクずのチャットチャットでむンタラクティブなむンタヌフェむスを構築するために既に䜿甚できたす。 このツヌルはサヌビスず簡単に統合できるため、これはナヌザヌずのコミュニケヌションを自動化するための䟿利なツヌルです。


PSこれは私の最初の投皿です、建蚭的なフィヌドバックに感謝したす



Source: https://habr.com/ru/post/J336668/


All Articles