环聊聊天机器人-发送不带事件的私人消息

时间:2020-07-01 10:15:51

标签: google-apps-script chatbot google-workspace hangout hangouts-chat

我有一个在PM中工作的机器人,我可以与它对话并使其毫无问题地完成我的任务,但是我没有找到如何使它向特定的其他人发送消息的方法。

我希望它可以将私人消息发送到特定的用户列表,而无需这些用户的任何交互。唯一的交互是来自我的订单,要求它向其他人发送消息。

我发现了很多有关机器人响应并通过Webhook回复消息的文档和帖子,但是关于机器人直接将PM发送给某人的信息却没有。

所以代替这个:

function onMessage(event) {
    return {"text": "MSG = " + message };
}

我正在寻找可以指定用户ID 用户名的东西:

function sendMessage(ID/name) {
    return {"text": "MSG = " + message, "ID": ID}; //not accurate example
}
sendMessage("User_ID");

如果您对执行此操作有任何想法或信息,将不胜感激!

更新: 尚无法与某人发起DM对话,但可以通过检查bot所在的空间来向所有bot联系人发送消息(因此,无需每个人都向bot发送消息。消息是触发它所必需的。)

以下是我如何使用它的示例:

//Configure the chatbot service
function get_chatbot_service() {
  return OAuth2.createService(BOT_NAME)
  .setTokenUrl('https://accounts.google.com/o/oauth2/token') // Set the endpoint URL.
  .setPrivateKey(PRIVATE_KEY)                                // Set the private key.
  .setIssuer(CLIENT_EMAIL)                                   // Set the issuer.
  .setPropertyStore(PropertiesService.getScriptProperties()) // Set the property store where authorized tokens should be persisted.
  .setScope('https://www.googleapis.com/auth/chat.bot');     // Set the scope.
}

//Return all the spaces (DM and rooms) the bot belong to
function get_spaces() {
  var service  = get_chatbot_service();
  var url      = 'https://chat.googleapis.com/v1/spaces';
  var response = UrlFetchApp.fetch(url, { headers: { Authorization: 'Bearer ' + service.getAccessToken() }});
  var rep      = JSON.parse(response.getContentText());
  return (rep.spaces)
}

//Get the informations and send the message to every contacts the bot have been added to
function send_message() {
    var service = get_chatbot_service();
    var spaces  = get_spaces();
    var msg     = "Test message";
    
    for (var i = 0; i < spaces.length; i++) {
        var space  = spaces[i];
        if (space.type == "DM") {    //Check if we are in DM
            var url = 'https://chat.googleapis.com/v1/'+ space.name +'/messages'; //Specify the URL with space name
            var options = {
                method : 'POST',
                contentType: 'application/json',
                headers: { Authorization: 'Bearer ' + service.getAccessToken() },
                payload : JSON.stringify({ text: msg })     //Add your message
            }
            UrlFetchApp.fetch(url, options);   //Send the message
        }
    }
}

也许这会帮助某人一天。

1 个答案:

答案 0 :(得分:2)

当前没有任何方法可以使机器人开始对话。

我在Google's Public Issue Tracker上发现了此问题。您只需要去那里,然后单击标题旁边的星号,即可获取有关该问题的最新信息,并使该问题更具可见性。