Slackのチャネル作成+ユーザー(&グループ)複数をまとめて招待できるコマンドをGAS+typescriptで作った
typescript 4.2.3
Slackで新チャンネルを作るときに、ユーザーもまとめて招待できるコマンドを作成してみた。 チャンネル名はある程度固定で使う事を想定した。
また(だいぶ前から) claspがtypescriptをサポートしていたので書いてみた
・・・が割とコードが膨大になったので、結局webpackしてアップロードするようにしたので、あまりtypescriptのサポートは関係なくなってしまった
最初はペラっと1,2ファイルのつもりだったのをガリガリ拡張したので、ちょっと雑になってしまった
コードはgithubを見てもらうとして、作っている途中に引っかかったところを書いてみる。
Slack
- Q: slash command打ったら
dispatch_failed
と出る- A: commandに設定したURLが200 OKを返してない
- A: curlなどで確認してみる。3xxでもNG
- A: AppsScriptでデプロイを新しく作り直してみる
- Q: slash command打ったら
timeout
が返ってくる- A: 3000ms以上だとそうなる。slack仕様。
- A: ロジックを工夫する。api何度も叩くようなのは非同期実行する
- 今回はユーザーデータ、グループデータはtriggerで別に取得するようにした
- 多分GASだと非同期にしてもrootなメソッド(これだとdoPost)は終わらないぽいので非同期できない
- Q: ユーザーグループ名がリクエストボディからうまく取得できない
- A: グループは
<!subteam^S0AAAAA0A|@usergroup_name>
のようなテキストで入ってくるので、パースする必要がある
- A: グループは
GAS
- Q: clasp createで作ったAppsScriptだとGCPプロジェクトを変更できない事がある
- A: GAS側で新規プロジェクトで作る
- Q: clasp pushでエラーになる
- A: エラーメッセージにある説明にだいたいURL書いていてそこにアクセスすれば解決する
- A: https://script.google.com/home/usersettingsの設定がOFFだと権限で弾かれる
- Q: doPostのログが確認できない
- A: GCPプロジェクトと紐づけて、ロギングを見る必要がある
- A: ロギングはテストのまま使うにはテストユーザーを登録する必要がある
- Q: GASからHTTPリクエストできない
- A: http requestはUrlFetchAppを使う
- scope
https://www.googleapis.com/auth/script.external_request
を許可する必要がある
- scope
- A: webpackすれば他のnpmも使えるかもしれないが未検証
- A: http requestはUrlFetchAppを使う
- Q: GAS実行時の権限設定でエラー表示になる
- A: GCPプロジェクトのOAuth同意画面で公開ステータスが
本番環境
になっている必要がある - A:
テスト
ならテストユーザーに登録する
- A: GCPプロジェクトのOAuth同意画面で公開ステータスが
GAS written with typescript
- Q:
import * as X from './xxx'
エイリアスが読めない- A: GASではすべてのクラスがフラットな状態で存在するので実際の名前を全部指定する必要がある
- A: また同じ名前のexportは競合するので使えない
- A: webpackする
- Q: eslint, tsc, babel, webpack全部通るのにアップロードするとエラーになる
- A: ときどきある。諦めて書きかえる
- ts2gasをきちんと見ればわかるかも
- A: ときどきある。諦めて書きかえる