node-red-contrib-chatbot
Version:
REDBot a Chat bot for a full featured chat bot for Telegram, Facebook Messenger and Slack. Almost no coding skills required
58 lines (52 loc) • 1.61 kB
JavaScript
//import _ from 'lodash';
import { useNodeRedSocket } from '../../../src/hooks/socket';
import useReducer from '../../../src/hooks/use-reducer';
const useSimulator = ({
/*activeChatbots,*/
chatbotId,
onError = () => {}
}) => {
const { state, dispatch } = useReducer({
simulator: {
messages: {},
//transport: !_.isEmpty(activeChatbots) ? activeChatbots[0].transport : null,
//nodeId: !_.isEmpty(activeChatbots) ? activeChatbots[0].nodeId : null,
globals: null,
language: 'en',
user: null
}
});
const { sendMessage } = useNodeRedSocket({
onReceive: (topic, payload) => {
if (topic === 'simulator') {
dispatch({ type: 'message', payload, topic, chatbotId });
} else if (topic === 'simulator_error') {
onError(payload);
}
}
});
return {
state,
dispatch,
sendMessage: (text, { echo = true } = {}) => {
const { /*transport,*/ language, user: impersonatedUser } = state.simulator;
sendMessage('simulator', {
//transport,
chatbotId,
language,
userId: impersonatedUser != null ? impersonatedUser.userId : 'simulator',
username: impersonatedUser != null ? impersonatedUser.username : 'testUser',
firstName: impersonatedUser != null ? impersonatedUser.first_name : null,
lastName: impersonatedUser != null ? impersonatedUser.last_name : null,
payload: {
content: text,
type: 'message'
},
simulatorOptions: {
echo
}
});
}
};
};
export default useSimulator;