Skip to content

Commit 00ec11c

Browse files
author
Daniil Firsov
committed
dnk: update docs
1 parent 71ce8a8 commit 00ec11c

9 files changed

Lines changed: 130 additions & 84 deletions

File tree

content/ru/docs/setup/servers/transport/telegram.md

Lines changed: 95 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,32 @@ weight: 40
66

77
Telegram - популярный мессенджер (https://telegram.org/)
88

9-
В этом разделе описывается способ настройки транспорта Telegram.
9+
В этом разделе описывается настройка транспорта Telegram и способы его использования.
10+
11+
Транспорт Telegram позволяет:
12+
- Отправлять уведомления/сообщения клиентам с помощью Telegram
13+
- Работать в качестве полноценного Бота (оказывать услуги, принимать платежи и т.п.)
14+
15+
Для написания ботов используются API методы Telegram. Ознакомится с полным списком методов вы можете в [официальной документации
16+
Telegram](https://core.telegram.org/bots/api). Ниже приведены примеры для метода [`sendMessage`](https://core.telegram.org/bots/api#sendmessage).
17+
18+
## Профили Telegram в SHM
19+
20+
Для работы SHM с Telegram ему необходимо знать `token` бота. SHM поддерживает работу сразу с несколькими ботами.
21+
Для удобного управлениями конфигурациями ботов введено понятие "Профиль". Обычно, профиль бота совпадает с именем шаблона.
22+
23+
Для шаблона бота с названием `telegram_bot` создайте одноименный профиль (`telegram_bot`), и пропишите в этот профиль `token` бота,
24+
который будет работать с этим шаблоном. Если у вас есть и другие боты, настройте их по аналогии.
25+
26+
Если профиль используется для отправки Telegram уведомлений в конкретный чат, то дополнительно укажите в профиле и `chat_id`.
27+
28+
Профили ботов настраиваются в Админке SHM. В разделе "Конфигурация" выберите пункт `telegram` и кликните по нему дважды.
29+
В открывшемся окне кликните на "шестеренку" для открытия редактора JSON.
30+
31+
Создайте/настройте конфигурацию ваших ботов, пример:
32+
![QR-code](/telegram_profiles.jpg)
33+
1034

11-
Транспорт Telegram умеет как просто отправлять уведомления, так и работать в качестве полноценного бота: регистрировать клиентов, услуги, пополнять баланс и т.п.
1235

1336
## Telegram уведомления
1437

@@ -17,29 +40,90 @@ flowchart LR
1740
A([SHM]) --> B(Событие) -->С(Шаблон) --> D(Telegram API) --> E(Telegram client)
1841
```
1942

43+
### Настройка
2044
Для того, чтобы SHM мог отправлять сообщения Вашим пользователям, необходимо:
21-
1. Создать Telegram Bot-а, с помощью бота @BotFather (https://telegram.me/BotFather)
22-
2. В админке, в "Настройки" -> "Конфигурация", необходимо сохранить Telegram Token, полученный на предыдущем шаге
45+
1. Создать Telegram Bot-а, с помощью бота [@BotFather](https://t.me/BotFather) (https://handbook.tmat.me/ru/dev/botfather)
46+
2. Создайте "Профиль" в SHM и укажите в нем `token` созданного бота
2347
3. Создайте шаблон сообщения в админке, которое вы хотите отправлять своим пользователям ("Настройки" -> "Шаблоны")
2448
4. Создайте нужное событие. Привяжите Ваш шаблон к нужному событию. В качестве группы серверов необходимо указать "Telegram уведомления", или любую другую группу, транспорт которой "telegram"
2549
5. Дайте Вашему пользователю ссылку на вашего бота, чтобы он мог его себе добавить. После добавления бота Ваш клиент сможет получать от него уведомления
2650

2751
> В случаях, когда Ваш клиент регистрировался в SHM НЕ через Telegram bot-а, необходимо указать его логин telegram в его профиле (кабинете)
2852
53+
### Отправка уведомлений
54+
55+
Отправить сообщения в Telegram своим клиентам можно следующими способами:
56+
1. С помощью транспорта Telegram
57+
2. С помощью специального метода Шаблонизатора (`telegram.send()`)
58+
3. С помощью специального метода Шаблонизатора (`telegram.bot()`)
59+
60+
#### `Отправка текста с помощью транспорта Telegram`
61+
- Создайте шаблон с нужным текстом для отправки клиентам
62+
- Привяжите шаблон к нужному событию, указав при этом транспорт Telegram
63+
64+
Пример шаблона отправки текста в Telegram:
65+
```go
66+
Тестовое сообщение для пользователя: {{ user.full_name }}
67+
```
68+
69+
#### `Использование API Telegram с помощью транспорта Telegram`
70+
Если вы хотите отправить не просто текст:
71+
- Создайте шаблон с `JSON` данными для отправки в API Telegram
72+
- Привяжите шаблон к нужному событию, указав при этом транспорт Telegram
73+
- Пропишите в `settings` шаблона: `{"telegram":{"raw":true}}`
74+
75+
Пример использования [`sendMessage`](https://core.telegram.org/bots/api#sendmessage) в API Telegram:
76+
```go
77+
{{ toJson( sendMessage = {
78+
text = "Тестовое сообщение для пользователя: " _ user.full_name
79+
reply_markup = {
80+
inline_keyboard = [[{
81+
text = "Посетите наш сайт"
82+
url = "https://domain.com"
83+
}]]
84+
}
85+
})
86+
}}
87+
```
88+
89+
Пример шаблона отправки нескольких сообщений в API Telegram:
90+
```go
91+
{{ data = [] }}
92+
{{ data.push( sendMessage = { text = 'Сообщение 1' } ) }}
93+
{{ data.push( sendMessage = { text = 'Сообщение 2' } ) }}
94+
{{ toJson( data ) }}
95+
```
96+
97+
>> Если клиент использует сразу несколько ботов, то получит сообщение в каждый из них. Если нужно указать конкретный Профиль, то это можно сделать путем указания его в `settings` шаблона: `{"telegram":{"profile":ИМЯ_ПРОФИЛЯ}}`
98+
99+
### Отправка уведомлений себе
100+
101+
В случае, если Вы хотите отправлять системные сообщения себе в Telegram, то для этого:
102+
- Создайте шаблон с нужным содержимым
103+
- Создайте отдельный Профиль Telegram, укажите в нём `token` бота и `chat_id`, куда отправлять сообщения
104+
- В `settings` шаблона укажите Профиль: `{"telegram":{"profile":"ИМЯ_ПРОФИЛЯ"}}`
105+
- Привяжите ваш шаблон к нужным событиям
106+
107+
29108
## Telegram bot
30109

110+
Telegram bot реализован с помощью шаблона SHM (`telegram_bot` по-умолчанию)
111+
31112
```mermaid
32113
flowchart LR
33114
A(Telegram client) <--> B(Telegram API) <--> С([SHM\ntelegram_bot])
34115
```
35116
Для работы полноценного бота нужно:
36-
- Выполнить шаги 1 и 2 из предыдущего раздела (Telegram уведомления), если еще не выполнены.
37-
- Настроить Telegram API, сообщить ему адрес, куда отправлять запросы от клиента (от бота). Для этого [скачайте](https://raw.githubusercontent.com/danuk/shm/master/scripts/telegram/setWebhook.sh) bash скрипт.
38-
Перед запуском скрипта необходимо его отредактировать, записать в него свой token и HTTP адрес SHM. Выполните скрипт.
39-
- Проверьте наличие шаблона `telegram_bot`. Внесите в него изменения по своему усмотрению.
40-
- Запустите бота (`/start`). Если всё настроено верно, вы увидите приветствие.
117+
- Выполнить шаги 1 и 2 из раздела: "Telegram уведомления" (если еще не выполнены).
118+
- Настроить Telegram API, сообщить ему адрес, куда отправлять запросы от клиента (от бота). Для этого скачайте bash скрипт [setWebhook.sh](https://raw.githubusercontent.com/danuk/shm/master/scripts/telegram/setWebhook.sh). Перед запуском скрипта необходимо его отредактировать, укажите:
119+
- `token` бота
120+
- HTTPS адрес SHM (например: https://domain.com)
121+
- имя шаблона (`telegram_bot` по-умолчанию)
122+
- Выполните скрипт `setWebhook.sh` на любом Linux/Unix устройстве, так же подойдет и MacOS.
123+
- Проверьте наличие шаблона для бота (`telegram_bot` по-умолчанию). Внесите в него изменения по своему усмотрению.
124+
- Зайдите в своего бота в клиенте Telegram и выполните команду: `/start`. Если всё настроено верно, вы увидите приветствие.
41125

42-
> Telegram bot - использует шаблон `telegram_bot`. В шаблоне заложена вся логика бота.
126+
>> По-умолчанию SHM определяет профиль для бота по имени шаблона. Если нужно использовать другой профиль, то это можно указать в скрипте `setWebhook.sh`, добавив после имени шаблона параметр: `tg_profile`, например: `telegram_bot?tg_profile=profile1`
43127
44-
Более подробно о шаблоне Telegram читайте здесь: [Шаблон Telegram bot]({{<ref "docs/setup/templates/telegram_bot" >}})
128+
Более подробно о шаблонах Telegram читайте здесь: [Шаблон Telegram bot]({{<ref "docs/setup/templates/telegram_bot" >}})
45129

content/ru/docs/setup/services/events.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ flowchart LR
7373
Для события необходимо указать "Категорию" услуги и "Группу серверов", для выполнения команд.
7474

7575
Категория события должна соответствовать категории услуги, для которой создается это событие и может быть указана с маской,
76-
например: `vpn-*`, где `*` заменяет любые символы.
76+
например: `category-%`, где `%` заменяет любые символы.
7777

7878
В зависимости от выбранной группы серверов, могут быть использованы дополнительные настройки, зависящие от [Транспорта]({{< ref "/docs/setup/servers/transport" >}}) группы.
7979

content/ru/docs/setup/templates/jobs/add_bonuses.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@ hide_summary: false
1313
Следующий код начислит всем клиентам с активной услугой 5 по 100 бонусов:
1414

1515
```go
16-
{{ arr = ref(user.services.list_for_api( 'admin',1, 'limit',0, 'filter',{ 'service_id' => 5, 'status' => 'ACTIVE' } )) }}
17-
{{ FOR item IN arr }}
18-
{{ user = user.switch( item.user_id ) }}
19-
{{ user.add_bonus( 100, 'Акция' ) }}
16+
{{ FOR u IN user.items }}
17+
{{ us_list = u.us.filter( service_id = 5, status = 'ACTIVE' ).items }}
18+
{{ IF us_list.size }}
19+
{{ u.add_bonus( 100, 'Акция' ) }}
20+
{{ END }}
2021
{{ END }}
2122
```
2223

content/ru/docs/setup/templates/jobs/calc_total.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ hide_summary: false
1010

1111
```go
1212
{{ sum = 0 }}
13-
{{ arr = ref(user.pays.list_for_api( 'admin', 1, 'limit', 0, 'filter', { 'date' => '2024-01-%'} )) }}
13+
{{ arr = user.pays.filter( date = '2024-01-%' ).items }}
1414
{{ FOR item IN arr }}
1515
{{ sum = sum + item.money }}
1616
{{ END }}

content/ru/docs/setup/templates/jobs/update_tariff.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ hide_summary: false
1616

1717
```go
1818
{{ FOR u IN user.items }}
19-
{{ FOR us IN ref(u.us.items) }}
20-
{{ us.set(next = us.id) }}
19+
{{ FOR us IN u.us.items }}
20+
{{ us.set(next = us.service_id) }}
2121
{{ END }}
2222
{{ END }}
2323
```
@@ -28,7 +28,7 @@ hide_summary: false
2828

2929
```go
3030
{{ FOR u IN user.items }}
31-
{{ FOR us IN ref(u.us.filter( service_id = 5 ).items) }}
31+
{{ FOR us IN u.us.filter( service_id = 5 ).items }}
3232
{{ us.set(next = 6) }}
3333
{{ END }}
3434
{{ END }}

content/ru/docs/setup/templates/notifications/forecast.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ SHM имеет встроенный модуль `forecast`, позволяющ
2525

2626
#### Пример команды в шаблонах:
2727

28-
`{{ forecast = user.pays.forecast('days', 10, 'blocked', 1) }}`
28+
`{{ forecast = user.pays.forecast(days = 10, blocked = 1) }}`
2929

3030

3131
## Пример шаблона
@@ -68,9 +68,10 @@ SHM имеет встроенный модуль `forecast`, позволяющ
6868
```go
6969
Уважаемый {{ user.full_name }}
7070
{{ forecast = user.pays.forecast }}
71-
{{ IF user.make_autopayment( forecast.total ) }}
7271

73-
Выполнен автоплатеж с вашей карты в размере: {{ forecast.total }}.
72+
{{ ap = user.make_autopayment( total ) }}
73+
{{ IF ap == 1 }}
74+
Выполнен автоплатеж в размере: {{ forecast.total }}.
7475
Ваши услуги будут продлены автоматически.
7576
{{ ELSE }}
7677

content/ru/docs/setup/templates/notifications/payment.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,13 @@ title: "Уведомление о зачислении платежа"
88
Создайте шаблон со следующим содержимым и привяжите его к событию `PAYMENT`:
99

1010
```go
11-
Ваш платеж на сумму {{ user.pays.last.money }} зачислен.
11+
{{ IF pay.money == 0 }}
12+
Ошибка, платеж не прошел
13+
{{ ELSE }}
14+
Зачислен платеж на сумму: {{ pay.money }} руб.
1215

13-
Баланс: {{ user.balance }}
16+
Ваш баланс: {{ user.balance }} руб.
17+
{{ END }}
1418
```
1519

1620

content/ru/docs/setup/templates/telegram_bot/_index.md

Lines changed: 15 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ hide_summary: false
2020
В каждой секции мы можем писать реальные команды Telegram. Например, команда `sendMessage` отправляет сообщение в Telegram.
2121
Вы можете использовать эту команду в соответсвии с [документацией](https://core.telegram.org/bots/api#sendmessage) Telegram.
2222

23-
В каждой секции можно писать множество команд, через запятую (см. пример в секции `/balance`).
23+
Для отправки команд в API Telegram используйте метод `tg_api`.
2424

25-
Для того, чтобы лучше понять, как строятся всевозможные кнопочки, читайте документацию Telegram. В этом шаблоне всего-лишь описаны вызовы этих методов.
25+
Для того, чтобы лучше понять, как строятся всевозможные [кнопочки](https://handbook.tmat.me/ru/messages/buttons), читайте документацию Telegram. В этом шаблоне всего-лишь описаны вызовы этих методов.
2626

2727
Пример шаблона:
2828

@@ -215,72 +215,28 @@ https://t.me/myshm_bot?start={{ toBase64Url(toQueryString(
215215
Шаблон используется для возможности ввода произвольной суммы и выбора настроенных платежных систем SHM.
216216

217217
1. [Настройте]({{< ref "/docs/setup/payments" >}}) одну или несколько платежных систем
218-
2. [Скачайте шаблон](https://raw.githubusercontent.com/danuk/shm-templates/main/telegram_bot/tg_payments.tmpl) и сохраните в SHM под названием `tg_payments`
218+
2. [Скачайте шаблон](https://raw.githubusercontent.com/danuk/shm-templates/main/telegram_bot/tg_payments_webapp.tmpl) и сохраните в SHM под названием `tg_payments_webapp`
219219
3. В Шаблоне своего бота используйте конструкцию вида:
220220
```go
221221
<% CASE '/payment' %>
222-
{
223-
"sendMessage": {
224-
"text": "Оплата покупки",
225-
"reply_markup": {
226-
"inline_keyboard": [
227-
[
228-
{
229-
"text": "Оплатить...",
230-
"web_app": {
231-
"url": "{{ config.api.url }}/shm/v1/template/tg_payments?format=html&session_id={{ user.gen_session.id }}"
232-
}
233-
}
234-
]
222+
{{ tg_payment_webapp="{{config.api.url}}/shm/v1/public/tg_payment_webapp?format=html&user_id={{user.id}}&profile={{tpl.id}}" }}
223+
{{ tg_api(
224+
sendMessage = {
225+
text = "Оплата покупки",
226+
reply_markup = {
227+
inline_keyboard = [
228+
[{
229+
text = "Оплатить..."
230+
web_app = { url = tg_payment_webapp }
231+
}]
235232
]
236233
}
237234
}
238-
}
239-
```
240-
241-
## Авторизация пользователей
242-
243-
SHM автоматически авторизует пользователя.
244-
Для связки пользователя SHM и пользователя Telegram используется `user_id` из Telegram.
245-
246-
#### Для отправки сообщений пользователю в Telegram необходимо знать:
247-
- user_id - идентификатор пользователя Telegram
248-
- chat_id - идентификатор чата Telegram
249-
250-
Если пользователь хоть раз взаимодействовал с ботом, подключенным к SHM, то его `user_id` и `chat_id` автоматически сохраняются в `settings` пользователя.
251-
252-
#### `chat_id` определяется в следующем порядке:
253-
- Из сообщения Telegram (в случае, если клиент отправил команду боту)
254-
- Из `settings` шаблона (`telegram.chat_id`)
255-
- Из `settings` пользователя SHM (`telegram.chat_id`)
256-
257-
258-
## Отправка системных сообщений
259-
260-
В случае, если Вы хотите отправлять системные сообщения себе в телеграм, то для этого Вы можете создать отдельный
261-
шаблон, и в его settings прописать:
262-
```go
263-
{
264-
"telegram": {
265-
"chat_id": ID_вашего_чата
266-
}
267-
}
235+
)
236+
}}
268237
```
269238

270-
Пример шаблона:
271-
```go
272-
Событие: {{ event_name }}
273239

274-
Пользователь: {{ user.login }} ({{ user.id }})
275240

276-
{{ IF us.id }}
277-
Услуга: [{{ us.id }}] {{ us.name }}
278-
{{ END }}
279-
280-
{{ IF event_name == "PAYMENT" }}
281-
Платеж на сумму: {{ user.pays.last.money }} зачислен для пользователя: {{ user.login }}
282-
{{ END }}
283-
```
284241

285-
Привяжите этот шаблон к нужным Вам событиями.
286242

static/telegram_profiles.jpg

35.4 KB
Loading

0 commit comments

Comments
 (0)