Содержание

Как написать простого бота для ВК и Телеграм / Хабр

Мы уже упоминали, как мы предоставляем бесплатные VPS для студентов, чтобы они учились программировать. Один из наших подопечных Павел сделал простеньких телеграм и ВК ботов для FAQ. Они очень простые, тем не менее, начинающему программисту не помешают комментарии опытных ребят — поэтому публикуем его рассказ — Павел будет рад, если в комментариях ему дадут советы.

Я — студент Новосибирского Государственного Технического Университета, не так давно мы с парочкой моих друзей реализовали площадку для продвижения проектов во всех возможных областях научной деятельности. Мы помогаем «сводить» заинтересованных преподавателей и студентов всех ВУЗов Сибири, чтобы проектная научная деятельность развивалась по территории Сибири и РФ.

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

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

Я использовал Python версии 3.6  просто потому, что он самый простой для меня. Кодил в PyCharm Community Edition. Весь код опубликован на GitHub. Удачи!

1. Предварительные приготовления для телеграм-бота


1.1 Получение токена от BotFather в телеграмме

Первым делом, нам нужно «зарегистрировать» нашего бота в Telegram.

Для этого, в поисковике телеги ищем BotFather

далее, делаем всё также, как на скриншотах:

После нажимаем на команду /newbot или же прописываем вручную.

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

1.2 Переходим в любой редактор кода и создаем файл config.py

Перед созданием данного файла, нам нужно выбрать директорию, в которой будет реализован весь функционал бота. Если вы используете PyCharm Community/Professional Edition, то предлагаю просто создать новый проект, и писать там весь функционал бота.

Если Вы используете любой другой редактор, такой как Sublime Text 3, например, то Вам самостоятельно придётся создать директорию, создать виртуальное окружение, и работать из консоли со всеми предварительными тестами. Во избежание трудностей, предлагаю скачать продукт PyCharm Community Edition от компании JetBrains, с помощью данного продукта можно обойти действия, описанные в предыдущем абзаце, так как данный продукт сделает их самостоятельно, от Вас потребуется только указать путь до интерпретатора Python в конфигурациях PyCharm, с помощью которого и будет работать Ваш бот.

В данном файле (config.py) будет храниться только токен, который нам дал BotFather, поэтому пишем:

token = "Здесь хранится Ваш токен".

1.3 Cоздаём главный файл — bot.py

Делаем cледующие импорты и для соответствующих библиотек, в консоли прописываем закоментированные строчки:

import config
import telebot # pip install telebot
from telebot import types # pip install pyTelegramBotAPI

Далее, нам необходимо использовать наш токен:

bot = telebot. TeleBot(config.token)

Этими действиям мы устанавливаем то, что мы будем накручивать функционал именно для того бота, для которого нам и дал токен BotFather.

2. Разворачиваем функционал

Начнём с того, что для того, чтобы пользователю запустить бота, нам необходимо прописать команды для старта они могут быть разными, например, /start или /go и вообще любыми, какие Вы сочтёте нужными.

Для обработки команд нам потребуется message_handler, с помощью которого и будет реализован весь функционал обработки команд для старта и завершения, если Вы сочтёте нужным добавить завершение. Как только придёт команда /go или /start, message_handler с соответствующими командами сравнит, совпадают ли строки и если совпадают, то обработает соответствующей функцией.

Каждая функция, как и в примере сейчас, должна принимать один параметр — сообщение от пользователя, которое будет обработано соответствующей функции «в обёртке» декоратора. А также, каждая функция (или связка функций) должна возвращать соответсвующее сообщение от бота.

Итак:

@bot.message_handler(commands=['go', 'start'])  # Обработка команды для старта
def welcome(message):
    sti = open(path+'stiker.tgs', 'rb')
    bot.send_sticker(message.chat.id, sti)
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    item3 = types.KeyboardButton("Приложения")
    item2 = types.KeyboardButton("Мероприятия")
    item1 = types.KeyboardButton('О нас')
    markup.add(item1, item2, item3)
    bot.send_message(message.chat.id,
                     "Добро пожаловать, {0.first_name}!\\n\\nЯ - <b>{1.first_name}</b>, бот команды Projector в НГТУ, "
                     "создан для того, "
                     "чтобы помочь Вам влиться в нашу команду,"
                     "просто узнать что-то о нас или же просто пообщаться и весело провести время.\\n\\n"
                     "<i>Have a nice time</i>".format(
                         message.
from_user, bot.get_me()),                      parse_mode='html', reply_markup=markup)

В этой функции реализовано сразу два действия: отправка приветственного сообщения и создание встроенной клавиатуры — ReplyKeyboardMarkup, которая будет открыта, пока мы не завершим выполнения бота соответсвующей командой. Об этом будет сказано ниже.

Итак, пройдёмся по строчкам:

В строках 20-21: открывается стикер по тому пути к директории, в которой я его сохранил, после чего отправляется.

Строки 22-28: создаем встроенную клавиатуру, добавляя туда три элемента.

Строки 30-37: описано создание и отправка приветственного сообщения

Как вы можете заметить, метод send_message в строке 30, позволяет использовать HTML, для форматирования текста.

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

# RUN
if __name__ == "__main__":
    try:
        bot.
polling(none_stop=True)     except ConnectionError as e:         print('Ошибка соединения: ', e)     except Exception as r:         print("Непридвиденная ошибка: ", r)     finally:         print("Здесь всё закончилось")

Сделаем первый запуск! Для этого, в PyCharm-е нажмём зеленую кнопку старт в правом верхнем углу или же, можно запустить из консоли командой: python bot.py

Результат первого запуска:

2.1 Обработка нажатия на кнопки и создание inline keyboard

Так как любое сообщение — это текст, то мы будем обрабатывать именно текстовые сообщения.

Сделаем следующее и аналогично разберём по строчкам:

@bot.message_handler(content_types=["text"])
def go_send_messages(message):
    if message.chat.type == 'private':
        if message.text == 'Приложения':
            keyboard = types.InlineKeyboardMarkup(row_width=1)
            itemboo = types.InlineKeyboardButton(text="Тыщ на кнопку и ты уже в Google", url="<https://www. google.ru>")
            itemboo1 = types.InlineKeyboardButton('Рандомное число', callback_data='good2')
            itemboo2 = types.InlineKeyboardButton("Калькулятор", callback_data='bad2')
            itemboo3 = types.InlineKeyboardButton("Хочу узнать погоду в моем городе/стране", callback_data='good3')
            itemboo4 = types.InlineKeyboardButton("Как твои дела?", callback_data='bad4')
            keyboard.add(itemboo, itemboo1, itemboo2, itemboo3, itemboo4)
            bot.send_message(message.chat.id,
                             "{0.first_name}, окей, смотри, что у нас есть тут:\\n".format(message.from_user),
                             reply_markup=keyboard)
        elif message.text == "Мероприятия":
            one_markup = types.InlineKeyboardMarkup(row_width=1)
            ite1 = types.InlineKeyboardButton("Ближайшие мероприятия", callback_data="one")
            ite2 = types.InlineKeyboardButton("Проведенные мероприятия", callback_data="two")
            ite3 = types.
InlineKeyboardButton("Волонтерство на мероприятие", callback_data="three")             ite4 = types.InlineKeyboardButton("Действующие проекты в НГТУ", callback_data="fourth")             ite5 = types.InlineKeyboardButton("Мероприятия Межвузовского центра", callback_data="five")             one_markup.add(ite1, ite2, ite3, ite4, ite5)             bot.send_message(message.chat.id, "{0.first_name}, у нас <u>ежемесячно</u> проводится множество "                                               "мероприятий,\\nмы постарались разбить их на следующие составляющие:".format(                 message.from_user), parse_mode="html", reply_markup=one_markup)

Строка 339 — обработчик любых текстовых сообщений

Строка 341 предназначена для того, чтобы сказать, что если данное сообщение предназначено боту, то сравни эту строку с теми, что здесь обрабатываются и отправь ответ.

Строки 344 — 351 — создаём инлайновую клавиатуру InlineKeyboardMarkup и помещаем в эту клавиатуру 5 элементов, которые также можно будет обработать по установленной callback_data. Элементы данной клавиатуры будут расположены друг под другом, так как в строке 344, мы установили row_width = 1, что обозначает самую широкую грань одной кнопки, поэтому они и будут расположены друг под другом.

Строки 353-355 — отправляют текст, вместе с нашей Inline Keyboard.

В условиях ниже представлены аналогичные представления обработки сообщений.

Итак, сделаем запуск:

2.2 Обработка InlineKeyboardButton

Как было сказано выше, каждый элемент InlineKeyboardButton имеет параметр callback_data, и именно по этим параметрам будет обрабатываться каждая кнопка. Для этого нам потребуется обработчик инлайновой клавиатуры callback_query_handler.

@bot.callback_query_handler(func=lambda call: call.data in ['one', 'two', 'three', 'fourth', 'five'])  # Мероприятия
def callback_inline_one(call):
    try:
        if call.message:
            if call.data == 'one':  # Ближайшие мероприятия
                bot. send_message(call.message.chat.id,
                                 "Итак,<b>ближайшие мероприятия</b>:\\n\\n"  # Здесь будут ссылки ещё
                                 "Форум «Байкал»\\n"
                                 "Конкурс «Цифровой ветер»\\n"
                                 "PRONETI", parse_mode="html")
            elif call.data == 'two':  # Проведённые мероприятия
                bot.send_message(call.message.chat.id, "Вот список <b>проведённых мероприятий</b>:\\n\\n"
                                                       "МНТК\\n"
                                                       "Семинары по проектной деятельности\\n"
                                                       "Встреча с представителями предприятий", parse_mode="html")
            elif call.data == 'three':

Итак, разберём построчно:

Строка 269 — объявляем обработчик, который будет обрабатывать каждую из нажатых кнопок с использованием лямбда-функции

Строки 273-278 — В данном блоке if, мы просто обрабатываем сообщение и отправляем сообщение пользователю.

Строки 279-283 — Делают аналогичное действие, что и в предыдущем условном блоке.

и т. д.

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

Результат:

Так просто и обрабатываются inline keyboards.

3. Завершаем работу бота

Данная функция будет аналогичной функции обработки команд для старта бота, поэтому Вы сможете легко понять её функционал:

@bot.message_handler(commands=['stop'])  # Обработка команды для выхода
def bye(message):
    bye_Sti = open(path+'byeMorty.tgs', 'rb')
    hideBoard = types.ReplyKeyboardRemove()
    bot.send_message(message.chat.id,
                     "Досвидания, {0.first_name}!\\nМы, команда <b>{1.first_name}</b>, надеемся, что ты хорошо провел(а) время \\n\\n"
                     "Присоединяйся к нашей команде в <a href='<https://vk. com/projector_neti>'>vk</a>\\n"
                     "Наш <a href='<https://instagram.com/projector_neti>'>inst</a>\\n\\n"
                     "Напиши Координатору проектов (<a href='<https://vk.com/nikyats>'>Никите Яцию</a>) и задай интересующие тебя вопросы по <i>проектной деятельности</i>\\n\\n"
                     "Надеемся, что тебе ответят очень скоро \\n\\n"
                     "<u>Don't be ill and have a nice day</u> \\n\\n\\n"
                     "P.S.: Если есть какие-то пожелания или вопросы по боту, то напиши <a href='<https://vk.com/setmyaddresspls>'>мне</a>".format(
                         message.from_user, bot.get_me()), parse_mode='html', reply_markup=hideBoard)
    exit()

Здесь происходит следующее:

  1. Отправляется прощальный стикер.
  2. Закрывается встроенная клавиатура (строка 44).
  3. Отправляется прощальное сообщение.

Так как мы используем bot.polling, с параметром none_stop = True, то пользователь может снова вознообновить общение с ботом при помощи команды /start или /go, обработка которых показано в пункте выше.

Результат:

ВК БОТ

Перейдём к реализации бота Вконтакте, написанном на том же родном языке Python, его основное отличие от предыдущего в том, что он был написан с использованием ООП, а именно класса. Внешне, он выполняет ту же миссию. Сама библиотека для написания вк бота намного проще телеграмм бота, поэтому разобраться в ней самостоятельно не составит большого труда. Итак, начнём.

1. Предварительные подготовления

Установим следующие библиотеки по тем же технологиям:

import vk_api # pip install vk-api
import json   # pip install json
from vk_api.longpoll import VkLongPoll, VkEventType

▍1.

1 Получение токена для сообщества Вконтакте.
  1. На главной странице сообщества найти раздел «Управление»
  2. Работа с API
  3. Создать ключ. Выбираете нужные для вас пункты, которые будут доступны боту.

В итоге должно получиться примерно следующее:

Берем ключ и переходим в среду разработки и делаем следующее:

vk = vk_api.VkApi(token=
                  "Ваш_токен")

Далее — следующее:

longpoll = VkLongPoll(vk)

На этом, закончим подготавления.

2. Разворачиваем функционал

Первым делом создадим файл manage.py

Cоздадим прототип встроенной клавиатуры ( всё с помощью документации VkBotAPI ).

main_keyboard = {
    "one_time": False,
    "buttons": [
        [{
            "action": {
                "type": "text",
                "payload": "{\\"button\\": \\"1\\"}",
                "label": "О нас"
            },
            "color": "positive"
        }],
        [{
            "action": {
                "type": "text",
                "payload": "{\\"button\\": \\"2\\"}",
                "label": "Мероприятия"
            },
            "color": "positive"
        },
            {
                "action": {
                    "type": "text",
                    "payload": "{\\"button\\": \\"3\\"}",
                    "label": "Приложения"
                },
                "color": "positive"
            }
        ],
        [{
            "action": {
                "type": "text",
                "payload": "{\\"button\\": \\"4\\"}",
                "label": "Контакты"
            },
            "color": "primary"
        }]
    ]
}

Затем переводим её в формат json, как требуется в документации:

main_keyboard = json. dumps(main_keyboard, ensure_ascii=False).encode('utf-8')
main_keyboard = str(main_keyboard.decode('utf-8'))

Пример инлайн клавиатуры:

about_us_keyboard = {
    "inline": True,
    "buttons": [
        [{
            "action": {
                "type": "text",
                "payload": "{\\"button\\": \\"1\\"}",
                "label": "Основная информация"
            },
            "color": "positive"
        }],
        [{
            "action": {
                "type": "text",
                "payload": "{\\"button\\": \\"2\\"}",
                "label": "Чем мы занимаемся ?"
            },
            "color": "primary"
        },
        {
            "action": {
                "type": "text",
                "payload": "{\\"button\\": \\"3\\"}",
                "label": "Где мы находимся ?",
            },
            "color": "positive"
        }],
        [{
            "action": {
                "type": "text",
                "payload": "{\\"button\\": \\"4\\"}",
                "label": "Как попасть в команду ?",
            },
            "color": "primary"
        }],
        [{
            "action": {
                "type": "text",
                "payload": "{\\"button\\": \\"5\\"}",
                "label": "Контакты",
            },
            "color": "secondary"
        }],
        [{
            "action": {
                "type": "text",
                "payload": "{\\"button\\": \\"6\\"}",
                "label": "Задать вопрос руководителю проекта",
            },
            "color": "negative"
        }]
    ],
}

Не забываем все используемые клавиатуры переводить в формат json:

about_us_keyboard = json. dumps(about_us_keyboard, ensure_ascii=False).encode('utf-8')
about_us_keyboard = str(about_us_keyboard.decode('utf-8'))

Создадим функцию write_msg, для того, чтобы не мучиться с постоянной отправкой сообщений от бота:

def write_msg(user_id, message, key):
    vk.method('messages.send',
              {'user_id': user_id,
               'message': message,
               'keyboard': key,
               'random_id': random.randint(0, 2048)})

После создания всех прототипов, мы можем перейти к следующему шагу. ( к этому файлу мы позже вернёмся и доработаем обработку общения пользователя и нашего vk-бота )

▍2.1 Основной функционал (создаем файл vk_bot.py)

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

Конструктор класса:

class VkBot:
    def __init__(self, user_id):
        self.USER_ID = user_id
        self._USERNAME = self._get_user_name_from_vk_id(user_id)
        self.my_str = ""
        self._COMMANDS = ["привет", "погода", "время", "пока"]
        self._inputMes = {"основная информация": answers.about_us1,
                          "чем мы занимаемся ?": answers.about_us2,
                          "где мы находимся ?": answers.about_us3,
                          "ближайшие мероприятия": answers.events1,
                          "проведённые мероприятия": answers.events2,
                          "волонтёрство на мероприятие": answers.events3,
                          "действующие проекты в нгту": answers.events4,
                          "мероприятия межвузовского центра": answers.events5
                          }

Последнее свойство класса — inputMes — это особый словарь, у которого значения ключей — это текст из файла answers. py, где я расположил текст в виде строк, поэтому, чтобы не загромождать код я и вынес основной текст в другой файл.

(Пример кода из файла answers.py)

events1 = "Итак,ближайшие мероприятия:\\n\\n" \\
          "Форум «Байкал»\\n"\\
          "Конкурс «Цифровой ветер»\\n"\\
          "PRONETI"
events2 = "Вот список проведенных мероприятий:\\n"\\
        "МНТК\\n"\\
        "Семинары по проектной деятельности\\n"\\
        "Встреча с представителями предприятий\\n"\\
events3 = "По поводу этого критерия напиши Илье (<https://vk.com/ki1337ki>)\\n"\\
        "А также, ты можешь заполнить анкету, благодаря которой,\\n"\\
        "с тобой лично свяжется один из руководителей направления\\n"\\
        "или координатор проекта (<https://vk.com/nikyats>)"

Итак, основной метод класса — это new_message, который принимает один параметр — message, который обрабатывается соответствующим условным блоком и возвращает какое -то значение обратно туда, откуда был вызван.

def _get_user_name_from_vk_id(self, user_id):
    request = requests.get("<https://vk.com/id>" + str(user_id))
    bs = bs4.BeautifulSoup(request.text, "html.parser")
    user_name = self._clean_all_tag_from_str(bs.findAll("title")[0])
    return user_name.split()[0]
def new_message(self, message):
    # self.my_str = " ".join(re.findall('[0-9]{2}', message))
    if message.lower() == self._COMMANDS[0]:
        return f"Привет, {self._USERNAME}!"
    elif message.lower() == self._COMMANDS[1] or message.lower() == "узнать погоду ":
        return self._get_weather()
    elif message.lower() == self._COMMANDS[2] or message.lower() == "узнать точное время ":
        return self._get_time()
    elif message.lower() == self._COMMANDS[3]:
        return f"До скорой встречи, {self._USERNAME}!"
    else:
        for key, value in self._inputMes.items():
            if message.lower() == key:
                return value
        return "Не понимаю тебя "

3. Возвращаемся в manage.

py и дописываем функционал

Теперь в первых строках нам необходимо проимпортить файл vk_bot. А также нам потребуется библиотека random.

import random # pip install random
from vk_bot import VkBot

После того, как мы объявили longpoll, дописываем основной функционал.

longpoll = VkLongPoll(vk)
try:
    for event in longpoll.listen():
        if event.type == VkEventType.MESSAGE_NEW:
            if event.to_me:
                bot = VkBot(event.user_id)
                if event.text.lower() == "о нас":
                    write_msg(event.user_id, "Немного о нашем проекте", about_us_keyboard)
                elif event.text.lower() == "мероприятия":
                    write_msg(event.user_id, "Что ты хочешь узнать?", events_keyboard)
                elif event.text.lower() == "приложения":
                    write_msg(event.user_id, "Посмотри, что есть здесь!", app_keyboard)
                elif event. text.lower() == "контакты":
                    write_msg(event.user_id, "По любым вопросам можешь обращаться к:", contacts_keyboard)
                elif event.text.lower() == "задать вопрос руководителю проекта":
                    write_msg(event.user_id, "У тебя есть возможность написать сообщение нашему Руководителю проекта",
                              go_answer)
                elif event.text.lower() == "калькулятор":
                    write_msg(event.user_id, "В разработке...", calc_keyboard)
                # elif event.text == " ".join(re.findall('\\d{2}', event.text)):
                #     write_msg(event.user_id, "Отлично, мы здесь", calc_keyboard)
                elif event.text.lower() == "как попасть в команду ?":
                    write_msg(event.user_id, "Напиши координатору проекта - Никите\\n"
                                             "или перейди на сайт проектной деятельности,\\n"
                                             "найди проект номер 612 и подай заявку", in_team)
                else:
                    write_msg(event. user_id, bot.new_message(event.text), main_keyboard)
except Exception as e:
    print(e)

Как можете заметить, в условных блоках if и elif — присутствует обработка тех сообщений, которые подразумевают под собой вывод инлайн или встроенной клавиатуры (в данном примере — выводятся только инлайн клавиатуры). Сюда также можно добавить более сложные обработки сообщений, после которых обработка будет метаться туда сюда по блокам if и elif. Таким образом бот будет работать, пока не «упадёт с ошибкой».

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

Заключение

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

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

Весь код опубликован в моём профиле GitHub:

  • Телеграм Бот
  • Бот Вконтакте

Как создать в Телеграме чат-бот для ответов на частые вопросы родителей. Инструкция


Фотографии: Unsplash. Иллюстрация: Юлия Замжицкая.

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

1. Найдите @BotFather — это главный сервис Телеграма, через который проходит регистрация всех пользовательских ботов. Нажмите на кнопку «Запустить» (/start).

 

2. Напишите или выберите в меню/newbot  —  это команда к созданию нового чата. 

 

3. Придумайте и введите название для своего бота  —  кириллицей или латиницей. Если передумаете, потом его можно будет легко изменить:

4. Затем придумайте юзернейм (он будет отображаться в ссылках). Он должен быть написан латиницей, может содержать цифры и нижнее подчеркивание и обязательно должен иметь окончание bot.

Например, SpravkaBot или spravka_bot.

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

Когда корректный юзернейм будет подобран, вы получите в ответ сообщение с токеном (это секретный ключ-идентификатор бота). Что-то вроде такого:

5696782191:AAEYxHTQEUCMM5YS4avK283feT2WGcovUTg 

Скопировать токен можно, кликнув по нему. Дальше он вам еще пригодится.

5. Ваш бот уже создан, теперь можно заняться его настройкой. Оставайтесь в чате с @BotFather и введите/выберите в меню команду /setuserpic, чтобы установить аватарку. Бот попросит вас прислать ему картинку:

6. Теперь можно создать короткое описание вашего бота (пользователь будет видеть его, заходят в чат). Выберите/введите команду /setdescription и введите ответ на вопрос «Что умеет этот бот?» (именно так, вместе с этим вопросом, ваше описание увидят пользователи).

7. На этом базовые настройки бота завершены. Если что-то не нравится, всегда можно изменить их через команду /mybots. 

8. Теперь через поиск ищем другой инструмент — @MenuBuilderBot. Он поможет создать меню бота и настроить автоматическую отправку сообщений. Нажмите «Запустить» (/start) и выберите язык:

9. Теперь выберите команду «Управление ботами», а затем нажмите на «Добавить Меню-Бот». Вы увидите инструкцию: большую часть ее пунктов вы уже выполнили. Вам остается только отправить в чат с @MenuBuilderBot токен, который вы получили от @BotFather в пункте 4.


10. Теперь можно перейти по ссылке в ваш собственный бот и продолжить настройку уже там. Нажмите на «Запустить», выберите язык.

 

11. Теперь можно добавлять кнопки: для этого выберите команду «Редактор кнопок», затем  —  «Добавить кнопку» и введите ее название.

Например «Расписание». Когда необходимые кнопки добавлены, нажмите на  «Стоп редактор».

12. Теперь нужно сделать так, чтобы при нажатии на кнопку пользователю автоматически отправлялась нужная информация. Для этого нажмите на кнопку «Редактор постов» в главном меню и выберите кнопку, к которой хотите добавить информацию. Выберите команду «Добавить сообщение».


 

13. Теперь наберите нужное сообщение или прикрепите файл  —  например, картинку.

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

14. Еще одна полезная функция  —  рассылка: можно моментально оповестить всех пользователей бота,  например, об изменении в расписании. Чтобы сделать рассылку, нажмите на кнопку «Админ» и выберите команду «Рассылка». Введите сообщение, которое хотите разослать, и нажмите на кнопку «Отправить».   

  

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

Идея инструкции взята из блога Натальи Смарыгиной во Вконтакте.  


Материалы по теме:

  • Чат-боты — будущее образования 

Если вам нравятся материалы на Педсовете, подпишитесь на наш канал в Телеграме, чтобы быть в курсе событий раньше всех.

Подписаться

Написание для ботов — Руководство по стилю Microsoft

Твиттер LinkedIn Фейсбук Электронная почта

  • Статья
  • 2 минуты на чтение

Будьте дружелюбны, помогая выполнить задание

Адаптируйте тон ответов бота к контексту. Если это что-то серьезное, например выставление счетов или кибербезопасность — будьте чуткими, но краткими и прямолинейными. Если это более приземленная ситуация (например, создание новой учетной записи), тон может быть более расслабленным. А бот для Xbox может быть беззаботным и случайным.

См. Голос бренда Microsoft

Будьте честны и завоевывайте доверие

  • Убедитесь, что пользователи знают, что они не общаются с человеком. Например, пусть бот представляет себя как виртуальный агент поддержки. Сообщение может быть кратким — исследования показывают, что клиенты обычно знают, что разговаривают с ботом.

  • Объясните, для чего предназначен бот, что он может и чего не может делать. Хорошие способы оформления функциональности предполагают первая задача или место для начала, или предоставление кнопок или ярлыков для наиболее частых задач.

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

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

Примите — и планируйте — ограничения бота

Есть некоторые вопросы, на которые у бота просто нет ответа.

  • Дайте понять пользователю, что у бота очень специфическая роль. Не подразумевайте бесконечную роль «Спроси меня о чем угодно».

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

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

Будьте проще и кратче

Клиенты отказываются от чата, когда подсказки длинные. Чтобы ваше письмо было простым и понятным, используйте Функция Flesch-Kincaid Grade Level в Microsoft Word или приложении, таком как Hemingwayapp. com, для определения уровня оценки ваших скриптов. В общем, чем ниже уровень, тем лучше.

Предвидеть вред

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

Будьте хорошим слушателем

  • Регулярно приглашайте пользователя в беседу, задавая вопросы или внося предложения.

  • Своевременно отвечать клиенту. Если боту требуется некоторое время для обработки запроса клиента, используйте «Я думаю» или индикатор набора текста, чтобы клиент знал, что бот работает над ответом.

  • Повысьте релевантность ответов бота, сделав их специфичными для контекста. Например, скажем, «Вот как вы меняете настройки конфиденциальности», а не «Вот как вы это делаете».

Вспомни, на чьей ты стороне

Бот работает от имени клиента и предназначен для обслуживания клиента. Это не в интересах Microsoft.

Следите за местоимениями: I, me, my

Бот использует I, me, и my для обозначения самого себя.

Когда клиент общается с ботом, он также использует I, me, или my. Убедитесь, что эти местоимения появляются на кнопки, ссылки или другие элементы бота, которые выбирает пользователь.

Распознавание общеупотребительных слов

Людям знакомы такие слова, как помощь, настройки, начать заново, и стоп. Убедитесь, что ваш бот распознает их и отвечает на них.

Обратная связь

Просмотреть все отзывы о странице

Боты — Full Stack Python

Боты — это программы, которые объединяют запросы, которые обычно предоставляется в виде текста с контекстными данными, такими как геолокация и оплата информацию, чтобы надлежащим образом обработать запрос и ответить. Боты часто также называемые «чат-ботами», «помощниками» или «агентами».

Примеры ботов с открытым исходным кодом

  • Limbo — отличный чат-бот для Slack. который обеспечивает основу для кода Python, который в противном случае потребовал бы шаблон для обработки потока событий Slack API.

  • python-rtmbot — это бот платформа для создания ботов Slack с API обмена сообщениями в реальном времени (RTM) через веб-сокеты.

  • Результаты поиска ботов на GitHub а тема ботов на GitHub содержит десятки тысячи примеров ботов, которые вы анализируете, чтобы увидеть, как они устроены.

  • Errbot может работать с несколько бэкэндов, таких как Hipchat, Discord, Slack и Telegram. Он предназначен для развертывания «как есть», за исключением ваших учетных данных, но Исходный код Python также можно настроить.

Ресурсы бота для Python

  • Как создать SMS Slack Bot это учебник по использованию SMS-сообщения для связи с ботом Slack, который может публиковать и получать сообщения. бот является хорошей основой для более сложного бота Slack, который мог бы использовать обработка естественного языка или другие более продвинутые методы синтаксического анализа. Можно использовать Python 2 или 3. с кодом, который также доступен на GitHub.

  • Dropbox открыл исходный код своего бота безопасности Slack, который построен на Python. Бот общается с пользователем, когда серверные системы обнаруживают странное поведение на одну из своих учетных записей, чтобы проверить, не было ли нарушения безопасности.

  • Создание бота Reddit + Facebook Messenger создает бота для двух платформ и показывает, как развернуть его на Heroku.

  • Создайте Slack-бота, который имитирует ваших коллег с помощью Python юмористический пост, в котором используется markovify библиотеку цепей Маркова, чтобы генерировать ответы, похожие на ответы других пользователей Slack.

  • Бот Slack с asyncio Python показано, как подключить бота к Slack через веб-API с помощью Python 3. Стандартная библиотека asyncio.

  • Facebook-Message-Bot — бот Facebook Messenger с открытым исходным кодом, написанный на Python.

  • Создайте бота Reddit представляет собой серию учебных пособий из четырех частей, которая начинается с чтения постов, продолжается с отвечая на посты, автоматизация бота и наконец добавление поведения и индивидуальности боту.

Дополнительные ресурсы для ботов

  • Боты: введение для разработчиков объясняет технические детали создания Боты в телеграмм.

  • Создание лучших ботов с помощью AWS Lex: часть 1 и часть 2 показать, как использовать предложение услуг Amazon для лучшего естественного языка обработка в ваших ботах.

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

  • The Economist написал общую статью о почему боты, похоже, получат признание в различных сегментах рынка. В этой части нет большой технической глубины, но это хороший обзор как некоторые компании рассматривают эту возможность.

  • Три проблемы, с которыми вы столкнетесь при создании чат-бота дает проницательные мысли о проблемах, которые можно предвидеть на основе опыт автора в создании, развертывании и масштабировании чат-ботов.

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

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