Бот диалогового потока не отвечает в приложении flutter

#flutter #dart #bots #dialogflow-es

# #трепетание #dart #боты #dialogflow-es

Вопрос:

Я клонировал этот проект с Github https://github.com/neon97/chatbot_dialogflow но я не получаю ответа от бота.

Я добавил правильные учетные данные Dialogflow JSON в папку YAML, и, похоже, они в порядке. Любая помощь будет высоко оценена.

Ниже я добавляю код main.dart и pubspec

Main.dart

 import 'package:bubble/bubble.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dialogflow/dialogflow_v2.dart';

void main() {
  runApp(MaterialApp(
    home: MyApp(),
    debugShowCheckedModeBanner: false,
  ));
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  void response(query) async {
    AuthGoogle authGoogle = await AuthGoogle(
            fileJson: "assets/smartstudentguide-vfml-3892228c2f8e.json")
        .build();
    Dialogflow dialogflow =
        Dialogflow(authGoogle: authGoogle, language: Language.english);
    AIResponse aiResponse = await dialogflow.detectIntent(query);
    setState(() {
      messsages.insert(0, {
        "data": 0,
        "message": aiResponse.getListMessage()[0]["text"]["text"][0].toString()
      });
    });
  }

  final messageInsert = TextEditingController();
  // ignore: deprecated_member_use
  List<Map> messsages = List();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(
          "Smart Student Guide",
        ),
        backgroundColor: Colors.deepOrange,
      ),
      body: Container(
        child: Column(
          children: <Widget>[
            Flexible(
                child: ListView.builder(
                    reverse: true,
                    itemCount: messsages.length,
                    itemBuilder: (context, index) => chat(
                        messsages[index]["message"].toString(),
                        messsages[index]["data"]))),
            Divider(
              height: 5.0,
              color: Colors.deepOrange,
            ),
            Container(
              padding: EdgeInsets.only(left: 15.0, right: 15.0),
              margin: const EdgeInsets.symmetric(horizontal: 8.0),
              child: Row(
                children: <Widget>[
                  Flexible(
                      child: TextField(
                    controller: messageInsert,
                    decoration: InputDecoration.collapsed(
                        hintText: "Send your message",
                        hintStyle: TextStyle(
                            fontWeight: FontWeight.bold, fontSize: 18.0)),
                  )),
                  Container(
                    margin: EdgeInsets.symmetric(horizontal: 4.0),
                    child: IconButton(
                      
                        icon: Icon(
                          
                          Icons.send,
                          size: 30.0,
                          color: Colors.deepOrange,
                        ),
                        onPressed: () {
                          if (messageInsert.text.isEmpty) {
                            print("empty message");
                          } else {
                            setState(() {
                              messsages.insert(0,
                                  {"data": 1, "message": messageInsert.text});
                            });
                            response(messageInsert.text);
                            messageInsert.clear();
                          }
                        }),
                  )
                ],
              ),
            ),
            SizedBox(
              height: 15.0,
            )
          ],
        ),
      ),
    );
  }

  //for better one i have use the bubble package check out the pubspec.yaml

  Widget chat(String message, int data) {
    return Padding(
      padding: EdgeInsets.all(10.0),
      child: Bubble(
          radius: Radius.circular(15.0),
          color: data == 0 ? Colors.deepOrange : Colors.orangeAccent,
          elevation: 0.0,
          alignment: data == 0 ? Alignment.topLeft : Alignment.topRight,
          nip: data == 0 ? BubbleNip.leftBottom : BubbleNip.rightTop,
          child: Padding(
            padding: EdgeInsets.all(2.0),
            child: Row(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                CircleAvatar(
                  backgroundImage: AssetImage(
                      data == 0 ? "assets/bot.png" : "assets/user.png"),
                ),
                SizedBox(
                  width: 10.0,
                ),
                Flexible(
                    child: Text(
                  message,
                  style: TextStyle(
                      color: Colors.white, fontWeight: FontWeight.bold),
                ))
              ],
            ),
          )),
    );
  }
}
 

pubspec.yaml

 name: chatbot_dialogflow
description: A new Flutter project.
publish_to: 'none' 

version: 1.0.0 1

environment:
  sdk: ">=2.7.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  cupertino_icons: ^0.1.3
  flutter_dialogflow: ^0.1.3
  bubble: ^1.1.9 1

dev_dependencies:
  flutter_test:
    sdk: flutter


flutter:


  uses-material-design: true

  assets:
    - assets/smartstudentguide-vfml-3892228c2f8e.json
    - assets/bot.png
    - assets/user.png
 

Я создал учетную запись служб и создал учетные данные JSON, загрузил файл и добавил его в папку активов. приложение успешно запускается, но бот не отвечает на запросы. Пожалуйста, помогите мне с тем, что я новичок в flutter и только начал его изучать.
Заранее благодарю.

Ответ №1:

Я не знаю точной проблемы в вашем коде. Просто чтобы внести свой вклад. Я хочу упомянуть об этом репозитории. Этот подход идеально подходит для меня при интеграции чат-бота dialogflow в мое приложение flutter

https://github.com/Aditsyal/flutter_chatBot

Просто скопируйте dialog_flow.dart и fact_message.перейдите из библиотеки, перейдите к классу FlutterFactsChatBot(), когда ваш виджет нажат. пользовательский виджет чата, который я использую, упоминается ниже.

// страница 3 упоминается FlutterFactsChatbot() в main.dart в качестве маршрута. Виджет factBot(контекст BuildContext) { возвращает контейнер (выравнивание: Alignment.bottomRight, дочерний элемент: FloatingActionButton( materialTapTargetSize: MaterialTapTargetSize.padded, дочерний элемент: Центр (дочерний элемент: значок (Icons.chat), ), высота: 4.0, цвет фона: Colors.blue, onPressed: () => Navigator.pushNamed(контекст, ‘/ page3’), ) ); }

Ответ №2:

Если вы все еще сталкиваетесь с проблемой интеграции чат-бота Dialogflow в свое приложение Flutter, то существует множество платформ, поддерживающих интеграцию чат-бота Dialogflow.

Ниже приведены шаги для достижения того же результата:

  1. Интегрируйте чат-бота Dialogflow в стороннюю платформу, такую как Kommunicate
  2. После завершения интеграции бота добавьте функцию чата в свое приложение flutter. Ознакомьтесь с документацией по интеграции чата в приложение flutter.