LINE MessagingAPI を使ってLINEのBotを作成してみました。

準備
まず LINE Business Center でアカウントを作成します。 遊びで使うのであれば Developer Trial を選択すればOKです。登録後すぐ使えるようになります。 (アカウント種別ごとの違いは上のページのプラン紹介に載っています)
登録するとLINE@ と LINE Developersのページが使えるようになります。 LINE@はビジネスアカウントのプロフィールや振る舞いを設定する画面です。 LINE Developersは開発者用の機能を設定できるページでBotの設定はこちらで行います。
LINE Developersのページへ行くと以下のようなBotの設定を行う画面があります。

Messaging APIを利用するために Webhook URL と Channel Access Token を使用します。 Webhook URL はBotアカウントがメッセージ(POST)を受信するURLを記載します。 Channel Access Token はBotがユーザにメッセージを送信する際に利用します。
Botを友達追加する
LINEのアプリから友達登録します。 先ほどのページにQRコードがあるのでそこから追加するのが簡単です。 友達登録すると以下のJSONがWebhook URLにPOSTされます。
{
'events': [{
'type': 'follow',
'timestamp': 1475283737085,
'source': {
'userId': 'Ud1fe3db24904988cdc941eb50d5e4200',
'type': 'user'
},
'replyToken': '087a901c96d34e9f9dbd70eb8026f896'
}]
}
テキストメッセージを送信する
LINEのアプリからBotに対してテキストメッセージを送信すると以下のJSONがWebhook URLにPOSTされます。
{
'events': [{
'timestamp': 1475246936807,
'replyToken': '7304712ea2134a32873646ea2e74c264',
'message': {
'type': 'text',
'id': '4989775490995',
'text': 'テスト'
},
'type': 'message',
'source': {
'userId': 'Ud1fe3db24904988cdc941eb50d5e4200',
'type': 'user'
}
}]
}
これに応答する場合はメッセージ内の replyToken を使用します。 Pythonで書くと以下のようになります。 ( ACCESS_TOKEN には管理画面の Channel Access Token をセットします)
for event in request.json['events']:
token = event['replyToken']
url = 'https://api.line.me/v2/bot/message/reply'
data = {
'replyToken': token,
'messages': [
{
"type": "text",
"text": "You send [%s] message." % event['type']
}
]
}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + ACCESS_TOKEN
}
requests.post(url, data=json.dumps(data), headers=headers)
PUSHメッセージを送信する
先ほどはテキストメッセージに対する応答をBotが返しましたが、 PUSHメッセージはBotからユーザに対してメッセージを送る機能です。 Pythonで書くと以下のようになります。
url = 'https://api.line.me/v2/bot/message/push'
data = {
"to": "Ud1fe3db24904988cdc941eb50d5e4200",
"messages": [
{
"type": "text",
"text": "Hello, user!"
}
]
}
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + ACCESS_TOKEN
}
requests.post(url, data=json.dumps(data), headers=headers)
to にユーザIDを指定する必要があるため follow イベントでユーザIDを保持しておき ユーザを選択して送信するか全員に送信するような処理を作るのかなと思います。
LINE Beacon
LINE BeaconはLINEアプリのインストールされた端末が近づくと端末からイベントを発行できるデバイスです。 ビーコンの設定はこちらの画面で行います。 (通常のLINE@の画面からはまだ導線が無いようなので直打ちで行きます)
連携してiPhoneのBluetoothをONにしてBeaconに近づくと以下のJSONがWebhook URLにPOSTされます。
{
'events': [{
'beacon': {
'type': 'enter',
'hwid': '00000186ba'
},
'type': 'beacon',
'replyToken': 'd23dec8210ac428489343160560e93a0',
'source': {
'type': 'user',
'userId': 'Ud1fe3db24904988cdc941eb50d5e4200'
},
'timestamp': 1475281099785
}]
}
フォロー解除
Botをブロックすると送信されるようです。 これがきたユーザに対してはpushを送信できないようにするなどの制御をすると良いかも。
{
'events': [{
'type': 'unfollow',
'timestamp': 1475283608146,
'source': {
'userId': 'Ud1fe3db24904988cdc941eb50d5e4200',
'type': 'user'
}
}]
}
リンク
松木佑徒