0

我正在创建一个谷歌环聊聊天机器人。我正在 Google Apps 脚本中构建机器人。bot 访问一些通常需要几秒钟的 web api,但是等待可能会让用户感到不安,因为他们没有意识到系统不仅仅是忽略它们。我想在结果出现之前显示一条消息,例如“请稍候”。但是该事件由 onMessage 触发,并且文本显示为 return 语句的一部分。有没有办法在 api 响应时显示即时消息,然后显示其余消息?

onMessage(event){

text="Please wait, processing...";
#send text to screen
response=UrlFetch(url, params);
return {"text":response['text']}
}
4

1 回答 1

0

GAS 包不支持插入消息。事实证明,您必须为此使用 Chat REST API。因此您已经设置了权限(我在http://ramblings.mcpher.com/Home/excelquirks/goa使用了服务帐户和 cgoa 包)

然后我创建了一个调用 API 的函数,并将调用放在顶部的 onMessage 事件中。这是功能:

function sendWait(event){
var packageName='Google_service_account'
var goa = cGoa.GoaApp.createGoa(packageName, PropertiesService.getScriptProperties()).execute();
  if (!goa.hasToken()) {
    throw 'no token retrieved';
} else {console.info('token retrieved')}; 
     var endpoint='https://chat.googleapis.com/v1/'+event.space.name+"/messages"
    console.info('endpoint=%s',endpoint);
    var threadId=event.message.thread
    var response={'text':'Processing request...'}
    response.thread=threadId
    console.info('response=%s',response);
   var options = {
     method: "post",
     contentType : "application/json" ,
     muteHttpExceptions : true,
     payload: JSON.stringify(response),
     headers: {
       "Authorization": "Bearer " + goa.getToken(),
     }
   }; 
  var aresponse=UrlFetchApp.fetch(endpoint, options)
于 2019-04-29T15:57:19.703 回答