Node.js와 Python으로 LINE Notify 사용해보기(2) – 스티커와 이미지

안녕하세요. LINE Developer Relations 팀의 Developer Advocate 윤인성입니다.

지난 글에서 이어지는 내용이므로, 지난 글을 보지 않으신 분은 꼭 읽어주세요! 지난 글에서 LINE Notify API 문서를 공유해드렸는데요. 내용을 보면 단순한 글자 이외에도 스티커와 이미지를 보낼 수 있다는 것을 확인할 수 있을 것입니다. 오늘은 지난 글에 이어서 LINE Notify를 사용해서 이미지와 스티커를 전송하는 방법에 대해 살펴보겠습니다.

스티커 보내기

스티커를 보낼 때는 다음과 같은 데이터를 추가로 전달하기만 하면 됩니다.

  • stickerId
  • stickerPackageId

이 값에 무엇을 입력해야 하는지는 Message API Sticker List에서 확인할 수 있습니다.

Message API Sticker List에서 보내보고 싶은 이미지를 찾고, stickerId와 stickerPackageId를 확인해주세요. 그럼 실제로 각각의 언어로 스티커를 보내봅시다.

Node.js

이전 코드에서 stickerIdStickerPackageId만 추가했습니다.

// 모듈을 읽어 들입니다.
const request = require('request')

// 요청을 위한 상수를 선언합니다: TOKEN은 자신의 것을 입력해주세요.
const TARGET_URL = 'https://notify-api.line.me/api/notify'
const TOKEN = '<자신의 토큰을 넣어주세요>'

// 요청합니다.
request.post({
  url: TARGET_URL,
  headers: {
    'Authorization': `Bearer ${TOKEN}`
  },
  form: {
    message: '안녕하세요. LINE Notify 스티커 테스트입니다.',
    stickerId: 2,
    stickerPackageId: 100
  }
}, (error, response, body) => {
  // 요청 완료
  console.log(body)
})

Python

마찬가지로 큰 변화는 없는 코드입니다. 이전 코드에서 stickerIdStickerPackageId만 추가했습니다.

# 모듈을 읽어 들입니다.
import requests
 
# 요청을 위한 상수를 선언합니다: TOKEN은 자신의 것을 입력해주세요.
TARGET_URL = 'https://notify-api.line.me/api/notify'
TOKEN = '<자신의 토큰을 넣어주세요>'
 
# 요청합니다.
response = requests.post(
  TARGET_URL,
  headers={
    'Authorization': 'Bearer ' + TOKEN
  },
  data={
    'message': '안녕하세요. LINE Notify 스티커 테스트입니다.',
    'stickerId': 2,
    'stickerPackageId': 100
  }
)

# 요청 완료
print(response.text)

실행 결과

코드를 실행하면, 다음과 같은 결과를 볼 수 있습니다. 딱딱한 느낌의 메시지에 이처럼 스티커를 추가하면, 조금 부드러운 느낌을 줄 수 있답니다. 다양하게 활용해보세요!

이미지 보내기

이번에는 이미지를 보내는 방법에 대해서 알아보겠습니다. 이미지로 보내는 방법을 알면, 서버의 현재 상황 등을 그래프 등으로 만들어서 주기적으로 전달할 수 있을 것입니다. 이 이외에도 Hasebe Ryosuke 님의 글에서 언급되었던 것처럼 내 컴퓨터에 로그인한 사람을 찍어서 라인으로 메시지를 보내는 등의 다양한 활용을 해볼 수 있답니다.

Node.js

Node.js의 request 모듈을 사용할 경우 다음과 작성합니다. 입력 양식 데이터(form) 작성 방법이 이전과 조금 다른데요. 파일을 입력하기 위해서 form() 메서드를 사용하는 형태로 변경했습니다.

// 모듈을 읽어 들입니다.
const request = require('request')
const fs = require('fs')
 
// 요청을 위한 상수를 선언합니다: TOKEN은 자신의 것을 입력해주세요.
const TARGET_URL = 'https://notify-api.line.me/api/notify'
const TOKEN = '<자신의 토큰을 넣어주세요>'
 
// 요청합니다.
const form = request.post({
  url: TARGET_URL,
  headers: {
    'Content-Type': 'multipart/form-data',
    'Authorization': `Bearer ${TOKEN}`
  }
}, (error, response, body) => {
  // 요청 완료
  console.log(body)
}).form()
 
// 데이터를 지정합니다.
form.append('message', '안녕하세요. LINE Notify 이미지 테스트입니다.')
form.append('imageFile', fs.createReadStream('./test-tile-thumb.png'))

Python

Python의 경우는 다음과 같이 작성합니다. 파일을 열고, files 속성에 imageFile 속성을 지정합니다.

# 모듈을 읽어 들입니다.
import requests

# 요청을 위한 상수를 선언합니다: TOKEN은 자신의 것을 입력해주세요.
TARGET_URL = 'https://notify-api.line.me/api/notify'
TOKEN = '<자신의 토큰을 넣어주세요>'
 
# 파일을 읽어들입니다.
with open('./test-tile-thumb.png', 'rb') as file:
  # 요청합니다.
  response = requests.post(
    TARGET_URL,
    headers={
       'Authorization': 'Bearer ' + TOKEN
    },
    data={
      'message': '안녕하세요. LINE Notify 이미지 테스트입니다.',
    },
    files= {
      'imageFile': file
    }
  )
 
# 요청 완료
print(response.text)

실행 결과

코드를 실행하면, 다음과 같은 결과를 볼 수 있습니다. 지난 글에서 사용한 이미지를 전송해보았답니다.

지금까지 2개의 글에 걸쳐 LINE Notify를 사용해 메시지, 스티커, 이미지를 전송하는 방법에 대해서 알아보았습니다. 굉장히 다양한 것을 만들 수 있을 것이란 생각이 들지 않나요? 다만 LINE Notify는 실시간으로 사용자와 상호작용 하는 기능 등은 가지고 있지 않습니다. LINE 이러한 기능들은 LINE의 Messaging API라는 별도의 API를 사용해야 합니다. 이와 관련된 내용은 이후에 다뤄보겠습니다.