Как сделать ежедневную отправку отчета в групповой чат Telegram?

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

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

Мы рассмотрим вариант создания общего отчета по состоянию этапа проекта с отправкой в групповой чат проекта. 

Как реализовать привязку чата к проекту

Для начала необходимо обеспечить связку проекта и чата в телеграме. Для этого у проекта должно быть поле с ID чата (в нашем случае это innerChatID). 

ВАЖНО. В чат должен быть добавлен бот (можно с обычными правами).

ChatID можно получить через экспорт переписки чата в Телеграме в формате JSON (параметр ID для Chat). 

Указываем данный ID в БД в таблице Проекты (при этом обязательно со знаком "-"). 

Как отправлять отчет ежедневно в Telegram

В процедуре sync_hour формируем select для отправки отчетов по всем активным проектам, где есть чаты: 

CREATE PROCEDURE [dbo].[falcon_nt_sync_hour]
AS
BEGIN
 -- эта процедура запускается каждый час
-- отправляем в 9 утра несколько отчетов в телеграм - по 1 на каждый активный этап
-- отчет формируется в виде строки в функции getStageInfo
if(DATEPART(HOUR, GETDATE())=9) begin
      select 'telegram' [type], getStageInfo(stageID, 1) [text], cast(innerChatID as nvarchar) [to] from (
      select
          id, name, innerChatID,
          (select top 1 id from as_est_cats stage where estimateID = p.estimateID and statusID in (2,4,9) order by id desc ) stageID
      from rudenas2x.dbo.tt_projects p
      where innerChatID is not null and innerChatID <>0 and statusID is null
      ) t1
      order by name
end

END

Как сформировать сам отчет

Отчет можно формировать в отдельной sql функции с использованием Эмоджи, HTML верстки и других способов разметки Телеграма. 

Пример структуры подобной функции: 

alter FUNCTION [dbo].getStageInfo
(
	@stageID		 int ,
	@innerInfo		bit=1
)
RETURNS nvarchar(max) as
BEGIN
declare @res nvarchar(max)  =''

declare @today date = getdate()
select @res = CAST(0xA127 AS NVARCHAR(MAX)) + ' ЭТАП '+  name + char(10) +
	'Выполнено: '+ isnull(cast(cast(completed/nullif(total, 0)*100 as int) as nvarchar), 0) + '%'  + char(10) +
	'Закрыто: '+  isnull(cast(cast(closed/nullif(total, 0)*100 as int) as nvarchar), 0) + '%'   + char(10) +
	'Время: '+ iif(year(deadline)<2000, '',
       			iif( datediff(day,deadline, getdate()) > 0,  'Дедлайн просрочен на ' + cast(datediff(day,deadline, getdate()) as nvarchar) +'дн' ,
                   ''+cast(cast(datediff(day,startDate, getdate()) as float) * 100 / nullif(cast(datediff(day,startDate, deadline) as float), 0) as nvarchar)+'%')
            )+  char(10) +
	'Обновлено: '+ isnull( dbo.as_timeDelay(datediff(minute, updatedDate, getdate())), '' ) +  char(10) +
	'----------------' +char(10) +
	'Открытых часов по задачам: ' + cast(openHours as nvarchar) + char(10) +
	'Вчера часов: ' + cast(yesterdayHours as nvarchar) + char(10) +  char(10) +
	'Открытых багов: ' + cast(openBugs as nvarchar) + char(10) +
	'Задач на проверку: ' + cast(checkingTickets as nvarchar) + char(10)


	 from (
	   -- здесь извлекаем данные по этапу по @stageID
          ) t1

return @res
END -- FUNCTION

Примечание:

1. Групповой чат - ID обязательно указываем со знаком минус. 

2. Для работы телеграм бота токен должен быть прописан в web.config

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