Скрипт Google Apps: бот AQI Slack

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

Вместо того, чтобы вручную обновлять свою команду каждый час, я использовал слабый бот, который каждый час получает AQI из Air Now API. Поэтому я решил поделиться тем, как я это сделал, и, возможно, если вы используете G Suite и Slack на своем рабочем месте, вы тоже можете их настроить.

Во-первых, я бы порекомендовал ознакомиться с этой статьей о том, как настроить slack-бота с помощью api.slack.com и Google Apps Script. Написано хорошо и попадает прямо в цель.

Как только вы сможете отправить свое первое сообщение с помощью Slack-бота на основе предыдущей статьи с использованием giphy API, вернитесь сюда, чтобы узнать, как настроить Slack-бота, который будет обновлять качество эфира для вашей команды.

Настройка учетной записи API Air Now

Перейдите на следующий веб-сайт и создайте бесплатную учетную запись. Когда вы зарегистрируетесь, вы сможете получить ключ API. Если вы нажмете Файл › Свойства проекта в файле скрипта вашего приложения. Вы можете установить для ключа API значение в свойствах вашего проекта.

Получить AQI

Во-первых, мы должны составить URL-адрес для получения некоторых данных. А веб-сайт API airnow упрощает эту задачу для разработчиков, потому что у них есть инструмент запросов, который сгенерирует для вас URL-адрес запроса, включая ваш ключ API в последнюю очередь.

Инструмент запроса делает получение URL-адреса запроса чрезвычайно простым, просто введите почтовый индекс и расстояние, на которое вы получите запрос, который предоставит вам некоторые данные, содержащие текущее качество воздуха. В верхней части файла сценария моего приложения я поместил этот URL-адрес в константу с именем AIR_NOW_BASE и добавил ключ API, используя свойство проекта, которое я установил.

//retrieve API Key from properties service
var AIR_NOW = PropertiesService
                   .getScriptProperties()
                   .getProperty('AIR_NOW');
// generate base url request for current conditions with in
//50 miles of the zip code 94103
var AIR_NOW_BASE = "http://www.airnowapi.org/aq/observation/zipCode/current/?format=application" +
 "/json&zipCode=94103&distance=50&API_KEY=" + AIR_NOW
function airQuality()
{
  var data
try {
var response = UrlFetchApp.fetch(AIR_NOW_BASE);
    data = JSON.parse(response)
} catch(error) {
return "error retrieving AQI"
    
    }
return data[1].AQI
}

Отлично, теперь у нас есть метод для получения текущего AQI. И если это не удастся, мы вернем сообщение об ошибке.

Отправить AQI в канал

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

Я создал метод с именем updateChannelAQI(), который собирает сообщение с небольшим форматированием и возвращает собственное сообщение в зависимости от того, где находится AQI.

function updateChannelAQI()
{
  var channel = "your_channel"
  var aqi = airQuality()
  var status = "Good"
 // depending on where the AQI - the status will be updated
switch(true)
  {
    case aqi < 51: status = "Green"; break;
    case aqi < 101: status = "Yellow"; break;
    case aqi < 151: status = "Orange"; break;
    case aqi < 201: status = "Red"; break;
    case aqi < 301: status = "Purple"; break;
    case aqi < 500: status = "Maroon"; break;
    default: status = "Over 500..."
      
      
  }
  
  var block = [
  {
   "type": "header",
   "text": {
    "type": "plain_text",
    "text": "AQI Update :airwatch: ",
    "emoji": true
   }
  },
  {
   "type": "divider"
  },
  {
   "type": "section",
   "text": {
    "type": "mrkdwn",
//throw in the aqi and the status in the return text
"text": "AQI currently at " + aqi + " (*"+ status +"*)"
   }
  },
        {
   "type": "divider"
  }
 ]
  
  var blocks = JSON.stringify(block)
    
  var payload = {token:SLACK_ACCESS_TOKEN, channel: channel, text:"",blocks: blocks};
  
  fetchLogSuccess(payload)
}
var POST_MESSAGE_ENDPOINT = 'https://slack.com/api/chat.postMessage';
function fetchLogSuccess(payload)
{
  try{
        var val = UrlFetchApp.fetch(POST_MESSAGE_ENDPOINT, {method: 'post', payload:payload});
        var result = JSON.parse(val.getContentText())
        
        if(result.ok)
        {
           console.log("success")
        } else {
          console.log(result.error)
        }
      } catch (e) {
         console.log("failed to send message to slack")
         console.log(e)
      }
}
/**

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

Метод fetchLogSuccess() отправляет сообщение боту Slack. Я разделил его в своем методе, поэтому, если я решу дать этому боту дополнительные функции, я не буду повторять код. Я могу просто передать ему сгенерированную полезную нагрузку.

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

Настройте триггер

Необходимость каждый час вручную возвращаться в редактор Apps Script, чтобы слабый бот отправил сообщение, лишила бы цели заставить бота работать самостоятельно. Поэтому для этого мы можем настроить триггер в скрипте приложений Google для ежечасного запуска метода updateChannelAQI().

Нажатие на кнопку, показанную выше, откроет окно, которое позволит вам увидеть триггеры для проекта. Нажмите кнопку «Добавить триггер» в правом нижнем углу страницы.

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

Теперь, если вы дошли до этого места и последовали за ним, поздравляем! Вы успешно настроили Slack-бота, который будет обновлять AQI в вашем Slack-канале каждый час. Это сэкономит вам и вашим товарищам по команде время от необходимости ежечасно собирать AQI. Не знаю, как вам, а мне не нравятся утомительные задачи, которые мы можем заставить делать за нас скрипты.

И здесь так много возможностей для улучшения. Может быть, вы хотите, чтобы сообщение отправлялось только тогда, когда AQI выше 150? Может быть, вы хотите отправить специальное сообщение определенным заинтересованным сторонам, когда AQI превысит 200? В зависимости от обстоятельств, которые вы хотите, вы можете написать некоторый код в Apps Script, чтобы добраться туда.