表題の内容を試す機会があったので、作業内容とサンプルコードを紹介したい思います。
環境
- Slack: フリープランでOK
- LINE
- GCP Coud Functions
- 実行環境はNode.js
*各サービスのドキュメントはすでにネットに豊富にあるので、今回は細かい設定方法の解説を省きます
サービス設定
Slack
slack api 設定
https://api.slack.com/apps で
Create New App
から新規appを作成。その後以下を設定。
Features -> OAuth & Permissions でBot Token Scopesに以下の権限を付与
channels:history
chat:write
commands
groups:history
im:history
mpim:history
users:read
Features -> OAuth & Permissions -> OAuth Tokens & Redirect URLs ->
Install to Workspace
ボタンをクリック
Bot User OAuth Access Token [xoxb-**...] を取得。後ほど利用するSettings -> Basic Information -> Signing Secretを
show
で一時的に表示してメモ。後ほど利用する
情報を取得したいチャンネルのidを取得する
こちらの記事が参考になると思います。
対象チャンネルに上記で作成したappを追加
LINE
LINE Notifyを使用します。トークンを発行し、送信先トークルームにLINE notifyを招待します。
こちらの記事が参考になると思います。
Cloud Functions実装
デプロイの手法は複数あると思いますが、webインターフェースを用いた手法だとこちらが参考になると思います。
コードはこちらのリポジトリに置きました。
https://github.com/hisa-shimoji/SlackTodayCh2Line
今回のデプロイの際は
- トリガーのタイプ: http
- 認証: "認証が必要"
を選択します。ランタイム環境変数に以下の値を設定します。
変数名 | 解説 |
---|---|
SLK_BOT_TOKEN | slack設定時に確認した Bot User OAuth Access Token [xoxb-**...] の値 |
SLK_BOT_SIGN_SECRET | slack設定時に確認したSigning Secretの値 |
SLK_BOT_MONITOR_CHANNEL | slack設定時に確認した対象チャンネルのid |
L_NOTIFY_KEY | LINE notifyのトークン |
L_MSG_PREFIX | LINEメッセージの前に付加する文字列 改行は\nで設定 必要なければ空白に |
L_MSG_SUFFIX | LINEメッセージの後に付加する文字列 改行は\nで設定 必要なければ空白に |
実行テスト
デプロイ後、webインターフェースから関数をテストする
でテストできます。
成功すると該当slackチャンネルの当日分のメッセージ(発言者と内容)がLINEへ送信されます
定期実行
GCP Cloud Schedulerを用いて定期実行が可能です。 こちらの記事が参考になると思います。
参考情報
https://cloud.google.com/functions/docs/quickstart-nodejs?hl=ja
https://qiita.com/YumaInaura/items/0c4f4adb33eb21032c08
https://qiita.com/iitenkida7/items/576a8226ba6584864d95
https://qiita.com/nirasan/items/0d9aad7da324ecd789f4