Существует 3 способа интеграции Dialogflow в ваше приложение для Android:
- использование Rest API, которое не является простой задачей и часто вызывает проблемы при создании полезных нагрузок запроса.
- с использованием Android-клиента от Dialogflow , который является наиболее стабильным и функциональным на данный момент, но не обновляется в течение года для новых функций бета-версии, поступающих в V2.
- с использованием Java API-клиента , который все еще развивается, но поддерживает функции бета-версии и регулярно обновляется.
Пользовательский интерфейс для Chatbot будет создан вами, поскольку в настоящее время поддержка отсутствует.
Чтобы интегрировать Android-клиент, следуйте приведенному ниже коду:
Зависимость:
// Dialogflow SDK dependencies
implementation 'ai.api:sdk:2.0.7@aar'
implementation 'ai.api:libai:1.6.12'
Инициировать чат-бота в onCreate:
final AIConfiguration config = new AIConfiguration("<Client Access Code>",
AIConfiguration.SupportedLanguages.English,
AIConfiguration.RecognitionEngine.System);
aiDataService = new AIDataService(this, config);
customAIServiceContext = AIServiceContextBuilder.buildFromSessionId(uuid);
aiRequest = new AIRequest();
aiRequest.setQuery(msg);
Call Dialogflow в асинхронном потоке:
try {
return aiDataService.request(request, customAIServiceContext);
} catch (AIServiceException e) {
e.printStackTrace();
}
Получить ответ от бота:
String botReply = aiResponse.getResult().getFulfillment().getSpeech();
Для интеграции Java API Client следуйте приведенному ниже коду:
Зависимость:
// Java V2
implementation 'com.google.cloud:google-cloud-dialogflow:0.67.0-alpha'
implementation 'io.grpc:grpc-okhttp:1.15.1'
Инициировать чат-бота в onCreate:
InputStream stream = getResources().openRawResource(R.raw.test_agent_credentials);
GoogleCredentials credentials = GoogleCredentials.fromStream(stream);
String projectId = ((ServiceAccountCredentials)credentials).getProjectId();
SessionsSettings.Builder settingsBuilder = SessionsSettings.newBuilder();
SessionsSettings sessionsSettings = settingsBuilder.setCredentialsProvider(FixedCredentialsProvider.create(credentials)).build();
sessionsClient = SessionsClient.create(sessionsSettings);
session = SessionName.of(projectId, uuid);
QueryInput queryInput = QueryInput.newBuilder().setText(TextInput.newBuilder().setText(msg).setLanguageCode("en-US")).build();
Call Dialogflow в асинхронном потоке:
try{
DetectIntentRequest detectIntentRequest = DetectIntentRequest.newBuilder()
.setSession(session.toString())
.setQueryInput(queryInput)
.build();
return sessionsClient.detectIntent(detectIntentRequest);
} catch (Exception e) {
e.printStackTrace();
}
Получить ответ от бота:
String botReply = response.getQueryResult().getFulfillmentText();
Надеюсь, это поможет вам:)