Slack <-> LINEで相互にメッセージのやり取りをできるものを作りたいと思い、いろいろ調べて作れました。
参考としたURLとかを載せておくものなので、ほぼメモ書きです。
参考にさせてもらった記事も2年前とかなので色々変わっていたため、そのままではできなかったということもあったので。
pythonとかも初心者というか勉強しないままやってるので、常識的なこともわかっていませんのであしからず。
環境は以下です。
ローカルPC:windows10
python:3.9.6
第1 Line -> Slackの通知
参考URL1(環境準備):https://kuri-megane.hatenablog.jp/entry/2019/10/28/190000
参考URL2(ソース、デプロイ):https://kuri-megane.hatenablog.jp/entry/2019/11/07/190000
参考URL1に書いていないことで、不要かもしれませんがコマプロで作業するより、gitのコマンドライン使えるgit bash入れたほうがいいです。
参考URL:https://qiita.com/suke_masa/items/404f06309bb32ca6c9c5
あと、pythonの実行環境もあったほうがいいです。herokuしかないと、構文エラーとかも一度デプロイして動かした後のログを確認しないと何が起きたかわからないです。
困ったこと
・freezeがインストールできない
そもそもできないが、「pip freeze」でpythonにインストールされているライブラリを表示してくれるので、それをrequirements.txtに記載しておく。
・herokuにpushできない。
エラー内容をちゃんと見ること。躓いたのは、runtime.txtに記載するpythonのバージョン。
現状herokuのスタックはheroku-20で、サポートしているpythonのバージョンは以下のURL参照。
サポートしているpythonのバージョンをruntimeに記載する必要あり。
参照URL:https://devcenter.heroku.com/articles/python-support
・デプロイ後に動かない
参考URL2のとおりにやったら、動かない。
原因はデプロイ後の環境変数をconfigコマンドで設定するところ。
正しくは「heroku config:set 環境変数="設定値" --app アプリ名」で、設定値は「[AAA~~~]」ではなく「"AAA~~~"」。
そのせいでinvalid_errorからぬけだせなかった。
環境変数の宣言を間違ったら「heroku config:unset 環境変数 --app アプリ名」で削除可能
・画像が送信できない
参考記事は以下。
参考URL3:https://kuri-megane.hatenablog.jp/entry/2019/11/01/190000
bot appへのパーミッション(Slack botではScope)を追加しないといけないが、
該当するものがないので、それっぽいものを追加しておく。
あと、記載のソースでは送信できず、以下のURLのjson部分を流用
参考URL4:https://qiita.com/stkdev/items/992921572eefc7de4ad8
あと、画像投稿先のSLACK_POST_CHANNEL_IDが急に出てくる。
SlackのチャンネルIDは該当チャンネルのURL最後の部分になる。
・LINE BOTアカウントを友達登録しないとSlackに表示される名前がUnkwonにしかならない
参考URL2の該当ソースはこれ
profile = line_bot_api.get_profile('user_id')
友達じゃなくても見れるようにするにはこれ。
profile = line_bot_api.get_group_member_profile(group_id, user_id)
そもそものソースでちゃんと発言されたときにgroupidもuseridも応答されて取得しているから、こっちのほうがいい。
Slack -> LINEの通知
参考URL4(ソース、デプロイ):https://kuri-megane.hatenablog.jp/entry/2019/10/30/190000
困ったこと
・ひたすらにslacker_error:invalid_authが出て、デプロイできるけど動かない。
多分以下このせいで、自分が作成したSlackのBot appではだめっぽい。
参考:https://developerdk.tistory.com/96&prev=search&pto=aue
結果、Slackに標準で用意されているBotsというappを使用する必要がある。
Oauthも参考4URLに記載しているような自分が作成したBot appのものではなく、BotsのOauthを使用すること。
これだけでうまいこと動くようになった。
【追加したい機能】
・ラインで投稿された動画を連携
たぶんできるけどどうかな・・・
・SlackからLINEにメンション
LINE Messaging APIにどうrequest投げればいいかをドキュメント検索中
多分Slackから@つけて投稿するときに、「@表示名」を「mention.mentionees[].userId = ユーザID」に
変換してAPIに渡せば行けるのかなと思っているが、LINEから来たメッセージからユーザIDとか拾っているので、
それを保存して、表示名からユーザIDを特定するためのDB、関数が必要
【めんどくさいこと】
・返信のために、「reply グループID 」を入れないといけない
ユーザ辞書登録でグループID単位に辞書登録しておけばよい。
2022年1月12日追記
ソースはGithubの下記の場所にあります。
色々直さないといけない部分はありますが、とりあえず動きます。
【ソースコード】
https://github.com/taka00234/Slack---Line
また、なんでかslackbotが常駐で動いているので、herokuの稼働時間が月末になると不足して動かなくなります・・・