! This post is also available in the following languages. 英語, 韓国語, 繁体中国語

LINE NotifyにSticker送信機能と画像アップロード機能が追加されました

こんにちは。LINE Notifyの開発をしている長谷部です。

先日のblogで、コマンドラインからLINE Notifyを利用してLINEにメッセージを送信する方法についてご紹介しました。この度、LINE NotifyのAPIに画像アップロード機能とsticker送信機能が追加されましたのでご紹介します。

Sticker送信機能

先日のblogで、Jenkinsのビルド結果をLINE Notifyで通知する例を紹介しました。 そのときに、失敗時にムーンが小馬鹿にしてくる画像を送信したわけですが、ブログを書いているときに我々は気づいてしまったのです。

「…Sticker、送れるようにすれば良いのでは?」、と。

Stickerが送れると、LINEらしさもあって良さそうです。というわけで、Sticker送信機能を追加しました。

コマンドラインからStickerを送信する

curlコマンドを利用してstickerを送信してみます。

$ curl -X POST https://notify-api.line.me/api/notify -H 'Authorization: Bearer
YOUR_PERSONAL_ACCESS_TOKEN' -F 'message=test' -F 'stickerPackageId=1' -F 'stickerId=113'
$ curl -X POST https://notify-api.line.me/api/notify -H 'Authorization: Bearer YOUR_PERSONAL_ACCESS_TOKEN' -F 'message=test' -F 'stickerPackageId=1' -F 'stickerId=113'
$ curl -X POST https://notify-api.line.me/api/notify -H 'Authorization: Bearer
YOUR_PERSONAL_ACCESS_TOKEN' -F 'message=test' -F 'stickerPackageId=1' -F 'stickerId=113'

といった具合に、Stickerが送信できるようになりました。

※送信できるStickerは、documentにも記載してありますがMessaging APIと同じものになっています。

画像アップロード機能

これまでは、LINE Notifyで画像を送信する為には画像をURLで指定する必要があったため、なんらかの方法で画像をpublicサーバーに置く必要があり、少々面倒くささがありました。

LINE Notifyはユーザーのみなさんが手軽に使えることを第一に考えています。 なので、画像アップロード機能を追加することによってユーザーのみなさんが簡単に画像を送信できるようにしました。

Privateなネットワークにあるサーバーからも手軽に画像を送信する事が可能になります!
対応している画像形式やアップロード可能な回数等といった詳しい仕様は、documentをご覧ください。

コマンドラインから画像をアップロードする

curlコマンドを利用して画像を送信してみます。画像はmultipart/form-dataで送信します。

$ curl -X POST https://notify-api.line.me/api/notify
-H 'Authorization: Bearer YOUR_PERSONAL_ACCESS_TOKEN'
-F 'message=test'
-F 'imageFile=@/PATH/TO/IMAGE/cony.jpg'
$ curl -X POST https://notify-api.line.me/api/notify -H 'Authorization: Bearer YOUR_PERSONAL_ACCESS_TOKEN' -F 'message=test' -F 'imageFile=@/PATH/TO/IMAGE/cony.jpg'
$ curl -X POST https://notify-api.line.me/api/notify 
       -H 'Authorization: Bearer YOUR_PERSONAL_ACCESS_TOKEN' 
       -F 'message=test' 
       -F 'imageFile=@/PATH/TO/IMAGE/cony.jpg'

といった具合に、画像をアップロードして送信することができるようになりました。
せっかくですので、他にも画像アップロード機能に関してもう少しだけ実用的(?)な例を紹介したいと思います。

Raspberry Piを利用して、動体検知監視カメラbotを作る

自宅のネットワーク内に設置したRaspberry Piから、MotionというOSSを利用して手軽に動体検知監視カメラbotを作る例をご紹介します。

用意するもの

  • Hardware
    • Raspberry Pi 3
    • Raspberry Pi camera module v2
  • OS
    • RASPBIAN Jessie Lite 2016-09-23

手軽に手に入る小型サーバーとして、Raspberry Piと公式のカメラモジュールを利用します。OSは10/25現在で最新のRaspbianを利用しています。

設定

ネットワーク設定等、標準的な設定についてはそれぞれの環境に合わせて行ってください。Motionでカメラモジュールを利用するために、カメラの有効化とkernel moduleの読み込みを行います。

# カメラを利用できるようにカメラモジュールを有効化
$ sudo raspi-config
# V4l2経由でカメラモジュールを扱えるようにkernel module読み込み
$ sudo modprobe bcm2835-v4l2
$ echo "bcm2835-v4l2" | sudo tee -a /etc/modules
# カメラを利用できるようにカメラモジュールを有効化 $ sudo raspi-config # V4l2経由でカメラモジュールを扱えるようにkernel module読み込み $ sudo modprobe bcm2835-v4l2 $ echo "bcm2835-v4l2" | sudo tee -a /etc/modules
# カメラを利用できるようにカメラモジュールを有効化
$ sudo raspi-config
  
# V4l2経由でカメラモジュールを扱えるようにkernel module読み込み
$ sudo modprobe bcm2835-v4l2
$ echo "bcm2835-v4l2" | sudo tee -a /etc/modules  

Motion本体は、apt-getでinstallします。

$ sudo apt-get install motion
# daemonとして起動したときに書き込めるようにownerを修正
$ chown motion:motion /var/lib/motion
$ sudo apt-get install motion # daemonとして起動したときに書き込めるようにownerを修正 $ chown motion:motion /var/lib/motion
$ sudo apt-get install motion
  
# daemonとして起動したときに書き込めるようにownerを修正
$ chown motion:motion /var/lib/motion  

Motionがinstallできたら、動体検知時にLINE Notifyに画像を送るようにmotion.confを編集します。

/etc/motion/motion.conf

# LINE Notifyの仕様上、画像の最大サイズが1024x1024なので
width 1024
height 768
# N秒以内のイベントを同一イベントとする設定。
長いと通知が来るまで時間がかかるので5秒程度に。
event_gap 5
# 動体検知したイベントの真ん中の画像を保存するように
output_pictures center
# 動画は保存しない
ffmpeg_output_movies off
# 画像保存時に、LINE Notifyに送信する
on_picture_save curl https://notify-api.line.me/api/notify -X POST -H 'Authorization:
Bearer YOUR_PERSONAL_ACCESS_TOKEN' -F 'message=!' -F 'imageFile=@%f'
# LINE Notifyの仕様上、画像の最大サイズが1024x1024なので width 1024 height 768 # N秒以内のイベントを同一イベントとする設定。 長いと通知が来るまで時間がかかるので5秒程度に。 event_gap 5 # 動体検知したイベントの真ん中の画像を保存するように output_pictures center # 動画は保存しない ffmpeg_output_movies off # 画像保存時に、LINE Notifyに送信する on_picture_save curl https://notify-api.line.me/api/notify -X POST -H 'Authorization: Bearer YOUR_PERSONAL_ACCESS_TOKEN' -F 'message=!' -F 'imageFile=@%f'
# LINE Notifyの仕様上、画像の最大サイズが1024x1024なので
width 1024
height 768
 
# N秒以内のイベントを同一イベントとする設定。
長いと通知が来るまで時間がかかるので5秒程度に。 
event_gap 5
 
# 動体検知したイベントの真ん中の画像を保存するように
output_pictures center
 
# 動画は保存しない
ffmpeg_output_movies off
 
# 画像保存時に、LINE Notifyに送信する
on_picture_save curl https://notify-api.line.me/api/notify -X POST -H 'Authorization: 
Bearer YOUR_PERSONAL_ACCESS_TOKEN' -F 'message=!' -F 'imageFile=@%f'  

daemonで起動できるように/etc/defaults/motionも編集します。

/etc/defaults/motion

start_motion_daemon=yes              # noをyesに修正  

起動・終了の方法です。

$ sudo service motion start # Motion起動
$ sudo service motion stop # Motion終了
$ sudo update-rc.d motion defaults # RasPi起動時に自動起動設定
$ sudo service motion start # Motion起動 $ sudo service motion stop # Motion終了 $ sudo update-rc.d motion defaults # RasPi起動時に自動起動設定
$ sudo service motion start          # Motion起動
$ sudo service motion stop           # Motion終了
$ sudo update-rc.d motion defaults   # RasPi起動時に自動起動設定  

設置してみた

適当な監視対象が見つからなかったので、冷蔵庫のドアの上に設置してみました。冷蔵庫のドアが開いた事を動体検知し、冷蔵庫の中身をLINEに通知してくれます。

実際にドアを開けてみると数秒後にちゃんとLINE Notifyから写真が送られてきました。

10分くらいかけて設定ファイルを書くだけで簡単に冷蔵庫の監視カメラbotができてしまいました。 (なお、撮影用に冷蔵庫を掃除にするのに1時間かかりました)

勝手にMacが使われないように、Macにログインしたときにカメラ撮影して送信する

知らない人が勝手にMacにログインしたときに、ログインした人を撮影して送信するようにすると犯人特定に後々役立ちそうです。
先程のRaspberry Piの例とは違って、Macさえあれば実現することができます。

設定

まず、MacにLogin Hookを設定します。Loginしたときに、指定されたscriptを実行するものです。
参考: https://support.apple.com/HT2420

sudo defaults write com.apple.loginwindow LoginHook /path/to/login_hook.sh
sudo defaults write com.apple.loginwindow LoginHook /path/to/login_hook.sh
sudo defaults write com.apple.loginwindow LoginHook /path/to/login_hook.sh  

login_hook.shには、以下のようなscriptを書きます。

login_hook.sh

#!/bin/sh
at -f "/path/to/notify.sh" now+10sec
#!/bin/sh at -f "/path/to/notify.sh" now+10sec
#!/bin/sh

at -f "/path/to/notify.sh" now+10sec  

atコマンドを利用して、10秒後にnotify.shというscriptを実行します。ある程度の時間が経過しないと、後述のカメラ撮影が動かないのでこのようにしています。
なお、環境によってはatコマンドが動作しないので、その場合は以下のコマンドを実行し有効化します。

sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist
sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist
sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist  

notify.shには次のような記述をします。

notify.sh

#!/bin/sh
ACCESS_TOKEN="YOUR_PERSONAL_ACCESS_TOKEN"
PICTURE_PATH="/PATH/TO/PICTURE/login_camera.jpg"
# ImageSnapを使用して撮影します
/usr/local/bin/imagesnap -w 2 -q $PICTURE_PATH
curl -X POST https://notify-api.line.me/api/notify -H "Authorization:
Bearer $ACCESS_TOKEN" -F "message=login" -F "imageFile=@$PICTURE_PATH"
> /dev/null 2>&1
#!/bin/sh ACCESS_TOKEN="YOUR_PERSONAL_ACCESS_TOKEN" PICTURE_PATH="/PATH/TO/PICTURE/login_camera.jpg" # ImageSnapを使用して撮影します /usr/local/bin/imagesnap -w 2 -q $PICTURE_PATH curl -X POST https://notify-api.line.me/api/notify -H "Authorization: Bearer $ACCESS_TOKEN" -F "message=login" -F "imageFile=@$PICTURE_PATH" > /dev/null 2>&1
#!/bin/sh

ACCESS_TOKEN="YOUR_PERSONAL_ACCESS_TOKEN"
PICTURE_PATH="/PATH/TO/PICTURE/login_camera.jpg"
  
# ImageSnapを使用して撮影します
/usr/local/bin/imagesnap -w 2 -q $PICTURE_PATH
curl -X POST https://notify-api.line.me/api/notify -H "Authorization: 
Bearer $ACCESS_TOKEN" -F "message=login" -F "imageFile=@$PICTURE_PATH" 
> /dev/null 2>&1

ImageSnapがinstallされていない場合は、installしておきましょう。

brew install imagesnap

結果

Macにログインすると、ログインした人が撮影されて以下のように送られてきます。 (ブログ用にモザイク処理は別途入れてあります)

1週間ほど試したところ、当然のように私の写真しか送られることがなかったため、この機能はそっとオフにしました。

まとめ

今回は、新しく追加された画像アップロード機能とsticker送信機能を紹介しました。 詳しい仕様は、ドキュメントをご覧ください。なお、以前までPDFで提供していたドキュメントもHTML化したので見やすくなったかと思います。
みなさんも、ぜひご活用ください!

Generic selectors
Exact matches only
Search in title
Search in content
Generic selectors
Exact matches only
Search in title
Search in content