LINE Corporation이 2023년 10월 1일부로 LY Corporation이 되었습니다. LY Corporation의 새로운 기술 블로그를 소개합니다. LY Corporation Tech Blog

Blog


LINE Notify에 스티커 송신 기능과 이미지 업로드 기능 추가

안녕하세요? LINE Notify 개발을 담당하고 있는 Hasebe입니다.

지난 블로그에서는 커맨드 라인에서 LINE Notify를 이용하여 LINE에 메시지를 보내는 방법을 소개한 바 있습니다. 이번에는 LINE Notify API에 스티커 송신 기능과 이미지 업로드 기능이 추가되어 소개하려고 합니다.

스티커 송신 기능

지난 블로그에서 소개한 예시는 LINE Notify를 사용하여 Jenkins의 빌드 결과를 LINE에 보내는 것이었습니다. 당시에 빌드 결과가 실패면 문이 비웃는 이미지를 보냈었는데, 블로그를 작성하던 중에 저희는 '이미지뿐만 아니라 스티커를 보낼 수 있게 하면 되는 거 아닌가?'라는 사실을 깨닫게 되었습니다.

스티커 보내기가 가능하면 LINE답게 느껴져서 더 좋을 것 같습니다. 그래서, 스티커 송신 기능을 추가했습니다.

커맨드 라인에서 스티커 보내기

curl 명령어를 사용해 스티커를 보내 보겠습니다.

$ 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'

이와 같이 스티커를 보낼 수 있게 되었습니다.

송신 가능한 스티커는 API 문서에도 기재되어 있는데, Messaging API와 동일합니다.

이미지 업로드 기능

기존에는 LINE Notify를 사용해서 이미지를 보내려면 이미지를 URL로 지정해야 했기 때문에 어떻게든 이미지를 public 서버에 업로드해야 하는 다소 번거로움이 있었습니다.

LINE Notify는 유저들의 간편한 사용성을 최우선으로 고려합니다. 그래서 이미지 업로드 기능을 추가하여 유저들이 이미지를 쉽게 보낼 수 있게 만들었습니다. Private 네트워크에 있는 서버에서도 쉽게 이미지를 보낼 수 있게 되었습니다.

지원하는 이미지 형식과 업로드 가능 횟수 등의 자세한 사양은 API 문서를 확인해 주시기 바랍니다.

커맨드 라인에서 이미지 업로드하기

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'

이렇게 이미지를 업로드하여 보낼 수 있게 되었습니다. 추가로, 이미지 업로드 기능을 활용한 조금 더 실용적(?)인 다른 예시를 소개하겠습니다.

Raspberry Pi를 사용하여 동작 감지 감시 카메라 bot 만들기

자택 네트워크 내에 설치한 Raspberry Pi에서 Motion이라는 OSS(Open Source Software)를 사용하여 동작 감지를 감시하는 카메라 bot을 손쉽게 제작하는 예시를 소개하겠습니다.

준비사항

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

쉽게 구할 수 있는 소형 서버로 Raspberry Pi와 공식 카메라 모듈을 사용합니다. OS는 10월 25일 현재 최신 OS인 Raspbian을 사용했습니다.

설정

네트워크 설정 등 기본 설정은 각각 개인의 환경에 맞게 설정해 주시기 바랍니다. Motion에서 카메라를 사용할 수 있도록 카메라를 활성화하고 커널 모듈(kernel module)을 로드합니다.

# 카메라를 사용할 수 있도록 카메라 모듈을 활성화
$ sudo raspi-config
  
# V4L2를 사용해서 카메라 모듈을 실행할 수 있도록 커널 모듈 로드
$ sudo modprobe bcm2835-v4l2
$ echo "bcm2835-v4l2" | sudo tee -a /etc/modules  

Motion 소프트웨어는 apt-get 명령어를 사용해서 설치합니다.

$ sudo apt-get install motion
  
# Owner를 변경하여 Motion을 daemon으로 실행할 때 쓰기가 가능하도록 한다.
$ chown motion:motion /var/lib/motion  

Motion 설치가 완료되면, 카메라가 동작을 감지했을 때 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'  

Motion을 daemon으로 실행할 수 있도록 /etc/defaults/motion도 편집합니다.

/etc/defaults/motion

start_motion_daemon=yes              # no를 yes로 변경  

Motion을 실행하거나 종료하는 방법입니다.

$ sudo service motion start          # Motion 실행
$ sudo service motion stop           # Motion 종료
$ sudo update-rc.d motion defaults   # Raspberry Pi 실행 시 자동 실행 설정  

설치해 보기

적당한 감시 대상을 찾지 못해서 냉장고 문 위에 설치해 보았습니다. 카메라 봇이 냉장고 문이 열린 것을 감지하고, 냉장고 안을 촬영하여 LINE으로 보내 줍니다.

실제로 문을 열어 봤더니 몇 초 후에 LINE Notify에서 확실히 사진을 보내 주었습니다.

10분 정도 설정 파일을 작성한 것이 전부인데 냉장고 감시 카메라 bot이 쉽게 완성되었습니다(그리고 촬영을 위해 냉장고를 청소하는 데 1시간 걸렸습니다).

Mac 컴퓨터의 무단 사용 방지를 위해 카메라로 촬영하여 보내기

낯선 사람이 무단으로 여러분의 Mac 컴퓨터에 로그인했을 때 그 사람을 촬영해서 LINE으로 보낼 수 있다면 범인을 잡는 데 도움이 될 수 있습니다.

앞서 소개한 Raspberry Pi 예시와는 달리 Mac 컴퓨터만 있으면 할 수 있습니다.

설정

우선, Mac 컴퓨터에 로그인 Hook을 설정합니다. 컴퓨터가 로그인되었을 때 지정된 스크립트를 실행하는 Hook입니다.

자세한 내용은 여기를 참고합니다.

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

login_hook.sh에 아래와 같은 스크립트를 작성합니다.

login_hook.sh

#!/bin/sh

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

at 명령어를 사용하여 10초 후에 notify.sh 스크립트를 실행합니다. 이렇게 하는 이유는 아래에 설명한 카메라 촬영에 몇 초 정도 시간이 걸리기 때문입니다.

또, 환경에 따라 at 명령어가 작동하지 않는 경우가 있는데 그런 경우에는 아래의 명령어를 실행하여 활성화합니다.

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

ImageSnap이 설치되어 있지 않다면 설치해 둡니다.

brew install imagesnap

결과

Mac 컴퓨터에 누군가 로그인하면 로그인한 사람이 촬영되어 아래와 같이 전송됩니다(블로그용으로 모자이크 처리를 따로 했습니다).

당연한 건지도 모르겠지만 1주일 정도 테스트해 보니 제 사진만 전송되어서 이 기능은 살짝 꺼 두었습니다.

마치며

이번에는 LINE Notify에 새로 추가된 스티커 송신 기능과 이미지 업로드 기능을 소개했습니다. 기존에 PDF로 제공하던 API 문서도 보시기 편하도록 웹으로 제공하고 있으니 자세한 사양은 API 문서를 확인해 주시기 바랍니다.

여러분도 적극 활용해 보시기 바랍니다.