☺️

LINE Messaging APIをcurlで使う

2023/09/11に公開

Overview

https://developers.line.biz/ja/docs/messaging-api/sending-messages/
LINE APIと作成したbotを使ってメッセージを自分のiPhoneですが送信する方法を今回ご紹介します。

summary

やること

  1. LIEN Developerのアカウントを作成する。
  2. こちらの記事の通りに設定すれば、作成した対象チャンネルにメッセージを送れます。

https://qiita.com/tokkun5552/items/c515f11b1d5496971459
https://zenn.dev/tokku5552/articles/create-line-provider

defaultのコマンドだろ、英語しか送信できないので、日本語に対応したコマンドに修正します。

トークンは、この長い暗号みたいな奴

16TrT+Agv0IrBxa2D/egT0IDMW**********************************bey4DyZ4FGCVA7pHxeaABCXikEtPNEE0wsnr********************************

ユーザーIDは自分で控えたものですね。

*******U27dd896e6550107******

こちらが、日本語対応したコマンド

curl -X POST https://api.line.me/v2/bot/message/push \
-H "Content-Type: application/json" \
-H "Authorization: Bearer チャネルアクセストークン" \
-d "{
  \"to\": \"ユーザーID\",
  \"messages\": [
    {
      \"type\": \"text\",
      \"text\": \"こんにちは、APIからのメッセージです!\"
    }
  ]
}"

自分のLINEにチャンネルを作成したら、curlをターミナルで実行してみましょう!
成功したら、このようなメッセージが表示されます!

thoughts

躓いた点は、英語でしかメッセージを送れなかったことですね。curlコマンドの知識が必要でした。
私はそんな知識ないので、Chat GPTに教えてもらいました笑
文字数にも制限があるのか、失敗することもありますね。

Flutterでやる場合はこんな書き方をします。ご興味ある方は試してみてください。Flutter Webだと失敗するみたいです😇

main.dart
// ignore_for_file: prefer_const_declarations

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'LINE Message Sender',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: LineMessageSender(),
    );
  }
}

class LineMessageSender extends StatefulWidget {
  
  _LineMessageSenderState createState() => _LineMessageSenderState();
}

class _LineMessageSenderState extends State<LineMessageSender> {
  final _textController = TextEditingController();

  Future<void> sendLineMessage(String message) async {
    final url = 'https://api.line.me/v2/bot/message/push';
    final headers = {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer ******************49yjfARAXQdB04t89/1O/w1cDnyilFU=', // トークンを正しいものに置き換えてください
    };

    final body = jsonEncode({
      "to": "U27dd896e********",// 送信先のユーザーIDを正しいものに置き換えてください
      "messages": [{"type": "text", "text": message}]
    });

    final response = await http.post(
      Uri.parse(url),
      headers: headers,
      body: body,
    );

    if (response.statusCode == 200) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('メッセージを送信しました。')),
      );
    } else {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('メッセージの送信に失敗しました。')),
      );
    }
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('LINE Message Sender')),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              controller: _textController,
              decoration: InputDecoration(labelText: 'メッセージを入力してください'),
            ),
            ElevatedButton(
              onPressed: () {
                sendLineMessage(_textController.text);
              },
              child: Text('メッセージを送信'),
            ),
          ],
        ),
      ),
    );
  }
}

Discussion