8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LINEにcurlでメッセージ送信する方法

Last updated at Posted at 2019-11-03

もくじ

  • きっかけ
  • LINEアカウント作成
  • BOT作成と動作確認
  • 送信先IDの取得
  • 理解するためのイメージ図
  • curlでメッセージ送信

きっかけ

LINEで自動的にメッセージ送信するアプリでも作成しようと思い、LINEのAPIを利用してみることにしました。
curlでメッセージ送信できないかなあ、なんて思いながら作業を開始しました。
結果、LINE_API + AWS(APIGateway + lambda)を利用して、curlでメッセージ送信ができました。
その時のノウハウをメモしておこうと思い、また、いまいち既存の情報だと個人的にピンとこなかったこともあって、投稿しました。

LINEアカウント作成

まずは普通にLINEのアカウントを作成します。
LINEは「ID」「パスワード」をシステムに登録しなくてもアカウントを作成できますが、「ID」「パスワード」を登録して、LINEアカウントを作成してください。
もうすでに作成してますって人は、この作業は不要です。

BOT作成と動作確認

次に、BOTを作成します。
つまるところ、開発用のアカウントを作成します。
公式サイトを見ていると、BOTやプロバイダ、チャネルといった用語が出てきます。
詳細まで理解している方は明確に区別できるのでしょうが、理解力が乏しいためか、なんとなくでしか理解できませんでした。
結論として、はじめはすべて≒(ニアリーイコール)アカウントと考えてもらって差し支えないと思います。

次に、プロバイダーリストにプロバイダーを追加します。
自動送信したり返信するための新しいLINEアカウントを作成すると理解してもらって問題ありません。

20191103_1.jpg

20191103_2.jpg

作成したら、開発用アカウントとチャットができることを確認してみましょう。
画面下部にQRコードがあるので、最初に作成した自分のアカウントで、トークに招待してみましょう。

送信先IDの取得

BOTの動作確認できたら、既存のチャットルームにメッセージを送信するために、webhookイベントのURLを設定します。
なぜこんな作業が必要かというと、メッセージを送信する際に、送信先のユーザーIDやルームIDが必要なためです。
これらは、通常のLINEユーザーの操作では取得できません、LINEアプリを使って簡単には取得できませんとありました。

20191103_3.jpg

上記の赤枠の箇所を変更します。

webhookイベントとは、
メッセージを受信したときに決まったメッセージを設定されたURLに送信しますよっていう機能です。

ここで、AWSのAPIGateway + lambdaが登場します。
webhookURLに、APIGatewayのURLを設定します。

lambdaのソースは下記のサンプルをそのまま利用できるはずです。
pythonです。

lambda_function.py

import json
import traceback

# ==================================================
# lambdaで初めに呼び出される関数
# ==================================================
def lambda_handler(event, context):
    try:
        # リクエスト内容をログ出力
        log(event, 'receive request.')
        createResponse()
        
    except:
        # 想定外エラー発生時
        logger.log(traceback.format_exc())
        traceback.print_exc()
        
        return createResponse()

# ==================================================
# レスポンスを生成
# ==================================================
def createResponse():
    return {
            'isBase64Encoded': False,
            'statusCode': 200,
            'headers': {},
            'body': {}
        }

# ==================================================
# ログ出力
# ==================================================
def log(event, msg):
    print('EVENT >> ' + str(event))
    print('LOG >> ' + str(msg))

APIGatewayの設定はこんな感じ

20191103_5.jpg

cloudwatchにログが出力されます。
この中に、userIdやroomIdが出力されているはずです。
これらを送信先として指定できます。

20191103_6.jpg

理解するためのイメージ図

いろいろ出てきました。
わかりやすく、イメージ図にしてみました。
厳密には違う箇所が多々あるのですが、私の独断と偏見でこう考えるとわかりやすいと思い、作成しています。

20191103_4.jpg

①携帯電話からhttp電文が送信される(= LINEでメッセージ送信)
②サーバは受信したメッセージをルームにいる携帯電話・BOTに送信する
③BOTにwebhookの送信先URLとして登録したURL先に、POST電文が送信される

curlでメッセージ送信

いよいよ、curlでメッセージ送信してみます。
LINEでメッセージ送信することはpushと呼ばれており、APIが公開されていますのでこれに従って送信します。
https://developers.line.biz/ja/reference/messaging-api/#send-push-message

ちなみに、私はASRっていうchromeの拡張機能を使いました。
http電文が送信できるなら何でも良いと思います。

メソッド POST
URL https://api.line.me/v2/bot/message/push
Content-Type application/json
Authorization Bearer 発行した認証Token
※認証TokenはLINEのDevelopersの画面から発行できます。
body

{
  "to": 取得したID,
  "messages":[
        {
            "type":"text",
            "text":"こんな感じで自動で送信できます。"
        }
    ]
}
8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?