Compare commits

...
3 changed files with 84 additions and 5 deletions
+65 -1
View File
@@ -84,6 +84,7 @@ dialogflow:
{
'project_id': { 'type': 'string' },
'credentials': { 'type': 'object' },
'language_code': { 'type': 'string' },
},
'required': ['project_id', 'credentials'],
'additionalProperties': false,
@@ -106,8 +107,71 @@ dialogflow:
'validation-messages':
{ 'JSON': 'Invalid JSON', 'required': 'Credentials is required' },
},
{
'label': 'Dialogflow Language Code',
'type': 'select',
'name': 'language_code',
'options': [
{ 'label': 'Bengali (bn)', 'value': 'bn' },
{ 'label': 'Bengali - Bangladesh (bn-BD)', 'value': 'bn-BD' },
{ 'label': 'Bengali - India (bn-IN)', 'value': 'bn-IN' },
{ 'label': 'Chinese - Cantonese (zh-HK)', 'value': 'zh-HK' },
{ 'label': 'Chinese - Simplified (zh-CN)', 'value': 'zh-CN' },
{ 'label': 'Chinese - Traditional (zh-TW)', 'value': 'zh-TW' },
{ 'label': 'Danish (da)', 'value': 'da' },
{ 'label': 'Dutch (nl)', 'value': 'nl' },
{ 'label': 'English (en)', 'value': 'en' },
{ 'label': 'English - Australia (en-AU)', 'value': 'en-AU' },
{ 'label': 'English - Canada (en-CA)', 'value': 'en-CA' },
{ 'label': 'English - Great Britain (en-GB)', 'value': 'en-GB' },
{ 'label': 'English - India (en-IN)', 'value': 'en-IN' },
{ 'label': 'English - US (en-US)', 'value': 'en-US' },
{ 'label': 'Filipino (fil)', 'value': 'fil' },
{ 'label': 'Filipino - The Philippines (fil-PH)', 'value': 'fil-PH' },
{ 'label': 'Finnish (fi)', 'value': 'fi' },
{ 'label': 'French (fr)', 'value': 'fr' },
{ 'label': 'French - Canada (fr-CA)', 'value': 'fr-CA' },
{ 'label': 'French - France (fr-FR)', 'value': 'fr-FR' },
{ 'label': 'German (de)', 'value': 'de' },
{ 'label': 'Hindi (hi)', 'value': 'hi' },
{ 'label': 'Indonesian (id)', 'value': 'id' },
{ 'label': 'Italian (it)', 'value': 'it' },
{ 'label': 'Japanese (ja)', 'value': 'ja' },
{ 'label': 'Korean (ko)', 'value': 'ko' },
{ 'label': 'Malay (ms)', 'value': 'ms' },
{ 'label': 'Malay - Malaysia (ms-MY)', 'value': 'ms-MY' },
{ 'label': 'Marathi (mr)', 'value': 'mr' },
{ 'label': 'Marathi - India (mr-IN)', 'value': 'mr-IN' },
{ 'label': 'Norwegian (no)', 'value': 'no' },
{ 'label': 'Polish (pl)', 'value': 'pl' },
{ 'label': 'Portuguese - Brazil (pt-BR)', 'value': 'pt-BR' },
{ 'label': 'Portuguese - Portugal (pt-PT)', 'value': 'pt-PT' },
{ 'label': 'Romanian (ro)', 'value': 'ro' },
{ 'label': 'Romanian - Romania (ro-RO)', 'value': 'ro-RO' },
{ 'label': 'Russian (ru)', 'value': 'ru' },
{ 'label': 'Sinhala (si)', 'value': 'si' },
{ 'label': 'Sinhala - Sri Lanka (si-LK)', 'value': 'si-LK' },
{ 'label': 'Spanish (es)', 'value': 'es' },
{ 'label': 'Spanish - Latin America (es-419)', 'value': 'es-419' },
{ 'label': 'Spanish - Spain (es-ES)', 'value': 'es-ES' },
{ 'label': 'Swedish (sv)', 'value': 'sv' },
{ 'label': 'Tamil (ta)', 'value': 'ta' },
{ 'label': 'Tamil - India (ta-IN)', 'value': 'ta-IN' },
{ 'label': 'Tamil - Sri Lanka (ta-LK)', 'value': 'ta-LK' },
{ 'label': 'Tamil - Malaysia (ta-MY)', 'value': 'ta-MY' },
{ 'label': 'Tamil - Singapore (ta-SG)', 'value': 'ta-SG' },
{ 'label': 'Telugu (te)', 'value': 'te' },
{ 'label': 'Telugu - India (te-IN)', 'value': 'te-IN' },
{ 'label': 'Thai (th)', 'value': 'th' },
{ 'label': 'Turkish (tr)', 'value': 'tr' },
{ 'label': 'Ukrainian (uk)', 'value': 'uk' },
{ 'label': 'Vietnamese (vi)', 'value': 'vi' },
{ 'label': 'Vietnamese - Vietnam (vi-VN)', 'value': 'vi-VN' },
],
'value': 'en-US',
},
]
visible_properties: ['project_id']
visible_properties: ['project_id', 'language_code']
google_translate:
id: google_translate
logo: google-translate.png
@@ -71,7 +71,8 @@ class Integrations::Dialogflow::ProcessorService < Integrations::BotProcessorSer
def detect_intent(session_id, message)
client = ::Google::Cloud::Dialogflow::V2::Sessions::Client.new
session = "projects/#{hook.settings['project_id']}/agent/sessions/#{session_id}"
query_input = { text: { text: message, language_code: 'en-US' } }
language_code = hook.settings['language_code'] || 'en-US'
query_input = { text: { text: message, language_code: language_code } }
client.detect_intent session: session, query_input: query_input
end
end
@@ -153,19 +153,33 @@ describe Integrations::Dialogflow::ProcessorService do
let(:google_dialogflow) { Google::Cloud::Dialogflow::V2::Sessions::Client }
let(:session_client) { double }
let(:session) { double }
let(:query_input) { { text: { text: message, language_code: 'en-US' } } }
let(:language_code) { 'es-419' }
let(:processor) { described_class.new(event_name: event_name, hook: hook, event_data: event_data) }
before do
hook.update(settings: { 'project_id' => 'test', 'credentials' => 'creds' })
hook.update(settings: { 'project_id' => 'test', 'credentials' => 'creds', 'language_code' => language_code })
allow(google_dialogflow).to receive(:new).and_return(session_client)
query_input = { text: { text: message, language_code: language_code } }
allow(session_client).to receive(:detect_intent).and_return({ session: session, query_input: query_input })
end
it 'returns intended response' do
response = processor.send(:get_response, conversation.contact_inbox.source_id, message.content)
expect(response[:query_input][:text][:text]).to eq(message)
expect(response[:query_input][:text][:language_code]).to eq('en-US')
expect(response[:query_input][:text][:language_code]).to eq(language_code)
end
context 'when language code is not set on the hook' do
before do
hook.update(settings: { 'project_id' => 'test', 'credentials' => 'creds' })
allow(session_client).to receive(:detect_intent)
.and_return({ session: session, query_input: { text: { text: message, language_code: 'en-US' } } })
end
it 'defaults to en-US' do
response = processor.send(:get_response, conversation.contact_inbox.source_id, message.content)
expect(response[:query_input][:text][:language_code]).to eq('en-US')
end
end
it 'disables the hook if permission errors are thrown' do