LINE messageAPI richmenu 소기
13073 단어 LINEmessagingAPIRichMenuAPILine
소개
회사의 후배로부터, LINE의 messageAPI를 사용해 약간의 접수 BOT같은 것을
만들 수 없는가와 상담되어, 만들고 있을 때 생각해 낸 richmenu의 소기입니다. (큰 일은 없지만)
문서 안에 있는 아래의 한 문장으로 생각해 냈습니다(즉시 반영되는 거~)
전제
・BOT가 이미 있다(Flask로 짜고 있다)
코드
main.py# -*- coding: utf-8 -*-
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import os
import sys
from argparse import ArgumentParser
from flask import Flask, request, abort,render_template,redirect,url_for
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,FollowEvent,UnfollowEvent,CarouselTemplate, CarouselColumn,URIAction,PostbackAction,MessageAction,TemplateSendMessage,ConfirmTemplate,PostbackEvent,StickerMessage, StickerSendMessage, LocationMessage,LocationSendMessage,ImageMessage, VideoMessage, AudioMessage, FileMessage)
import os
import time
def richmenu(userID):
r=YOUR_richmenuId_1
default=YOUR_richmenuId_2
line_bot_api.link_rich_menu_to_user(userID,r)
time.sleep(1)
line_bot_api.link_rich_menu_to_user(userID,default)
app = Flask(__name__)
line_bot_api = LineBotApi('YOUR_LINE_CHANNEL_ACCESS_TOKEN')
handler = WebhookHandler('YOUR_LINE_CHANNEL_SECRET')
@app.route("/callback", methods=['POST'])
def callback():
# get X-Line-Signature header value
signature = request.headers['X-Line-Signature']
# get request body as text
body = request.get_data(as_text=True)
app.logger.info("Request body: "+body)
# handle webhook body
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
@handler.add(PostbackEvent)
def handle_postback(event):
profile=line_bot_api.get_profile(event.source.user_id)
userID=event.source.user_id
name=profile.display_name
url="https://api.line.me/v2/bot/message/push"
if (event.postback.data=="r"):
richmenu(userID)
else:
line_bot_api.reply_message(event.reply_token,TextSendMessage(text="Check"))
pass
if __name__=="__main__":
app.debug=True
app.run(host="0.0.0.0")
richmenu
rich.sh curl -v -X POST https://api.line.me/v2/bot/richmenu \
-H 'Authorization: Bearer YOUR_LINE_CHANNEL_ACCESS_TOKEN' \
-H 'Content-Type:application/json' \
-d \
'{
"size":{
"width":2500,
"height":843
},
"selected":true,
"name":"default2",
"chatBarText":"menu",
"areas":[
{
"bounds":{
"x":91,
"y":258,
"width":430,
"height":583
},
"action":{
"type":"postback",
"data":"r"
}
},
{
"bounds":{
"x":697,
"y":258,
"width":430,
"height":583
},
"action":{
"type":"postback",
"data":"b"
}
},
{
"bounds":{
"x":1303,
"y":258,
"width":430,
"height":583
},
"action":{
"type":"postback",
"data":"w"
}
},
{
"bounds":{
"x":1909,
"y":258,
"width":430,
"height":583
},
"action":{
"type":"postback",
"data":"s"
}
}
]
}'
이미지
default
r
설명
richmenu의 왼쪽 가장자리에 있는 아이콘을 탭하면 postback에서 'r'을 보낼 수 있습니다.
(※richmenu로부터의 데이터 송신은 postback으로 하는 것이 여분의 메시지가 토크 화면에 나오지 않기 때문에 좋을까라고 생각합니다)
postback을 수신하면 보내준 사용자의 richmenu를 YOUR_richmenuId_1(이미지는 r)에 등록된 것으로 합니다.
1 초 후에 YOUR_richmenuId_2 (이미지가 default)로 변경됩니다.
그러면 탭되면 그 탭된 부분의 아이콘이 움직인 것 같은 표현이 됩니다.
마지막으로
LINEBot은 만들어 보면 재미 있습니다! (UI를 생각하지 않아도 되므로)
또 하나 아무래도 좋은 소기 (기술이라고 할 정도의 것도 아닙니다만)는, 레퍼런스에는 캐러셀 템플릿의
썸네일은 jpeg나 png로 있습니다만 GIF의 URL을 지정해도 괜찮은 것 같습니다(webkit 사용하고 있기 때문일까.richmenu의 이미지도 어쩌면
GIF라도 좋을까)
Reference
이 문제에 관하여(LINE messageAPI richmenu 소기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/skyfish20ch/items/d7dcf9d81095de1413b0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
・BOT가 이미 있다(Flask로 짜고 있다)
코드
main.py# -*- coding: utf-8 -*-
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import os
import sys
from argparse import ArgumentParser
from flask import Flask, request, abort,render_template,redirect,url_for
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,FollowEvent,UnfollowEvent,CarouselTemplate, CarouselColumn,URIAction,PostbackAction,MessageAction,TemplateSendMessage,ConfirmTemplate,PostbackEvent,StickerMessage, StickerSendMessage, LocationMessage,LocationSendMessage,ImageMessage, VideoMessage, AudioMessage, FileMessage)
import os
import time
def richmenu(userID):
r=YOUR_richmenuId_1
default=YOUR_richmenuId_2
line_bot_api.link_rich_menu_to_user(userID,r)
time.sleep(1)
line_bot_api.link_rich_menu_to_user(userID,default)
app = Flask(__name__)
line_bot_api = LineBotApi('YOUR_LINE_CHANNEL_ACCESS_TOKEN')
handler = WebhookHandler('YOUR_LINE_CHANNEL_SECRET')
@app.route("/callback", methods=['POST'])
def callback():
# get X-Line-Signature header value
signature = request.headers['X-Line-Signature']
# get request body as text
body = request.get_data(as_text=True)
app.logger.info("Request body: "+body)
# handle webhook body
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
@handler.add(PostbackEvent)
def handle_postback(event):
profile=line_bot_api.get_profile(event.source.user_id)
userID=event.source.user_id
name=profile.display_name
url="https://api.line.me/v2/bot/message/push"
if (event.postback.data=="r"):
richmenu(userID)
else:
line_bot_api.reply_message(event.reply_token,TextSendMessage(text="Check"))
pass
if __name__=="__main__":
app.debug=True
app.run(host="0.0.0.0")
richmenu
rich.sh curl -v -X POST https://api.line.me/v2/bot/richmenu \
-H 'Authorization: Bearer YOUR_LINE_CHANNEL_ACCESS_TOKEN' \
-H 'Content-Type:application/json' \
-d \
'{
"size":{
"width":2500,
"height":843
},
"selected":true,
"name":"default2",
"chatBarText":"menu",
"areas":[
{
"bounds":{
"x":91,
"y":258,
"width":430,
"height":583
},
"action":{
"type":"postback",
"data":"r"
}
},
{
"bounds":{
"x":697,
"y":258,
"width":430,
"height":583
},
"action":{
"type":"postback",
"data":"b"
}
},
{
"bounds":{
"x":1303,
"y":258,
"width":430,
"height":583
},
"action":{
"type":"postback",
"data":"w"
}
},
{
"bounds":{
"x":1909,
"y":258,
"width":430,
"height":583
},
"action":{
"type":"postback",
"data":"s"
}
}
]
}'
이미지
default
r
설명
richmenu의 왼쪽 가장자리에 있는 아이콘을 탭하면 postback에서 'r'을 보낼 수 있습니다.
(※richmenu로부터의 데이터 송신은 postback으로 하는 것이 여분의 메시지가 토크 화면에 나오지 않기 때문에 좋을까라고 생각합니다)
postback을 수신하면 보내준 사용자의 richmenu를 YOUR_richmenuId_1(이미지는 r)에 등록된 것으로 합니다.
1 초 후에 YOUR_richmenuId_2 (이미지가 default)로 변경됩니다.
그러면 탭되면 그 탭된 부분의 아이콘이 움직인 것 같은 표현이 됩니다.
마지막으로
LINEBot은 만들어 보면 재미 있습니다! (UI를 생각하지 않아도 되므로)
또 하나 아무래도 좋은 소기 (기술이라고 할 정도의 것도 아닙니다만)는, 레퍼런스에는 캐러셀 템플릿의
썸네일은 jpeg나 png로 있습니다만 GIF의 URL을 지정해도 괜찮은 것 같습니다(webkit 사용하고 있기 때문일까.richmenu의 이미지도 어쩌면
GIF라도 좋을까)
Reference
이 문제에 관하여(LINE messageAPI richmenu 소기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/skyfish20ch/items/d7dcf9d81095de1413b0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# -*- coding: utf-8 -*-
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import os
import sys
from argparse import ArgumentParser
from flask import Flask, request, abort,render_template,redirect,url_for
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,FollowEvent,UnfollowEvent,CarouselTemplate, CarouselColumn,URIAction,PostbackAction,MessageAction,TemplateSendMessage,ConfirmTemplate,PostbackEvent,StickerMessage, StickerSendMessage, LocationMessage,LocationSendMessage,ImageMessage, VideoMessage, AudioMessage, FileMessage)
import os
import time
def richmenu(userID):
r=YOUR_richmenuId_1
default=YOUR_richmenuId_2
line_bot_api.link_rich_menu_to_user(userID,r)
time.sleep(1)
line_bot_api.link_rich_menu_to_user(userID,default)
app = Flask(__name__)
line_bot_api = LineBotApi('YOUR_LINE_CHANNEL_ACCESS_TOKEN')
handler = WebhookHandler('YOUR_LINE_CHANNEL_SECRET')
@app.route("/callback", methods=['POST'])
def callback():
# get X-Line-Signature header value
signature = request.headers['X-Line-Signature']
# get request body as text
body = request.get_data(as_text=True)
app.logger.info("Request body: "+body)
# handle webhook body
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
@handler.add(PostbackEvent)
def handle_postback(event):
profile=line_bot_api.get_profile(event.source.user_id)
userID=event.source.user_id
name=profile.display_name
url="https://api.line.me/v2/bot/message/push"
if (event.postback.data=="r"):
richmenu(userID)
else:
line_bot_api.reply_message(event.reply_token,TextSendMessage(text="Check"))
pass
if __name__=="__main__":
app.debug=True
app.run(host="0.0.0.0")
rich.sh
curl -v -X POST https://api.line.me/v2/bot/richmenu \
-H 'Authorization: Bearer YOUR_LINE_CHANNEL_ACCESS_TOKEN' \
-H 'Content-Type:application/json' \
-d \
'{
"size":{
"width":2500,
"height":843
},
"selected":true,
"name":"default2",
"chatBarText":"menu",
"areas":[
{
"bounds":{
"x":91,
"y":258,
"width":430,
"height":583
},
"action":{
"type":"postback",
"data":"r"
}
},
{
"bounds":{
"x":697,
"y":258,
"width":430,
"height":583
},
"action":{
"type":"postback",
"data":"b"
}
},
{
"bounds":{
"x":1303,
"y":258,
"width":430,
"height":583
},
"action":{
"type":"postback",
"data":"w"
}
},
{
"bounds":{
"x":1909,
"y":258,
"width":430,
"height":583
},
"action":{
"type":"postback",
"data":"s"
}
}
]
}'
이미지
default
r
설명
richmenu의 왼쪽 가장자리에 있는 아이콘을 탭하면 postback에서 'r'을 보낼 수 있습니다.
(※richmenu로부터의 데이터 송신은 postback으로 하는 것이 여분의 메시지가 토크 화면에 나오지 않기 때문에 좋을까라고 생각합니다)
postback을 수신하면 보내준 사용자의 richmenu를 YOUR_richmenuId_1(이미지는 r)에 등록된 것으로 합니다.
1 초 후에 YOUR_richmenuId_2 (이미지가 default)로 변경됩니다.
그러면 탭되면 그 탭된 부분의 아이콘이 움직인 것 같은 표현이 됩니다.
마지막으로
LINEBot은 만들어 보면 재미 있습니다! (UI를 생각하지 않아도 되므로)
또 하나 아무래도 좋은 소기 (기술이라고 할 정도의 것도 아닙니다만)는, 레퍼런스에는 캐러셀 템플릿의
썸네일은 jpeg나 png로 있습니다만 GIF의 URL을 지정해도 괜찮은 것 같습니다(webkit 사용하고 있기 때문일까.richmenu의 이미지도 어쩌면
GIF라도 좋을까)
Reference
이 문제에 관하여(LINE messageAPI richmenu 소기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/skyfish20ch/items/d7dcf9d81095de1413b0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
richmenu의 왼쪽 가장자리에 있는 아이콘을 탭하면 postback에서 'r'을 보낼 수 있습니다.
(※richmenu로부터의 데이터 송신은 postback으로 하는 것이 여분의 메시지가 토크 화면에 나오지 않기 때문에 좋을까라고 생각합니다)
postback을 수신하면 보내준 사용자의 richmenu를 YOUR_richmenuId_1(이미지는 r)에 등록된 것으로 합니다.
1 초 후에 YOUR_richmenuId_2 (이미지가 default)로 변경됩니다.
그러면 탭되면 그 탭된 부분의 아이콘이 움직인 것 같은 표현이 됩니다.
마지막으로
LINEBot은 만들어 보면 재미 있습니다! (UI를 생각하지 않아도 되므로)
또 하나 아무래도 좋은 소기 (기술이라고 할 정도의 것도 아닙니다만)는, 레퍼런스에는 캐러셀 템플릿의
썸네일은 jpeg나 png로 있습니다만 GIF의 URL을 지정해도 괜찮은 것 같습니다(webkit 사용하고 있기 때문일까.richmenu의 이미지도 어쩌면
GIF라도 좋을까)
Reference
이 문제에 관하여(LINE messageAPI richmenu 소기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/skyfish20ch/items/d7dcf9d81095de1413b0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(LINE messageAPI richmenu 소기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/skyfish20ch/items/d7dcf9d81095de1413b0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)