LoginSignup
2
3

More than 1 year has passed since last update.

メモ: LINE Messaging API でプッシュ通知、オウム返し、画像を送るサンプル

Last updated at Posted at 2018-08-31

新規登録

APIの準備

channel_secret (少し長い文字)

image.png

channel_access_token (長い文字)

image.png


応答メッセージ

php

mkdir linebot && cd linebot

composer require linecorp/line-bot-sdk

オウム返し

<?php

$channelSecret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$channelToken  = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

require_once __DIR__ . '/vendor/autoload.php';

$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient($channelToken);
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => $channelSecret]);
$sign = $_SERVER["HTTP_" . \LINE\LINEBot\Constant\HTTPHeader::LINE_SIGNATURE];
$events = $bot->parseEventRequest(file_get_contents('php://input'), $sign);

foreach ($events as $event) {
    if (!($event instanceof \LINE\LINEBot\Event\MessageEvent) ||
        !($event instanceof \LINE\LINEBot\Event\MessageEvent\TextMessage)) {
        continue;
    }
    $bot->replyText($event->getReplyToken(), $event->getText());
}

画像を送るサンプル

<?php
require_once __DIR__ . '/vendor/autoload.php';

use LINE\LINEBot;
use LINE\LINEBot\HTTPClient\CurlHTTPClient;
use LINE\LINEBot\MessageBuilder\ImageMessageBuilder;
use LINE\LINEBot\MessageBuilder\MultiMessageBuilder;

$channelSecret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$channelToken  = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

$bot = new LINEBot(new CurlHTTPClient($channelToken), [
    'channelSecret' => $channelSecret
]);

$body  = file_get_contents('php://input');
$json  = json_decode($body);
$event = $json->events[0];

$total = mt_rand(1, 5);
$imageRoot = 'https://s3-ap-northeast-1.amazonaws.com/noplan1989-demo/line';
$messageBuilder = new MultiMessageBuilder();

for ($i = 0; $i < $total; $i++) {
    if ($i === 4 && mt_rand(1, 5) === 1) {
        $path = 'sushi';
    } else {
        $path = "alive/{$i}";
    }
    $messageBuilder->add(new ImageMessageBuilder(
        "{$imageRoot}/{$path}/original.png",
        "{$imageRoot}/{$path}/preview.png"
    ));
}

$bot->replyMessage($event->replyToken, $messageBuilder);

LINE Bot Designer

  • LINE Bot Designer というのものある。windowsとmacに用意されている。

LINE Bot Designerを使えば、プログラミングの知識がなくても簡単かつ短時間でLINE Botのプロトタイプを作成できます。ご希望のシナリオに沿って、自由にチャットボットを設計できます。

push通知

userID

image.png

<?php
$channel_access_token  = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

// Your user ID
// Messaging API 管理画面で確認 これくらいながいやつ
$LINE_USER_ID = "Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

// LINE Messaging API プッシュメッセージを送る
$LINE_PUSH_URL = "https://api.line.me/v2/bot/message/push";


// 送信するメッセージ
$message_1 = date("Y-m-d H:i:s");
$message_1.= "です";

// リクエストヘッダ
$header = [
	'Authorization: Bearer ' . $channel_access_token,
	'Content-Type: application/json'
];

// 送信するメッセージの下準備
$post_values = array(
	[
		"type" => "text",
		"text" => $message_1
	],
);

// 送信するデータ
$post_data = [
	"to" => $LINE_USER_ID,
	"messages" => $post_values
];

// デバグ確認用のログ:送信データ
$file = './post_data.txt';
file_put_contents($file, json_encode($post_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), FILE_APPEND);
file_put_contents($file, PHP_EOL.PHP_EOL, FILE_APPEND);

// cURLを使った送信処理の時は true
// file_get_contentsを使った送信処理の時は false
$USE_CURL = true;

if ($USE_CURL) {
	// cURLを使った送信処理
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_URL, $LINE_PUSH_URL);
	curl_setopt($curl, CURLOPT_POST, true);
	curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
	curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($post_data));
	$result = curl_exec($curl);
	curl_close($curl);
}
else
{
	// file_get_contentsを使った送信処理
	$context = stream_context_create(array(
		'http' => array(
			'method' => 'POST',
			'header' => implode("\r\n", $header),
			'content'=>  json_encode($post_data),
			'ignore_errors' => true
		)
	));

	$result = file_get_contents(
		$LINE_PUSH_URL,
		false,
		$context
	);
}

// デバグ確認用のログ:受信レスポンス
$file = './result.txt';
file_put_contents($file, $result, FILE_APPEND);
file_put_contents($file, PHP_EOL.PHP_EOL, FILE_APPEND);

友達数を取得

channel_access_token='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'


curl -v -X GET https://api.line.me/v2/bot/insight/followers?date=20220920 \
-H 'Authorization: Bearer '$channel_access_token

友達のuserID一覧を取得

  • 初期のアカウント権限では取得ができなかった。(認証済みアカウントまたはプレミアムアカウントのみで可能)

{"message":"Access to this API is not available for your account"}

channel_access_token='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

curl -v -X GET https://api.line.me/v2/bot/followers/ids \
-H "Authorization: Bearer ${channel_access_token}" \
-d 'limit=1000' \
-G
友だち数と一致しない場合があります。

対象のLINE公式アカウントを友だち追加した後にブロックしたユーザー
プロフィール情報の取得に同意していないユーザー

アカウント連携

LINE Notify

curl -X POST -H 'Authorization: Bearer [access_token]' \
   -F 'message=foobar' \
   https://notify-api.line.me/api/notify
2
3
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
2
3