背景
最近巷で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のニュース
おもしろいものを作っている人がいて、真似してみたくなった。
・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万人と言われていたが、おそらく違う
普通に入力していくだけ。
登録が完了すると、
・Channel ID
・Channel Secret
・MID
の3つのキーがもらえます。APIリクエスト時にリクエストヘッダに設定する事になるコードです。

サーバー
AWSの人もいれば、レンタルサーバの人もいれば、Heroku(PaaS?)の人もいますよと。
今回は、レンタルサーバのXserverを使いました。
SSL設定をクリックして

共通SSLを設定してあげるだけ。
設定されたURL(https://○○○○.ssl-xserver.jp)をコールバックURLとしてLINE developersのダッシュボードで記載
形態素解析
言語はPythonです。
このサイトを参考にしました。
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ソフトでサーバー上にアップしておしまい!
のはずが!!!
コードのミスかコールバックURLの反映待ちかわからないが、もう少し待とうと思う
既読スルーBOTを使って見たい方は友達になってください(予告なく消す場合がございます)
終わりに
やりかたによっては、便利機能を持たせた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