LINEのMessage APIを使って、Slackへの書き込みを通知させる(前編)
LINEのMessage APIを使って、Slackへの書き込みを通知させる(中編)
前回までSlackからデータを受け取りLINEのAPIを叩くPythonスクリプトを書いたわけですが、重要なパラメータが一つ残っています。line_bot_api.push_messageの送信先です。
ここの指定はLINEメッセージの送り先(個人またはグループ)の「送信先識別子」というものが必要で、LINEのIDとは別物。これはLINEのWebhook経由で確認するしかないようですが、POSTされた値を取り出すだけのPHPスクリプトをWebhookに仕掛けて呼び出しても、何故か値が取れないので調べていたら、以下のサイトに正解が。
POSTで来るのですが$_POSTには入って来ず、以下のようにphp://inputを見るのが正解とのこと。
<?php ob_start(); $raw = file_get_contents('php://input'); var_dump(json_decode($raw,1)); $raw = ob_get_clean(); file_put_contents('/tmp/dump.txt', $raw."\n=====================================\n", FILE_APPEND); echo "OK";これでWebhookが呼ばれるようにLINEで何かアクションを起こすと、送られたパラメータが/tmp/dump.txtに入ります。これで発言者のuserIdが取れ、グループで発言するとgroupIdもわかります。これが送信先識別子となるので、前回のPythonのスクリプト内でline_bot_api.push_messageの送信先に指定します。
メッセージを複数人に送りたい場合、各ユーザーの送信先識別子宛てに送ってもいいのですが、今回は送りたい(受け取りたい)メンバーが参加するグループを作りそこに流すことにしました。よってGroupIDを送信先に指定します。
とりあえずこれで「/line 送りたいテキスト」のようにSlackで書き込むととLINEの指定グループにBOTが書き込みをする所までできました。あとはSlackのグループ内に書き込まれる情報を調整します。
【Slack】Custom slash commandsを使う – Qiita
http://qiita.com/nyata/items/d2f4f648103ef41abbe5
以上を参考に、Pythonでは
return jsonify(text="", response_type="in_channel")のようにしておくと、「/line 送りたいテキスト」と打った時に「送りたいテキスト」のみSlackの窓には表示され、違和感ない形となりました。
これでシステムはほぼ完成。あとはこのPythonをgunicornでdaemonとして起動しておきます。例としてslack2line.pyという名前にした場合、
gunicorn slack2line:app -b 0.0.0.0:5000 --daemon --keyfile /etc/letsencrypt/live/example.com/privkey.pem --certfile /etc/letsencrypt/live/example.com/fullchain.pemのようにします。SSLで使う場合はこのように鍵ファイルと証明書ファイルの指定が必要でした。証明書はフルパスで環境に合わせて指定してください。改行されて見えていますが1行です。