communicate_facebook.rb 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
  2. require 'channel/driver/facebook'
  3. class Observer::Ticket::Article::CommunicateFacebook < ActiveRecord::Observer
  4. observe 'ticket::_article'
  5. def after_create(record)
  6. # return if we run import mode
  7. return if Setting.get('import_mode')
  8. # if sender is customer, do not communication
  9. sender = Ticket::Article::Sender.lookup(id: record.sender_id)
  10. return 1 if sender.nil?
  11. return 1 if sender['name'] == 'Customer'
  12. # only apply for facebook
  13. type = Ticket::Article::Type.lookup(id: record.type_id)
  14. return if type['name'] !~ /\Afacebook/
  15. ticket = Ticket.lookup(id: record.ticket_id)
  16. raise "Can't find ticket.preferences for Ticket.find(#{record.ticket_id})" if !ticket.preferences
  17. raise "Can't find ticket.preferences['channel_id'] for Ticket.find(#{record.ticket_id})" if !ticket.preferences['channel_id']
  18. channel = Channel.lookup(id: ticket.preferences['channel_id'])
  19. raise "Channel.find(#{channel.id}) isn't a twitter channel!" if channel.options[:adapter] !~ /\Afacebook/i
  20. # check source object id
  21. ticket = record.ticket
  22. if !ticket.preferences['channel_fb_object_id']
  23. raise "fb object id is missing in ticket.preferences['channel_fb_object_id'] for Ticket.find(#{ticket.id})"
  24. end
  25. # fill in_reply_to
  26. if !record.in_reply_to || record.in_reply_to.empty?
  27. record.in_reply_to = ticket.articles.first.message_id
  28. end
  29. facebook = Channel::Driver::Facebook.new
  30. post = facebook.send(
  31. channel.options,
  32. ticket.preferences[:channel_fb_object_id],
  33. {
  34. type: type['name'],
  35. to: record.to,
  36. body: record.body,
  37. in_reply_to: record.in_reply_to,
  38. }
  39. )
  40. record.from = post['from']['name']
  41. record.message_id = post['id']
  42. record.save
  43. end
  44. end