Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

流行のLINE BOT APIを使って形態素解析BOTを作ろうとしたら既読スルーBOTになったハナシ

More than 3 years have passed since last update.

背景

最近巷でLINE BOT APIが流行っている(気づくの遅い?)
公式のアナウンスやプレスリリースによると

”BOT API Trial Account”とは?
BOT API Trial AccountではあなたのサービスとLINEユーザーの 双方向コミュニケーションを可能にするAPI開発をお試しいただけます。
BOT API Trial Accountのご紹介 | LINE Business Center

企業アカウントがユーザーと会話形式でやりとりするメッセージングAPIのオープン化に先駆け、サードパーティの開発者先着1万人に開放する。

ユーザーが開発したシステムやサービスとLINEアカウントを連携させ、APIを介してメッセージを送受信するbotアカウントを作成できる。レストラン検索やスケジュールアプリと連携した予定通知やクーポン発行、家電製品などのハードウェア類と連携し、LINEから操作――など、さまざまな用途・分野の活用を見込む。
ITmedia LINE BOT APIのニュース

one to oneマーケティングの可能性?
スクリーンショット 2016-08-04 1.52.29.png

http://lbc.line.me/
より

おもしろいものを作っている人がいて、真似してみたくなった。
LINE APIが公開されたのでGoogle Cloud Vision使って画像解析しちゃうBOTをAWS Lamdaで作ってみた話

LINE BOT APIで英単語の翻訳を教えてくれるBOTを実装した話

LINE BOT APIで今日のランチを検索する
googleのAPIともつないでいる様子

やったこと

・BOT API Trial Accountのアカウント登録をする
・Callback URLの登録
・Server IP Whitelistの設定(メッセージ送信する際に許可するIPアドレスを登録)
・形態素解析コード作成

一般に言われるつまずきポイント
・コールバックURLは暗号化対応されたものが必要。且つポート443(SSLのポート番号)を指定する必要がある(https://○○○○.ssl-xserver.jp:443/linebot/callback.py)
・設定したコールバックの反映が遅い。
・Server IP Whitelistの反映も遅い。

登録の流れ

LINE Business Centerから登録、先着1万人と言われていたが、おそらく違う
スクリーンショット 2016-08-04 1.37.10.png

普通に入力していくだけ。

登録が完了すると、
・Channel ID
・Channel Secret
・MID
の3つのキーがもらえます。APIリクエスト時にリクエストヘッダに設定する事になるコードです。

スクリーンショット 2016-08-04 1.37.52.png

サーバー

AWSの人もいれば、レンタルサーバの人もいれば、Heroku(PaaS?)の人もいますよと。
今回は、レンタルサーバのXserverを使いました。
スクリーンショット 2016-08-04 1.58.37.png
SSL設定をクリックして

スクリーンショット 2016-08-04 1.58.50.png

共通SSLを設定してあげるだけ。
設定されたURL(https://○○○○.ssl-xserver.jp)をコールバックURLとしてLINE developersのダッシュボードで記載

形態素解析

言語はPythonです。
このサイトを参考にしました。

callback.py
from flask import Flask
from flask import request

from janome.tokenizer import Tokenizer

import requests
import json
import re

import settings

LINEBOT_API_EVENT ='https://trialbot-api.line.me/v1/events'
LINE_HEADERS = {
    'Content-type': 'application/json; charset=UTF-8',
    'X-Line-ChannelID':settings.CHANNEL_ID,
    'X-Line-ChannelSecret':settings.CHANNEL_SECRET,
    'X-Line-Trusted-User-With-ACL':settings.MID
}

def post_event(to, content):
    msg = {
        'to': [to],
        'toChannel': 1383378250,
        'eventType': "138311608800106203",
        'content': content
    }
    r = requests.post(LINEBOT_API_EVENT, headers = LINE_HEADERS, data = json.dumps(msg))

def post_text(to, text):
    content = {
        'contentType':1,
        'toType':1,
        'text':text,
    }
    post_event(to, content)


commands = (
    (re.compile('作者', 0), lambda x: 'https://nnsnodnb.moe'),
)

app = Flask(__name__)

@app.route("/callback", methods=['POST'])
def callback():
    messages = request.json['result']

    for message in messages:
        text = message['content']['text']
        for matcher, action in commands:
            if matcher.search(text):
                response = action(text)
                break
        else:
            post_text(message['content']['from'], '解析中...')
            # 形態素解析
            response = ''
            t = Tokenizer()
            for token in t.tokenize(message['content']['text']):
                response += str(token) + '\n'
        post_text(message['content']['from'], response)
    return ''

if __name__ == "__main__":
    app.run(host = '0.0.0.0', port = 8001, threaded = True, debug = True)

これをFTPソフトでサーバー上にアップしておしまい!

のはずが!!!

けいたいそかいせきされず
既読スルーされる
IMG_0466.JPG

コードのミスかコールバックURLの反映待ちかわからないが、もう少し待とうと思う

既読スルーBOTを使って見たい方は友達になってください(予告なく消す場合がございます)
スクリーンショット 2016-08-04 2.08.42.png

終わりに

やりかたによっては、便利機能を持たせたBOTやビジネスシーンで光るBOTを個人が簡単に作れるようになっている気がした(形態素解析もさせられなかったが...)
チャットボットも界隈では流行っているらしいし。

サーバーまわりの知識があるともっと違うアプローチがあったとも感じる

既読スルーがこんなに辛かったのは久しぶりでした。

おなじようなことを書いている方がいて謎の親近感
http://naoyashiga.hatenablog.com/entry/2016/04/12/123312

参考にしたサイト

Python + FlaskでLINE botを作った
http://nnsnodnb.hatenablog.jp/entry/line-bot-made-flask

LineBotの事例を21個まとめてご紹介
http://blog.minato.jp.net/entry/linebot

個人でも利用可能なLINE API(BOT API)の使い方(PHP)。トライアル版は先着10,000名様まで利用可能!
https://www.panzee.biz/archives/9115
LINE developers BOT API公式
https://developers.line.me/bot-api/overview

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away