Flutter 앱과 Amazon Lex 통합
현재 Amplify는 인증, 저장소 및 Flutter용 분석을 지원합니다.
REST API를 사용하여 Lex와 통신합니다.
무엇을 사용할까요💻?
우리는 봇과 채팅을 만들고 작업을 효율적이고 쉽게 만들기 위해 flutter pub의 몇 가지 놀라운 패키지를 사용할 것입니다.
시작하려면 다음 패키지를 설치해야 합니다.
이제 우리의 비전은 매우 명확하고 프로젝트를 시작할 준비가 되었습니다.
시작하자
일반적으로 백엔드를 먼저 설정한 다음 프런트엔드를 연결합니다. 다행히 AWS에서 Amazon Lex를 성공적으로 설정했습니다.
1. 백엔드 파일 설정
lex 봇과 상호 작용하는 코드를 포함할
bot_service.dart
라는 파일을 만들었습니다.import 'dart:convert';
import 'dart:developer';
import 'package:amazon_cognito_identity_dart_2/sig_v4.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:sigv4/sigv4.dart';
class BotService {
Map<String,dynamic> result;
String botName= "<NAME_OF_BOT>";
String kAccessKeyId = '<ACCESS_KEY>';
String kSecretAccessKey = '<SECRET_ACCESS_KEY>';
String botAlias= "<BOT_ALIAS>";
String botAWSRegion= "<AWS_LEX_REGION>";
Future<Map<String,dynamic>> callBot(String message) async {
var response;
String requestUrl= "https://runtime.lex."+botAWSRegion+".amazonaws.com/bot/"+botName+"/alias/"+botAlias+"/user/1234/text";
Sigv4Client client = Sigv4Client(
region: botAWSRegion,
serviceName: 'lex',
defaultContentType: 'application/json; charset=utf-8',
keyId: kAccessKeyId,
accessKey: kSecretAccessKey,
);
final request = client.request(
requestUrl,
method: 'POST',
body: jsonEncode({'inputText': message}),
);
response = await http.post(request.url,
headers: request.headers, body: request.body);
result = jsonDecode(response.body);
return result;
}
}
Amazon Lex 봇의 필수 값과 지역을 삽입하는 동안 특별히 주의하십시오.
<ACCESS_KEY>
및 <SECRET_ACCESS_KEY>
에서 Amazon 역할의 암호 값을 삽입하거나 봇에 대한 새 역할을 생성하고 Amazon Lambda 함수를 호출하도록 허용할 수 있습니다. 봇).2. 채팅 UI 만들기
채팅 UI를 만들기 위해 메시지 처리 및 채팅 메시지 모델과 같이 이미 구축된 많은 기능을 제공하는 패키지
flutter_chat_ui
를 사용하겠습니다.import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:flutter_chat_ui/flutter_chat_ui.dart';
import 'package:flutter_chat_types/flutter_chat_types.dart' as types;
import 'package:uuid/uuid.dart';
import './bot_service.dart';
class BotScreen extends StatefulWidget {
const BotScreen({Key? key}) : super(key: key);
@override
_BotScreenState createState() => _BotScreenState();
}
class _BotScreenState extends State<BotScreen> {
List<types.Message> messages=[];
final _user = const types.User(id: '1234556');
final _bot = const types.User(id: "123");
//id of bot and user doesn't matter here as we have only pair interaction
BotService _botService = BotService();
@override
void initState() {
super.initState();
_loadMessages();
}
void _addMessage(types.Message message) async {
setState(() {
messages.insert(0, message);
});
log("${message.toJson()["text"]}");
var data = await _botService.callBot(message.toJson()["text"]);
log("#####${data['message']}");
setState(() {
messages.insert(0, botMessageReply(data['message']));
});
}
types.Message botMessageReply(String message) {
return types.TextMessage(
author: _bot,
createdAt: DateTime.now().millisecondsSinceEpoch,
id: const Uuid().v4(),
text: message,
);
}
void _handleSendPressed(types.PartialText message) {
final textMessage = types.TextMessage(
author: _user,
createdAt: DateTime.now().millisecondsSinceEpoch,
id: const Uuid().v4(),
text: message.text,
);
_addMessage(textMessage);
}
void _loadMessages() async {
List<types.Message> messagesList = [];
Future.delayed(Duration(milliseconds: 300), () {
messagesList.add(types.TextMessage(
author: _bot,
createdAt: DateTime.now().millisecondsSinceEpoch,
id: const Uuid().v4(),
text: "Hello. My name is TUTU- your bot. How can I help you?",
));
setState(() {
messages = messagesList;
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar:AppBar(automaticallyImplyLeading: false,title:Text("BOT"),backgroundColor:Colors.purpleAccent),
body: Chat(
messages: messages,
showUserNames: true,
onSendPressed: _handleSendPressed,
user: _user,
),
);
}
}
3. 최종 제품입니다🔥🔥
봇 화면
축하합니다🎉
잘하셨습니다. Flutter 앱을 Lex 봇에 연결했습니다... 잘하셨습니다!
이 기사와 관련하여 질문이나 우려 사항이 있는 경우 알려주시면 최선을 다해 돕거나 자세히 알아보겠습니다.
Reference
이 문제에 관하여(Flutter 앱과 Amazon Lex 통합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/monik/integrate-amazon-lex-with-flutter-app-2ed0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)