Python, LINE BOT에서 일제 전송

개요



전회 작성한 LINEbot을 바탕으로 일제히 송신 붙여 정리하고 싶습니다


일제히 송신 (브로드 캐스트 메시지)



이번은 이쪽 사이트를 참고로 했습니다.
htps : // 코 m / 히로 0236 / ms / 649d90654d7807b2d55
사이트에 있는 브로드캐스트 메시지의 소스 코드를 끌어왔습니다.
from linebot import LineBotApi
from linebot.models import TextSendMessage

CHANNEL_ACCESS_TOKEN = "チャネルアクセストークンを設定"
line_bot_api = LineBotApi(CHANNEL_ACCESS_TOKEN)

def main():
    messages = TextSendMessage(text="ブロードキャストテスト")
    line_bot_api.broadcast(messages=messages)

if __name__ == "__main__":
    main()

위의 소스 코드
1. 채널 액세스 토큰 설정
2. 「main」이라고 하는 곳을 Webhook URL(간단하게 말하면 LINE으로부터 불려 가는 URL)
로 설정되어 있는 callback( 이전 기사 를 참조해 주세요)로 변경
그런 다음 Heroku에 설치하면 친구 등록 된 모든 사람에게 "브로드 캐스트 테스트"라는 메시지가 전송됩니다.


기능 추가



전회까지 작성한, LINE BOT에 이 브로드캐스트 기능을 추가해 가고 싶습니다.

main.py
from flask import Flask, request, abort

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)
import os

app = Flask(__name__)

#環境変数取得
YOUR_CHANNEL_ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"]
YOUR_CHANNEL_SECRET = os.environ["YOUR_CHANNEL_SECRET"]

line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)

# 新商品をpromotion_contentに入れる
promotion_content = "話題の新商品"

@app.route("/")
def promotion():
    # 宣伝があればPromotionに入力して一斉送信
    if promotion_content != "":
        messages = TextSendMessage(text=promotion_content)
        line_bot_api.broadcast(messages=messages)
    return "宣伝完了"

@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(MessageEvent, message=TextMessage)
def handle_message(event):
    # "赤ちゃん"というメッセージが送られてきた場合
    # 指定のリンクを送信する。
    if event.message.text == "赤ちゃん":
        line_bot_api.reply_message(
            event.reply_token, 
            TextSendMessage(text="https://akachan.omni7.jp/top"))
    # "ママ"というメッセージが送られてきた場合
    # 指定のリンクを送信する。
    elif event.message.text == "ママ":
        line_bot_api.reply_message(
            event.reply_token, 
            TextSendMessage(text="https://akachan.omni7.jp/basic/A01?intpr=ah_frmng_top_headnav_cate"))
    # "ベビー"というメッセージが送られてきた場合
    # 指定のリンクを送信する。
    elif event.message.text == "ベビー":
        line_bot_api.reply_message(
            event.reply_token, 
            TextSendMessage(text="https://akachan.omni7.jp/basic/A02?intpr=ah_frmng_top_headnav_cate"))
    # "新商品"というメッセージが送られてきた場合
    # 新商品テキストを送信する。
    elif event.message.text == "新商品":
        line_bot_api.reply_message(
            event.reply_token, 
            TextSendMessage(text=promotion_content))
    # 特定の文字列以外はオウム返しする。
    else:
        line_bot_api.reply_message(
            event.reply_token, 
            TextSendMessage(text=event.message.text))

if __name__ == "__main__":
#    app.run()
    port = int(os.getenv("PORT"))
    app.run(host="0.0.0.0", port=port)

어디에 추가했는지 알기 어려울지도 모르지만 아래 부분이 변경되었습니다.
# 新商品をpromotion_contentに入れる
promotion_content = "話題の新商品"

@app.route("/")
def promotion():
    # 宣伝があればPromotionに入力して一斉送信
    if promotion_content != "":
        messages = TextSendMessage(text=promotion_content)
        line_bot_api.broadcast(messages=messages)
    return "宣伝完了"

이 「@app.route("/")」라고 하는 것은 커멘드로 「heroku open」이라고 불려지는 메소드로, 내용은 promotion_content에 신상품(특히 이유는 없습니다만 이번은 텍스트의 회신)의 이름을 넣어 , 'heroku open'을 하면 친구가 등록된 계정으로 신제품이 전송되고 브라우저에 '홍보 완료'가 표시됩니다.


또, 지정 메세지 「신상품」에 대해 「promotion_content」를 회신하도록(듯이) 하는 것으로, 손님으로부터도 신상품을 조사할 수 있도록(듯이)도 할 수 있습니다.
    # "新商品"というメッセージが送られてきた場合
    # 新商品テキストを送信する。
    elif event.message.text == "新商品":
        line_bot_api.reply_message(
            event.reply_token, 
            TextSendMessage(text=promotion_content))



요약



이번에는 신상품마다 Heroku에 배포해야 하기 때문에 숨겨진 코드 등을 사용하여 자신의 스마트 폰에서 신상품의 메시지를 보내고 거기에서 일제히 보내도 좋을까 생각했습니다! (보안상 수상하지만,,, 웃음)


참고문헌

좋은 웹페이지 즐겨찾기