12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- # Copyright (C) 2012-2023 Zammad Foundation, https://zammad-foundation.org/
- class ChannelsTelegramController < ApplicationController
- prepend_before_action -> { authentication_check && authorize! }, except: [:webhook]
- skip_before_action :verify_csrf_token, only: [:webhook]
- def index
- assets = {}
- channel_ids = []
- Channel.where(area: 'Telegram::Bot').order(:id).each do |channel|
- assets = channel.assets(assets)
- channel_ids.push channel.id
- end
- render json: {
- assets: assets,
- channel_ids: channel_ids
- }
- end
- def add
- begin
- channel = TelegramHelper.create_or_update_channel(params[:api_token], params)
- rescue => e
- raise Exceptions::UnprocessableEntity, e.message
- end
- render json: channel
- end
- def update
- channel = Channel.find_by(id: params[:id], area: 'Telegram::Bot')
- begin
- channel = TelegramHelper.create_or_update_channel(params[:api_token], params, channel)
- rescue => e
- raise Exceptions::UnprocessableEntity, e.message
- end
- render json: channel
- end
- def enable
- channel = Channel.find_by(id: params[:id], area: 'Telegram::Bot')
- channel.active = true
- channel.save!
- render json: {}
- end
- def disable
- channel = Channel.find_by(id: params[:id], area: 'Telegram::Bot')
- channel.active = false
- channel.save!
- render json: {}
- end
- def destroy
- channel = Channel.find_by(id: params[:id], area: 'Telegram::Bot')
- channel.destroy
- render json: {}
- end
- def webhook
- raise Exceptions::UnprocessableEntity, 'bot id is missing' if params['bid'].blank?
- channel = TelegramHelper.bot_by_bot_id(params['bid'])
- raise Exceptions::UnprocessableEntity, 'bot not found' if !channel
- if channel.options[:callback_token] != params['callback_token']
- raise Exceptions::UnprocessableEntity, 'invalid callback token'
- end
- telegram = TelegramHelper.new(channel.options[:api_token])
- begin
- telegram.to_group(params, channel.group_id, channel)
- rescue Exceptions::UnprocessableEntity => e
- Rails.logger.error e.message
- end
- render json: {}, status: :ok
- end
- end
|