message.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. const { getUserDefaultMethod, checkAccessToken } = require('./token');
  2. const { pushWeChatMessage } = require('./wechat');
  3. const { pushWeChatCorpMessage } = require('./wechat-corp');
  4. const { pushEmailMessage } = require('./email');
  5. const { Message } = require('../models');
  6. async function processMessage(userPrefix, message) {
  7. if (!checkAccessToken(userPrefix, message.token)) {
  8. return {
  9. success: false,
  10. message: `invalid access token`,
  11. };
  12. }
  13. if (message.email) {
  14. // If message has the attribute "email", override its type.
  15. message.type = 'email';
  16. }
  17. if (!message.type) {
  18. message.type = getUserDefaultMethod(userPrefix);
  19. }
  20. if (message.content && message.type !== 'email') {
  21. // If message is not email type, we should save it because we have to serve the page.
  22. message = await Message.create(message, { raw: true });
  23. }
  24. let result;
  25. switch (message.type) {
  26. case 'test': // WeChat message
  27. result = await pushWeChatMessage(userPrefix, message);
  28. break;
  29. case 'email': // Email message
  30. result = await pushEmailMessage(userPrefix, message);
  31. break;
  32. case 'corp': // WeChar corp message
  33. result = await pushWeChatCorpMessage(userPrefix, message);
  34. break;
  35. default:
  36. result = {
  37. success: false,
  38. message: `unsupported message type ${message.type}`,
  39. };
  40. break;
  41. }
  42. return result;
  43. }
  44. module.exports = {
  45. processMessage,
  46. };