Управление телеграм ботом

Подсистема управления телеграм ботом позволяет управлять командами бота, а также видеть логи выполнения команд, ошибки бота и т.д.

Код sql пакета - telegram (если у вас уже был в проекте бот, нельзя обновлять автоматически, т.к. замещается процедура telegram_bot_action).

Страница tgbot

 

Каждая команда имеет свою процедуру, выполняющую отклик на команду. 

Команда может в точности соответствовать поле команда, либо быть начальным значением вводимой команды (в этом случае необходимо установить параметр Сравнение первых N символов). 

Меню

В боте есть предустановленные команды: 

Меню - устанавливает меню на основе команд и их настроек (Меню роли, Строка в меню, Порядок). 

Роль меню - по умолчанию all (показывается всем). Если указать роли сайта через запятую, то этот пункт в меню будет выводиться только тем, у кого ТГ логин соотнесен с пользовалем системы в соответствующей роли.

Помощь -  либо указывает общий текст помощи, либо если указана команда через пробел, то выводит по ней подсказку (она задается в поле Подсказка в help). 

Эти команды действувуют, если админ не создал свои команды с теми же названиями. 

В меню может быть до 10 строк. Порядок определяет сотрировку элементов внутри строки.

Если вы хотите использовать емодзи или смайлики, то необходимо скопировать (Ctrl+C , Ctrl +V) из телеграм и вставить в название команды.

Блокировка пользователей 

Есть черный список пользователей, где можно указать либо telegram логин или chatID. Если пользователь попал в черный список, то на любую команду ему идет сообщение, что он заблокирован (текст управляется через настройку Отклик бота: Сообщение о блокировке пользователя - tgBlockUserResponse).

Выполнение команд

Каждая команда это отдельная процедура (название процедуры определяется кодом, который назначается при создании команды и не меняется), которая выдает три SELECT 

По каждой команде ведется лог обращений и можно посмотреть какой был запрос и отклик + время на обработку. 

При нажатии на телеграм идет переход к общей переписке этого пользователя с ботом. 

Каждую команду можно отключать (переключатель Отключено). Отключенные команды исключаются из меню и недоступны для пользователей.

Если команда не найдена, то выдается сообщение пользователю (управляется через настройку tgNotFoundCommand).

Лог ошибок бота

Лог ошибок бота ведется отдельно от общих ошибок сайта. 

Технически это as_trace с code='tg' и header='tg:Error'. На странице лог выведен в отдельной таблице. 

Страница вывода переписки /tgchats

На странице можно выбрать телеграм и просмотреть лог переписки, а также что-то написать от имени бота пользователю телеграм

Это не является полноценным чатом, но позволяет анализировать переписку бота с пользователем, а также вклиниваться в нее по необходимости. 

Многоступенчатые команды телеграм бота

Многоступенчатая команда - это запуск некой команды с предполагаемым последующим запросом дополнительных данных (т.е. дальнейший ввод пользователя считается не командой, а дополнительными данными к текущей команде). 

Примеры подобных команд:

Если вам необходимо пошагово запросить информацию у пользователя в рамках одной команды, то используем параметры step (в parameters) и выходной параметр nextStep

CREATE PROCEDURE [dbo].[tg_multicommand1_command]
	@command nvarchar(max),
	@telegram nvarchar(256),
    @chatID bigint,
    @parameters ExtendedDictionaryParameter readonly,
    @result bit output, 
    @msg nvarchar(max) output,
    @nextStep nvarchar(128) output    
AS
BEGIN
	set @nextStep=''
	declare @messageID bigint = (select top 1 try_cast(value2 as bigint) from @parameters where [key]='messageID')
   	declare @step nvarchar(128) = isnull((select top 1 value2 from @parameters where [key]='step'), '')
   
   
	set @result = 1
    
    if (@step ='') begin  -- первый шаг
    	set @msg = 'Укажите имя'       
   		set @nextStep = 's2'          	
    end 
    if(@step = 's2') begin -- второй шаг 
	    set @msg = 'Укажите фамилию'       
   		set @nextStep = 's3'          	
    end 
    if(@step = 's3') begin -- второй шаг 
	    set @msg = 'Ваша заявка принята'       
   		set @nextStep = ''          	
    end 
    
    --SELECT 1 
    select @result Result, @msg Msg 
	-- SELECT 2
    select  'sendMessage' [Type],  @msg [Text], @chatID ChatId, @messageID ReplyToMessageId, 0 DisableNotification  
END

 Пояснение: 

  1. Если step = '' - это первый шаг в команде.
  2. Если из процедуры вернули непустой nextStep, то это значит что команда многоступенчатая и следующий ввод пользователя считает продолжением этой команды (и будет передан step, равный значению текущего nextStep). 
  3. Если из процедуры вернули пустой nextStep, то это либо была простая команда (с 1 шагом), либо это было завершение многоступенчатой команды. В этом случае бот будет ожидать новой команды при следующем вводе пользователя. 
  4. Данные по шагам и результаты ввода хранятся в tg_settings - currentCommand, currentCommandStep и currentCommandData. Данные в data хранятся в виде step1=XXX~~step2=YYY...
Страница-источник на сайте falconspace.ru