Реализация процесса заполнения анкеты через телеграм бот

В данном примере мы реализуем небольшую анкету из 5 шагов. Если шаг подразумевает выбор из нескольких вариантов, то будут появлятсья кнопки. 

Используя подсистему управления командами (/tgbot) бота реализуем такую команду "анкета": 

CREATE PROCEDURE [dbo].[tg_anketa_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
    declare @variants nvarchar(max) = ''
    if (@step ='') begin  -- первый шаг
    	set @msg = 'Укажите имя'       
   		set @nextStep = 's2'          	
    end 
    if(@step = 's2') begin -- второй шаг 
	    set @msg = 'Укажите пол' 
        set @variants = 'Мужской,Женский'
   		set @nextStep = 's3'          	
    end 
    if(@step = 's3') begin -- третий шаг 
	    set @msg = 'Сколько вам лет'      
        set @variants = 'до 18,от 18 до 30, от 30 до 45, от 45'
   		set @nextStep = 's4'          	
    end 
    if(@step = 's4') begin -- 4 шаг 
	    set @msg = 'Кем вы работаете?'      
        set @variants = ''
   		set @nextStep = 's5'          	
    end 
    if(@step = 's5') begin -- 5 шаг 
	    set @msg = 'Когда вам нравится работать?'      
        set @variants = 'Утром,Днем,Вечером'
   		set @nextStep = 'finish'          	
    end 
    if(@step = 'finish') begin -- Завершение 
	    set @msg = 'Заполнение анкеты завершено. Спасибо за уделенное время!'      
        set @variants = ''
   		set @nextStep = ''          	
    end 
    
    
    declare @buttonsJSON nvarchar(max) = ''
    set @ButtonsJSON = iif(len(@variants)>0,  ' {
              "oneTimeKeyboard": true,
              "resizeKeyboard": true,
              "replyButtons": ['+isnull((select rtrim(ltrim(value)) text from dbo.split(@variants, ',')  for json auto),'')+' ]
            } ', '' ) 
        
    
    --SELECT 1 
    select @result Result, @msg Msg 
	-- SELECT 2
    select  'sendMessage' [Type],  @msg [Text], @chatID ChatId, @messageID ReplyToMessageId, 0 DisableNotification ,
    	@buttonsJSON ButtonsJSON
END

См подробнее про создание команд бота

Отталкиваясь от step мы определяем какой у нас сейчас шаг, выводим сообщение и выдаем следующий шаг в nextStep. 

Для упрощения работы с кнопками был задействован JSON Auto с хранением вариантов в @variants (если она не пустая, то формируем buttonsJSON на основе нее).

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

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

 

Страница-источник на сайте falconspace.ru