Создание бота Google Hangout с помощью Express & Node.js

  1. Контур
  2. Отвечая на пинги
  3. Сообщения, инициируемые ботом
  4. развертывание
  5. Около Энди Юнг

Требуемое время: 20 минут.
Технологии: Express, Node.js, JavaScript.
Предпосылки:

  • Базовые знания Express, Node.js и JavaScript.
  • Node.js и npm установлены.

Из этого туториала вы узнаете, как создать бота, который будет отвечать на пинги (например, @ <имя-бота>) и отправлять сообщения в чат-комнату. На высоком уровне бот будет работать на экспресс-сервере и получать пинг через конечную точку HTTP. Ответы на эхо-запросы будут отправляться синхронно через полезную нагрузку в ответе HTTP, в то время как сообщения, инициируемые ботами, будут отправляться асинхронно с использованием API чата Google Hangout.

Контур
  1. Настройка среды.
  2. Заставь бота отвечать на пинги.
  3. Отправляйте сообщения, инициированные ботом.
  4. Развертывание.
Настройка среды

Создайте новый проект с файлом app.js.
Откройте командную строку / терминал и перейдите в каталог вашего проекта. Запустите 'npm init' и нажимайте ввод до тех пор, пока не будет создан package.json. Далее установите следующие зависимости:

  • экспресс: npm установить экспресс --save
  • body-parser: npm установить body-parser --save
  • googleapis: npm установить googleapis --save
  • unirest: npm установить unirest --save

В 'app.js' давайте настроим наш сервер:

const express = require ('express'); const bodyParser = require ('body-parser'); const {google} = require ('googleapis'); const app = express (); app.use (bodyParser.urlencoded ({extended: false})); app.use (bodyParser.json ()); app.listen (8100, () => {console.log ('Приложение прослушивает порт 8100.');});

Запустив 'node app.js', вы создадите локальный сервер на порту 8100.

Отвечая на пинги

Бот будет отвечать на запросы через конечную точку HTTP POST. Создать один с экспресс:

app.post ('/', (req, res) => {console.log ('кто-то пинговал @ <имя-бота>'); if (req.body.type === 'MESSAGE') {return res. json ({текст: 'спать ...'});}});

Бот ответит текстом: «спит…».

Синхронный ответ на сообщения просто требует от нас возврата ответа в Google. Недостатком этого является 30-секундное ограничение по времени, прежде чем Google больше не принимает ответы на запрос. Например, это было бы проблемой, если бы вы создавали какое-то приложение для напоминания; бот не сможет синхронно отвечать через 30 секунд. Вот тут и приходят асинхронные ответы.

Сообщения, инициируемые ботом

Чтобы показать это, мы будем публиковать сообщения нашего бота в чате каждые 1 минуту.

Для отправки асинхронных сообщений в Google API требуется служебная учетная запись для проверки подлинности. После проверки подлинности мы можем сделать запрос POST на URL API Google, который создаст сообщение.

Итак, сначала создайте учетную запись службы Google, следуя этим меры , Возьмите загруженный файл JSON и поместите его в корневой каталог вашего проекта. Здесь мы переименовали его в googlekeys.json:

const gkeys = require ("./ googlekeys.json");

Мы будем делать POST-запросы, используя Unirest:

const unirest = require ('unirest');

Теперь создайте JWT, который будет использоваться в нашем запросе POST:

function getJWT () {вернуть новое обещание ((разрешить, отклонить) => {let jwtClient = new google.auth.JWT (gkeys.client_email, null, gkeys.private_key, ['https://www.googleapis.com/auth /chat.bot ']); jwtClient.authorize ((err, tokens) => {if (err) {console.log (' Ошибка создания JWT видеовстречи '); отклонить (err);} else {resolution (tokens.access_token );}});}); }

Вот наша функция для размещения сообщений. Номер ROOM-ID можно найти в URL-адресе на странице чата видеовстречи, а именно: https://chat.google.com/u/0/room/ <ROOM-ID>.

function postMessage (count) {вернуть новое обещание ((разрешить, отклонить) => {getJWT (). then ((token) => {unirest.post ('https://chat.googleapis.com/v1/spaces/' + <ROOM-ID> + '/ messages') .headers ({"Content-Type": "application / json", "Authorization": "Bearer" + token}) .send (JSON.stringify ({'text' : 'Здравствуйте! Это номер сообщения' + count,})) .end ((res) => {resol ();});}). Catch ((err) => {reject (err);}); }); }

Наконец, добавьте код, который будет повторять наш пост каждую минуту.

const timer = require ('timers'); app.listen (8100, () => {console.log ('Приложение прослушивает порт 8100.'); let count = 0; timer.setInterval (() => {postMessage (count + = 1);}, 60000 );});

развертывание

Предоставьте доступ к вашему локальному серверу (мы использовали ngrok ).

Войти в консоль разработчика , Создайте новый проект и включите API Hangout Chat. Под конфигурацией установите:

  • статус: живой
  • имя бота (это то, как вы будете добавлять и пинговать бота)
  • аватар
  • описание
  • функциональность: номера
  • настройки подключения - URL-адрес бота: <ваш HTTPS-адрес ngrok>
  • разрешение: все в вашем домене

Перезагрузите ваш локальный сервер, и все! Убедитесь, что ваш бот добавлен в чат, и вы можете пропинговать его, отправив @ <имя-бота>. Бот также будет публиковать сообщения в чате каждую минуту.

Существует много различных способов дальнейшего расширения этого бота, таких как установка напоминаний / уведомлений, создание списков дел, отображение журналов сервера и взаимодействие с API.

Существует много различных способов дальнейшего расширения этого бота, таких как установка напоминаний / уведомлений, создание списков дел, отображение журналов сервера и взаимодействие с API

Около Энди Юнг

Энди - разработчик программного обеспечения в LoginRadius, который любит все, что связано с технологиями. Его основные интересы в веб-приложениях и больших данных. В свободное время он любит играть и смотреть баскетбол, бегать и лазать в помещении.