mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-11-03 20:48:07 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			106 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
## Class to generate sample inboxes for a chatwoot test @Account.
 | 
						|
############################################################
 | 
						|
### Usage #####
 | 
						|
#
 | 
						|
#   # Seed an account with all data types in this class
 | 
						|
#   Seeders::InboxSeeder.new(account: @Account.find(1), company_data:  {name: 'PaperLayer', doamin: 'paperlayer.test'}).perform!
 | 
						|
#
 | 
						|
#
 | 
						|
############################################################
 | 
						|
 | 
						|
class Seeders::InboxSeeder
 | 
						|
  def initialize(account:, company_data:)
 | 
						|
    raise 'Inbox Seeding is not allowed in production.' unless ENV.fetch('ENABLE_ACCOUNT_SEEDING', !Rails.env.production?)
 | 
						|
 | 
						|
    @account = account
 | 
						|
    @company_data = company_data
 | 
						|
  end
 | 
						|
 | 
						|
  def perform!
 | 
						|
    seed_website_inbox
 | 
						|
    seed_facebook_inbox
 | 
						|
    seed_twitter_inbox
 | 
						|
    seed_whatsapp_inbox
 | 
						|
    seed_sms_inbox
 | 
						|
    seed_email_inbox
 | 
						|
    seed_api_inbox
 | 
						|
    seed_telegram_inbox
 | 
						|
    seed_line_inbox
 | 
						|
  end
 | 
						|
 | 
						|
  def seed_website_inbox
 | 
						|
    channel = Channel::WebWidget.create!(account: @account, website_url: "https://#{@company_data['domain']}")
 | 
						|
    Inbox.create!(channel: channel, account: @account, name: "#{@company_data['name']} Website")
 | 
						|
  end
 | 
						|
 | 
						|
  def seed_facebook_inbox
 | 
						|
    channel = Channel::FacebookPage.create!(account: @account, user_access_token: SecureRandom.hex, page_access_token: SecureRandom.hex,
 | 
						|
                                            page_id: SecureRandom.hex)
 | 
						|
    Inbox.create!(channel: channel, account: @account, name: "#{@company_data['name']} Facebook")
 | 
						|
  end
 | 
						|
 | 
						|
  def seed_twitter_inbox
 | 
						|
    channel = Channel::TwitterProfile.create!(account: @account, twitter_access_token: SecureRandom.hex,
 | 
						|
                                              twitter_access_token_secret: SecureRandom.hex, profile_id: '123')
 | 
						|
    Inbox.create!(channel: channel, account: @account, name: "#{@company_data['name']} Twitter")
 | 
						|
  end
 | 
						|
 | 
						|
  def seed_whatsapp_inbox
 | 
						|
    # rubocop:disable Rails/SkipsModelValidations
 | 
						|
    Channel::Whatsapp.insert(
 | 
						|
      {
 | 
						|
        account_id: @account.id,
 | 
						|
        phone_number: Faker::PhoneNumber.cell_phone_in_e164,
 | 
						|
        created_at: Time.now.utc,
 | 
						|
        updated_at: Time.now.utc
 | 
						|
      },
 | 
						|
      returning: %w[id]
 | 
						|
    )
 | 
						|
    # rubocop:enable Rails/SkipsModelValidations
 | 
						|
 | 
						|
    channel = Channel::Whatsapp.find_by(account_id: @account.id)
 | 
						|
 | 
						|
    Inbox.create!(channel: channel, account: @account, name: "#{@company_data['name']} Whatsapp")
 | 
						|
  end
 | 
						|
 | 
						|
  def seed_sms_inbox
 | 
						|
    channel = Channel::Sms.create!(account: @account, phone_number: Faker::PhoneNumber.cell_phone_in_e164)
 | 
						|
    Inbox.create!(channel: channel, account: @account, name: "#{@company_data['name']} Mobile")
 | 
						|
  end
 | 
						|
 | 
						|
  def seed_email_inbox
 | 
						|
    channel = Channel::Email.create!(account: @account, email: "test#{SecureRandom.hex}@#{@company_data['domain']}",
 | 
						|
                                     forward_to_email: "test_fwd#{SecureRandom.hex}@#{@company_data['domain']}")
 | 
						|
    Inbox.create!(channel: channel, account: @account, name: "#{@company_data['name']} Email")
 | 
						|
  end
 | 
						|
 | 
						|
  def seed_api_inbox
 | 
						|
    channel = Channel::Api.create!(account: @account)
 | 
						|
    Inbox.create!(channel: channel, account: @account, name: "#{@company_data['name']} API")
 | 
						|
  end
 | 
						|
 | 
						|
  def seed_telegram_inbox
 | 
						|
    # rubocop:disable Rails/SkipsModelValidations
 | 
						|
    bot_token = SecureRandom.hex
 | 
						|
    Channel::Telegram.insert(
 | 
						|
      {
 | 
						|
        account_id: @account.id,
 | 
						|
        bot_name: (@company_data['name']).to_s,
 | 
						|
        bot_token: bot_token,
 | 
						|
        created_at: Time.now.utc,
 | 
						|
        updated_at: Time.now.utc
 | 
						|
      },
 | 
						|
      returning: %w[id]
 | 
						|
    )
 | 
						|
    channel = Channel::Telegram.find_by(bot_token: bot_token)
 | 
						|
    Inbox.create!(channel: channel, account: @account, name: "#{@company_data['name']} Telegram")
 | 
						|
    # rubocop:enable Rails/SkipsModelValidations
 | 
						|
  end
 | 
						|
 | 
						|
  def seed_line_inbox
 | 
						|
    channel = Channel::Line.create!(account: @account, line_channel_id: SecureRandom.hex, line_channel_secret: SecureRandom.hex,
 | 
						|
                                    line_channel_token: SecureRandom.hex)
 | 
						|
    Inbox.create!(channel: channel, account: @account, name: "#{@company_data['name']} Line")
 | 
						|
  end
 | 
						|
end
 |