☺️
LINE Messaging APIをcurlで使う
Overview
LINE APIと作成したbotを使ってメッセージを自分のiPhoneですが送信する方法を今回ご紹介します。
summary
やること
- LIEN Developerのアカウントを作成する。
- こちらの記事の通りに設定すれば、作成した対象チャンネルにメッセージを送れます。
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