Una aplicación móvil Voice Bot

Flujo de diálogo en Flutter

Instrucciones originales (y desactualizadas) para esta aplicación. Mi implementación en este artículo.

  • Asegúrese de que utilice la Adaptación automática de voz al crear el agente.
  • Habilite la «API de Dialogflow» en la consola de GCP. Cree una cuenta de servicio con las credenciales y otorgue el rol de administrador de la API de Dialogflow.
  • Agregue la nueva clave JSON a la cuenta de servicio que acaba de crear y guárdela localmente en su computadora.
  • Instala Flutter y Android Studio. Ejecute «flutter create voicebot».
  • Configure las versiones de SDK para el paquete sound_stream en android/app/build.gradle: mínimo 21 y objetivo 30.
  • Da permiso a Internet y al micrófono en app/src/main/AndroidManifest.xml.
  • Instale sound_stream, rxdart, dialogflow_grpc
  • Mueva el nuevo archivo de clave JSON del último paso a una carpeta de activos. Cuidado con la llave.
  • Conecte su teléfono físico usando scrcpy y ejecute la aplicación
  • En un nivel alto, el árbol de widgets es MyHomePage => chat (con estado) => mensaje (sin estado). STT es voz a texto.

    Presenta la interfaz de usuario del chat y maneja Dialogflow. La interfaz de usuario tiene

  • ListView para mostrar todas las burbujas de mensajes.
  • Campo de texto para escribir.
  • IconButton para enviar un mensaje. Cuando se presiona, necesitamos enviar el texto.
  • IconButton para usar el micrófono. Cuando se presiona, necesitamos detener o manejar la transmisión de audio.
  • Necesitamos algunos estados:

      final List<ChatMessage> _messages = <ChatMessage>[];
    final TextEditingController _textController = TextEditingController();
    late DialogflowGrpcV2Beta1 dialogflow;
    bool _isRecording = false; // if mic is recording
    RecorderStream _recorder = RecorderStream();
    StreamSubscription? _recorderStatus;
    StreamSubscription<List<int>>? _audioStreamSubscription;
    BehaviorSubject<List<int>>? _audioStream;
  • conseguir cliente de flujo de diálogo a través de la cuenta de servicio en initState(). Esto se hace usando la credencial json que descargamos API de Dialogflow.
  • A detenerStreamdetenemos RecorderStream, cancelamos StreamSubscription y cerramos _audioStream(BehaviorSubject)
  • A handleStreampuede decidir las frases de diálogo (específicas de la aplicación), la configuración de audio (hercios de muestra, codificación) y luego obtener la intención escuchando dialogflow.streamingDetectIntent() dada la transmisión de audio.
  • A enviarTextorecibe una respuesta de dialogflow.detectIntent() dado el texto y actualiza la lista de burbujas de mensajes en la interfaz de usuario.
  • Cada mensaje tiene dos partes horizontales: CircleAvatar y el texto del mensaje. Opcionalmente, el texto del mensaje puede ser una columna para apilar las iniciales del remitente encima del texto. La única diferencia entre el mensaje del bot y su mensaje es que el bot tiene CrossAxisAlignment.start para alinearse a la izquierda mientras que el suyo lo tiene como CrossAxisAlignment.end para alinearse a la derecha

    Añade intenciones y respuestas. También puede usar Knowledge Connector.

    Si le gusta este tutorial, también puede encontrar útiles los 3 niveles de pruebas de aleteo. Son parte de mi serie Become Flutter Comfort en 23 días.

  • Producto de flujo de diálogo
  • Intención de flujo de diálogo
  • Conectores de conocimiento de Dialogflow
  • Deja un comentario

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Scroll al inicio