LINEとSlackを連携させる (6.SlackからLINEへスタンプを送る)
この記事で紹介すること
この記事では,Slack から LINE Bot で LINE のスタンプを送信します.
サーバー は heroku を使用します.
できあがるとこんな感じ
目次
LINE & Slack 連携基礎編
この記事には次の記事の続きです. LINE と Slack の連携について詳しく知りたいときは,これらの記事を参考にしてください.
ソースコード
ディレクトリ構成
次のようになっています.
slack2line ├── Procfile ├── plugins │ ├── __init__.py │ └── send_line.py ├── requirements.txt ├── run.py ├── runtime.txt └── slackbot_settings.py
環境構築
pip や pipenv などで次を使えるよう準備してください.
line-bot-sdk slackbot
以下は ubuntu/debian, pip3 の例を紹介します.
$ sudo apt install python3-pip $ pip3 install line-bot-sdk $ pip3 install slackbot
処理の概要
スタンプを送信するコードは次のようにしました.
Slack から
sticker 送信先 送信するスタンプのpackage_id 送信するスタンプのsticker_id
と入力すると送信されます.
値のバリエーションはif文でスペース区切りの文字列の数を確認しています.
@respond_to('sticker (.*)') def send_sticker_mention_func(message, _): """ LINE スタンプを送信します. """ # slackに投稿されたメッセージのパース text = message.body['text'] parse_msg = text.split(' ') # 形式に合っていれば if len(parse_msg) == 4: _, to, package_id, sticker_id = parse_msg # lineに送る line_bot_api.push_message( to=to, messages=StickerSendMessage( package_id=package_id, sticker_id=sticker_id ) )
ソースコードの作成
その他のソースコードは次のとおりです.
- run.py : Slack Bots を起動します.
from slackbot.bot import Bot def main(): bot = Bot() bot.run() if __name__ == "__main__": main()
- slackbot_settings.py
Slack Bots の設定を決めます.
認証情報の取得では,環境変数に 1.アカウント準備編 でメモした値を設定する必要があります.
import os # トークンを指定 API_TOKEN = os.environ["SLACK_API_TOKEN"] # このbot宛の標準の応答メッセージ DEFAULT_REPLY = "このbotにはメッセージを送ることはできません" # プラグインスクリプトのリスト PLUGINS = ['plugins']
- plugins/send_line.py
具体的な動作を実装します.
import os from linebot import LineBotApi from linebot.models import TextSendMessage from slackbot.bot import listen_to from slackbot.bot import respond_to CHANNEL_ACCESS_TOKEN = os.environ["LINE_CHANNEL_ACCESS_TOKEN"] line_bot_api = LineBotApi(CHANNEL_ACCESS_TOKEN) @respond_to('sticker (.*)') def send_sticker_mention_func(message, _): """ LINE スタンプを送信します. """ # slackに投稿されたメッセージのパース text = message.body['text'] parse_msg = text.split(' ') # 形式に合っていれば if len(parse_msg) == 4: _, to, package_id, sticker_id = parse_msg # lineに送る line_bot_api.push_message( to=to, messages=StickerSendMessage( package_id=package_id, sticker_id=sticker_id ) ) # メッセージにスタンプをつける message.react('+1')
herokuで動かすために更にコードを追加します.
- Procfile
pbot: python run.py
- requirements.txt
line-bot-sdk slackbot
- runtime.txt
python-3.6.8
Gitに追加する
heroku にデプロイするため,Gitレポジトリを作成しコミットしておきます. 以下はその例です.
$ git init $ git add . $ git commit -m "first commit"
heroku にデプロイ
heroku にアプリを作成し,環境変数を設定します.
heroku CLI を使うので,アカウントの準備ができていない場合は 1.アカウント準備編 を参考にしてください.
ここでは,アプリ名を slack2line としてデプロイしています.
$ heroku create slack2line Creating ⬢ slack2line... done https://slack2line.herokuapp.com/ | https://git.heroku.com/slack2line.git $ git push heroku master $ heroku config:set LINE_CHANNEL_ACCESS_TOKEN=[LINE Bot のアクセストークン (ロングターム)] --app slack2line $ heroku config:set SLACK_API_TOKEN=[slack bots の Bot User OAuth Access Token] --app slack2line $ heroku ps:scale pbot=1 --app slack2line
使い方
事前にLINEの投稿先のIDを知っている必要があります.
2. LINE -> Slack の連携編 を参考にグループIDまたはトークルームIDを取得します.
sticker [送信先] [送信するスタンプのpackage_id] [送信するスタンプのsticker_id]
とすると指定した先にスタンプを送信することができます.
送るスタンプの package_id と sticker_id はこちらを参考にしてください.
https://developers.line.biz/media/messaging-api/sticker_list.pdf
(私の環境では,これらはエラーが発生し,うまく動きませんでした....)
トラブルシューティング
うまく動かないときは,
$ heroku logs --tail --app line2slack
で確認してみてください.
また,アプリのURL (上の例では https://slack2line.herokuapp.com/ ) にアクセスできるかも確認してみてください.
herokuの無料枠上限に注意
この例ではサーバをずっと動かし続けているため,無料枠の 450h/1ヶ月 (?) or 1000h/1ヶ月 (?) に達する可能性があります.
最後に
これらを応用するとSlackとLINEの連携だけでなく,それ以外からのメッセージ投稿ができるはず!
この記事ではLINEスタンプの送信のみを紹介しましたが,メッセージの送信は Slack -> LINE の連携編 を参考にしてください.