рд╢реВрдиреНрдп рд╕реЗ "Google рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ" рдирд╛рдпрдХ: рдЖрдкрдХрд╛ рдХреЛрдб

рдЫрд╡рд┐


рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ Google рд╕рд╣рд╛рдпрдХ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ред рдЕрдм рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд╣рд╛рдпрдХ рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╢рд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд┐рд▓реНрдо рдЪреБрди рд╕рдХреЗрдВред Shipa_o , raenardev рдФрд░ ComradeGuest рдбрд┐рдЬрд╝рд╛рдЗрдирд░ рд╕реЗ рдмрд╛рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд╣реИред


рдЕрдкрдирд╛ рдХреЛрдб рд▓рд┐рдЦреЗрдВ

рдЖрдЗрдП рдХреБрдЫ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░рд╛ рдПрдЬреЗрдВрдЯ рд╢реИрд▓реА рджреНрд╡рд╛рд░рд╛ рдлрд┐рд▓реНрдореЛрдВ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реИред
рд╣рдо рдЙрд╕реЗ "рд╣реЙрд░рд░ рджрд┐рдЦрд╛рдиреЗ" рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ, рдФрд░ рдПрдЬреЗрдВрдЯ рд╢реИрд▓реА рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдЧрд╛, рд╢реИрд▓реА рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рдлрд┐рд▓реНрдо рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред


рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдлрд┐рд▓реНрдо рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдПрдХ рдЪрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ:
var json = { "filmsList": [ { "id": "1", "title": " :  ", "description": "   ", "genres": ["", "", ""], "imageUrl": "http://t3.gstatic.com/images?q=tbn:ANd9GcQEA5a7K9k9ajHIu4Z5AqZr7Y8P7Fgvd4txmQpDrlQY2047coRk", "trailer": "https://www.youtube.com/watch?v=RNksw9VU2BQ" }, { "id": "2", "title": " :  2 тАУ  ", "description": "   ", "genres": ["", "", "", ""], "imageUrl": "http://t3.gstatic.com/images?q=tbn:ANd9GcTPPAiysdP0Sra8XcIhska4MOq86IaDS_MnEmm6H7vQCaSRwahQ", "trailer": "https://www.youtube.com/watch?v=vX_2QRHEl34" }, { "id": "3", "title": "", "description": "  ", "genres": ["", "", ""], "imageUrl": "https://www.kinopoisk.ru/images/film_big/386.jpg", "trailer": "https://www.youtube.com/watch?v=xIe98nyo3xI" } ] }; 

 exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => { const agent = new WebhookClient({ request, response }); let result = request.body.queryResult; let parameters = result.parameters; let outputContexts = result.outputContexts; let intentMap = new Map(); //    agent  parameters,       intentMap.set('search-by-genre', searchByGenre.bind(this, agent, parameters)); agent.handleRequest(intentMap); }); function searchByGenre(agent, parameters) { let filmsList = json.filmsList; //     let filteredFilms = filmsList.filter((film) => { // ,             return film.genres.some((genre) => genre == parameters.genre); }); //       let firstFlim = filteredFilms[0]; //    agent.add(firstFlim.title); //       agent.add(new Card({ title: firstFlim.title, imageUrl: firstFlim.imageUrl, text: firstFlim.description, buttonText: ' ', buttonUrl: firstFlim.trailer })); //      agent.add([ "    ?", new Suggestion("  ?"), new Suggestion(""), new Suggestion("") ]); } 

рдЕрдм рдЙрддреНрддрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рд╣реЛ рдЧрдпрд╛ рд╣реИред
рд╣рдо рдкрд╛рда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╕реВрдЪрдирд╛ рдФрд░ рдпреБрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд░реНрдб:


рдлрд┐рд▓реНрдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ

рдбрд╛рдпрд▓реЙрдЧрдлрд╝реНрд▓реЛ рдХреА рдПрдХ рдЕрдЪреНрдЫреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред
рдпрджрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рд╕реНрдкреАрдХрд░ рд╣реИрдВ, рддреЛ рд╣рдо рд╕рднреА рд╡рд╛рдХреНрдпрд╛рдВрд╢реЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдХреЛрдИ рд╕реНрдХреНрд░реАрди рдирд╣реАрдВ рд╣реИ, рддреЛ Card рдФрд░ Suggestion рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗрд╡рд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред


рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ

рдЖрдЗрдП рдХрд╛рд░реНрдп рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░реЗрдВ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ (DB) рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдлрд╛рдпрд░рдмреЗрд╕ рд░рд┐рдпрд▓рдЯрд╛рдЗрдо рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдбрдорд┐рди рдбрд╛рдЯрд╛рдмреЗрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ ред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдиреЗ рдФрд░ рдЙрд╕реЗ рдЖрдмрд╛рдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЖрдк рдЗрд╕реЗ рдЙрд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХреНрд▓рд╛рдЙрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛:


рдкреЙрдкреБрд▓реЗрдЯреЗрдб рдлрд╛рдпрд░рдмреЗрд╕ рд░рд┐рдпрд▓рдЯрд╛рдЗрдо рдбреЗрдЯрд╛рдмреЗрд╕

рдбреЗрдЯрд╛рдмреЗрд╕ рднрд░ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдкреВрд░реНрддрд┐ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ:
 //   firebase-admin const firebaseAdmin = require('firebase-admin'); //  firebaseAdmin firebaseAdmin.initializeApp({ credential: firebaseAdmin.credential.applicationDefault(), databaseURL: 'https://<ID->.firebaseio.com' }); //  ,      function getFilmsList() { return firebaseAdmin .database() .ref() .child('filmsList') .once('value') .then(snapshot => { const filmsList = snapshot.val(); console.log('filmsList: ' + JSON.stringify(filmsList)); return filmsList; }) .catch(error => { console.log('getFilmsList error: ' + error); return error; }); } 

рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдлрд╛рдпрд░рдмреЗрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдПрдкреАрдЖрдИ рдХреЛ рдкреНрд░реЙрдорд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред .once('value') рдкрджреНрдзрддрд┐ рд╣рдореЗрдВ рдПрдХ рд╡рд╛рджрд╛ рджреЗрддрд╛ рд╣реИред рддрдм рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ then() рдмреНрд▓реЙрдХ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдирдХреЗ рд╕рд╛рде рд╡рд╛рджрд╛ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рдкреНрд░реЙрдорд┐рд╕ рдХреЛ handleRequest() рд╡рд┐рдзрд┐ рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЕрдиреНрдпрдерд╛ рдПрдЬреЗрдВрдЯ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд┐рдирд╛ рд╣рдорд╛рд░реЗ рдХреЙрд▓рдмреИрдХ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рдПрдЧрд╛ред


рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢реИрд▓реА рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЦреЛрдЬ рдореВрд╡реА:
 'use strict'; const functions = require('firebase-functions'); const firebaseAdmin = require('firebase-admin'); const { WebhookClient } = require('dialogflow-fulfillment'); const { Card, Suggestion } = require('dialogflow-fulfillment'); firebaseAdmin.initializeApp({ credential: firebaseAdmin.credential.applicationDefault(), databaseURL: 'https://<ID->.firebaseio.com' }); exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => { const agent = new WebhookClient({ request, response }); let result = request.body.queryResult; let parameters = result.parameters; let outputContexts = result.outputContexts; let intentMap = new Map(); intentMap.set('search-by-genre', searchByGenre.bind(this, agent, parameters)); agent.handleRequest(intentMap); }); function getFilmsList() { return firebaseAdmin .database() .ref() .child('filmsList') .once('value') .then(snapshot => { const filmsList = snapshot.val(); console.log('filmsList: ' + JSON.stringify(filmsList)); return filmsList; }) .catch(error => { console.log('getFilmsList error: ' + error); return error; }); } function searchByGenre(agent, parameters) { return getFilmsList() .then(filmsList => { let filteredFilms = filmsList.filter((film) => { return film.genres.some((genre) => genre == parameters.genre); }); let firstFlim = filteredFilms[0]; agent.add(firstFlim.title); agent.add(new Card({ title: firstFlim.title, imageUrl: firstFlim.imageUrl, text: firstFlim.description, buttonText: ' ', buttonUrl: firstFlim.trailer })); agent.add([ "    ?", new Suggestion("  ?"), new Suggestion(""), new Suggestion("") ]); }) .catch(error => { console.log('getFilmsList error' + error); }); } 

рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рддрддрд╛ рдЬреЛрдбрд╝реЗрдВ

рд╣рдорд╛рд░рд╛ рдХреМрд╢рд▓ рд╣рд░ рдмрд╛рд░ рдПрдХ рдХреНрд░рдо рдореЗрдВ рдлрд┐рд▓реНрдореЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧрд╛ред рд╡рд╣реА рдЙрддреНрддрд░ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рд╡рд╣ рд╣рдорд╛рд░реЗ рд░реЛрдмреЛрдЯ рд╕реЗ рдмрд╛рдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛ред


рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдлреЗрд░рдмрджрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВ ред


рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ package.json рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:


 "dependencies": { // ... "shuffle-array": "^1.0.1" // ... } 

рд╕рд░рдгреА рдХрд╛ рдорд┐рд╢реНрд░рдг рдЬреЛрдбрд╝реЗрдВ:
 //   const shuffle = require('shuffle-array'); function searchByGenre(agent, parameters) { return getFilmsList() .then(filmsList => { let filteredFilms = filmsList.filter((film) => { return film.genres.some((genre) => genre == parameters.genre); }); //    shuffle(filteredFilms); let firstFlim = filteredFilms[0]; agent.add(firstFlim.title); agent.add(new Card({ title: firstFlim.title, imageUrl: firstFlim.imageUrl, text: firstFlim.description, buttonText: ' ', buttonUrl: firstFlim.trailer })); agent.add([ "    ?", new Suggestion("  ?"), new Suggestion(""), new Suggestion("") ]); }) .catch(error => { console.log('getFilmsList error' + error); }); } 

рдЕрдм рд╣рд░ рдмрд╛рд░ рдирдИ рдлрд┐рд▓реНрдо рдЬрд╛рд░реА рдХреА рдЬрд╛рдПрдЧреАред
рдЙрд╕реА рддрд░рд╣, рдЖрдк рд╡рд┐рднрд┐рдиреНрди рд╡рд╛рдХреНрдпрд╛рдВрд╢реЛрдВ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ: рд╡рд╛рдХреНрдпрд╛рдВрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдПрдВ, рдЗрд╕реЗ рдорд┐рд▓рд╛рдПрдВ рдФрд░ рд╕рд░рдгреА рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рд▓реЗрдВред


рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛

рд╣рдо рдПрдЬреЗрдВрдЯ рд╕реЗ рдкреВрдЫрддреЗ рд╣реИрдВ:


рдлреИрдВрдЯреЗрд╕реА рджрд┐рдЦрд╛рдУ

рдПрдЬреЗрдВрдЯ рд╣рдореЗрдВ рдлрд┐рд▓реНрдо "рд▓реЙрд░реНрдб рдСрдл рдж рд░рд┐рдВрдЧреНрд╕" рджрд┐рдЦрд╛рддрд╛ рд╣реИред
рдлрд┐рд░ рд╣рдо рдкреВрдЫрддреЗ рд╣реИрдВ:


рд╡рд╣ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИ?

рд▓реЛрдЧ рдпрд╣ рдирд╣реАрдВ рдХрд╣рддреЗ рд╣реИрдВ: "рдлрд┐рд▓реНрдо" рд▓реЙрд░реНрдб рдСрдл рдж рд░рд┐рдВрдЧреНрд╕ "рдХреНрдпрд╛ рдЕрдкреНрд░рд╛рдХреГрддрд┐рдХ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдлрд┐рд▓реНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


 //    ,       agent.setContext({ name: 'current-film', lifespan: 5, parameters: { id: firstFlim.id } }); 

рдлрд┐рд░ рд╣рдо рдЗрд╕ рддрд░рд╣ рдлрд┐рд▓реНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ:
 function genreSearchDescription(agent) { //   current-film const context = agent.getContext('current-film'); console.log('context current-film: ' + JSON.stringify(context)); //  id    const currentFilmId = context.parameters.id; //    return getFilmsList() .then(filmsList => { //    id const currentFilm = filmsList.filter(film => film.id === currentFilmId); agent.add(currentFilm[0].description); agent.add([ ' ?', new Suggestion(''), new Suggestion(' ') ]); }) .catch(error => { console.log('getFilmsList error:' + error); }); } 

рдЙрд╕реА рддрд░рд╣, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдлрд┐рд▓реНрдореЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдПрдХреАрдХрд░рдг


рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ:



рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдЬрд┐рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


1) рдЕрдЧрд░ рдХрд╛рд░реНрдб рдпрд╛ рд╕реБрдЭрд╛рд╡ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдкреВрд░реА рддреИрдпрд╛рд░реА рд╣реИ, рддреЛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдореЗрдВ рднреА рд╡реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
рд▓реЗрдХрд┐рди рдПрдХ рдмрдЧ рд╣реИ : рддреНрд╡рд░рд┐рдд рдЙрддреНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╢реАрд░реНрд╖рдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдореЗрдВ "рдПрдХ рдЖрдЗрдЯрдо рдЪреБрдиреЗрдВ" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрднреА рддрдХ рд╣рдо рдлреБрд▓рдлрд┐рд▓рдореЗрдВрдЯ рдореЗрдВ рд╢реАрд░реНрд╖рдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВред


2) рдпрджрд┐ рдЖрд╢рдп Google рд╕рд╣рд╛рдпрдХ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡ рдЪрд┐рдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ


рдЙрджрд╛рд╣рд░рдг

рдлрд┐рд░ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


рддреНрд╡рд░рд┐рдд рдЬрд╡рд╛рдм


рддреНрд╡рд░рд┐рдд рдЙрддреНрддрд░ рд╕реЗрдЯ рдХрд░рдирд╛

рдХрд╕реНрдЯрдо рдкреЗрд▓реЛрдб
рдпрд╣рд╛рдВ рдЖрдк рдореБрдЦреНрдп рдХреАрдмреЛрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреНрд╡рд░рд┐рдд рдЙрддреНрддрд░ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


рдХреАрдмреЛрд░реНрдб рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ

  { "telegram": { "text": "      :", "reply_markup": { "keyboard": [ [ "", "", "", "", "" ] ], "one_time_keyboard": true, "resize_keyboard": true } } } 

рдФрд░ рдмрд┐рд▓реНрдЯ-рдЗрди рдХреАрдмреЛрд░реНрдб:


рдмрд┐рд▓реНрдЯ-рдЗрди рдХреАрдмреЛрд░реНрдб рдХреАрдмреЛрд░реНрдб

  { "telegram": { "text": "      :", "reply_markup": { "inline_keyboard": [ [{ "text": "", "callback_data": "" }], [{ "text": "", "callback_data": "" }], [{ "text": "", "callback_data": "" }], [{ "text": "", "callback_data": "" }], [{ "text": "", "callback_data": "" }] ] } } } 

рдореБрдЦреНрдп рдХреАрдмреЛрд░реНрдб рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдЧрд╛ рдЬреЛ рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрдмрдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХреАрдмреЛрд░реНрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред


рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдореБрдЦреНрдп рдХреАрдмреЛрд░реНрдб рд╕рдордп рдХреЗ рд╕рд╛рде рдЧрд╛рдпрдм рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдПрдкреАрдЖрдИ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЕрдиреБрд░реЛрдз рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдпреБрдХреНрддрд┐рдпрд╛рдВ рд╣реИрдВред


3) рдЕрдЧрд░ рдЖрдкрдХреЛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдФрд░ рдЧреВрдЧрд▓ рдЕрд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реНрдХ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 let intentRequest = request.body.originalDetectIntentRequest; if(intentRequest.source == 'google'){ let conv = agent.conv(); conv.ask('    ?'); agent.add(conv); } else { agent.add('    ?'); } 

4) рдПрдХ рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рднреЗрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


 { "telegram": { "text": "https://s0.vocaroo.com/media/download_temp/Vocaroo_s0bXjLT1pSXK.mp3" } } 

5) рдбрд╛рдпрд▓реЙрдЧрдлрд╝реНрд▓реЛ рдореЗрдВ рд╕рдВрджрд░реНрдн 20 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 20 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЙрд╕реА рд╕реНрдерд╛рди рд╕реЗ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред


рдЙрджрд╛рд╣рд░рдг


рд╣рдо рд╢реАрдШреНрд░ рд╣реА рдХреМрд╢рд▓ рд╕реНрд░реЛрдд рдХреЛрдб рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рд░рд┐рд▓реАрдЬ рд╣реЛрдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рджред


рдкреБрдирд╢реНрдЪред рд╣реИрдХрд╛рдереЙрди рдореЗрдВ рдХреНрдпрд╛ рд╣реБрдЖред


рдЫрд╡рд┐


2 рджрд┐рди рдХреА рд╡реНрдпрд╕реНрддрддрд╛ рдереАред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╢реИрдХреНрд╖рд┐рдХ рд╡реНрдпрд╛рдЦреНрдпрд╛рди рд╣реБрдП, рдФрд░ рджреЛрдкрд╣рд░ рдореЗрдВ рд╣рдордиреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред
рдЕрдЧрд▓реЗ рджрд┐рди рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдФрд░ рдкреНрд░рд╕реНрддреБрддрд┐рдпрд╛рдБ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдерд╛ред


Google рдХреЗ рд╕рднреА рд▓реЛрдЧреЛрдВ рдиреЗ рдЗрд╕ рд╕рдордп рд╣рдорд╛рд░реА рдорджрдж рдХреА рдФрд░ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХрд╛ рдЬрд╡рд╛рдм рджрд┐рдпрд╛ рдЬреЛ рдХрд╛рдо рдореЗрдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдмрд╣реБрдд рдХреБрдЫ рд╕реАрдЦрдиреЗ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рдЕрд╡рд╕рд░ рдерд╛ рдЬрдмрдХрд┐ рд▓реЛрд╣рд╛ рдЕрднреА рднреА рдЧрд░реНрдо рд╣реИред


рд╕рднреА рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ, Google рдХреЗ рдЖрдпреЛрдЬрдХреЛрдВ рдФрд░ рдЙрди рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╡реНрдпрд╛рдЦреНрдпрд╛рди рджрд┐рдпрд╛ рдФрд░ рд╣реИрдХрд╛рдереЙрди рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХреА!


рд╡реИрд╕реЗ, рд╣рдордиреЗ рджреВрд╕рд░рд╛ рд╕реНрдерд╛рди рд▓рд┐рдпрд╛ред


рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
shipa_o
raenardev
comradeguest


рдФрд░ рд╡реЙрдЗрд╕ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдПрдХ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреИрдЯ рднреА рд╣реИ:
https://t.me/conversational_interfaces_ru

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


All Articles