おはよう、4連休だね
この4日間でどれだけBotが可愛くなるか楽しみだよ。頑張るよ!
前回はGoogleChatのspaces.getを叩いて結果を取得するところまで進めたね。
今回は、spaces.messages.createで、メッセージを送るようにするよ。
spaces.messages.createについて学ぼう
まずは、パラメーターとリクエストボディをみてみるね。
HTTPリクエストはこんな感じ。
XXXXXはスペースのコードが入るよ。(ChatをブラウザでみたときのURLのおしりがそうだよ。)
https://chat.googleapis.com/v1/XXXXXXX/messages
リクエストボディはMessage形式で、前々回のonMessage(event)関数を実施したときに取得できた、event.messageと同じだよ。
ただし、こちらで設定できる箇所は限られてくるみたいだったよ。
その辺りは、お試ししながら確認しましょう。
詳細は公式をチェックしてね。
https://developers.google.com/hangouts/chat/reference/rest/v1/spaces.messages#Message
spaces.messages.createでメッセージを送ろう
/**↓ここは前回と同じだよ**/
var jsonKey = JSON.parse(PropertiesService.getScriptProperties().getProperty("jsonKey"));
// GoogleChatの認証をせってい。
var serverToken = new GSApp.init(jsonKey.private_key, ["https://www.googleapis.com/auth/chat.bot"], jsonKey.client_email);
//トークンを取得するユーザを設定して、トークンを取得
var tokens = serverToken.addUser(jsonKey.client_email).requestToken().getTokens();
/**↑ここは前回と同じだよ**/
//プレーンテキストメッセージとして送るよ。
var message ={"text" :"ここに入れた言葉が送られるよ"};
// XXXXXXXはメッセージを送りたいスペースのリソース名だよ。
var url = "https://chat.googleapis.com/v1/spaces/XXXXXXX/messages/";
options = {
"method" : "Post", // 前回はGetだったけれど今回はPOSTで送るよ。
"payload" :JSON.stringify(message),
"muteHttpExceptions": true,
"headers": {
"Authorization": 'Bearer ' + tokens[jsonKey.client_email].token,
"Content-Type" : 'application/json; charset=UTF-8' //おっちょこちょいだからこれを忘れて、最初動かなかったよ。
}
}
var res = UrlFetchApp.fetch(url,options);
console.log(res;
これで実行すると、はいどーん!
わー、Botが喋ったよー。可愛いやつだね。
もうちょっと踏み込んで・・スレッドを統一しよう
こんな可愛いBotなんだけど、何回も送っているとスレッドが乱立するよ。
ちょっとうざいよね。
戻り値をみてみると、送ったメッセージの情報が乗っているよ。
その中にスレッドのリソース名があるから、それを使って同じスレッドに送ってみよう。
修正点はこんな感じだよ。
threadに情報を持たせるよ。
var message ={
"text" : text,
"thread": {
"name": XXXXX //オレンジで囲った一文をまるまるコピーするよ
}
};
はいどーん。
いい感じだね。
onMessage()と組み合わせてみよう
前々回にやったonMessageと組み合わせて、取得したメッセージを他のチャットルームに転送するようにしてみよう。
function onMessage(event) {
var name = name = event.user.displayName;
var message = name + " said \"" + event.message.text + "\"";
var spaceId = "XXXXXX";
/**上記メッセージ送信部分を関数にしているよ。やっていることは丸々いっしょだよ。**/
sendMessage(message,spaceId,"");
return { "text": "Forwarded the message (" + message + ")" };
}
いい感じだね。
今日はここまで! 次回はもっとBOTを賢くするよ!
参考にさせていただいたもの
GoogleChatAPI
何度でも言うよ、公式さんありがとう