-
Общие сведения
-
Подготовка к установке
-
Библиотеки для работы с API
- Google Calendar API v3 и Google Service Account для работы с событиями.
- Bitrix24 Webhook для получения данных о сотрудинках.
- Telegram API для работы с ботом.
- Собственные библиотеки для работы с API
- Регистрация через данные из Bitrix24, если активен аккаунт
- Бронирование переговорок
- Управление событиями Google calendar (добавить / изменить / удалить)
- Поиск участников в Bitrix24
- Административное меню
- Управление персональными данными
- php 7.1
- postgresql 9.3
- Symfony 4
.env
- Доступ к БД
- Настройки SMTP для отправки почты
- Настройки для авторизации Google Service Account
- Настройки уведомлений по почте и по телеграму
- Данные для установки вебхука Bitrix24
- Список админов по BitrixID
- Данные для установки вебхука Telegram
- Данные прокси для работы с телеграм-ботом
config/services.yaml
- Диапазон начала и конца рабочего дня
- На сколько дней вперед можно бронировать
- За сколько минут до начала события оповещать участников
- Время кеширование данных Google и Bitrix24
- Анти-флуд: сколько сообщений в минуту можно отправлять одному пользователю
- Добавление и сортировка переговорок (1 переговорка - 1 календарь в Google)
- Возможность автоматически добавлять переговорки
- Фиксация размеров входных данных от пользователей
php7.1 composer.phar install
yarn install
yarn encore dev
php7.1 bin/console make:migration
php7.1 bin/console doctrine:migrations:migrate
* * * * * php7.1 /www/tgbot.skillum.ru/web/bin/console cron_notification
php7.1 bin/phpunit tests/
Сгенерировать API-ключ и настроить бота через @BotFather.
Вебхук для телеграма можно установить несколькими способами.
Рекомендуется использовать url вместе с токеном для дополнителньой безопасности:
https://example.com/?<token>
Стоит учесть, что через опцию set или через контроллер токен сам пропишется.
- Через консоль с помощью готовых команд
php7.1 bin/console telegram_webhook --set https://example.com
php7.1 bin/console telegram_webhook --get
php7.1 bin/console telegram_webhook --del
- Через контроллер сайт обязательно должен иметь ssl-сертификат. Для самоподписанных сертификатов необходимо задать дополнительные параметры в методе setWebHook.
<?php
// src/Controller/TelegramController.php
...
public function tgWebhook(Request $request)
{
$this->tgBot->setWebHook('https://example.com');
$this->tgBot->getWebhookInfo();
$this->tgBot->deleteWebhook();
}
...
- Через адресную строку вручную сформировать запрос
- Через curl в консоле
Получить доступ к вебхуку может любой пользователь, который имеет права на просмотр данных сотрудников.
Создаем сервис-аккаунт, скачиваем json и добавляем в конфиг. Для того, чтобы сервис-аккаунт видел календари, необходимо добавить его почту и выдать необходимые права (минимум на изменение событий).
<?php
// src/Controller/TelegramController.php
...
public function tgWebhook(Request $request)
{
if ($this->isTg && $this->tgRequest->getRequestType()) {
$this->tgBot->sendMessage(
$this->tgRequest->getChatId(),
'*Привет*, _как дела_?',
'Markdown'
);
$this->tgBot->editMessageText(
'*Привет*, _как дела_? Отлично?',
$this->tgRequest->getChatId(),
$this->tgRequest->getMessageId(),
null,
'Markdown'
);
// Отправить клавиатуру
$this->tgBot->sendMessage(
$this->tgRequest->getChatId(),
'Вот вам клавиатура!',
null,
false,
false,
null,
$this->tgBot->replyKeyboardMarkup($keyboard)
);
}
}
...
<?php
// src/Controller/TelegramController.php
...
public function tgWebhook(Request $request)
{
$filter = ['calendarName' => 'Название календаря'];
$this->googleCalendar->getList($filter);
// Добавить событие
$this->googleCalendar->addEvent(
$calendarId,
$eventName,
$eventDescription,
$eventTimeStart,
$eventTimeEnd,
$eventAttendees
);
// Изменить событие
$this->googleCalendar->editEvent(
$calendarId,
$eventId,
$eventName,
$evnetDescription,
$eventTimeStart,
$eventTimeEnd,
$eventAttendees
);
// Удалить событие
$this->googleCalendar->removeEvent(
$calendarId,
$eventId
);
}
...
<?php
// src/Controller/TelegramController.php
...
public function tgWebhook(Request $request)
{
// Список фильтров можно посмотреть в методе GoogleCalendarAPI - getFilters()
$filter = ['id' => 1];
$filter = ['name' => ['Иван Иванов', 'Иван', 'Иванов']];
$filter = ['phone' => '+71231231231'];
$this->bitrix24->getUsers($filter);
}
...