-1

我想看看是否有人在谷歌应用脚​​本中创建了一个聊天机器人来处理用于环聊的 webhook?我创建了一个机器人,但我不确定如何将 webhook url 输入到机器人代码中,以便可以将消息部署到聊天室中。

4

1 回答 1

1

我还没有完全创建您正在寻找的东西,但是我相信您正在寻找的答案可以在这里找到。基本上,只要您的机器人进入空间,就会发生一个事件。当触发该事件时,您可以将空间 ID 添加到存储在某处的列表中。(电子表格、PropertiesService 等)

存储列表后,您可以将应用程序部署为 Web 应用程序。您可以在此处阅读有关 Web 应用程序的更多信息,但您需要知道两件事是 google 为您提供了一个用于发出 Web 请求的 URL,以及称为 doGet(当有人发出 get 请求时)和 doPost(当有人发出发布请求)。您可以创建函数 do post 并在您的 web 应用程序发布到时获取参数。

最后,在收到帖子后,您可以对 google api 进行 fetch 调用,通过对每个 ID 进行 api fetch 调用,将您刚刚从请求中收到的消息发布到您所在的所有空间。

下面将是直接从第一个链接中的 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),
  });
}
于 2019-01-11T17:44:50.243 回答