こんばんは
全然関係ないんだけれど、普段vimで作業していると、QiitaとかGoogleAppsScriptとかWebとかでもついつい:w連打しちゃうよね。
これってあるあるなのかな?
これまではGoogleChatのAPIをお試ししてきたね。
今まではちょこちょこお試しだったけれど、実際に使えるBOTにしていくよ。
作りたいBOTはこんな感じだよ。
ねこちゃんやわんちゃんやうさちゃんからHelpのDMがきたら、のいるチャットルームにスレッド分けされた状態で転送されて、
そのスレッドに返事をしたら、BOTからねこちゃんやわんちゃんやうさちゃんに返事をしてくれるようにしたいよ。
有り体にいっちゃうと問い合わせ受付してくれるBOTだね。
ステップとしてはこんな感じかな。
1.BOTにDMを送ったら、チャットルームへの転送がされる。 (
2.チャットルーム内でのユーザーごとのthread名を保持し、同じユーザーからのDMは同じスレッドに書き込まれる。
3.スレッドにから書き込みをしたら、対象のユーザーにDMが送られる。
4.(余力があれば)よくある質問集みたいな一覧を作ってBotが自動返答してくれる。
今日からは、**2.チャットルーム内でのユーザーごとのthread名を保持し、同じユーザーからのDMは同じスレッドに書き込まれる。 **をすすめていくよ。
GoogleSheetAPIのクイックスタートを動かしてみよう。
スレッド分けに必要な情報をGoogleSheetで管理することにするよ。
そのためには、GoogleSheeaAPIに詳しくならないといけないね。
まずはいつも通り公式のテンプレートを使って、APIを使えるところまでやってみよう。
Google Sheet API
https://developers.google.com/sheets/api
この中の、GoogleAppsScriptバージョンのクイックスタートを動かしてみるよ。
ほぼほぼ公式の通りなので、詳細は書かないけれど、が引っかかったところだけお伝えするね。
Step 1: Create the script
権限の関係なのか、用意されているSheetを参照することができなかったよ。マイドライブ内にコピーを作成し、指定しているspreadsheetIdを変更したよ。
Step 2: Turn on the Google Sheets API
特に問題なかったよ。
Step 3: Run the sample
実行したら「ReferenceError: 「Sheets」が定義されていません。 at logNamesAndMajors(コード:165)」というエラーが発生したよ。
公式のトラブルシューティングにも書いてあったけれど、GoogleAppsScript内でSheetを有効にしなければならないらしいよ。
該当scriptのリソース>Googleの拡張サービス..をクリック。
で解消したよ。
ソースをみてみると、
var values = Sheets.Spreadsheets.Values.get(spreadsheetId, rangeName).values;
の形式で、特定のスプレッドシートの特定の行の値をとってきているのがわかるね。
値の書き込みをしてみよう。
読み込みができたから、次は書き込みをしてみたいね。
ここを参考にするよ。
Appending values
https://developers.google.com/sheets/api/guides/values#appending_values
function insertDateToSheet() {
//挿入したいデータを書くよ。
var values = [
["relaxed:)", "Male", "1. Freshman", "CA","Art","Track & Field"]
];
// XXXXXXには書き込みたいスプレッドシートのIDをいれてね。URLのおしりだよ。
var spreadsheetId = 'XXXXXXXX';
var valueRange = Sheets.newRowData();
valueRange.values = values;
var appendRequest = Sheets.newAppendCellsRequest();
appendRequest.sheetId = spreadsheetId;
appendRequest.rows = [valueRange];
//新しい行を挿入したいシートの名前を設定するよ。
var range = 'test';
var result = Sheets.Spreadsheets.Values.append(valueRange, spreadsheetId,range , {
// ROW か USER_ENTEREDをセットするよ。 ROWだとValuesの値がそのまま、
USER_ENTEREDだと数式は数式として実行されるよ。
//Valuesで["Totals", "=SUM(B2:B4)", "=SUM(C2:C4)", "=MAX(D2:D4)"]とかセットしたい場合は、USER_ENTEREDにするよ。
valueInputOption: "ROW"
});
}
これを実行するよ、はいどーん。
追加されたね!
今日はここまで!
次回ははChatAPIと連携させて、Messageの情報をスプレッドシートで管理するようにするよ
## 参考にさせていただいたもの
Google Sheet API
は公式とサンプルコードが大好きだからね。ありがとう。