import { HTTP } from 'meteor/http'; import _ from 'underscore'; import { settings } from '../../../settings'; import { callbacks } from '../../../callbacks'; import { SystemLogger } from '../../../logger'; import { LivechatExternalMessage } from '../../../models/server'; import { normalizeMessageFileUpload } from '../../../utils/server/functions/normalizeMessageFileUpload'; let knowledgeEnabled = false; let apiaiKey = ''; let apiaiLanguage = 'en'; settings.get('Livechat_Knowledge_Enabled', function(key, value) { knowledgeEnabled = value; }); settings.get('Livechat_Knowledge_Apiai_Key', function(key, value) { apiaiKey = value; }); settings.get('Livechat_Knowledge_Apiai_Language', function(key, value) { apiaiLanguage = value; }); callbacks.add('afterSaveMessage', function(message, room) { // skips this callback if the message was edited if (!message || message.editedAt) { return message; } if (!knowledgeEnabled) { return message; } if (!(typeof room.t !== 'undefined' && room.t === 'l' && room.v && room.v.token)) { return message; } if (message.file) { message = normalizeMessageFileUpload(message); } // if the message hasn't a token, it was not sent by the visitor, so ignore it if (!message.token) { return message; } try { const response = HTTP.post('https://api.api.ai/api/query?v=20150910', { data: { query: message.msg, lang: apiaiLanguage, sessionId: room._id, }, headers: { 'Content-Type': 'application/json; charset=utf-8', Authorization: `Bearer ${ apiaiKey }`, }, }); if (response.data && response.data.status.code === 200 && !_.isEmpty(response.data.result.fulfillment.speech)) { LivechatExternalMessage.insert({ rid: message.rid, msg: response.data.result.fulfillment.speech, orig: message._id, ts: new Date(), }); } } catch (e) { SystemLogger.error('Error using Api.ai ->', e); } return message; }, callbacks.priority.LOW, 'externalWebHook');