message.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. const {
  2. getUserDefaultMethod,
  3. checkAccessToken,
  4. checkPrefix,
  5. } = require('./token');
  6. const { pushWeChatMessage } = require('./wechat');
  7. const { pushWeChatCorpMessage } = require('./wechat-corp');
  8. const { pushEmailMessage } = require('./email');
  9. const { pushClientMessage } = require('./client');
  10. const { Message } = require('../models');
  11. async function processMessage(userPrefix, message) {
  12. if (!checkPrefix(userPrefix)) {
  13. return {
  14. success: false,
  15. message: `不存在的用户前缀:${userPrefix}`,
  16. };
  17. }
  18. if (!checkAccessToken(userPrefix, message.token)) {
  19. return {
  20. success: false,
  21. message: `无效的访问凭证,请检查 token 参数是否正确`,
  22. };
  23. }
  24. if (message.email) {
  25. // If message has the attribute "email", override its type.
  26. message.type = 'email';
  27. }
  28. if (!message.type) {
  29. message.type = getUserDefaultMethod(userPrefix);
  30. }
  31. if (message.content && message.type !== 'email') {
  32. // If message is not email type, we should save it because we have to serve the page.
  33. message = await Message.create(message, { raw: true });
  34. }
  35. let result;
  36. switch (message.type) {
  37. case 'test': // WeChat message
  38. result = await pushWeChatMessage(userPrefix, message);
  39. break;
  40. case 'email': // Email message
  41. result = await pushEmailMessage(userPrefix, message);
  42. break;
  43. case 'corp': // WeChat corp message
  44. result = await pushWeChatCorpMessage(userPrefix, message);
  45. break;
  46. case 'client': // Client message
  47. result = await pushClientMessage(userPrefix, message);
  48. break;
  49. default:
  50. result = {
  51. success: false,
  52. message: `不支持的消息类型:${message.type}`,
  53. };
  54. break;
  55. }
  56. return result;
  57. }
  58. module.exports = {
  59. processMessage,
  60. };