コンテンツにスキップ

Top

LINE のチャットボットを作る!

LINEのチャットボットを作る方法について述べます。

チャットボットとはチャットするロボットのことで、要はGUIから人間がなんかごちょごちょしてメッセージ送信するのではなく、プログラムが勝手にメッセージ送り続けるよ的なやつのことである。

ここでは、Windows 10 PC 上でバッチファイルをたたくことによりLINEのメッセージがフレンドに送信される方法について述べる。

まずはLINEのアカウントを作成

あたり前田のクラッカーですが、

LINEのアカウントが必要なので作りましょう。(既存のアカウントでもいいですが、実験中に失敗するとリアルフレンドにわけわからんメッセージが送り付けられてアババババとなるので、開発者用にアカウントを追加するとよいでしょう。メールアドレスはgmailでいくらでも作れます)

LINEのアカウントをLINE Developersに紐づける

LINEのチャットボットを作るには自身のアカウントをLINE Developersに登録しないといけません。

https://account.line.biz/signupに行き、"LINEアカウントで登録"をしましょう。

公式のチャットボットの作り方

そのままっちゃそのままですが、

ボットを作成する

というLINE公式の記事があります。

ですが、これ、Herokuを使うことを前提としており、正直、ただメッセージ送りたいだけなんですけど、というシンプルケースがよくわかりませんでした。

ので、Herokuを使わない方法を以下に記述します。

大まかな流れ

よくわからない用語が出てきますが、大まかな流れは以下の通りです。

LINE Developersにログインし、
1. プロバイダーを作成する 2. プロバイダー内にMessageAPIチャネルを作成する をする必要があります。

そこで作成された チャネルアクセストークン がプログラムで必要となります。

この手順は公式の、Message APIを始めよう が分かりよいです。

送信先のフレンド登録をしましょう

次に、メッセージを送信する先のフレンドをLINE公式アカウントに登録しましょう。
(このLINE公式アカウントってわけのわからない名称やめてほしい。要は今使っているメッセージを送信する人のアカウントのこと)

LINE公式アカウントに登録するには、プロバイダーコンソール内の(チャネル名)設定タブ内にあるQRコードを用いて友達登録すればよいです。

チャットボットは知らん人に好き放題投げれるわけではないです(スパムメールみたいなことはできないです)

お友達にしか送れないので、お友達を登録しておきましょう。

いなければお友達アカウントを作りましょう。(もちろんですが、お友達アカウントはLINE Developersに登録する必要はないです)

お友達全員にメッセージとスタンプを送ってみましょう。

注意!
実際にメッセージがLINE公式アカウントのフレンド全員にブロードキャストされます。
十分に注意しましょう。

set URL=https://api.line.me/v2/bot/message/broadcast
set CHANNEL_ACCESS_TOKEN=チャネルアクセストークン(チャネル設定タブの"チャネルアクセストークン(長期)"の文字列

set TEXT=\u3046\u3093\u3053\u3061\u3093\u3061\u3093
set STAMP_PACKAGE=446
set STAMP_ID=2014

rem 複数行にする際は ^ を記述
set SEND_DATA={ ^
  \"messages\":[ ^
    { ^
      \"type\":\"text\", ^
      \"text\":\"%TEXT%\" ^
    }, ^
    { ^
      \"type\": \"sticker\", ^
      \"packageId\": \"%STAMP_PACKAGE%\", ^
      \"stickerId\": \"%STAMP_ID%\" ^
    } ^
  ] ^
}

curl ^
  "%URL%" ^
  -v -X POST ^
  -H "Content-Type: application/json;charset=utf-8" ^
  -H "Authorization: Bearer %CHANNEL_ACCESS_TOKEN%" ^
  -d "%SEND_DATA%"

pause

登録しているフレンド全員にうんこちんちんとスタンプがいきわたったはずです。

チャンネルアクセストークン(長期)は、チャネル画面のMessage APIタブの中にあります。(ちょっとわかりにくい)

★利用できるスタンプの一覧は以下

スタンプ定義

お友達を指定してスタンプとメッセージを送ってみましょう。

宛先指定も容易なのですが、個人でやる分には送信先のユーザーIDを取得すること自体が大変ですのであまり現実的ではないです。
(認証済みアカウント若しくはプレミアムアカウントでなければならない)

取得方法の詳細は以下のURLで。
LINE公式アカウントを友だち追加したユーザーのリストを取得する

変更箇所は3か所です。

①broadcastとしていたURLをpushに変更
②宛先 To: を追加

set URL=https://api.line.me/v2/bot/message/push <= ★ここ!。broadcastからpushに
set CHANNEL_ACCESS_TOKEN=チャネルアクセストークン(チャネル設定タブの"チャネルアクセストークン(長期)"の文字列
set DESTINATION_USER_ID=送信先ユーザーID <= ★追加

set TEXT=\u3046\u3093\u3053\u3061\u3093\u3061\u3093
set STAMP_PACKAGE=446
set STAMP_ID=1990

rem 複数行にする際は ^ を記述
set SEND_DATA={ ^
  \"to\": \"%DESTINATION_USER_ID%\", ^  <= ★ここ。to列を追加
  \"messages\":[ ^
    { ^
      \"type\":\"text\", ^
      \"text\":\"%TEXT%\" ^
    }, ^
    { ^
      \"type\": \"sticker\", ^
      \"packageId\": \"%STAMP_PACKAGE%\", ^
      \"stickerId\": \"%STAMP_ID%\" ^
    } ^
  ] ^
}

curl ^
  "%URL%" ^
  -v -X POST ^
  -H "Content-Type: application/json;charset=utf-8" ^
  -H "Authorization: Bearer %CHANNEL_ACCESS_TOKEN%" ^
  -d "%SEND_DATA%"

pause

いかがでしたでしょうか。超簡単でしたね!

以上です。


日本語をユニコードシーケンスに変換するには?

先ほどのサンプルで日本語をユニコードシーケンスにしていましたが、プログラムで変換も容易ですが、すこしだけ使いたい程度なら、

https://tech-unlimited.com/escape-unicode.html

などのサイトを利用して変換するのが楽です。

画像は送れないの?

はい、今回の方法だと送れません。

理由はMessage APIでは画像ファイルそのものを送ることができないからです。

画像を送りたい場合はURLを送ることになります。

サムネイル画像と本画像を用意し、どこかのWebサーバー(httpsである必要があります)にその画像を置き、そのURLを送ることで画像送信できます。

画像を送りたいなら別途Webサーバーを用意するか、Herokuなどを用いるとよいかもしれませんね。