Как к телеграм боту подключить гугл календарь
Перейти к содержимому

Как к телеграм боту подключить гугл календарь

  • автор:

Epical — Telegram бот для Google календаря

В какой-то момент я понял, что настраивать уведомления о событиях в календаре через системные уведомления не очень удобно: телефоны меняются, ноутбуки ломаются, появляются новые девайсы.

Особенно неприятно, если аккаунтов с календарями и устройств много — постоянно что-то забываешь подключить или что-то отваливается.

Гораздо удобнее подключить уведомления в Телеграм и получить их сразу на всех устройствах. Существующего решения я не нашел, так что пришлось написать свое.

Что умеет бот:

1. Уведомлять о предстоящем событии за 1 минуту, 5, 10 или 15 минут

2. Работать с несколькими аккаунтами

3. Работать с несколькими календарями в каждом аккаунте

4. Гибко отслеживать состояние события. Например, если у вас установлено уведомление за 1 минуту, а событие удалено за 2, бот это поймет.

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

Как это выглядит?

Вот пример, как оно будет работать в чате:

Подключение телеграм бота к гугл таблицам

Это мой первый пост на этой площадке, целью которого является погружение в коммьюнити для обратной связи и полезных ремарок относительно этой статьи. Также буду рада, если эта статья станет полезной для начинающих свой путь в написании ботов людей 🙂

За последний год я узнала об интересном способе автоматизации бизнес-процессов, которая достигается комбинацией гугл-таблиц и телеграма. Такие задачи как учет финансов, тайм-менеджмент, пересылка событий, сообщений, уведомлений и т.п. легко решаются с помощью бесплатного инструментария гугла и телеги.

Далее речь пойдет о создании первого бота и написании скрипта в Apps Script. Поехали!

Создание телеграм-бота

Откуда вообще берутся боты в телеграме? Опытному пользователю можно пропустить это пункт, ну а новичкам настало время познакомится с @BOTFATHER

Находим отца всех ботов в поиске телеги и видим, что этот бот вообще из себя представляет.

После старта этого бота мы увидим список команд.

Здесь нам нужна команда /newbot, чтобы создать нашего первого бота.

Порядок действий незамысловатый: создаем бота помандой /newbot, даем ему вменяемое имя и задать ему username с обязательным окончанием bot. В результате получаем API токен нашего бота, который и будем дальше использовать.

Можете проверить работоспособность созданного бота перейдя по следующему URL:

https://api.telegram.org/bot2011183802:AAEW7ZNRVvlr1TG1N0DNkRB9G4FmvkBUUUU/getMe

выделенное жирным замените на апи своего бота

Запрос вернет примерно это:

Подключение гугл-таблицы

Переходим к гугл табличкам и создаем новый док.

Нам нужен пункт меню Инструменты/Tools -> Редактор скриптов/ Script editor.

Должно получиться вот это:

Затрем скрипт и напишем свой на языке JavaScript. Дополнительно в скрипте могут быть использованы инструменты гугла (классы, методы и т.п.), что мы далее и рассмотрим.

Начнем с объявления глобальных переменных. У нас их будет только две — API бота и App_link.

const API = "2011183802:AAEW7ZNRVvlr1TG1N0DNkRB9G4FmvkBUUUU"; //в кавычки впишите свой апи const App_link = ""; //значение переменной пока оставляем пустым

Напомню, что АПИ бота мы получили в диалоге с botfather.

Далее напишем функцию send, которая отправляет сообщение в чат с нашим ботом.

function send (msg, chat_id) < let payload = < 'method': 'sendMessage', 'chat_id': String(chat_id), 'text': msg, 'parse_mode': 'HTML' >let data = < 'method': 'post', 'payload': payload >UrlFetchApp.fetch('https://api.telegram.org/bot' + API + '/', data); > 

Функция send() отправляет запрос для общения со строними приложениями, в нашем случае — с телегой. Подробнее в документации Class UrlFetchApp.

Аргументы функции — текст отправляемого сообщения и ид чата, в которое это сообщение отправляется.

Далее нужно предусмотреть механизм запуска функции send() . Осуществим это из тела другой функции doPost():

function doPost(e) < let update = JSON.parse(e.postData.contents); //нам нужен только тип "сообщение" if (update.hasOwnProperty('message')) < let msg = update.message; let chat_id = msg.chat.id; let text = msg.text; let user = msg.from.username; if (text == "/hello") < send("Hello World", chat_id) >> > 

Это стандартная функция при работе с телеграм ботами, в которую зашиваются ответные действия от бота при отправке сообщения в чат с ним.

Здесь мы сравниваем текст полученного ботом сообщения с текстом «/hello» и вызываем функцию send() при совпадении. Это все действия нашего бота.

Сначала сохраним скрипт и задеплоим проект. Кликаем на кнопку Deploy -> New deployment.

В результате откроется окно New deployment, где нужно кликнуть по шестеренке и выбрать Web app.

В поле Who has access выбираем Anyone, что позволит другим пользователям вносить правки в проект и деплоить без вашего участия.

И кликаем Deploy.

При первом запуске приложение попросит авторизации. Проделываем это упражнение.

Здесь нам нужен URL в самом конце. Копируем его по кнопке Copy и вставляем в качестве значения глобальной переменной App_link, значение для которой мы оставили изначально пустым.

Создадим функцию установки вебхука для получения обновлений от нашего бота.

Добавим следующий код к нашему скрипту:

function api_connector () < UrlFetchApp.fetch("https://api.telegram.org/bot"+API+"/setWebHook?url full-width ">

Если функция выполнилась без ошибок, идем проверять работу нашего бота непосредственно в телеге.

Сообщение «/hello» успешно распознано, на что наш бот ответил «Hello world».

Скрипт целиком ниже:

  • telegrambot
  • google spreadsheets
  • telegram
  • javascript

Google Календарь и Telegram: два простых решения, благодаря которым эффективность сотрудников выросла до 150%

Ольга Голубова

Чаты, чаты, бесконечные чаты… Как вспомню, так вздрогну. Самой большой проблемой в бизнесе для меня стала коммуникация внутри компании. Особенно с удаленными сотрудниками и фрилансерами.

Теперь для взаимодействия с коллегами я использую всего два инструмента: Google Календарь и Telegram, и получаю удовольствие от результата. За последний год прибыль выросла в 4 раза, а все потому, что мне удалось сделать систему коммуникации простой, прозрачной и понятной для всех. Как? Именно об этом я расскажу в статье. Поехали!

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

На этапе стартапа нас было только двое — я и мой партнер. Нам хватало телефона, чтобы договориться о встрече. Наш «офис» находился в пыльном и душном гараже, на самой окраине города. Но мы мечтали, что скоро у нас будет гейм-студия, и на коленках разрабатывали первую игру.

Гейм-приложение оказалось успешным, и мы заработали ровно столько, сколько нужно было для небольшого офиса с оборудованием. Собрали команду из четырех человек и начали работу. Для общения использовали Skype. Этого было более чем достаточно для обмена ссылкам, файлами, видеозвонков, групповой переписки.

Прошло время и компания выросла. У нас появился отдел продаж, аналитики, маркетинга, PR, а еще удаленные дизайнеры, художники и копирайтеры. И скайп оброс огромным количеством чатов. И в один прекрасный момент это стало невыносимым — звук уведомлений до сих провоцирует у меня нервный тик.

А что в этих чатах творилось — черт ногу сломит. И котики, и гифки, и прилетающие не туда сообщения: сплошной сюрреализм.

Стало действительно сложно доносить до коллег важную и нужную информацию.

Только у меня уходило не меньше трех часов в день (!), чтобы разобраться с тем, что кто кому пишет, и на каком этапе сейчас находится тот или иной проект.

Избавиться от многих проблем можно путём автоматизации

А проблем становилось все больше:

  • Разъяренные программисты забрасывали гневными сообщениями о том, что их нужно убрать из всех чатов.
  • У маркетолога полдня уходило на постановку технических заданий.
  • Руководители отделов пропускали важные задачи и собрания.
  • Специалисты не соблюдали дедлайны или вообще не выполняли работу, так как не понимали, кому поставлено задание.
Все это привело к потере клиентов, выплатам компенсаций и снижению доверия к компании в целом.

В один прекрасный момент случилось так, что денег не осталось ни на аренду, ни на зарплаты.

И в этой ситуации выбор был не большой:

  • Сворачиваться.
  • Оптимизировать внутреннюю коммуникацию.

Тесты

Здесь коротко. Перепробовали все в различных комбинациях: Slack, Битрикс24, Trello, почта, социальные сети, мессенджеры. Появились новые трудности:

  • постоянное предоставление доступов;
  • у сотрудников открыто минимум по 5 окон для работы с ТЗ, куча вкладок и диалоговых окон для решения по нему оперативных вопросов. И это помимо профессионального софта.
  • частые сбои в работе сервисов увеличивали время выполнения работы.
  • и много другое.

Кажется, что ситуация лишь усугубилась.

YouTube

Свяжите сервисы между собой без программистов за 5 минут!

Как настроить выгрузку данных из WooCommerce в SMS Club?

Как настроить выгрузку данных из WooCommerce в SMS Club?

Как настроить выгрузку новых квизов из QuizGo в виде сделок в Битрикс24?

Как настроить выгрузку новых квизов из QuizGo в виде сделок в Битрикс24?

Google Календарь и его преимущества

Поистине недооцененный Google Календарь стал моим спасением. Универсальное решение, которое я сейчас использую для:

  • планирования событий;
  • коротких заметок;
  • постановки задач;
  • отслеживания прогресса выполнения работы по каждому сотруднику.

Проще говоря, обычный Гугл Календарь превратился в корпоративную CRM. Для каждого отдела у меня отдельный календарь, где я размещаю задачи и сроки их выполнения.

  • Срочные выделяю красным цветом, те, что могут подождать — зеленым. К задаче можно прикрепить любой файл или ссылку, необходимую для работы.
  • Прописываю мероприятия: совместный поход, тренинг для отдела продаж или выездной семинар.
  • Отмечаю действия, которые нужно сделать в течение дня. Чтобы не загружать лишней информацией поля, задачи ставлю во временном промежутке с 9:00 до 8:30 с уведомлением на почту. Далее фильтрую по актуальности: выполнить, перенести, делегировать или отменить.

Но в процессе работы с этим инструментом всплыл существенный недостаток — сотрудники редко проверяют рабочую почту и автоматически удаляют события на телефоне.

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

Встал вопрос, как оперативно и персонализировано уведомлять членов команды о новых событиях в корпоративном календаре без временных затрат на рассылку во все каналы связи.

Использование календаря решает многие проблемы

Интеграция и автоматизация

На плановом собрании устроили брейншторм, и пришли к выводу, что оптимальный вариант взаимодействия — связать Гугл Календарь с мессенджером. Выбрали Telegram, а что дальше?

  1. Разработать собственный софт. Вариант отпал сразу, ведь недостаточно просто создать программу, ее нужно постоянно обслуживать, а отдельного человека для этого нанимать нерентабельно.
  2. Делегировать задачу. Здесь, как в первом случае, но денег ушло бы в несколько раз больше.
  3. Найти готовое решение, которое не придется обслуживать самостоятельно.

Выбор пал на ApiX-Drive. Это, пожалуй, единственный в Украине сервис интеграции, способный «подружить» между собой практически все программы, с которым работает малый, средний и крупный бизнес.

Что в итоге?

С подключением сервиса интеграции все встало на свои места, о чем свидетельствуют квартальные отчеты.

Что изменилось после внедрения?

  • Все делается вовремя. Больше никаких авралов, задержек и невыполненных обязательств. Работа выполняется точно в срок и даже с временным запасом на правки.
  • Прозрачность. Больше никакой путаницы с задачами. Всем все ясно и понятно.
  • Отклик на изменения в календаре — мгновенный. Среднее время ответа — 5 минут.
  • Простота отслеживания. Каждый сотрудник получает персонализированную задачу непосредственно от своего руководителя. Все сообщения сохраняются в истории Телеграм, проверка которой занимает считанные минуты.
  • Мгновенная обратная связь. Выполненная задача закрывается в календаре посредством изменения статуса или добавления заметки, извещение о новом действии доставляется мгновенно поставщику задачи.
  • Комфорт. Не нужно никого пинать и контролировать.
  • Специалисты оставляют заметки об этапах выполнения задач. Нет необходимости логиниться в десятках программ и создавать 100500 вкладок в браузере.
  • Спокойствие. Отсутствие чатов снизило напряжение в коллективе.
  • Результативность и качество. Работа выполняется по плану в рамках стратегий и со 100% отдачей.
  • Рост продаж. Эффективность отдела повысилась на 150% за счет отсутствия раздражителей и необходимости отслеживать переписки в десятках чатов.
  • Увеличение прибыли. Спокойная атмосфера позволяет выполнять планы и достигать поставленных целей. За год мы увеличили прибыль в 4 раза.

И все это благодаря бесплатной автоматизации одного процесса с помощью ApiX-Drive.

Как это работает

Конечно, для настройки цепочек нужно время. И не мало, если хочется создать прямую коммуникацию с каждым отдельным специалистом. Несмотря на то, что на сайте выложена подробная инструкция, у меня возникали трудности. Обычно из-за того, что какую-то кнопочку не нажала или проигнорировала тот или иной шаг в инструкции.

Очень порадовала техническая поддержка, которая оперативно реагировала на мои вопросы, и помогала решать их легко и с удовольствием.

Результат получился идеальный:

Результат настройки автоматизации

Создала событие, а оно уже в Телеграме ответственного сотрудника. И это невероятно круто.

Рекомендую попробовать ApiX-Drive уже сейчас. За две недели тестового периода вы увидите результативность инструмента на бизнес-показателях. И вам это точно понравится!

Как к телеграм боту подключить гугл календарь

Как создать календарь бота в Telegram с привязкой к Google Calendar?

Добрый день. Хочу создать бота, в котором будет одна единственная функция это календарь с числами и временем.

Как сделать так, чтобы он сохранял все данные в Google Calendar?
Календарь планирую реализовать так:

import telegramcalendar TOKEN = "" logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO) logger = logging.getLogger(__name__) def calendar_handler(bot,update): update.message.reply_text("Please select a date: ", reply_markup=telegramcalendar.create_calendar()) def inline_handler(bot,update): selected,date = telegramcalendar.process_calendar_selection(bot, update) if selected: bot.send_message(chat_id=update.callback_query.from_user.id, text="You selected %s" % (date.strftime("%d/%m/%Y")), reply_markup=ReplyKeyboardRemove()) up = Updater(TOKEN) up.dispatcher.add_handler(CommandHandler("calendar",calendar_handler)) up.dispatcher.add_handler(CallbackQueryHandler(inline_handler)) up.start_polling() up.idle()

Но как туда зашить еще время, помимо даты?

  • Вопрос задан более года назад
  • 2340 просмотров

Подключить Google Calendar к Telegram bot Python

Я начала изучать создание чат-ботов в телеграме на Python с помощью библиотеки pyTelegramBotAPI. Хочу создать бота, который будет записывать пользователя на приём и сохранять в Google calendar. Пробовала использовать этот код https://github.com/grcanosa/telegram-calendar-keyboard, но ничего не работает. Вот этот код у меня не работает, потому что здесь используется библиотека python-telegram-bot:

import logging import telegramcalendar logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO) logger = logging.getLogger(__name__) def calendar_handler(bot,update): update.message.reply_text("Please select a date: ", reply_markup=telegramcalendar.create_calendar()) def inline_handler(bot,update): selected,date = telegramcalendar.process_calendar_selection(bot, update) if selected: bot.send_message(chat_id=update.callback_query.from_user.id, text="You selected %s" % (date.strftime("%d/%m/%Y")), reply_markup=ReplyKeyboardRemove()) 
import datetime import calendar def create_callback_data(action,year,month,day): """ Create the callback data associated to each button""" return ";".join([action,str(year),str(month),str(day)]) def separate_callback_data(data): """ Separate the callback data""" return data.split(";") def create_calendar(year=None,month=None): """ Create an inline keyboard with the provided year and month :param int year: Year to use in the calendar, if None the current year is used. :param int month: Month to use in the calendar, if None the current month is used. :return: Returns the InlineKeyboardMarkup object with the calendar. """ now = datetime.datetime.now() if year == None: year = now.year if month == None: month = now.month data_ignore = create_callback_data("IGNORE", year, month, 0) keyboard = [] #First row - Month and Year row=[] row.append(InlineKeyboardButton(calendar.month_name[month]+" "+str(year),callback_data=data_ignore)) keyboard.append(row) #Second row - Week Days row=[] for day in ["Mo","Tu","We","Th","Fr","Sa","Su"]: row.append(InlineKeyboardButton(day,callback_data=data_ignore)) keyboard.append(row) my_calendar = calendar.monthcalendar(year, month) for week in my_calendar: row=[] for day in week: if(day==0): row.append(InlineKeyboardButton(" ",callback_data=data_ignore)) else: row.append(InlineKeyboardButton(str(day),callback_data=create_callback_data("DAY",year,month,day))) keyboard.append(row) #Last row - Buttons row=[] row.append(InlineKeyboardButton("<",callback_data=create_callback_data("PREV-MONTH",year,month,day))) row.append(InlineKeyboardButton(" ",callback_data=data_ignore)) row.append(InlineKeyboardButton(">",callback_data=create_callback_data("NEXT-MONTH",year,month,day))) keyboard.append(row) return InlineKeyboardMarkup(keyboard) def process_calendar_selection(bot,update): """ Process the callback_query. This method generates a new calendar if forward or backward is pressed. This method should be called inside a CallbackQueryHandler. :param telegram.Bot bot: The bot, as provided by the CallbackQueryHandler :param telegram.Update update: The update, as provided by the CallbackQueryHandler :return: Returns a tuple (Boolean,datetime.datetime), indicating if a date is selected and returning the date if so. """ ret_data = (False,None) query = update.callback_query (action,year,month,day) = separate_callback_data(query.data) curr = datetime.datetime(int(year), int(month), 1) if action == "IGNORE": bot.answer_callback_query(callback_query_id= query.id) elif action == "DAY": bot.edit_message_text(text=query.message.text, chat_id=query.message.chat_id, message_id=query.message.message_id ) ret_data = True,datetime.datetime(int(year),int(month),int(day)) elif action == "PREV-MONTH": pre = curr - datetime.timedelta(days=1) bot.edit_message_text(text=query.message.text, chat_id=query.message.chat_id, message_id=query.message.message_id, reply_markup=create_calendar(int(pre.year),int(pre.month))) elif action == "NEXT-MONTH": ne = curr + datetime.timedelta(days=31) bot.edit_message_text(text=query.message.text, chat_id=query.message.chat_id, message_id=query.message.message_id, reply_markup=create_calendar(int(ne.year),int(ne.month))) else: bot.answer_callback_query(callback_query_id= query.id,text="Something went wrong!") # UNKNOWN return ret_data 

Выводит такую ошибку: 2020-09-02 13:36:57,852 — requests.packages.urllib3.connectionpool — INFO — Starting new HTTPS connection (1): api.telegram.org Приведите, пожалуйста, пример кода для библиотеки pyTelegramBotAPI.

Google Календари

Мы сделали очень простую в настройке систему бронирования для тех, кто не использует CRM. Она подходит как для индивидуальных исполнителей, так и для бизнеса с небольшим количеством графиков занятости (то есть сотрудников или ресурсов, если речь идет об аренде). Создайте чат-бота для работы с бронированием через календарь.

Настройка

Шаг 1. Создание Google Календарей

  1. Перейдите по ссылке https://calendar.google.com/ и выполните вход в тот аккаунт, который будет содержать будущие расписания.
  2. Перейдите в настройки (значок шестеренки в правом верхнем углу)
  3. Разверните «Добавить календарь» и выберите «Создать календарь»
  4. Введите название будущего календаря (имена сотрудников, номера помещений). Если планируется только одно расписание (календарь), то укажите, например «Рабочий».
  5. Обновите страницу и выберите слева созданный календарь:
    1. В пункте «Автоматически принимать приглашения» выставите «Автоматически принимать не конфликтующие между собой приглашения»
    2. В «Доступе для отдельных пользователей» откройте доступ «info@bot-manager.com» с разрешениями «Внесение изменений в мероприятия»
    3. В «Другие уведомления» поставьте, чтобы уведомления о новых и отмененных мероприятиях приходили на Email
    4. Скопируйте «Идентификатор календаря» в разделе «Интеграция календаря»
  6. В BotManager в разделе «Онлайн запись» в пункте «Календари» нажмите «Добавить календарь», вставьте скопированный идентификатор в появившуюся строку, поставьте галку «Активен» и нажмите на иконку подтверждения слева.

Если Вы выполнили все пункты, то сразу после сохранения в поле «Название» должно появиться название Google календаря – расписание подключено!

Шаг 2. Выставление рабочего времени

Перейдите в Google Календари. Для удобства работы советуем скрыть календари, не относящиеся к работе:

Предположим, что Ваш график работы следующий: вт-вс с 10:00 до 20:00, пн – выходной.

  1. Переключите вид отображения на недельный (в правом верхнем углгу).
  2. Создайте мероприятие, начинающееся сегодня в 20:00 (для этого просто кликните в нужную точку).
    1. Укажите название, например «Не рабочее» или «-».
    2. Время окончания выставите «10:00».
    3. Вместо «Не повторять» поставьте «Ежедневно».
    4. По умолчанию данное мероприятие относится только к одному календарю. Если у их Вас несколько и Вы хотите применить это же нерабочее время, то в поле «Добавить гостей» вставьте идентификаторы остальных интересующих календарей (можете скопировать их из BotManager). После сохранения нажмите «Не отправлять» приглашение. (сохранение мероприятий может занять около минуты)

    Шаг 3. Настройка оказываемых услуг

    В панели BotManager в разделе «Онлайн запись» вы можете создавать категории услуг и непосредственно услуги.

    Для примера мы создали категорию «Маникюр». Чтобы добавить услуги:

    1. Выберите интересующую категорию услуг
    2. Укажите название и длительность (остальные поля необязательные)
    3. Нажмите иконку подтверждения слева
    4. После сохранения нажмите «Настроить» и выберите те календари, которые оказывают данную услугу, и нажмите сохранить:

    Можете уже переходить к последнему шагу. Стоит упомянуть о дополнительных настройках:

    Поле «Доступное количество» в услуге

    Если Вы укажите целые числа через запятую, то пользователю будет доступен выбор продолжительности услуги. Например, если длительность услуги «Аренда катера» выставить 30 минут, то при указании «2,3,4» пользователь будет выбирать между «60 мин», «90 мин» и «120 мин».

    Поле «Любой календарь» в услуге

    Если отметить это поле, то после выбора услуги не будет происходить выбор специалиста (помещения и тд). Вместо этого пользователь сразу перейдет к выбору даты и времени. Удобно для сферы аренды однотипных объектов.

    Поле «Текст кнопки с выбором календарей» в разделе «Прочие настройки»

    Если Вы укажете какой-либо текст, например, «Специалисты», то пользователь сможет начать бронирование не только с выбора услуги, но и с выбора специалиста. Удобно для сфер, где важно, кто оказывает услуги.

    Поле «Текст запроса доп. информации» в разделе «Прочие настройки»

    Если хотите запрашивать информацию от клиента, то укажите любой текст, и он отобразится перед завершением бронирования с запросом ввода любого текста. Номер телефона будет запрашиваться в любом случае, так что используйте поле для других целей.

    Поле «Интервал между слотами» в разделе «Прочие настройки»

    По умолчанию, доступные слоты будут отображаться с интервалом в 30 минут. Вы можете изменить это значение (но учтите, что если выставить 5-10 минут, то пользователю будет не так удобно найти желаемое время).

    Поле «Бронирование нескольких категорий услуг» в разделе «Прочие настройки»

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

    Поле «Бронирование нескольких услуг» в разделе «Прочие настройки»

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

    Поле «Разрешить повтор последней брони» в разделе «Прочие настройки»

    После оформления бронирования пользователю становится доступна кнопка «Отмена бронирования». Если разрешить повтор брони, то пользователь также увидит кнопки быстрого повтора, чтобы сразу перейти к выбору даты и времени.

    Поле «№ филиала» в разделе «Календари»

    Если у Вас несколько филиалов, но Вы хотите сделать запись в одном боте, то укажите разные числа в этом поле для календарей из разных филиалов и затем используйте эти числа в Шаге 4 . Так Вам не придется заново настраивать услуги для каждого филиала.

    Шаг 4. Настройка дерева экранов

    1. Перейдите в раздел «Боты» и нажмите кнопку «Импортировать шаблон» для выбранного.
    2. Выберите категорию «Интеграции», затем «Онлайн запись в Google Календарях».
    3. Нажмите «Выполнить импорт».
    4. Перейдите в раздел «Дерево экранов» и соедините появившиеся экраны с уже существующей Вашей логикой (не забудьте сохранить изменения). Например, вот так:

    Если Вы хотите переправить пользователя на какой-либо свой экран после успешного бронирования, то добавьте самостоятельно кнопку с названием «Забронировано» в экраны «Онлайн запись 1» и «Онлайн запись 2». Затем в настройках этих кнопок в поле «Выполнить действия после нажатия» укажите «[ВыходИзОнлайнЗаписи]». Соедините эти кнопки с желаемым экраном, и система переведет пользователя на него после оформления бронирования.

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

    Телеграм бот для Календаря Google

    В этой статье мы расскажем, как создать Телеграм бота для планирования встреч при помощи Календаря Google. Наш бот будет помогать назначать встречи, учитывая доступность свободного времени.

    Будет весьма неплохо, если у вас уже есть базовые знания о Python и HTTP-запросах, а также представление о google-calendar-api.

    Начнем с того, что перейдем в Телеграм и найдем там Бота-Отца (BotFather). Этот бот предназначен для создания новых ботов и управления ими.

    Далее введем следующие команды:

    /start /newbot

    После этого введем имя бота и имя пользователя. В результате будет создан бот и сгенерирован ключ API. Давайте проверим бот, послав ему сообщение.

    У BotFather есть несколько опций для настройки нового бота:

    /setname - change a bot's name /setdescription - change bot description /setabouttext - change bot about info /setuserpic - change bot profile photo /setcommands - change the list of commands

    Но пока мы не будем усложнять наш проект и остановимся на создании нового бота.

    Python-код

    Далее создадим файл под названием main.py и сохраним туда следующий код:

    import requests import datetime import json api_key='your_api_key' def run(): url .format(api_key) response = requests.get(url) data=response.json() print(data) if __name__ == "__main__": run()

    Результатом выполнения этого кода будут данные в формате JSON, которые содержат сообщения, посланные в этот бот. Если же сообщений еще нет, то результатом будет пустой список.

    'ok': True, 'result': [, 'chat': , 'date': 1578749467, 'text': '/start', 'entities': []>>, , 'chat': , 'date': 1578749481, 'text': 'test'>>]>

    Создаем связь с Google-календарем

    Теперь перейдем в Google-календарь по следующей ссылке и активируем Google Calendar API .

    Загружаем файл credential.json и сохраняем его в том же каталоге, что и наш файл main.py . А далее для установки нужных нам модулей выполняем в терминале следующую команду:

    pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

    После этого скопируем файл quickstart.py , переименуем его в scheduler.py и переместим его в тот же каталог, где уже находятся наши рабочие файлы. Таким образом иерархия файлов будет иметь следующий вид:

    Telegram-Bot | |----- main.py |----- scheduler.py |----- credentials.json

    После этого нам нужно создать в файле scheduler.py функцию, создающую событие и возвращающую значения булевого типа: True , если событие удалось успешно занести в календарь, и False в противном случае.

    from __future__ import print_function import datetime import pickle import os.path from googleapiclient.discovery import build from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request # If modifying these scopes, delete the file token.pickle. # SCOPES = ['https://www.googleapis.com/auth/calendar.readonly'] SCOPES = ['https://www.googleapis.com/auth/calendar'] def book_timeslot(event_description,booking_time,input_email): """Shows basic usage of the Google Calendar API. Prints the start and name of the next 10 events on the user's calendar. """ creds = None # The file token.pickle stores the user's access and refresh tokens, and is # created automatically when the authorization flow completes for the first # time. if os.path.exists('token.pickle'): with open('token.pickle', 'rb') as token: creds = pickle.load(token) # If there are no (valid) credentials available, let the user log in. if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES) creds = flow.run_local_server(port=0) # Save the credentials for the next run with open('token.pickle', 'wb') as token: pickle.dump(creds, token) service = build('calendar', 'v3', credentials=creds) #--------------------- Manipulating Booking Time ---------------------------- start_time=str(datetime.datetime.now())[:10]+'T'+booking_time+':00+08:00' end_time=str(datetime.datetime.now())[:10]+'T'+str(int(booking_time[:2])+1)+':00:00+08:00' #---------------------------------------------------------------------------- # Call the Calendar API now = datetime.datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time print('Booking a time slot. ') events_result = service.events().list(calendarId='primary', timeMin=now, maxResults=10, singleEvents=True, orderBy='startTime').execute() events = events_result.get('items', []) if not events: event = < 'summary': 'Hair Cut Appointment', 'location': 'Singapore', 'description': str(event_description) + 'with AutomationFeed', 'start': < 'dateTime': start_time, 'timeZone': 'Asia/Singapore', >, 'end': < 'dateTime': end_time, 'timeZone': 'Asia/Singapore', >, 'recurrence': [ 'RRULE:FREQ=DAILY;COUNT=1' ], 'attendees': [ , , ], 'reminders': < 'useDefault': False, 'overrides': [ , , ], >, > event = service.events().insert(calendarId='primary', body=event).execute() print ('Event created: %s' % (event.get('htmlLink'))) return True else: # --------------------- Check if there are any similar start time --------------------- for event in events: start = event['start'].get('dateTime', event['start'].get('date')) if start==start_time: print('Already book. ') return False # -------------------- Break out of for loop if there are no apppointment that has the same time ---------- event = < 'summary': 'Hair Cut Appointment', 'location': 'Singapore', 'description': str(event_description) + 'with AutomationFeed', 'start': < 'dateTime': start_time, 'timeZone': 'Asia/Singapore', >, 'end': < 'dateTime': end_time, 'timeZone': 'Asia/Singapore', >, 'recurrence': [ 'RRULE:FREQ=DAILY;COUNT=1' ], 'attendees': [ , , ], 'reminders': < 'useDefault': False, 'overrides': [ , , ], >, > event = service.events().insert(calendarId='primary', body=event).execute() print ('Event created: %s' % (event.get('htmlLink'))) return True if __name__ == '__main__': input_email='test@gmail.com' booking_time='14:00' result=book_timeslot('Dye',booking_time,input_email)

    В этом коде некоторые операторы if изменяют результат в зависимости от текущего времени. Например, если текущее время 07:15, то на встроенной клавиатуре будут отображаться временные интервалы от 08:00 до 18:00.

    Затем нам нужно создать функцию, которая будет запрашивать адрес электронной почты пользователя, а также проверять его с помощью регулярных выражений.

    def check_email(email): regex = '^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w)+$' if(re.search(regex,email)): print("Valid Email") return True else: print("Invalid Email") return False

    Вот так это будет выглядеть в Телеграм.

    И теперь нам нужно убедиться, что событие было создано в Календаре Google. Для этого перейдем в Календарь и убедимся, что данное мероприятие существует. Вы можете настроить продолжительность мероприятия, сделать его описание и указать состав участников.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *