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

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

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

Платформа Falcon Space

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

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

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

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

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

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

Веб-приложения на MS SQL. Партнерская программа для разработчиков и веб-студий

Вы можете разрабатывать самостоятельно или сотрудничать с нами в плане веб-разработки на платформе Falcon Space, используя только SQL и HTML.
Смотреть примеры с кодом SQL
Документация по платформе

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