Как создать телеграм бота - демо работы бота Telegram с примерами кода

1. Найдите в телеграм бот FalconDemoBot и выполните команду /start или кнопка Запустить (для создания привязки)
2. Отправьте себе сообщение с сайта

3. Отправьте ту же форму но с галочкой "С кнопками" - сообщение будет с кнопками-командами, которые вы можете задействовать
4. Давайте изменим свою тему сайта через Телеграм. Дайте боту следующую команду theme GUID pink (или green, gray). GUID возьмите под названием формы выше.
После выполнения команды в телеграме перезагрузите страницу - при этом загрузится у вас выбранная тема.
5. Попробуйте найти свой день рождения в круглом количестве дней. Напишите боту команду birth dd.mm.yyyy, например, birth 15.05.1980
Документация по телеграм боту - https://falcon.web-automation.ru/docs/telegram-boty-i-otpravka-soobshcheniy-v-telegram

Как реализовать данного телеграм-бота

Форма SaveItem процедура (отправка сообщения в телеграм): 

CREATE PROCEDURE [dbo].[fm_watch_sendTelegramMessage_saveItem]
   @username nvarchar(256), 
   @itemID int, 
   @parameters ExtendedDictionaryParameter readonly
AS
BEGIN
	declare @telegram nvarchar(128) = (select value2 from @parameters where [key]='telegram')
	declare @message nvarchar(max) = (select value2 from @parameters where [key]='message')
	declare @withButtons bit = (select try_cast(value2 as bit) from @parameters where [key]='withButtons')
	if(left(@telegram, 1) <> '@') set @telegram = '@' + @telegram
	-- 1 SELECT (Result, Msg)
	select 1 Result, 'Отправлено' Msg
    declare @ButtonsJSON nvarchar(max) = ''
    
    if(@withButtons = 1) begin 
    	set @ButtonsJSON = '
            {
              "oneTimeKeyboard": false,
              "resizeKeyboard": true,          
              "replyButtons": [
                  [
                      {"text": "Дата"},
                      {"text": "Время"}
                  ],
                  [
                      {"text": "День"},
                      {"text": "Месяц"},
                      {"text": "Год"}
                  ]
              ]
              
            } '
    end    
   select 'telegram' type, @telegram [to], @message [text], @ButtonsJSON buttonsJSON   
END

Код процедуры бота: 

ALTER PROCEDURE [dbo].[telegram_bot_action]
	@parameters DictionaryParameter READONLY,  -- входящие параметры для внутренней обработки
	@text nvarchar(max),
	@messageID int,
	@chatID int,
	@messageType nvarchar(128),
    @updateType nvarchar(128),
	@telegramUsername nvarchar(256),
	@firstName nvarchar(256)
AS
BEGIN
	-- select 1 - результат
    -- select 2 - команда  select  'sendMessage' [Type], @response [Text], @chatID ChatId, @messageID ReplyToMessageId,	0 DisableNotification
    -- select 3 - кнопки дополнительные  select '' Text, '' Url, '' CallbackData
    
    

	declare @request nvarchar(max)=@text, @response nvarchar(max)='', 
    	@clearCommand bit = 1, -- признак что необходимо очистить текущую команду для юзера (устанавливаем в false. когда у нас выполняется мультикоманда из нескольких шагов)
        @currentCommand nvarchar(256), @currentCommandStep int, @currentCommandData nvarchar(max), -- текущая команда (когда команда выполяется в несколько действий)
        @found bit = 0,   -- признак что команда найдена
		@tgSettingID int,  -- id настроек юзера из tg_settings
    	@userID int	-- id связанного юзера из as_users
	
    set @telegramUsername = lower(@telegramUsername)
    
	
	select top 1 @userID = id from as_users where lower(telegram) = @telegramUsername  and telegramChatID is null
	if(@userID is not null) begin 
		update as_users set telegramChatID = @chatID
		where id= @userID
	end


	select @tgSettingID = id, @currentCommand = currentCommand, @currentCommandStep = currentCommandStep, @currentCommandData = currentCommandData 
    from tg_settings where lower(telegram) = @telegramUsername
	
    if(@tgSettingID is null) begin 
		insert into tg_settings (telegram, chatID, name, sendUpdates, sendAdvices)
		values (@telegramUsername, @chatID, @firstName, 1, 1)

		set @tgSettingID = scope_identity()
	end
    
   -- execute as_print @text
    -- |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
	if(left(@text,6)='/start')
	begin
		set @response = '<b>Привет</b> ' + @telegramUsername+ ' / '+ @firstName + ' ' + CAST(0x3DD801DE AS NVARCHAR(MAX))

		select 1 Result, '' Msg
		select  'sendMessage' [Type], 
			@response   [Text], 
			@chatID ChatId, 
			@messageID ReplyToMessageId,
			1 DisableNotification,
            '' ButtonsJSON
        
      	
        set @found = 1
      
	end
    
	-- |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
	if(@text like 'birth %') begin		
		declare @dt nvarchar(128) = substring(@text, 7, len(@text)-5)
		-- сохраняем форму (добавление/обновление некой сущности)
		declare @date  date, @msg nvarchar(max) = '', @temp nvarchar(max)
		set @date = try_convert(date, @dt, 104)
		if(@date is null) begin 
			set @msg = 'Дата должна быть в формате dd.mm.yyyy'
		end else begin  
			declare @days nvarchar(max) = '10,100,200.300,400,500,600,700,800,900', @num int = 1000
			while (@num<35000) begin
    			set @days = @days+','+cast(@num as nvarchar) 
				set @num = @num+100
			end
			SELECT @temp = STUFF((
			SELECT iif(year(dateadd(day, try_cast(Value as int), @date))=year(getdate()+1), 
               			' '+Value+' дн. - '+ try_convert(nvarchar, dateadd(day, try_cast(Value as int), @date), 104)+char(10),
					   '')  
			FROM (
    			select Value from dbo.split(@days,',')
			) t1
			 FOR XML PATH, TYPE).value('.[1]','nvarchar(max)' ), 1, 1, '')      
    
			set @msg = @temp
			if(@msg='') begin 
    			set @msg = 'Ближайших круглых дат не найдено'
			end
		end		
		set @response = @msg
		select 1 Result, '' Msg
		select  'sendMessage' [Type], 
			@response  [Text], 
			@chatID ChatId, 
			0 ReplyToMessageId,
			1 DisableNotification
      set @found = 1
	end
	
    
	-- ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
	if(lower(@text) in ('день', 'месяц', 'год', 'дата', 'время'))
	begin
		declare @ddt nvarchar(max) = cast( try_convert(nvarchar(10), getdate(), 104) as nvarchar(max))
		set @response = case lower(@text) 
			when 'день' then cast(datepart(day, getdate()) as nvarchar)
			when 'месяц' then DATENAME(mm,GETDATE())
			when 'год' then cast(datepart(year, getdate()) as nvarchar)
			when 'дата' then convert(nvarchar(10), getdate(), 104)
			when 'время' then try_convert(nvarchar(5), getdate(), 108)
		end
		select 1 Result, '' Msg
		select  'sendMessage' [Type], 
			@response [Text], 
			@chatID ChatId, 
			0 ReplyToMessageId,
			0 DisableNotification
      set @found = 1
	end

	if(left(@text, 6) ='theme ')
	begin
		declare @guid nvarchar(128) = (select top 1 value  from dbo.split(@text, ' ') where num=2)
		declare @theme nvarchar(128) = (select top 1 value  from dbo.split(@text, ' ') where num=3)
		declare @themeRes nvarchar(128) = 'OK'
		if(@theme in ('green', 'gray', 'pink')) begin 
			update as_userSettings set theme = @theme where falconGuid = @guid
		end else begin 
			set @themeRes  = 'Неверно указана тема или Guid'
		end 

		select 1 Result, '' Msg
		select  'sendMessage' [Type], 
			@themeRes [Text], 
			@chatID ChatId, 
			0 ReplyToMessageId,
			0 DisableNotification
      set @found = 1
	end


    
    -- |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
	-- Непонятная команда
    if(@chatID>0 and @found=0) begin 
		set @response = 'Не понял Вас. Введине верную команду'

    	select 1 Result, '' Msg
        select  'sendMessage' [Type], 
			@response   [Text], 
			@chatID ChatId, 
			@messageID ReplyToMessageId,
			0 DisableNotification          
    end
    
    if(@clearCommand=1)begin
    	update tg_settings set currentCommand='', currentCommandStep=0, currentCommandData = ''
        where id = @tgSettingID
    end


	-- save log 
	insert into tg_log(telegram, created, request, response)
	values(@telegramUsername, getdate(), @request, @response)

	select 0 Result, '' Msg

END

Другие модули

Получение данных юридического лица по БИК

Чистка данных в ФИО через dadata. Подключение к Dadata API. Коррекция ввода данных человека

Как упростить ввод адреса на сайте. Подсказки dadata по адресу

Проверка орфографии текста через API Яндекс Spell

Поиск компании через Dadata Подсказки. Получение информации о компании через API

Dadata. Вывод товаров и услуг (МКТУ)

Как отправить письмо с шаблоном HTML

Рерайт на сайте, подбор синонимов через API. Получение текста по API

Последние обновления

SQL-инструмент для создания личных кабинетов на сайте

Суть подхода и история создания Falcon Space

Платформа Falcon Space

Это снижение стоимости владения

за счет меньшего количества людей для поддержки

Это быстрое внесение изменений

по ходу эксплуатации программы

Это современный интерфейс

полная адаптация под мобильные устройства