Apps Script для веб-хука - PullRequest
       72

Apps Script для веб-хука

0 голосов
/ 11 января 2019

Я смотрю, не создал ли кто-нибудь чат-бота в скрипте приложений Google для работы с веб-хоками для видеовстреч? У меня создан бот, но я не уверен, как ввести URL-адрес webhook в код бота, чтобы сообщение можно было развернуть в чате.

1 Ответ

0 голосов
/ 11 января 2019

Я не совсем создал то, что вы ищете, однако я считаю, что ответ, который вы ищете, можно найти здесь . По сути, есть событие, когда ваш бот входит в пространство. Когда это событие инициируется, вы можете добавить идентификатор пространства в список, где-то хранится (электронная таблица, PropertiesService и т. Д.)

После сохранения списка вы можете развернуть свое приложение как веб-приложение. Вы можете узнать больше о веб-приложениях здесь , но вам нужно знать две вещи: Google дает вам URL для отправки веб-запросов, а также пару событий, называемых doGet (когда кто-то делает запрос get) и doPost (когда кто-то делает запрос на публикацию). Вы можете создать функцию отправки сообщений и получить параметры при публикации вашего веб-приложения.

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

Ниже будет код, напрямую размещенный из API в первой ссылке.

// Example bot for Hangouts Chat that demonstrates bot-initiated messages
// by spamming the user every minute.
//
// This bot makes use of the Apps Script OAuth2 library at:
//     https://github.com/googlesamples/apps-script-oauth2
//
// Follow the instructions there to add the library to your script.

// When added to a space, we store the space's ID in ScriptProperties.
function onAddToSpace(e) {
  PropertiesService.getScriptProperties()
      .setProperty(e.space.name, '');
  return {
    'text': 'Hi! I\'ll post a message here every minute. ' +
            'Please remove me after testing or I\'ll keep spamming you!'
  };
}

// When removed from a space, we remove the space's ID from ScriptProperties.
function onRemoveFromSpace(e) {
  PropertiesService.getScriptProperties()
      .deleteProperty(e.space.name);
}

// Add a trigger that invokes this function every minute via the 
// "Edit > Current Project's Triggers" menu. When it runs, it will
// post in each space the bot was added to.
function onTrigger() {
  var spaceIds = PropertiesService.getScriptProperties()
      .getKeys();
  var message = { 'text': 'Hi! It\'s now ' + (new Date()) };
  for (var i = 0; i < spaceIds.length; ++i) {
    postMessage(spaceIds[i], message);
  }
}
var SCOPE = 'https://www.googleapis.com/auth/chat.bot';
// The values below are copied from the JSON file downloaded upon
// service account creation.
var SERVICE_ACCOUNT_PRIVATE_KEY = '-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE 
KEY-----\n';
var SERVICE_ACCOUNT_EMAIL = 'service-account@project-id.iam.gserviceaccount.com';

// Posts a message into the given space ID via the API, using
// service account authentication.
function postMessage(spaceId, message) {
  var service = OAuth2.createService('chat')
      .setTokenUrl('https://accounts.google.com/o/oauth2/token')
      .setPrivateKey(SERVICE_ACCOUNT_PRIVATE_KEY)
      .setClientId(SERVICE_ACCOUNT_EMAIL)
      .setPropertyStore(PropertiesService.getUserProperties())
      .setScope(SCOPE);
  if (!service.hasAccess()) {
   Logger.log('Authentication error: %s', service.getLastError());
    return;
  }
  var url = 'https://chat.googleapis.com/v1/' + spaceId + '/messages';
   UrlFetchApp.fetch(url, {
    method: 'post',
    headers: { 'Authorization': 'Bearer ' + service.getAccessToken() },
    contentType: 'application/json',
    payload: JSON.stringify(message),
  });
}
...