Library of the LINE Messaging API for Dart
IMPORTANT: This is not an official SDK by LINE
We make it easy to developers to code their bots with Dart! A few steps to create a parser and bot to handle requests and reply messages. The library is based on the official LINE Messaging API Document and inspired by the official SDK: line-bot-sdk-python
- Validation with signature from
x-line-signature
- Support parser and test cases for webhook event objects
- Support the following APIs:
- Reply message
- Push message (Not yet test)
- Get user profile
- Get bot info
- Get bot followers
import 'dart:convert';
import 'dart:io';
import 'package:line_bot/line_bot.dart';
Future main() async {
var envVars = Platform.environment;
var lineChannelSecret = envVars['LINE_CHANNEL_SECRET'];
var lineChannelAccessToken = envVars['LINE_CHANNEL_ACCESS_TOKEN'];
var lineBotApi = LineBotApi(lineChannelAccessToken);
var webhookParser = WebhookParser(lineChannelSecret);
var server = await HttpServer.bind(
InternetAddress.loopbackIPv4,
8080,
);
await for (var request in server) {
if (request.method == 'POST' && request.uri.path == '/callback') {
handleRequest(request, webhookParser, lineBotApi);
} else {
handleUnSupportedRequest(request);
}
}
}
void handleRequest(HttpRequest request, WebhookParser webhookParser,
LineBotApi lineBotApi) async {
WebhookEvent message;
var response = request.response;
var content = await utf8.decoder.bind(request).join();
try {
message = webhookParser.parser(
content.toString(), request.headers['x-line-signature'][0]);
} on InvalidSignatureError {
await response
..statusCode = HttpStatus.badRequest
..write('InvalidSignatureError')
..close();
return;
}
if (message.events.isNotEmpty) {
var messages = [
Message(type: 'text', text: message.events[0].message.text)
];
await lineBotApi.replyMessage(message.events[0].replyToken, messages);
}
response
..statusCode = HttpStatus.ok
..write('Request Accepted.')
..close();
}
void handleUnSupportedRequest(HttpRequest request) {
var response = request.response;
response
..statusCode = HttpStatus.methodNotAllowed
..write('Unsupported request: ${request.method}.')
..close();
}
Please file feature requests and bugs at the issue tracker.