Как сделать ежедневную отправку отчета по проекту в групповой чат 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

Falcon Space - функциальная веб-платформа разработки на узком стеке MS SQL/Bootstrap. Вводная по Falcon Space
Насколько полезной была статья?

Google поиск по нашей документации

Falcon Space

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

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

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

по ходу эксплуатации программы. Как создается функционал на платформе

Это простой удобный интерфейс

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