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 消息。
我有一个在 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 消息。