🕌

技術書典の購入通知をスプレッドシートで管理+Slackに送る

2023/11/07に公開

はじめに

来る技術書典15の開催に向けて、みなさんの進捗はいかがですか?
https://techbookfest.org/event/tbf15

私は過去一ひどい状態で正直聞かないでくださいというレベルです。
それでも申し込んだ以上はなんとか仮でも完成させて初日とオフライン開催に臨みたいと思っています。
もしお時間あれば覗いていってもらえるととてもうれしいです。
https://techbookfest.org/organization/6273623876698112

さて、無事執筆が完了した方は丹精込めて書いた本が手に取ってもらえるかドキドキしてると思います。
私も毎度、本当にこんな本でよかったのかなと心配になりながら開催を迎えています。

苦労して産んだ同人誌が購入されたという通知が来たときは、この上なくうれしくなります。ありがたいかぎりです。
過去に参加した方はご存じかと思いますが、サークル代表者には登録したメールアドレス宛てに「[技術書典] あなたのファンが書籍「〇〇」を購入しました」というメール通知が来ます。

また、技術書典のマイページから「売上管理」>「販売履歴」とたどると、何時にどの書籍がどの販売形態で販売されたかを見ることができます。

このメールと履歴を頬が緩む思いで眺めているのですが、少々かゆいところに手が届かない感も感じていました。

例えば、日付別でどの本がどのくらい売れているのかというのがパッとはわかりません。
これでは、SNSでの宣伝効果が頒布数に相関しているのかなどを後日分析しようと思ったときに扱いづらいです。
あるいは、そもそもメールボックスを開くのが億劫と感じた日もありました。

調べてみたところ、私以外にもメールとマイページだけだと管理しづらいと感じている方がいるようです。
https://qiita.com/argama147/items/89845992357871a1528c

そこで、この購入通知をスプレッドシートで管理して、通知はSlackに飛ばせるようにしてしまおうというのが本記事の主旨です。

最終的にはこんな感じの通知が飛ばせるようになります。

Slackアプリを作る

まずはSlack上のアプリを作成します。
この辺りは先人の方がいくらでも紹介してくれているので、割愛します。
参考までに私が参考にした記事を貼っておきます。
https://zenn.dev/kou_pg_0131/articles/slack-api-post-message
Bot Token Scopesには「files:write」と「incoming-webhook」を設定しておいてください。

設定したら、Bot User OAuth Tokenを控えておいてください。

また、Webhook URLも控えておいてください。

アプリのチャンネル追加までできればひとまずSlackアプリの設定は完了です。

あとは、通知先のチャンネルIDを控えておきます。
チャンネルIDの調べ方は、通知したいチャンネルを右クリックなどして、チャンネルの詳細を開きます。

すると、一番下にチャンネルIDが表示されています。

スプレッドシートを準備する

Slackの設定ができたらスプレッドシートを用意します。
名前は何でもいいので、適当に1枚シートを作成してください。
私は、技術書典売り上げ管理表というブックにtechbookfest15というシートを作成しました。

作成したらまずは、スプレッドシートのIDを控えておいてください。
スプレッドシートのIDはURLの下記の箇所になります。

https://docs.google.com/spreadsheets/d/[ID部分]/edit#gid=xxx

次にA2セルに集計を開始する日付を記入しておきます。
例えば、技術書典15の開催初日である2023/11/11を入れておきます。

そうしたら、B1セルから順に1行目に頒布する書籍のタイトルを記入していきます。
フルネームだと長ければ一部分でも大丈夫です。
購入通知メールのSubjectに対してここに記載した文字列を部分一致で探しに行くので、そのときにヒットするような文字列にしておきます。

Google Apps Scriptを書く

ここまで準備できたらいよいよGoogle Apps Scriptを書いていきます。
サンプルコードをこちらにおいておきました。
https://github.com/Sashimimochi/techbookfest-buy-notifier

Google DriveからGoogle Apps Scriptを新規に作成してください。

作成したらサンプルコードを貼り付けます。

貼り付けたら、これまで控えて置いた各種IDなどを該当箇所に埋めていきます。

  1. Webhook URL
  2. スプレッドシートID
  3. Bot User OAuth Token
  4. Slack Channel ID

また、以下の箇所にスプレッドシートのシート名を記載しておきます。

function calcBuyData(message, webhookUrl) {
  // シート名を指定する
  const event = "techbookfest15"; // ココに該当のスプレッドシートの該当シート名を記載する

スプレッドシートと同様に書籍名をここに記載します。
本の種類を増減させたい場合はスプレッドシートと合わせてここを変更します。

  const columnMap = {
    "BookA": 2,
    "BookB": 3,
    "BookC": 4,
    "BookD": 5,
  }

ここまでできたら通知処理自体は完成です。
初回実行時は実行権限の有効化を求められることがあるので、ダミーのメールを作ってデバッグしておくことをおすすめします。

スケジュール設定をする

あとは定期的にこれを実行できるようにスケジューリングをしておきます。
GASのトリガーからトリガー設定画面に行き、右下の「トリガーを追加」を押します。

実行する関数で「checkBuyMall」を選択して、あとはお好みのスケジュールを設定します。

個人利用だとまず大丈夫だとは思いますが、GASには利用制限があるので、この範囲に収まるように設定しましょう。
https://tetsuooo.net/gas/1101/

私の場合は、オフライン会場では5分間隔、その他の開催期間中は1時間間隔で設定していました。
毎スケジュールごとにSlackを鳴らしてくださるファンの皆さんには感謝感激です。

おわりに

冒頭に書いたように、こんな感じの通知がSlackに来るようになります。

また、スプレッドシートのほうにはこんな感じに積みあがっていきます。
上手いこと使えば、帳簿としても使えそうです。

気に入っていただけたなら、みなさんにもご活用いただければ幸いです。
それでは、良き技術書典ライフを!

Discussion