mirror of
https://github.com/chatopera/cosin.git
synced 2025-06-25 02:47:10 +08:00
181 lines
5.8 KiB
Java
181 lines
5.8 KiB
Java
/*
|
||
* Copyright (C) 2018-2019 Chatopera Inc, <https://www.chatopera.com>
|
||
*
|
||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
* you may not use this file except in compliance with the License.
|
||
* You may obtain a copy of the License at
|
||
*
|
||
* http://www.apache.org/licenses/LICENSE-2.0
|
||
*
|
||
* Unless required by applicable law or agreed to in writing, software
|
||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
* See the License for the specific language governing permissions and
|
||
* limitations under the License.
|
||
*/
|
||
package com.chatopera.cc.plugins.chatbot;
|
||
|
||
import com.chatopera.cc.activemq.BrokerPublisher;
|
||
import com.chatopera.cc.basic.MainContext;
|
||
import com.chatopera.cc.cache.Cache;
|
||
import com.chatopera.cc.socketio.client.NettyClients;
|
||
import com.chatopera.cc.socketio.message.ChatMessage;
|
||
import com.chatopera.cc.model.Chatbot;
|
||
import com.chatopera.cc.socketio.message.Message;
|
||
import com.chatopera.cc.persistence.repository.ChatMessageRepository;
|
||
import com.chatopera.cc.persistence.repository.ChatbotRepository;
|
||
import com.chatopera.cc.basic.Constants;
|
||
import com.chatopera.cc.util.SerializeUtil;
|
||
import com.chatopera.cc.util.SystemEnvHelper;
|
||
import org.apache.commons.lang.StringUtils;
|
||
import org.slf4j.Logger;
|
||
import org.slf4j.LoggerFactory;
|
||
import org.springframework.beans.factory.annotation.Autowired;
|
||
import org.springframework.beans.factory.annotation.Value;
|
||
import org.springframework.stereotype.Component;
|
||
|
||
@Component
|
||
public class ChatbotProxy {
|
||
private final static Logger logger = LoggerFactory.getLogger(ChatbotProxy.class);
|
||
|
||
private final static String botServiecProvider = SystemEnvHelper.getenv(
|
||
ChatbotConstants.BOT_PROVIDER, ChatbotConstants.DEFAULT_BOT_PROVIDER);
|
||
|
||
@Autowired
|
||
private BrokerPublisher brokerPublisher;
|
||
|
||
@Autowired
|
||
private ChatbotRepository chatbotRes;
|
||
|
||
@Autowired
|
||
private ChatMessageRepository chatMessageRes;
|
||
|
||
@Autowired
|
||
private Cache cache;
|
||
|
||
/**
|
||
* publish Message into ActiveMQ
|
||
*
|
||
* @param data
|
||
* @param eventType
|
||
*/
|
||
public void publishMessage(final ChatMessage data, final String eventType) {
|
||
logger.info("[publishMessage] eventType {}", eventType);
|
||
brokerPublisher.send(Constants.INSTANT_MESSAGING_MQ_QUEUE_CHATBOT, SerializeUtil.serialize(data));
|
||
}
|
||
|
||
/**
|
||
* 使用chatbotID得到snsid
|
||
*
|
||
* @param chatbotID
|
||
* @return
|
||
*/
|
||
public static String resolveSnsidWithChatbotID(String chatbotID, String clientId) {
|
||
return StringUtils.remove(chatbotID, clientId.toLowerCase() + "_");
|
||
}
|
||
|
||
/**
|
||
* @param data
|
||
* @param direction
|
||
* @return
|
||
*/
|
||
public Message createMessage(ChatMessage data, String direction) {
|
||
if (!cache.findOneAgentUserByUserIdAndOrgi(data.getUserid(), data.getOrgi()).isPresent()) {
|
||
return null;
|
||
}
|
||
|
||
// 设置发送消息体
|
||
Message outMessage = new Message();
|
||
outMessage.setMessage(data.getMessage());
|
||
outMessage.setMessageType(data.getMsgtype());
|
||
outMessage.setCalltype(direction);
|
||
outMessage.setAgentUser(null);
|
||
outMessage.setSnsAccount(null);
|
||
if (StringUtils.isNotBlank(data.getSuggestmsg())) {
|
||
outMessage.setSuggest(data.getSuggest());
|
||
}
|
||
|
||
outMessage.setContextid(data.getContextid());
|
||
// FIXME 设置onlineUserName等信息
|
||
// outMessage.setFromUser(data.getUserid());
|
||
// outMessage.setToUser(data.getTouser());
|
||
outMessage.setChannelMessage(data);
|
||
outMessage.setCreatetime(Constants.DISPLAY_DATE_FORMATTER.format(data.getCreatetime()));
|
||
|
||
/**
|
||
* 保存消息
|
||
*/
|
||
chatMessageRes.save(data);
|
||
|
||
//将消息发送给 访客
|
||
NettyClients.getInstance().sendChatbotEventMessage(
|
||
data.getUserid(), MainContext.MessageType.MESSAGE.toString(), data);
|
||
|
||
return outMessage;
|
||
}
|
||
|
||
|
||
/**
|
||
* 发送聊天机器人消息
|
||
*
|
||
* @param data
|
||
* @param appid
|
||
* @param channel
|
||
* @param direction
|
||
* @param chatype
|
||
* @param msgtype
|
||
* @param userid
|
||
* @return
|
||
*/
|
||
public Message createMessage(
|
||
final ChatMessage data,
|
||
final String appid,
|
||
final String channel,
|
||
final String direction,
|
||
final String chatype,
|
||
final String msgtype,
|
||
final String userid,
|
||
final String orgi) {
|
||
final Chatbot c = chatbotRes.findBySnsAccountIdentifierAndOrgi(appid, orgi);
|
||
if (c == null) // ignore event if chatbot not exist.
|
||
{
|
||
return null;
|
||
}
|
||
|
||
data.setAiid(c.getId());
|
||
data.setOrgi(orgi);
|
||
data.setUserid(userid);
|
||
data.setAgentserviceid(data.getContextid());
|
||
data.setChatype(chatype);
|
||
data.setChannel(channel);
|
||
data.setMsgtype(msgtype);
|
||
data.setUsession(data.getUserid()); //agentUser作为 session id
|
||
data.setCalltype(direction);
|
||
data.setUpdatetime(System.currentTimeMillis());
|
||
return createMessage(data, direction);
|
||
}
|
||
|
||
/**
|
||
* 发送文字消息
|
||
*
|
||
* @param data
|
||
* @param direction
|
||
* @return
|
||
*/
|
||
public Message createTextMessage(final ChatMessage data, final String direction) {
|
||
data.setMsgtype(MainContext.MediaType.TEXT.toString());
|
||
return createMessage(data, direction);
|
||
}
|
||
|
||
/**
|
||
* 保存到数据库,发送到ChatMessage
|
||
*
|
||
* @param resp
|
||
*/
|
||
public void saveAndPublish(final ChatMessage resp) {
|
||
NettyClients.getInstance().sendChatbotEventMessage(
|
||
resp.getUserid(), MainContext.MessageType.MESSAGE.toString(), resp);
|
||
chatMessageRes.save(resp);
|
||
}
|
||
}
|