Как разработать чат-бот с Node.js

  1. Дальнейшее чтение на SmashingMag:
  2. Что нужно знать, чтобы построить чат-бот?
  3. Как создать бота Facebook Messenger
  4. Познакомьтесь с Claudia Bot Builder
  5. Давайте построим бота Space Explorer
  6. Интегрировать API НАСА
  7. Результат
  8. Заключительные заметки

В последние несколько месяцев чат-боты стали очень популярными благодаря Slack, Telegram и Facebook Messenger. Но идея чат-бота вовсе не нова. Интерфейс чат-бота упоминается в знаменитом тесте Тьюринга в 1950 году. Затем была Элиза в 1966 году, симуляция роджерского психотерапевта и ранний пример примитивной обработки естественного языка. После этого в 1972 году появился Парри, симулятор человека с параноидальной шизофренией (и, конечно же, Парри встретил Элизу).

В последние несколько месяцев чат-боты стали очень популярными благодаря Slack, Telegram и Facebook Messenger. Но идея чат-бота вовсе не нова.

Интерфейс чат-бота упоминается в знаменитом тесте Тьюринга в 1950 году. Затем была Элиза в 1966 году, симуляция роджерского психотерапевта и ранний пример примитивной обработки естественного языка. После этого в 1972 году появился Парри, симуляция человека с параноидальной шизофренией (и, конечно же, Парри встретил Элизу ).

В 1983 году вышла книга под названием «Полицейская борода полицейского наполовину сконструирована» , созданная Racter, компьютерной программой для искусственного интеллекта, которая генерировала случайную англоязычную прозу, позже выпущенную как чат-бот.

Дальнейшее чтение на SmashingMag:

Одной из самых известных была Alice (искусственная языковая компьютерная среда), выпущенная в 1995 году. Она не смогла пройти тест Тьюринга, но выиграла Приз Лебнера три раза. В 2005 и 2006 годах один и тот же приз получили два персонажа-робота из Jabberwacky.

А в 2014 году Slackbot снова сделал чат-ботов популярными. В 2015 году Telegram, а затем Facebook Messenger выпустили поддержку чат-ботов; затем, в 2016 году Skype сделал то же самое, и Apple, и некоторые другие компании объявили еще больше о платформах для чат-ботов.

В последние несколько месяцев чат-боты стали очень популярными благодаря Slack, Telegram и Facebook Messenger

(Образ: Акции ) ( Большой предварительный просмотр )

Что нужно знать, чтобы построить чат-бот?

Ответ на это в основном зависит от того, что вы хотите построить, конечно.

В большинстве случаев вы можете создать чат-бота, не зная об искусственном интеллекте (ИИ), либо избегая его полностью, либо используя некоторые существующие библиотеки для базового ИИ.

То же самое касается обработки естественного языка (НЛП); это важнее, чем AI, но вы можете создать чат-бота, используя библиотеку NLP или, для некоторых платформ, просто используя кнопки и элементы пользовательского интерфейса вместо обработки текста.

И, наконец, вам даже нужно знать программирование? Есть много визуальных сборщиков ботов, так что, вероятно, нет. Но это может быть полезно.

Как создать бота Facebook Messenger

Это статья о создании чат-ботов, так что давайте, наконец, углубимся в это. Давайте создадим простого бота Facebook Messenger.

Мы будем использовать Node.js, но вы можете создать чат-бот с любым языком программирования, который позволит вам создавать веб-API.

Почему Node.js? Потому что он идеально подходит для чат-ботов: вы можете быстро создать простой API с помощью hapi.js, Express и т. Д .; поддерживает сообщения в реальном времени (RTM) для ботов Slack RTM; и это легко учиться (по крайней мере, достаточно легко, чтобы построить простой чат-бот).

У Facebook уже есть примерный чат-бот, написанный на Node.js, доступно на GitHub , Если вы проверите код, то увидите, что он использует платформу Express и имеет три веб-хука (для проверки, аутентификации и получения сообщений). Вы также увидите, что он отправляет ответы с помощью модуля запросов Node.js.

Звучит просто?

Это. Но этот полный пример бота имеет 839 строк кода. Это немного, и вам, вероятно, понадобится только половина этого, но это все еще слишком много стандартного кода для начала.

Что если я скажу вам, что мы можем получить тот же результат всего с пятью строками JavaScript?

var botBuilder = require ('claudia-bot-builder'); module.exports = botBuilder (function (request) {return 'Спасибо за отправку' + request.text;});

Или даже меньше, если вы используете ECMAScript 6:

const botBuilder = require ('claudia-bot-builder'); module.exports = botBuilder (request => `Спасибо за отправку $ {request.text}`);

Познакомьтесь с Claudia Bot Builder

Claudia Bot Builder помогает разработчикам создавать чат-боты для Facebook Messenger, Telegram, Skype и Slack и развертывать их на Amazon Web Services (AWS) Lambda и API Gateway за считанные минуты.

Основная идея проекта заключается в удалении всего стандартного кода и общих инфраструктурных задач, чтобы вы могли сосредоточиться на написании действительно важной части бота - вашего рабочего процесса. Все остальное обрабатывается Claudia Bot Builder.

Почему AWS Lambda? Идеально подходит для чат-ботов: создать простой API легко; он отвечает намного быстрее на первый запрос, чем бесплатный экземпляр Heroku; и это действительно дешево. Первый миллион запросов каждый месяц бесплатен, а следующий миллион запросов стоит всего $ 0,20!

Вот как легко построить бота Facebook Messenger с помощью Claudia Bot Builder:

Давайте построим бота Space Explorer

Space Explorer - простой чат-бот Messenger, использующий API NASA для получения данных и изображений о космосе.

Прежде чем мы начнем, создайте страницу и приложение Facebook и добавьте интеграцию с Messenger, как описано в разделе «Facebook». Начиная " руководство.

Затем создайте файл с именем bot.js со следующим содержимым:

const botBuilder = require ('claudia-bot-builder'); module.exports = botBuilder (request => `Здравствуйте, бот из исследователя космоса! Ваш запрос был: $ {request.text}`);

Установите эти зависимости:

npm init; npm установить claudia-bot-builder -S; npm установить клаву -g;
Легко создавайте чат-ботов с помощью Claudia Bot Builder. Создайте лямбда-функцию и следуйте инструкциям на видео выше, чтобы подключить ее к вашему приложению Facebook: claudia create --region us-east-1 --api-module bot --configure-fb -Бот Вот и все! Вы создали свой первый чат-бот для Facebook Messenger. Если вы отправите сообщение на свою страницу, ваш бот ответит. Но ответ слишком прост. Давайте добавим что-то более интересное!

Интегрировать API НАСА

Прежде чем продолжить, посетите API-портал НАСА и получить ключ API. Затем добавьте свой ключ API в качестве переменной этапа nasaApiKey в API Gateway. Это можно сделать с помощью пользовательского интерфейса или с помощью следующей команды: aws apigateway create-deploy \ --rest-api-id API_ID --stage-name latest \ --variables nasaApiKey = YOUR_NASA_API_KEY Здесь API_ID - это ваш идентификатор API из Файл claudia.json, который был автоматически сгенерирован на предыдущем шаге. Давайте добавим лучший ответ к текстовым сообщениям. У Claudia Bot Builder есть простой конструктор для сообщений шаблона Facebook Messenger ( документация есть на GitHub ). const botBuilder = require ('claudia-bot-builder'); const fbTemplate = botBuilder.fbTemplate; const rp = require ('минимальный запрос-обещание'); module.exports = botBuilder ((request, originalApiRequest) => {// Если запрос не является обратной передачей if (! request.postback) // Мы получим некоторую базовую информацию о пользователе return rp.get (`https: // graph.facebook.com/v2.6 / $ {request.sender}? fields = first_name & access_token = $ {originalApiRequest.env.facebookAccessToken} `) .then (response => {постоянный пользователь = JSON.parse (response.body) / / Затем давайте отправим два текстовых сообщения и один общий шаблон с тремя элементами / пузыри возврата [`Hello, $ {user.first_name}. Добро пожаловать в Space Explorer! Готовы начать путешествие в космосе?`, 'Что я могу сделать для вас? егодня? », вернуть новый fbTemplate.generic () .addBubble (« Астрономическая картина дня НАСА »,« Значок спутника от parkjisun из проекта существительных ») .addImage (« https://raw.githubusercontent.com/stojanovic/ » space-explorer-bot / master / assets / images / apod.png ') .addButton (' Показать ',' SHOW_APOD ') .addButton (' Что такое APOD? ',' ABOUT_APOD ') .addButton (' Веб-сайт ',' http://apod.nasa.gov/apod/ ') .addBubble (`Фотографии с роверов НАСА на Mars`, «Значок Curiosity Rover», созданный Оливиу Стояном из проекта «Существительное») .addImage ('https://raw.githubusercontent.com/stojanovic/space-explorer-bot/master/assets/images/mars-rover.png' ) .addButton («Curiosity», «CURIOSITY_IMAGES») .addButton («Opportunity», «OPPORTUNITY_IMAGES») .addButton («Spirit», «SPIRIT_IMAGES»). из проекта «Существительное») .addImage («https://raw.githubusercontent.com/stojanovic/space-explorer-bot/master/assets/images/about.png») .addButton («О боте», «О КОМПАНИИ» ') .addButton (' Кредиты ',' КРЕДИТЫ ') .addButton (' Сообщить о проблеме ',' https://github.com/stojanovic/space-explorer-bot/issues ') .get (); ]; }); } Теперь у нашего бота хороший приветственный ответ: Прежде чем продолжить, посетите   API-портал НАСА   и получить ключ API ( Большой предварительный просмотр ) Намного лучше! Далее мы хотим обработать постбэки. Давайте начнем с астрономической картины дня НАСА: // В случае обратной передачи 'SHOW_APOD', мы свяжемся с API НАСА и получим фотографию дня. if (request.text === 'SHOW_APOD') возвращает rp (`https://api.nasa.gov/planetary/apod?api_key=$ {originalApiRequest.env.nasaApiKey}`) .then (response => {const APOD = JSON.parse (response.body) return [`Астрономическая картина дня НАСА для $ {APOD.date}`, `" $ {APOD.title} ", © $ {APOD.copyright}`, новый fbTemplate. image (APOD.url) .get (), APOD.explanation, новый fbTemplate.button («Дополнительные действия:») .addButton («Загрузить HD», APOD.hdurl) .addButton («Посетить веб-сайт», «http: / /apod.nasa.gov/apod/ ') .addButton (' Вернуться к началу ',' MAIN_MENU ') .get ()]}); А вот марсоходы на Марсе (Curiosity, Opportunity и Spirit): // Общая функция вызова API getRoverPhotos (rover, sol, nasaApiKey) {// Если sol (день Марса) не определен, возьмите случайный. if (! sol) sol = (parseInt (Math.random () * 9) + 1) * 100; // Связаться с API return rp (`http://api.nasa.gov/mars-photos/api/v1/rovers/$ {rover} / photos? Sol = $ {sol} & api_key = $ {nasaApiKey}`) .then (response => {let rawBody = response.body; let roverInfo = JSON.parse ('' + rawBody); // Создать универсальный шаблон, содержащий до 10 фотографий. let photos = roverInfo.photos.slice (0, 10 ); let roverImages = new fbTemplate.generic (); photos.forEach (photo => {return roverImages.addBubble (photo.rover.name, 'At' + photo.earth_date + '(sol' + photo.sol + ') , используя '+ photo.camera.full_name) .addImage (photo.img_src) .addButton (' Download ', photo.img_src)}); // Отправить сообщение. return [`$ {roverInfo.photos [0] .rover .name} rover`, `Дата посадки: $ {roverInfo.photos [0] .rover.landing_date} \ nВсего фотографии: $ {roverInfo.photos [0] .rover.total_photos}`, roverImages.get (), new fbTemplate .button ('Другие действия:') .addButton ('Показать новые фотографии', `ФОТО _ $ {rover} _ $ {roverInfo.photos [0] .rover.max_sol}`) .addButton ('Посетить Википедию', `https : //en.wikipedia.org/wiki/$ {ровера} _ (ровер) `) .addButton («Вернуться к началу», «MAIN_MENU») .get ()]; }) .catch (err => {// Если в выбранном золе нет фотографий, возьмите фотографии из sol 1000. console.log (err); return getRoverPhotos (rover, 1000, nasaApiKey);}); } // Любопытные фотографии if (request.text === 'CURIOSITY_IMAGES') return getRoverPhotos ('curiosity', null, originalApiRequest.env.nasaApiKey); // Фотографии возможностей if (request.text === 'OPPORTUNITY_IMAGES') return getRoverPhotos ('option', null, originalApiRequest.env.nasaApiKey); // Духовные фотографии if (request.text === 'SPIRIT_IMAGES') return getRoverPhotos ('spirit', null, originalApiRequest.env.nasaApiKey); // передаем фотографии по sol (день Марса) if (request.text.indexOf ('PHOTOS_') === 0) {const args = request.text.split ('_') return getRoverPhotos (args [1], args [2], originalApiRequest.env.nasaApiKey); } Наконец, добавьте немного статического контента в конец: // Об астрономической картине дня if (request.text === 'ABOUT_APOD') return [`Астрономическая картина дня - один из самых популярных веб-сайтов НАСА. На самом деле, этот сайт является одним из самых популярных сайтов во всех федеральных агентствах. Он пользуется популярностью в видео Джастина Бибера. «Каждый день публикуется новое изображение или фотография нашей удивительной вселенной вместе с кратким объяснением, написанным профессиональным астрономом», новый fbTemplate.button («Другие действия: ') .addButton (' Показать фотографию ',' SHOW_APOD ') .addButton (' Посетить веб-сайт ',' http://apod.nasa.gov/apod/ ') .addButton (' Вернуться к началу ',' MAIN_MENU ') .получить() ]; // О боте if (request.text === 'ABOUT') return [`Space Explorer - простой чат-бот Messenger, использующий API NASA для получения данных и изображений о пространстве`,` Он создан для развлечения, а также как витрина для Claudia Bot Builder, библиотека node.js для создания чат-ботов для различных платформ и их развертывания на AWS Lambda`, новый fbTemplate.button ('More actions:') .addButton ('Claudia Bot Builder', 'https: / /github.com/claudiajs/claudia-bot-builder ') .addButton (' Исходный код ',' https://github.com/stojanovic/space-explorer-bot ') .get ()]; // Наконец, кредиты if (request.text === 'CREDITS') return ['Клаудиа Бот Билдер был создан Гойко Аджичем, Александаром Симовичем и Слободаном Стояновичем', 'Иконки, используемые для бота, взяты из проекта существительного', ' - Значок ракеты от Misirlou, \ n- Значок спутника от parkjisun, \ n- Значок Curiosity Rover от Оливиу Стояна, \ n- Значок монстра от Пауло Са Феррейры ',' Этот бот был создан командой Claudia Bot Builder ', новый fbTemplate. button ('Дополнительные действия:') .addButton ('Claudia Bot Builder', 'https://github.com/claudiajs/claudia-bot-builder') .addButton ('Проект существительного', 'https: // thenounproject .com ') .addButton (' Исходный код ',' https://github.com/stojanovic/space-explorer-bot ') .get ()];

Результат

После незначительного рефакторинга наш код должен выглядеть примерно так: источник на GitHub , И вот как работает наш бот: Вы можете попробовать его вживую на своей странице или на Страница робота Space Explorer на Facebook Messenger. После незначительного рефакторинга наш код должен выглядеть примерно так:   источник на GitHub   ,  И вот как работает наш бот: Вы можете попробовать его вживую на своей странице или на   Страница робота Space Explorer   на Facebook Messenger Это оно! Вы успешно создали свой первый чат-бот, используя Клаудия Бот Строитель , Это было легко, не так ли? Теперь иди и создавай больше классных чат-ботов.

Заключительные заметки

Я выбрал Facebook Messenger в качестве отправной точки, потому что большинство из нас знакомы с ним. Но мы выбрали Slack для нашего первого бота, потому что вся наша команда использует Slack ежедневно. Итак, мы решили построить простой командный отпуск-трекер бот непосредственно в Slack с помощью Claudia Bot Builder, Node.js, MariaDB и AWS Lambda. В зависимости от вашей идеи, целевого рынка и платформ, с которыми вы наиболее знакомы, вы можете начать с любой другой платформы, поддерживающей чат-ботов. Посетить Клаудиа веб-сайт, чтобы узнать, как разрабатывать и развертывать базовые микросервисы и API AWS Lambda. И дайте нам знать, если вы построите что-нибудь классное с ним. Большое спасибо Лав Црнобрня, Марко Кажич, Горан Гайич, Боян Матич и Вук Николич за помощь и отзывы о статье.

И, наконец, вам даже нужно знать программирование?
Js?
Звучит просто?
Что если я скажу вам, что мы можем получить тот же результат всего с пятью строками JavaScript?
Почему AWS Lambda?
Sender}?
Готовы начать путешествие в космосе?
Что я могу сделать для вас?
?егодня?
Что такое APOD?