LINE Messaging API 사용해보기

안녕하세요. 이번 글에서는 LINE에서 제공하는 LINE Messaging API에 대해 간단히 알아보려고 합니다. ‘Node.js와 Python으로 LINE Notify 사용해보기’ 2편 말미에 살짝 예고드리기도 했었는데요. ‘Node.js와 Python으로 LINE Notify 사용해보기’ 1편, 2편과 함께 보시면 더욱 흥미로우실거라고 생각합니다.

Messaging API를 이용하면 봇을 통해 사용자에게 메시지를 보내거나, 사용자가 보낸 메시지에 응답할 수 있습니다. LINE에선 LINE Messaging API를 더욱 쉽게 사용할 수 있도록 개발자 가이드를 제공하고 있습니다. 개발자 가이드를 따라서 LINE에 채널을 생성하고 샘플봇을 실행하여 내 LINE 계정으로 다양한 형태의 메시지가 전달되는 모습을 확인해보겠습니다. 샘플봇 또한 여러 가지 언어로 제공하고 있는데요. 기본 제공되는 샘플봇이지만 사용자가 보낸 메시지에 맞춰 여러 가지 응답을 제공하는 기능을 잘 갖추고 있습니다.

채널을 열고 heroku를 이용해 샘플봇을 빌드하고 실행한 후, 내 LINE 계정과 테스트 메시지를 주고 받는 것까지는 코딩이 ‘하나도’ 들어가지 않습니다(단, 기본적으로 git이 설치되어 있고 간단한 사용법은 알고 있다고 가정하겠습니다). 그럼 부담없이 시작해보겠습니다.

채널 만들기

LINE에서 누군가에게 메시지를 보내려면, 먼저 채널을 생성해야 합니다. 채널 만들기는 기본적으로 이 가이드를 따라하시면 되는데요. 간단하게 한 번 살펴보겠습니다.

계정 준비 및 provider 생성

  • 일단 이메일과 연결된 LINE 계정이 필요합니다. 아직 없다면, 이곳의 ‘계정 준비’ 섹션을 참고하여 준비하시면 됩니다.
  • 계정이 준비되었다면, console에 로그인합니다. 위에서 등록한 이메일과 LINE 비밀번호를 입력하시면 됩니다(혹시 계정정보가 생각나지 않는다면 LINE 앱 내 설정 > 계정에서 확인할 수 있습니다).
  • 이번이 첫 로그인이라면, LINE Developers console에 개발자 계정을 생성하기 위해 아래와 같은 화면이 나타납니다. 화면 안내에 따라 개발자 계정을 생성하시기 바랍니다.
  • 두 번째 로그인부터는 아래와 같이 Provider 목록을 보여주는 화면이 바로 나타납니다. Provider는 여러분의 앱을 제공하는 개체(entity)를 뜻합니다. 여러분 자신으로 설정할 수도 있고, 여러분의 회사로 설정할 수도 있습니다.

제 화면에선 미리 테스트하면서 만들었던 provider가 하나 보이고 있습니다. 여러분 화면에는 아무 것도 없을텐데요. 화면 중앙이나 오른쪽 상단의 Create New Provider를 눌러 provider를 새로 생성하시기 바랍니다. 화면 안내에 따라 적절한 이름을 입력하고 Confirm과 Create 버튼을 누르면 provider가 생성됩니다. 

채널 생성

Provider 생성이 완료되면, 현재 생성할 수 있는 3가지 종류의 채널이 화면에 나타납니다. 이번 글에선 Messaging API를 테스트해 볼 예정이니 Messaging API의 Create Channel 버튼을 클릭하도록 합니다.

Create Channel 버튼을 클릭하면 생성할 채널 정보를 입력할 수 있는 화면이 나타납니다. 화면에 필요한 정보를 입력하고 Confirm 버튼을 누릅니다. 저는 Plan을 Developer Trial로 선택했는데요. 각자 설명을 읽고 원하는 Plan을 선택하시면 될 것 같습니다.

참고로 페이지 하단에 위치한 두 가지 Terms of Use는 꼭 동의하셔야 이후 진행이 가능하고, App name을 20자 이상 입력하는 등 입력한 값에 오류가 있다면 아래와 같은 경고창이 나타나게 됩니다.

입력값들을 제약사항에 맞게 적절히 조정하여 재입력하시면 다음으로 넘어갈 수 있습니다.

채널 정보 설정

생성된 채널을 마우스로 클릭하면 채널 정보를 확인하거나 수정할 수 있는 화면이 나타납니다. 꽤 여러 항목들이 나타나는데요. 이번 글에서는 그 중 샘플봇 설정에 꼭 필요한 항목들만 살펴보겠습니다. 참고로 각 항목 오른쪽에 위치한 물음표 위에 마우스를 올리면 상세 설명을 확인할 수 있습니다. 

  • Basic information 탭
    • Channel secret – 채널에 부여되는 고유한 secret 값입니다. 샘플봇을 설정할 때 필요합니다.
  • Messaging settings 탭
    • Channel access token (long-lived) – 처음엔 값이 비어 있습니다. 오른쪽 ISSUE 버튼을 클릭해 생성합니다.
    • Use webhooks – Edit 버튼을 클릭하여 Enabled 혹은 Disabled로 변경할 수 있습니다. 샘플봇 설정 시 Enabled로 변경하여 사용하게 되니 미리 Enabled로 변경해놓습니다.
    • Webhook URL Requires SSL – Edit 버튼을 클릭하여 URL 주소를 입력할 수 있습니다. 아직은 입력할 값이 없지만, 추후 heroku에서 샘플봇 설정을 마치고 heroku 주소를 입력하게 됩니다. 
  • Using LINE@ features 탭
    • Auto-reply messages – 자동 응답 메시지인데요. 추후 샘플봇 설정 시 방해가 되니 Edit 버튼을 이용해 Disabled로 변경해놓습니다.
    • Greeting messages – 처음 친구가 되었을 때 전송되는 환영메시지입니다. 본인 기호에 따라 켜놔도 되고 꺼놔도 되겠습니다.
  • 마지막으로 QR code of your bot 탭 아래에 보이는 QR 코드를 이용해 각자 생성한 채널을 친구로 등록합니다. 

이제 샘플봇 설정에 들어갈텐데요. 샘플봇 설정에선 heroku를 사용합니다. 아직 heroku 계정이 없으신 분들은 아래 Heroku 가입 섹션을 따라하시면 되고, 이미 가지고 계신 분들은 바로 건너뛰어서 샘플봇 설정 섹션으로 가시면 되겠습니다.

Heroku 가입

LINE에서는 heroku를 이용하여 별도의 코딩없이 몇 가지 설정값 변경 후 바로 실행시켜볼 수 있는 샘플봇과 가이드를 제공하고 있습니다. 이 가이드를 보면 시작하기 전에 아래 두 가지를 준비해야 한다고 합니다.

  1. 채널 생성 – 위 섹션에서 준비를 마쳤습니다.
  2. Heroku 계정 – 이제 준비해야겠네요.

Heroku 계정 생성은 무료입니다. 이곳에서 필요한 정보를 기입한 뒤 CREATE FREE ACCOUNT 버튼을 클릭하면 이메일이 전송되는데요. 이메일 속 링크로 접속하여 사용할 비밀번호를 설정하면 됩니다.

비밀번호 설정을 완료하고 CLICK HERE TO PROCEED를 클릭하면 heroku 메인화면으로 넘어오게 됩니다.  이제 heroku 계정도 준비 완료되었습니다.

샘플봇 설정

Git clone 후 설정 변경

이제 git에서 샘플봇(line-bot-sdk-java)을 복사해 올 차례입니다. 커맨드 창을 열고 원하는 디렉토리로 이동하여 git clone https://github.com/line/line-bot-sdk-java.git를 실행하면 됩니다. Clone이 완료되면 …/line-bog-sdk-java 디렉토리 안, Procfile 파일을 열어 파일 속 echokitchensink로 변경합니다. 두 군데를 변경하시면 됩니다.

// Before
web: java $JAVA_OPTS -jar sample-spring-boot-echo/build/libs/sample-spring-boot-echo-*.jar --server.port=$PORT
// After
web: java $JAVA_OPTS -jar sample-spring-boot-kitchensink/build/libs/sample-spring-boot-kitchensink-*.jar --server.port=$PORT

다음으로 sample-spring-boot-kitchensink/src/main/resources/application-template.yml 파일의 이름을 application.yml로 변경합니다(파일 위치는 그대로 둡니다).  그리고 파일을 열어 channel-secretchannel-token 필드값을 채널 생성 시 부여받았던 값으로 채워넣습니다. 마지막으로 ‘This is template file for configuration. Please copy as application.yml and change your value’ 문구를 삭제하거나 주석처리합니다(저는 주석처리하였습니다).

아래 그림은 전부 수정된 application.yml의 모습입니다.

Heroku에서 앱 생성

Heroku 사이트에 들어가 새로운 heroku 앱을 만듭니다. App name은 소문자, 숫자, dash만 허용됩니다. 또한 이미 사용되지 않은 이름이어야 합니다. 제대로 된 이름을 입력하였다면 입력창이 초록색으로 바뀝니다(저는 ‘testsomething’이란 이름을 사용할 수 없어서 s를 빼고 ‘testomething’으로 생성하였습니다). 만들 때 지정한 이름은 다음 과정에서 사용되니 복사해놓습니다. region은 미국과 유럽 밖에 선택할 수 없어서 전 미국을 선택했습니다.  Add to pipeline… 기능은 이번엔 사용하지 않습니다.

Git remote 설정

Heroku 앱 생성이 완료되었으면 line-bot-sdk-java를 복사해놓은 디렉토리로 이동하여 git remote 설정을 해야 하는데요. Heroku에서 제공하는 CLI(Command Line Interface)를 사용하면 편리하니 우선 Heroku CLI부터 설치합니다. Heroku CLI는 heroku에서 실행되는 봇의 로그를 확인할 때도 필요합니다. 여기에서 Heroku CLI를 다운받아 설치합니다.

설치가 완료되면 아래 방법을 따라 git remote 설정을 진행합니다.

Git remote 설정 방법

아래 명령어를 입력하여 git remote를 설정할 수 있습니다.

$ heroku git:remote -a {복사해놓은 이름}
예시) heroku git:remote -a testomething

혹시 저처럼 테스트하기 위해 heroku에 계정을 여러 개 만들었다면, 현재 로그인된 계정이 테스트하려는 앱이 있는 계정인지 확인합니다. 만약 해당 앱에 대한 권한이 없는 계정으로 위 명령어를 실행하게 된다면 아래와 같은 에러를 만나게 됩니다.

AL01339879:test user$ heroku git:remote -a testomething
 ›   Error: You do not have access to the app testomething.
 ›
 ›   Error ID: forbidden
AL01339879:test user$ heroku login
heroku: Enter your login credentials
Email [test1@test.com]: 
Password: ********
 ›   Error: Invalid credentials provided.
 ›
 ›   Error ID: unauthorized

이런 경우 아래와 같이 heroku logout 후 해당 계정으로 다시 로그인하시면 됩니다.

AL01339879:test user$ heroku logout
Logging out... done
AL01339879:test user$ heroku login
heroku: Enter your login credentials
Email: test2@test.com
Password: ********
Logged in as test2@test.com
AL01339879:test user$ heroku git:remote -a testomething

설정이 완료되면 아래와 같은 메시지를 볼 수 있습니다.

set git remote heroku to https://git.heroku.com/testomething.git

참고: 로그 확인 방법

  1. 터미널이나 커맨드 라인 프로그램을 이용해 아래 명령어를 실행하여 heroku에 로그인합니다.
  2. 로그인 후 아래 명령어를 실행하면 로그를 확인할 수 있습니다.
$ heroku logs --tail --app {복사해놓은 이름}
예시) heroku logs --tail --app testomething

변경사항 push

  • remote 설정이 완료되었으면 변경사항을 push합니다.
$ git add .
$ git commit -m 'First commit'
$ git push heroku master
  • push 실행 후 로그를 보시면 중간중간 warning이나 error 같은 글자가 보이긴 하는데요. 아래와 같이 빌드는 성공적으로 끝납니다. 또 실행해보면 실행도 잘 됩니다.
remote:        BUILD SUCCESSFUL in 4m 32sremote:        91 actionable tasks: 91 executedremote: -----> Discovering process typesremote:        Procfile declares types -> webremote: remote: -----> Compressing...remote:        Done: 119.4Mremote: -----> Launching...remote:        Released v3remote:        https://testomething.herokuapp.com/ deployed to Herokuremote: remote: Verifying deploy... done.To https://git.heroku.com/testomething.git * [new branch]      master -> master

Webhook 설정

이제 채널 설정 화면으로 돌아가서 웹훅을 설정합니다.

  • Use webhooks가 Disabled 상태라면 Enabled로 변경합니다.
  • Enabled로 변경이 완료되면 아래 Webhook URL Requires SSL 항목에 값을 입력합니다. 입력하는 값은 아래와 같습니다.
    • https://{Heroku 앱 생성 시 복사해놓은 App name}.herokuapp.com/callback 
    • 예시: https://testomething.herokuapp.com/callback
  • 입력 후 Update 버튼을 클릭합니다. 
  • 잠시 기다리면 아래 그림과 같이 Verify 버튼이 Edit 버튼 옆에 나타납니다. 
  • Verify 버튼을 클릭하여 입력한 URL이 유효한 지 확인합니다. 
    • 위 push 과정이 잘 진행되었다면 아래와 같이 URL 주소 아래에서 Success를 볼 수 있습니다. 만약 Success 대신 빨간색 에러메시지가 나타났다면 push과정을 다시 살펴보도록 합니다.

테스트

이제 모든 설정이 완료되었으니 실제로 메시지를 전송해보도록 하겠습니다. 샘플봇 가이드에 나와 있는 기능은 대략 아래와 같습니다. 기능설명과 함께 바로 테스트 결과화면을 보여드리겠습니다.

  • profile 이라고 메시지를 보내면 내 프로필 정보를 전송
    • 채널 설정할 때 Using LINE@ features 탭에서 Auto-reply messages를 Disabled로 해놓지 않으면 아래와 같이 자동 응답 메시지가 먼저 전송되어 버립니다. 테스트에 방해가 되어 저는 Disabled로 설정하였습니다.
    • 프로필 정보 전송 테스트 결과화면
  • buttons, confirm, 혹은 carousel을 입력하여 template message 전송
    • LINE PC 버전에선 template message 기능을 사용할 수 없습니다. 따라서 template message는 LINE 모바일에서 확인해야 합니다.
    • template message 전송 테스트 결과 화면 – LINE PC 버전
    • template message 전송 테스트 결과 화면 – LINE 모바일 버전
  • imagemap 입력하여 imagemap message 전송
    • imagemap message 전송 테스트 결과 화면
  • 그룹채팅방에 초대한 뒤, bye라고 입력하면 봇 퇴장
  • 단순 텍스트나 이미지, 오디오, 비디오, 위치 정보 전송 시 봇이 그대로 복사 후 재전송
    • 위치정보, 텍스트, 이미지 전송 테스트 결과 화면

맺음말

이번 글에서는 LINE에서 제공하는 Messaging API 가이드와 샘플봇 설정 가이드를 따라해보고 실제 LINE 계정으로 메시지가 전송되는 것까지 확인해보았습니다.

아주 조금만 응용해도 무언가 재미있는 봇으로 업그레이드시킬 수 있을 것 같지 않나요? 여러분도 한번 해보시기 바랍니다. 샘플봇을 이리 저리 가지고 놀다보면 흥미로운 점을 많이 발견할 수 있을 것 같습니다.