Google 聊天机器人 - 无需事件即可发送私信

Google Chat bot - Send private message WITHOUT event

我有一个在 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 对话,但可以通过检查机器人所在的空间向所有机器人联系人发送消息(因此不需要每个人都向机器人发送消息,只需一个消息是触发它所必需的)。

这是我如何使用它的示例:

//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
        }
    }
}

也许有一天这会对某人有所帮助。

目前无法让机器人开始对话。

我在 Google's Public Issue Tracker 上发现了这个问题。您只需转到那里并单击标题旁边的星标,即可获得有关该问题的更新并提高该问题的知名度。

bot send me message before很好奇bot是怎么每天给我发消息的。因此将有一种方法可以向特定用户发送机器人 DM 消息。