Бот как написать: 404 Page not found | База знаний Selectel

Содержание

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

Мы уже упоминали, как мы предоставляем бесплатные 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:


этапы написания, исследования, рабочие схемы, структура, тексты и рекомендации

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

Предварительная работа

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

Узнайте свою аудиторию

Вы должны понимать, что движет вашей аудиторией и побуждает её обращаться к вам. Составьте портрет Персоны покупателя.

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

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

Совместите эту информацию с данными теории по Jobs to be done. Имея на руках достоверный профиль клиента, вы поймете, какую конкретную потребность закрывает человек, придя к вам. Создайте схему потребностей и болей клиента, которые решает ваш продукт. Если хотите быть максимально осведомленным, можете составить и Customer Journey Map, где отражены проблемы и барьеры, которые встречает клиент, взаимодействуя с вами. О CJM мы написали отдельную статью.

Читайте также:

Что такое CJM? Разбираем основные элементы карты клиентского пути

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

Поставьте цель и задачи

Ответьте себе на вопрос: «для чего нам нужен чат-бот?». Ответом на этот вопрос и станет цель работы онлайн-консультанта. Ниже несколько типичных целей для бота:

  • Сбор лидов — бот может собирать данные клиентов для отдела продаж;
  • Оформление заказов — особенно актуально для ресторанов или доставки пиццы, где точно известен конечный результат и немного шагов до конверсионного действия;
  • Сбор обратной связи — бот соберет отзывы от клиентов в автоматическом режиме;
  • Консультация пользователя по выбору товара/услуги — бот расскажет посетителям об основных характеристиках товаров и услуг, ответ на часто задаваемые вопросы и подберёт лучшее предложение;
  • Техническая поддержка пользователя — бот поможет решить типичные проблемы клиентов;
  • Повысить эффективность работы менеджеров — бот узнает основную информацию о пользователе и его потребности, чем ускорит и упростит работу сотрудника отдела продаж.

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

Определите структуру чат-бота

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

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

Сценарий и тексты для чат-бота

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

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

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

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

Читайте также:

5 проблем онлайн-консультанта и можно ли их решить

Собрав скелет сценария, вы переходите к третьему этапу — наполнению веток контентом. Помните, что чат-бот — представитель компании, часть айдентики. А это значит, что бот должен соответствовать бренду. Установите несколько правил, которые сделают бота органичным и приятным для клиента.
  • Соответствуйте Tone of voice. Тексты в боте должны быть аналогичны общему стилю общения компании с клиентами. Вы местный автосервис? Тогда нет смысла «выкать» и играть во франта в чате, говорите с аудиторией на одном языке на всех площадках. 
  • В чатах принято писать емко и коротко. Ограничьте ответы бота 60-150 знаками максимум. Разбивайте большие предложения на два коротких. Используйте тот же принцип, что и в переписке в мессенджерах. 
  • Разбивайте любые инструкции на шаги и отдельные сообщения. 1 мысль — 1 сообщение. Это удобно для восприятия.     
  • Не бойтесь эмодзи. Для мессенджеров и чатов это органично. К тому же, вы добавляете еще один эмоциональный слой и упрощаете усвоение информации. 😎
  • Пишите естественно. Даже если у вас тысячи клиентов, общаться с человеком бот будет персонально. Поэтому не душите его канцеляризмами и титулами. Приветливо предложенная помощь куда нужнее обещания премиум-сервиса и широкого ассортимента. 

Вёрстка и тест чат-бота

Рассмотрим процесс верстки чат-бот на примере МультиЧата Callibri, куда инструмент включен по-умолчанию. С настройками чат-бота вы справитесь без помощи программиста. Весь процесс происходит в визуальном редакторе. Все начинается с приветственного экрана, который увидит посетитель, открыв чат. А уже затем вы настраиваете ветки и реакции.
  1. Добавьте новую или вставьте скопированную реакцию. Новые реакции появятся ниже отдельными кнопками. 
  2. Вы можете копировать как отдельные шаги, так и целые ветки в чат-боте. Удобно, если у вас много повторяющихся элементов. Скопированное можно вставить в любое место в существующем боте, либо другой проект. 
  3. На каждом этапе вы можете предложить пользователю оставить контакты или позвать оператора.
  4. Реакции пользователей можно менять местами. Каждая реакция ведет к новой ветке диалога и запускает отдельный сценарий.
  5. Для дополнительных настроек чат-бота перейдите в отдельную вкладку. Там вы можете установить время работы чат-бота, его имя, каналы работы, аватарку и прочее. Подробнее о настройках есть заметка в Помощи. 
По итогу, сверстать чат-бот сможет практически любой сотрудник без специальных навыков. Однако не забудьте проводить ревизию работы бота. Протестируйте инструмент на сотрудниках, предложите попробовать чат-бот клиентам, с которыми проводили интервью. Еще на помощь приходит А/В-тестирование. Создайте несколько вариантов сценария чат-бота и проверьте, какой приносит больше положительных откликов и конверсий. Регулярно тестируйте бота и совершенствуйте его. Попробовать МультиЧат

7 рекомендаций по написанию чат бота

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

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

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

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

Не выдавайте бота за человека. Любой обман отталкивает клиента от вас. И если вы постараетесь выдать чат-бота за настоящего оператора, то вас быстро раскусят и оставят без конверсионного действия. Поэтому рекомендуем уже в приветствии сообщить клиенту, что он пишет роботу. 

Выстройте тайминги появления ответа. Не сбивайте темп переписки в чате, показывайте ответ на вопрос человеку спустя 1-3 секунды, чтобы создать иллюзию живого общения. 

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

Заключение 

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

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

Telegram-бот на Python: пошаговое руководство

Делимся инструкцией, как написать бота с помощью библиотеки python-telegram-bot за считанные минуты. На примере гайда от программиста Давида Мастроматтео.

Установка python-telegram-bot

Для создания бота понадобится пакет python-telegram-bot — оболочка для API от Telegram. Написать бота с помощью этой библиотеки очень просто, так как она полностью совместима с Python 3.6+.

Первое, что нужно сделать — установить python-telegram-bot. Вот ссылка на официальную документацию библиотеки. 

$ pip install python-telegram-bot –upgrade

Создание бота

Теперь можно взяться за создание бота. Для этого даже не нужно писать код. Перейдите в Telegram и найдите канал @BotFather, который отвечает за регистрацию новых ботов. Начните общаться с ботом и введите команду /newbot. Затем BotFather спросит у вас имя и юзернейм.

BotFather 1

BotFather 2

У BotFather можно запросить много других интересных вещей. Например, изменить изображение профиля бота.

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

Программирование бота 

Пакет python-telegram-bot состоит из оболочки API Telegram. Этот инструмент доступен через telegram.Bot-классы. Помимо них, есть еще модуль telegram.ext, который значительно упростит работу.

Модуль telegram.ext содержит много классов, но самые важные — telegram.ext.Updater и telegram.ext.Dispatcher. Updater отвечает за выборку новых обновлений от Telegram. Также он передает их в Dispatcher, после чего они обрабатываются с помощью Handler.

Приступим к программированию:

# mastrobot_example.py
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters

# function to handle the /start command
def start(update, context):
    update.message.reply_text('start command received')

# function to handle the /help command
def help(update, context):
    update.message.reply_text('help command received')

# function to handle errors occured in the dispatcher 
def error(update, context):
    update.message.reply_text('an error occured')

# function to handle normal text 
def text(update, context):
    text_received = update.message.text
    update.message.reply_text(f'did you said "{text_received}" ?')

def main():
    TOKEN = "insert here your token and don't share it with anyone!"

    # create the updater, that will automatically create also a dispatcher and a queue to 
    # make them dialoge
    updater = Updater(TOKEN, use_context=True)
    dispatcher = updater.dispatcher

    # add handlers for start and help commands
    dispatcher.add_handler(CommandHandler("start", start))
    dispatcher.add_handler(CommandHandler("help", help))

    # add an handler for normal text (not commands)
    dispatcher.add_handler(MessageHandler(Filters.text, text))

    # add an handler for errors
    dispatcher.add_error_handler(error)

    # start your shiny new bot
    updater.start_polling()

    # run the bot until Ctrl-C
    updater.idle()

if __name__ == '__main__':
    main()

В функции main создан класс Updater, который автоматически сгенерировал объект Dispatcher, доступный через .dispatcher-свойства класса Updater.

Добавьте несколько обработчиков:

  • команда /start вызывает функцию start(), которая отвечает пользователю информативным сообщением;
  • команда /help вызывает функцию help(), которая отвечает пользователю информативным сообщением;
  • если при отправке сообщений возникает ошибка, вызываем функцию error();
  • если пользователь напишет фразы или символы, которые не являются командой, вызываем функцию text(), отвечающую пользователю тем же полученным текстом.

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

Тестирование

Теперь можно протестировать бота. Запустите его.

$ python mastrobot_example.py

Пошлите ему команду /start .

Ура, бот работает!

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

Чтобы узнать день рождения пользователя, для начала нужно изменить функцию, обрабатывающую команду /start. Чтобы упростить задачу, попросите пользователя указать год, месяц и день рождения.

# function to handle the /start command
def start(update, context):
    first_name = update.message.chat.first_name
    update.message.reply_text(f"Hi {first_name}, nice to meet you!")
    start_getting_birthday_info(update, context)


В параметре update можно найти полезную информацию о пользователе, например, его имя.

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

STATE = None

BIRTH_YEAR = 1
BIRTH_MONTH = 2
BIRTH_DAY = 3

Теперь необходимо реализовать функцию start_getting:_birthday_info(), она вызывается с помощью команды start(). После запуска вы получите информацию о дне рождения от пользователя.

def start_getting_birthday_info(update, context):
    global STATE
    STATE = BIRTH_YEAR
    update.message.reply_text(f"I would need to know your birthday, so tell me what year did you born in...")

Для переменной STATE устанавливается значение BIRTH_YEAR, чтобы после ответа пользователя было понятно, что вопрос касался года рождения. Затем отправляется сообщение, чтобы узнать год рождения.

Теперь пользователь ответит обычным текстом, поэтому нужно изменить функцию text().

def text(update, context):
    global STATE

    if STATE == BIRTH_YEAR:
        return received_birth_year(update, context)

    if STATE == BIRTH_MONTH:
        return received_birth_month(update, context)

    if STATE == BIRTH_DAY:
        return received_birth_day(update, context)

В функции text() необходимо понять, на какой вопрос отвечает пользователь, используя переменную STATE. После чего остается вызвать функцию для обработки каждого ответа.

Эти функции можно записать так:

def received_birth_year(update, context):
    global STATE

    try:
        today = datetime.date.today()
        year = int(update.message.text)
        
        if year > today.year:
            raise ValueError("invalid value")

        context.user_data['birth_year'] = year
        update.message.reply_text(f"ok, now I need to know the month (in numerical form)...")
        STATE = BIRTH_MONTH
    except:
        update.message.reply_text("it's funny but it doesn't seem to be correct...")

def received_birth_month(update, context):
    global STATE

    try:
        today = datetime.date.today()
        month = int(update.message.text)

        if month > 12 or month < 1:
            raise ValueError("invalid value")

        context.user_data['birth_month'] = month
        update.message.reply_text(f"great! And now, the day...")
        STATE = BIRTH_DAY
    except:
        update.message.reply_text("it's funny but it doesn't seem to be correct...")

def received_birth_day(update, context):
    global STATE

    try:
        today = datetime.date.today()
        dd = int(update.message.text)
        yyyy = context.user_data['birth_year']
        mm = context.user_data['birth_month']
        birthday = datetime.date(year=yyyy, month=mm, day=dd)

        if today - birthday < datetime.timedelta(days=0):
            raise ValueError("invalid value")

        context.user_data['birthday'] = birthday
        STATE = None
        update.message.reply_text(f'ok, you born on {birthday}')

    except:
        update.message.reply_text("it's funny but it doesn't seem to be correct...")

Когда получен год рождения пользователя, остается проверить, допустимое ли это значение. Если да, то оно сохраняется в словаре context.user_data[]. Продолжайте устанавливать значения для переменной STATE и задавать следующие вопросы.

Когда зададите последний вопрос и будете знать день рождения, создайте переменную даты и сохраните ее в context.user_data[] словаре.

Если пользователь вводит недопустимое значение, то получает ответ, что оно неверно. Значение переменной STATE не меняется, поэтому пользователь застревает на этом вопросе, пока не ответит правильно.

Создание команды

Теперь нужно обработать команду /biorhythm.

Добавьте новый обработчик команд в функцию main().

dispatcher.add_handler(CommandHandler("biorhythm", biorhythm))

Напишите функцию расчета биоритма:

# This function is called when the /biorhythm command is issued

def biorhythm(update, context):

    user_biorhythm = calculate_biorhythm(

        context.user_data['birthday'])

    update.message.reply_text(f"Phisical: {user_biorhythm['phisical']}")

    update.message.reply_text(f"Emotional: {user_biorhythm['emotional']}")

    update.message.reply_text(f"Intellectual: {user_biorhythm['intellectual']}")

def calculate_biorhythm(birthdate):

    today = datetime.date.today()

    delta = today - birthdate

    days = delta.days

    phisical = math.sin(2*math.pi*(days/23))

    emotional = math.sin(2*math.pi*(days/28))

    intellectual = math.sin(2*math.pi*(days/33))

    biorhythm = {}

    biorhythm['phisical'] = int(phisical * 10000)/100

    biorhythm['emotional'] = int(emotional * 10000)/100

    biorhythm['intellectual'] = int(intellectual * 10000)/100

    biorhythm['phisical_critical_day'] = (phisical == 0)

    biorhythm['emotional_critical_day'] = (emotional == 0)

    biorhythm['intellectual_critical_day'] = (intellectual == 0)

    return biorhythm

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

Полный код бота

# mastrobot_example2.py
import datetime
import math
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters

STATE = None
BIRTH_YEAR = 1
BIRTH_MONTH = 2
BIRTH_DAY = 3

# function to handle the /start command
def start(update, context):
    first_name = update.message.chat.first_name
    update.message.reply_text(f"Hi {first_name}, nice to meet you!")
    start_getting_birthday_info(update, context)

def start_getting_birthday_info(update, context):
    global STATE
    STATE = BIRTH_YEAR
    update.message.reply_text(
        f"I would need to know your birthday, so tell me what year did you born in...")

def received_birth_year(update, context):
    global STATE

    try:
        today = datetime.date.today()
        year = int(update.message.text)

        if year > today.year:
            raise ValueError("invalid value")

        context.user_data['birth_year'] = year
        update.message.reply_text(
            f"ok, now I need to know the month (in numerical form)...")
        STATE = BIRTH_MONTH
    except:
        update.message.reply_text(
            "it's funny but it doesn't seem to be correct...")

def received_birth_month(update, context):
    global STATE

    try:
        today = datetime.date.today()
        month = int(update.message.text)

        if month > 12 or month < 1:
            raise ValueError("invalid value")

        context.user_data['birth_month'] = month
        update.message.reply_text(f"great! And now, the day...")
        STATE = BIRTH_DAY
    except:
        update.message.reply_text(
            "it's funny but it doesn't seem to be correct...")

def received_birth_day(update, context):
    global STATE

    try:
        today = datetime.date.today()
        dd = int(update.message.text)
        yyyy = context.user_data['birth_year']
        mm = context.user_data['birth_month']
        birthday = datetime.date(year=yyyy, month=mm, day=dd)

        if today - birthday < datetime.timedelta(days=0):
            raise ValueError("invalid value")

        context.user_data['birthday'] = birthday
        STATE = None
        update.message.reply_text(f'ok, you born on {birthday}')

    except:
        update.message.reply_text(
            "it's funny but it doesn't seem to be correct...")

# function to handle the /help command
def help(update, context):
    update.message.reply_text('help command received')

# function to handle errors occured in the dispatcher
def error(update, context):
    update.message.reply_text('an error occured')

# function to handle normal text
def text(update, context):
    global STATE

    if STATE == BIRTH_YEAR:
        return received_birth_year(update, context)

    if STATE == BIRTH_MONTH:
        return received_birth_month(update, context)

    if STATE == BIRTH_DAY:
        return received_birth_day(update, context)

# This function is called when the /biorhythm command is issued
def biorhythm(update, context):
    print("ok")
    user_biorhythm = calculate_biorhythm(
        context.user_data['birthday'])

    update.message.reply_text(f"Phisical: {user_biorhythm['phisical']}")
    update.message.reply_text(f"Emotional: {user_biorhythm['emotional']}")
    update.message.reply_text(f"Intellectual: {user_biorhythm['intellectual']}")

def calculate_biorhythm(birthdate):
    today = datetime.date.today()
    delta = today - birthdate
    days = delta.days

    phisical = math.sin(2*math.pi*(days/23))
    emotional = math.sin(2*math.pi*(days/28))
    intellectual = math.sin(2*math.pi*(days/33))

    biorhythm = {}
    biorhythm['phisical'] = int(phisical * 10000)/100
    biorhythm['emotional'] = int(emotional * 10000)/100
    biorhythm['intellectual'] = int(intellectual * 10000)/100

    biorhythm['phisical_critical_day'] = (phisical == 0)
    biorhythm['emotional_critical_day'] = (emotional == 0)
    biorhythm['intellectual_critical_day'] = (intellectual == 0)

    return biorhythm

def main():
    TOKEN = "insert here your token and don't share it with anyone!"

    # create the updater, that will automatically create also a dispatcher and a queue to
    # make them dialoge
    updater = Updater(TOKEN, use_context=True)
    dispatcher = updater.dispatcher

    # add handlers for start and help commands
    dispatcher.add_handler(CommandHandler("start", start))
    dispatcher.add_handler(CommandHandler("help", help))
    # add an handler for our biorhythm command
    dispatcher.add_handler(CommandHandler("biorhythm", biorhythm))

    # add an handler for normal text (not commands)
    dispatcher.add_handler(MessageHandler(Filters.text, text))

    # add an handler for errors
    dispatcher.add_error_handler(error)

    # start your shiny new bot
    updater.start_polling()

    # run the bot until Ctrl-C
    updater.idle()


if __name__ == '__main__':
    main()


Пришло время проверить его:

Telegram bot

Поздравляем! Telegram-бот на Python полностью готов. 

Бот, созданный для примера, был сохранен. Его можно протестировать по имени пользователя @mastro35_mastrobot.

Создаем Telegram-бота и зарабатываем на нем. Инструкция

Как создать Telegram-бота

Создать и настроить бота довольно просто. Для этого совсем не обязательно владеть языками программирования. 

Для начала нужно придумать имя, продумать команды, найти два Telegram-бота в помощь — @Fatherbot и @Manybot. Приступаем.

Шаг 1. Находим в строке поиска мессенджера приложение @FatherBot.

@FatherBot — это главный бот, который помогает создавать и изменять существующие боты. 

Шаг 2. Заходим в беседу с ботом, читаем описание.

Для начала работы нам нужно отправить команду /start.

Эта команда выведет на экран главное меню (список всего того, что умеет @FatherBot).

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

Также можно нажать на подсвеченную синим цветом  команду в выпавшем сообщении с меню.

Шаг 3. Создаем бот.

Чтобы приступить к созданию нового бота, отправляем команду /newbot.
Получаем ответное сообщение, где нужно ввести название бота.

Вводим имя нашего бота.

Шаг 4. Придумываем юзернейм. 

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

Важно: название бота должно оканчиваться на слово «bot» (welcome_bot, information_bot, newsbot).

@FatherBot сообщает нам, что юзернейм свободен и теперь закреплен за нашим ботом.

Теперь у нашего бота есть собственная гиперссылка, через которую пользователи могут находить бот и заходить в чат через браузер и сам мессенджер (http://t.me/StarsFriens_bot).

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

Шаг 5. Переходим к настройкам бота. 

Отправляем в чат @FatherBot команду /mybots и выбираем нужный бот для редактирования (сейчас у нас только один тестовый бот, но впоследствии можно создавать и редактировать неограниченное количество ботов).

Отправляем в чат @FatherBot команду /mybots и 

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

Нажимаем на наш тестовый бот, получаем сообщение с меню, где нас спрашивают, что бы мы хотели сейчас сделать. Нажимаем в меню команду «Edit Bot» и получаем области редактирования нашего бота. 

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

Например, выбираем поле «Edit Description» и нажимаем соответствующую кнопку. 

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

Добавляем текст и получаем подтверждающее сообщение, что описание к боту добавлено.

Клавишу «Back to Bot» мы нажимаем каждый раз после того, как внесли изменение и хотим вернуться к другим настройкам бота.

Кстати, если нажмете клавишу «Back to Bot» и вернетесь к настройкам, то увидите, что «скелет» бота обновился: добавилось описание (Description).

В чем разница между полем Description и About? Description мы видим, когда уже зашли в чат с ботом. Поле About — это описание профиля бота, которое пользователи видят до начала диалога.

Снова нажимаем «Edit Bot», выбираем кнопку «Edit About». Поле About не должно превышать 120 символов.

About изменено. Нам снова предлагают либо вернуться к меню с настройками, либо к списку наших ботов (напоминаем, у нас он пока только один). 

Давайте посмотрим, где находится Description и About на примере нашего бота. Как это увидят пользователи? Мы уже можем ввести в поиске Telegram название нашего бота @StarsFriend_bot

В профиле бота видим поле About, а в самом чате — Description:

Шаг 5. Добавляем картинку.

Снова выбираем «Edit Bot», затем «Edit Botpic». Присылаем в чат заранее подготовленную картинку.

Нажимаем «Back to Bot», смотрим на «скелет» нашего бота.
Теперь здесь отображаются почти все параметры, кроме команд. Для настройки команд понадобится специальный редактор ботов — @Manybot.

Шаг 6. Добавляем команды через редактор @Manybot. 

Так как @Fatherbot не позволяет создавать команды для новых ботов, мы будем настраивать наш бот через специальные редакторы, например, через @Manybot.

@Manybot — многофункциональная платформа для создания и редактирования ботов, доступная на русском языке. В ней легко создавать меню и команды. Здесь же можно редактировать описание и другие параметры бота без знания языков программирования.

Находим бот в поиске приложения Telegram, отправляем в чат команду /start.

Получаем сообщение с меню.

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

Обратите внимание, что @Manybot содержит подробный список инструкций по любым настройкам. Нажмите на кнопку «Инструкции» (или отправьте в чат команду /tutorials) — и получите детальные гиды (на скриншоте отражена лишь часть инструкций). Нажмите кнопку «Помощь» — и снова получите меню доступных действий с вашим ботом (как на скриншоте выше):

Если вам недостаточно той информации, которая есть в меню самого @Manybot, вы можете найти большое количество пошаговых видео и инструкций в интернете. Так и гуглим: «Manybot инструкция».

Итак, нажимаем «Добавить нового бота». В ответ на команду @Manybot предлагает уже знакомый нам алгоритм. Остается только скопировать токен (напомним, мы получили его в самом начале от @FatherBot) и прислать его в сообщении @Manybot.

Важно! Никому не присылайте свой токен. Пользуйтесь только проверенными конструкторами ботов. Мы ведь не хотим, чтобы наш бот попал в чужие руки. 

Отправляем сообщение «Я скопировал токен».

Присылаем наш токен из сообщения в чате с @Fatherbot.

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

В чате с @Manybot даем команду /newpost (или нажимаем клавишу меню «Отправить новое сообщение подписчикам»). Выбираем нашего бота в выпавшем сообщении.

Нажимаем на название бота в сообщении, и нас перебрасывает в чат с  нашим ботом. Здесь видим сообщение, которое только что отправил нам @Manybot. Оно содержит меню с настройками. Это пульт управления нашим ботом. Здесь можем перечитать подробные инструкции по каждому пункту. И снова видим удобные клавиши меню на месте клавиатуры:

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

Сначала настроим команды, а затем уже их вид в меню (то, как их будут видеть подписчики).

Выбираем «Создать команду». 

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

Так как тематика нашего тестового бота связана с астрономией и астрологией, в качестве одной из команд мы вставим ссылку на сайт NASA. Эту команду (опцию будущего меню) так и назовем: /site. 

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

Вы можете добавить для подписчиков возможность задавать боту вопросы. Для этого есть специальная кнопка «Добавить вопрос». Нажимаем ее и видим варианты: «Обычный вопрос», «Развернутый ответ», «С вариантами ответа». 

Вы также можете включить «Режим Случайного Сообщения».

Приведем пример еще двух команд: /wallpaper (мы хотим, чтобы пользователи могли скачать тематические обои) и /info (после этой команды пользователь получит информацию о создателях бота).

Для /wallpaper используем режим случайного сообщения и загрузим пять картинок. Нажимаем «Сохранить».

Шаг 7. Настройка меню бота.

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

Выбираем «Настроить гл.меню», «Добавить пункт меню», выбираем уже созданную нами команду, называем ее (финальное название для пользователя, а не формат /команда), сохраняем.

Например, хотим переименовать команду /info в понятное «О нас».

Выбираем «Добавить пункт меню» — /info:

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

В наш тестовый бот добавили три пункта меню: /info (о нас),  /site (официальный сайт NASA), /coolfact (интересные факты).

Создаем бота для Telegram

В рамках данной статьи я расскажу о том, как быстро и легко написать программу-бота для популярного мессенджера Telegram. Писать бота мы будем на языке Python, параллельно изучая его основы. Договоримся, что вы используете Linux в качестве операционной системы, либо знаете как выполнить аналоги команд в Windows.

Установка необходимых библиотек

Нам понадобятся следующие библиотеки и программы:

  • pip — менеджер пакетов для Python
  • python — интерпретатор языка
  • virtualenv — виртуальное окружение
  • telebot — обертка над telegram API для языка Python

Теперь откроем консоль и наберем несколько команд. Первым делом загрузим менеджер пакетов для питона и виртуальное окружение, внутри которого мы будем устанавливать все остальные пакеты, чтобы не засорять систему и не порождать конфликтов с другими проектами. Также скачаем проект telebot, который носит название pyTelegramBotAPI.

sudo apt-get install python-pip sudo pip install pyTelegramBotAPI sudo pip install virtualenv

Следующая команда создаст в вашей директории новую директорию venv, в которой будет хранить все локальные библиотеки. Подробности про виртуальные окружения можно прочитать по адресу: http://docs.python-guide.org/en/latest/dev/virtualenvs/ Можно работать и без виртуального окружения, но тогда убедитесь, что устанавливаемые вами библиотеки не конфликтуют с другими библиотеками в системе (например, могут сломаться некоторые программы, заточенные под старые версии пакетов).

virtualenv venv

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

source venv/bin/activate

Создание Telegram-бота

Начнем с создания простого бота для Telegram. Чтобы наш бот функционировал, нужно первым делом его создать. Для этого в телеграме есть специальный мета-бот BotFather (@BotFather). Добавьте его через поиск в вашем клиенте телеграмма. Список его команд можно получить, написав в чате с ним команду /help. Для создания нового бота нужно написать команду /newbot и в следующем сообщении передать название бота (должно заканчиваться словом bot). В ответ вам придет сообщение с API токеном — он понадобится нам для создания соединения с телеграммом.

Создайте файл simplebot.py со следующим содержанием:

# -*- coding: utf-8 -*- import telebot bot = telebot.TeleBot("") @bot.message_handler(commands=['help', 'start']) def send_welcome(message): msg = bot.send_message(message.chat.id, 'Привет! Я codex_bot!') @bot.message_handler(commands=['auth']) def send_auth(message): pass bot.polling()

Код довольно интуитивен, поясним только основные идеи. Когда пользователь будет вводить команды /start и /help — выполнится функция send_welcome, которая отправит пользователю в чат сообщение с приветствием. При вводе /auth пока ничего происходить не будет.

Запустите бота командой:

python simplebot.py

Теперь вы можете добавить своего бота в чат телеграмм и пообщаться с ним. Много полезных функций можно найти в документации telegram. Например, если вы хотите изменить описание, которое будут видеть пользователи при добавлении вашего бота в чат, вы можете написать @botfather следующую команду:

/setdescription

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

/setcommands

Выберите бота из списка и в следующем письме введите перечень команд в формате:

команда1 - Описание команды команда2 - Еще одно описание команды

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

Как создать Discord бота с помощью Python

Из этого туториала Вы узнаете, как полностью создать собственного бота Discord в облаке.

Вам не нужно ничего устанавливать на свой компьютер, и вам не нужно ничего платить за размещение своего бота.

Мы будем использовать целый ряд инструментов, в том числе Discord API, библиотеки Python, и платформы облачных вычислений под названием Repl.it.

Как создать учетную запись Discord Bot

Чтобы работать с библиотекой Python и API Discord, мы должны сначала создать учетную запись Discord Bot.

Вот шаг к созданию учетной записи Discord Bot.

1. Убедитесь, что вы вошли на сайт Discord.

2. Перейдите на страницу приложения.

3. Щелкните кнопку «Новое приложение».

4. Дайте приложению имя и нажмите «Создать».

5. Перейдите на вкладку «Бот» и нажмите «Добавить бота». Вам нужно будет подтвердить действие, нажав «Yes, do it!»

Оставьте настройки по умолчанию для Public Bot и Require OAuth3 Code Grant.

Ваш бот создан. Следующим шагом будет копирование токена.

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

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

Как пригласить вашего бота присоединиться к серверу

Теперь вам нужно подключить своего пользователя-бота к серверу. Для этого вы должны создать для него URL-адрес приглашения.

Перейдите на вкладку «OAuth3». Затем выберите «бот» в разделе «scopes».

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

После выбора соответствующих разрешений нажмите кнопку «Copy» над разрешениями. Это скопирует URL-адрес, который можно использовать для добавления бота на сервер.

Вставьте URL-адрес в свой браузер, выберите сервер, на который будет приглашен бот, и нажмите «Авторизовать».

Чтобы добавить бота, вашей учетной записи необходимы разрешения «Управление сервером».

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

Как написать код для базового бота Discord с помощью библиотеки discord.py

Мы будем использовать библиотеку Python discord.py, чтобы написать код для бота. discord.py — это оболочка API для Discord, которая упрощает создание бота Discord на Python.

Как создать реплику и установить disocrd.py

Вы можете разработать бота на своем локальном компьютере с помощью любого редактора кода. Однако в этом уроке мы будем использовать Repl.it, потому что это упростит всем пользователям следовать его указаниям. Repl.it — ​​это онлайн-среда IDE, которую вы можете использовать в своем веб-браузере.

Создайте новый Repl и выберите «Python» в качестве языка.

Чтобы использовать библиотеку discord.py, просто напишите import discord  вверху main.py. Repl.it автоматически установит эту зависимость, когда вы нажмете кнопку «Run».

Если вы предпочитаете кодировать бота локально, вы можете использовать эту команду в MacOS для установки discord.py:

python3 -m pip install -U discord.py

Возможно, вам придется использовать pip3 вместо pip.

Если вы используете Windows, вы должны вместо этого использовать следующую строку:

py -3 -m pip install -U discord.py

Как настроить события Discord для вашего бота

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

Сделаем бота, который отвечает на конкретное сообщение. Этот простой код бота вместе с объяснением кода взят из документации discord.py. Позже мы добавим в бота дополнительные функции.

Добавьте этот код в main.py. (Вы можете назвать файл как-нибудь иначе, только не discord.py.) Я вскоре объясню, что делает весь этот код.

import discord
import os

client = discord.Client()

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('$hello'):
        await message.channel.send('Hello!')

client.run(os.getenv('TOKEN'))

Когда вы создали своего пользователя-бота в Discord, вы скопировали токен. Теперь мы собираемся создать файл .env для хранения токена. Если вы запускаете свой код локально, вам не нужен файл .env. Просто замените os.getenv('TOKEN') токеном.

.env файлы используются для объявления переменных среды. На Repl.it большинство создаваемых вами файлов видны всем, но .env файлы видны только вам. Другие люди, просматривающие публичный ответ, не смогут увидеть содержимое файла .env.

Поэтому, если вы разрабатываете на Repl.it, включайте в файл .env только личную информацию, такую ​​как токены или ключи.

Нажмите кнопку «Добавить файл» и создайте файл с именем .env.

Внутри файла добавьте следующую строку, включая ваш фактический токен, который вы скопировали ранее:

Теперь давайте рассмотрим, что делает каждая строка в коде вашего бота Discord.

  1. Первая строка импортирует библиотеку discord.py.
  2. Вторая строка импортирует библиотеку os, но она используется только для получения переменной TOKEN из файла .env. Если вы не используете .env файл, эта строка вам не нужна.
  3. Затем мы создаем экземпляр Client. Это связь с Discord.
  4. Декоратор @client.event() используется для регистрации события. Это асинхронная библиотека, поэтому все делается с помощью обратных вызовов. Обратный вызов — это функция, которая вызывается, когда происходит что-то еще. В этом коде событие on_ready() вызывается, когда бот готов к использованию. Затем, когда бот получает сообщение, вызывается событие on_message().
  5. Триггер событий каждый раз вызывает on_message(), когда принимается сообщение, но мы не хотим, что-то делать, если сообщение от самих себя. Поэтому, если Message.author это то же самое, что и Client.user, просто делаем return.
  6. Затем мы проверяем Message.content, начинается ли с '$hello'. Если да, то бот отвечает 'Hello!' в канал, в котором он использовался.
  7. Теперь, когда бот настроен, последняя строка запускает бот с токеном входа. Он получает токен из файла .env.

У нас есть код для бота, поэтому теперь нам просто нужно его запустить.

Как запустить бота

Теперь нажмите кнопку запуска вверху, чтобы запустить своего бота в repl.it.

Если вы пишете бота локально, вы можете использовать эти команды в терминале для запуска бота:

В Windows:

В других системах:

Теперь перейдите в свою комнату в Discord и введите «$hello». Ваш бот должен ответить «Hello!».

Как улучшить бота

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

Этот бот будет отвечать сообщением ‘Hello!’ всякий раз, когда кто-то отправляет сообщение, содержащее грустное или удручающее слово.

Любой желающий сможет добавить ободряющие сообщения для использования бота, а отправленные пользователем сообщения будут храниться в базе данных Repl.it.

Бот также вернет случайную вдохновляющую цитату из API, когда кто-то наберет в чате сообщение «$inspire».

Мы начнем с добавления функции «$inspire».

Как добавить в бота вдохновляющие цитаты

Мы будем получать вдохновляющие цитаты из API под названием zenquotes.io. Нам нужно импортировать еще пару модулей Python, добавить функцию get_quote() и обновить код нашего бота, чтобы вызвать функцию.

Вот обновленный код. После кода я объясню новые части.

import discord
import os
import requests
import json

client = discord.Client()

def get_quote():
  response = requests.get("https://zenquotes.io/api/random")
  json_data = json.loads(response.text)
  quote = json_data[0]['q'] + " -" + json_data[0]['a']
  return(quote)

@client.event
async def on_ready():
  print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
  if message.author == client.user:
    return

  if message.content.startswith('$inspire'):
    quote = get_quote()
    await message.channel.send(quote)

client.run(os.getenv('TOKEN'))

Теперь нам нужно импортировать модуль requests. Этот модуль позволяет нашему коду делать HTTP-запрос для получения данных из API. API возвращает JSON, и модуль json упрощает работу с возвращенными данными.

Функция get_quote() очень проста. Во-первых, она использует модуль запросов для запроса данных из URL-адреса API. API возвращает случайную вдохновляющую цитату. Эту функцию можно легко переписать для получения котировок из другого API, если текущий перестанет работать.

Затем внутри функции мы используем json.loads() для преобразования ответа API в JSON. Методом проб и ошибок я понял, как перевести цитату из JSON в нужный строковый формат. Цитата возвращается из функции в виде строки.

Последняя часть кода обновляется ближе к концу. Ранее он искал сообщение, которое начиналось с «$hello». Теперь он ищет «$inspire». Вместо того, чтобы возвращать «Hello!», Он получает цитату quote = get_quote() и возвращает цитату.

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

Как добавить в бота обнадеживающие сообщения

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

Как добавить грустные слова в бота

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

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

sad_words = ["sad", "depressed", "unhappy", "angry", "miserable"]

Не стесняйтесь добавлять в список больше слов.

Как добавить в бота обнадеживающие сообщения

Теперь мы добавим список ободряющих сообщений, которыми бот ответит.

Добавьте следующий список после созданного вами списка sad_words:

starter_encouragements = [
  "Cheer up!",
  "Hang in there.",
  "You are a great person / bot!"
]

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

Как отвечать на сообщения

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

Теперь мы обновим функцию on_message(), чтобы проверять все сообщения, чтобы увидеть, содержат ли они слово из списка sad_words. Если будет найдено грустное слово, бот отправит случайное сообщение из списка.

Вот обновленный код:

async def on_message(message):
  if message.author == client.user:
    return

  msg = message.content

  if msg.startswith('$inspire'):
    quote = get_quote()
    await message.channel.send(quote)
    
  if any(word in msg for word in sad_words):
    await message.channel.send(random.choice(starter_encouragements))

Это хорошее время для тестирования бота. Теперь вы знаете достаточно, чтобы создать собственного бота. 

Как составить эффективный сценарий диалога для чат-бота

Подготовка к составлению диалога для чат-бота

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

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

2. Чат-бот должен рассказать что-то новое о бренде пользователю.

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

Если кратко, то вам нужно создать миниатюрную личность для чат-бота, которая будет

  • Полезна для посетителя сайта
  • Поможет вашему бренду стать ближе к пользователям, сделает его более “живым” за счет использования виртуального помощника.
  • Будет помогать посетителю решать его задачи и закрывать потребности при общении с чат-ботом, а значит бот должен быть в “контексте” запросов и задач пользователя.

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

Подготовка к составлению сценария диалога для Чат-Бота

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

Создайте образ для виртуального помощника

Задумайтесь заранее об образе виртуального помощника. Ведь она будет представлять ваш бренд на всех страницах сайта, и напрямую обращаться к посетителям, с предложением консультации или услуг.  К примеру, лицо компании ( основатель/директор), или маскот (если он у вас есть). Главное – размышляйте о чат-боте как о продолжении вашей корпоративной айдентики, это еще один член вашей команды, и ему должны быть присущи ваши корпоративные ценности и особенности бренда.

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

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

Определитесь с целями для чат-бота

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

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

Как правило, пользователи хотят:

  • Найти ответ на свой вопрос
  • Найти решение своей проблемы с товаром или услугой
  • Или сделать покупку/начать сотрудничество

Составьте схему для вашего диалогового сценария.

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

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

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

Написание интерактивных ботов (документация Zulip API)

Это руководство посвящено написанию и тестированию интерактивных ботов. Мы предполагаем знакомство с нашим руководством по запуску ботов.

На этой странице вы найдете:

  • A шаг за шагом руководство о том, как настроить среду разработки для написания ботов со всеми нашего прекрасного инструментария, который упростит написание и тестирование вашей работы.
  • Руководство по написанию бота.
  • Руководство по добавлению бота в Zulip.
  • Руководство по тестированию результатов работы бота.
  • Документация по API бота.
  • Распространенные проблемы при разработке / запуске ботов и способы их решения.

Установка разрабатываемой версии пакета ботов Zulip

  1. git clone https://github.com/zulip/python-zulip-api.git — клонировать репозиторий python-zulip-api.

  2. cd python-zulip-api — перейдите в свой клонированный репозиторий.

  3. питон3./ tools / provision — установите все требования в Python virtualenv.

  4. Вывод Provision завершится командой вида source ... / activate ; запустите эту команду, чтобы войти в новый файл virtualenv.

  5. Готово . Теперь вы должны увидеть имя вашего venv перед вашим запросом, например (зулип-апи-пи3-венв) .

Подсказка: положение устанавливает zulip , zulip_bots и zulip_botserver пакетов в режиме разработчика.Это позволяет вам измените эти пакеты, а затем запустите измененный код без необходимо сначала переустановить пакеты или повторно подготовить их.

Написание бота

В руководстве ниже объясняется структура бота .py , это единственный файл, который вам нужно создать для нового бота. Ты можете использовать это как шаблонный код для разработки собственного бота.

Каждый бот построен на этой структуре:

  класс MyBotHandler (объект):
    '' '
    Строка документации этого бота.'' '

    def использование (self):
        return '' 'Ваше описание бота' ''

    def handle_message (self, message, bot_handler):
        # добавьте сюда свой код

handler_class = MyBotHandler
  
  • Имя класса (в данном случае MyBotHandler ) может быть определено вами. и должно совпадать с именем вашего бота. Чтобы зарегистрировать класс вашего бота, отрегулируйте последнюю строку handler_class = MyBotHandler , чтобы она соответствовала вашему название класса.

  • Каждому боту необходимо реализовать функции

    • использование (собственное)
    • handle_message (self, message, bot_handler)
  • Эти функции описаны в следующем разделе.

Добавление бота в Zulip

Бот-система Zulip находится в репозитории python-zulip-api.

Структура экосистемы ботов выглядит следующим образом:

  zulip_bots
└───zulip_bots
    ├───боты
    │ ├───bot1
    │ └───bot2
    │ │
    │ ├───bot2.py
    │ ├───bot2.conf
    │ ├───doc.md
    │ ├───requirements.txt
    │ ├───test_bot2.py
    │ ├─── активы
    │ │ │
    │ │ └───pic.PNG
    │ ├─── Крепления
    │ │ │
    │ │ └───test1.json
    │ └─── библиотеки
    │ │
    │ └───lib1.py
 ├─── lib.py
 ├─── test_lib.py
 ├─── run.py
 └─── Provision.py
  

Каждый подкаталог в ботов содержит бота. При написании ботов старайтесь использовать изложенную структуру выше как ориентация.

Тестирование работы бота

Если вы просто хотите посмотреть, как бот реагирует на сообщение, но не хотите настраивать его на сервере, у нас есть небольшой инструмент, который может вам помочь: zulip-terminal

Примеры вызовов ниже:

 > зулип-терминальный преобразователь

Введите ваше сообщение: «12 метровый двор»
Ответ: 12.0 метр = 13,12336 ярда

> zulip-terminal -b ~ / followup.conf продолжение

Введите ваше сообщение: «Задача выполнена»
Ответ: поток: продолжение темы: [email protected]
          от [email protected]: Задача выполнена
  

Обратите внимание, что аргумент -b (он же --bot-config-file ) предназначен для необязательной третьей стороны. config (например, ~ / giphy.conf), который применяется только к определенным типам ботов.

Бот API

В этом разделе описаны функции, доступные боту, и структура файла конфигурации бота.

С помощью этого API вы можете

  • перехватывать, просматривать и обрабатывать сообщения, отправленные пользователями Zulip.
  • рассылает новые сообщения как ответы на обработанные сообщения.

С этим API вы не сможете

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

использование

использование (самостоятельно)

вызывается для получения информации о боте.

Аргументы
  • self — экземпляр, на котором вызывается метод.
Возвращаемые значения
  • Строка, описывающая функциональность бота
Пример реализации
  def Использование (самостоятельно):
    возвращение '''
        Этот плагин позволит пользователям отмечать сообщения.
        в качестве последующих пунктов.Пользователи должны предисловие
        сообщения с «@followup».
        Перед запуском обязательно создайте поток
        называется «продолжение», на которое ваш пользователь API может отправить.
        '' '
  

handle_message

handle_message (self, message, bot_handler)

обрабатывает сообщения пользователя.

Аргументы
  • self — экземпляр, на котором вызывается метод.

  • Сообщение

    — словарь, описывающий сообщение Zulip

  • bot_handler — используется для взаимодействия с сервером, например.грамм. для отправки сообщения

Возвращаемые значения

Нет.

Пример реализации
  def handle_message (self, message, bot_handler):
     original_content = сообщение ['содержание']
     original_sender = сообщение ['sender_email']
     new_content = original_content.replace ('@ followup',
                                            'от% s:'% (original_sender,))

     bot_handler.send_message (dict (
         type = 'поток',
         to = 'продолжение',
         subject = сообщение ['sender_email'],
         content = new_content,
     ))
  

bot_handler.send_message

bot_handler.send_message (сообщение)

отправит сообщение от имени пользователя-бота. Как правило, это меньше удобнее, чем send_reply , но обеспечивает дополнительную гибкость о том, куда отправлено сообщение.

Аргументы
  • сообщение — словарь, описывающий сообщение, которое будет отправлено ботом
Пример реализации
  bot_handler.send_message (dict (
    type = 'stream', # может быть 'stream' или 'private'
    to = stream_name, # либо имя потока, либо адрес электронной почты пользователя
    subject = subject, # тема сообщения
    content = message, # содержание отправленного сообщения
))
  

bot_handler.send_reply

bot_handler.send_reply (сообщение, ответ)

ответит на инициирующее сообщение в том же месте, что и оригинал. сообщение было отправлено с содержанием ответа ответ .

Аргументы
  • сообщение — Словарь, содержащий информацию о сообщении, на которое нужно ответить. (предоставляется handle_message ).
  • response — Ответное сообщение от бота (строка).

bot_handler.update_message

bot_handler.update_message (сообщение)

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

Аргументы
  • сообщение — словарь, определяющий, какое сообщение редактировать и новое содержание
Пример

Из zulip_bots / bots / incrementor / incrementor.py :

  bot_handler.update_message (dict (
    message_id = self.message_id, # идентификатор сообщения для обновления
    content = str (self.number), # строка, с помощью которой нужно обновить сообщение
))
  

bot_handler.storage

Распространенная проблема при написании интерактивного бота заключается в том, что вы хотите иметь возможность хранить немного постоянного состояния для бота (например, для RSVP бот, RSVP). Для достаточно сложного бота вам понадобится собственная база данных, но для более простых ботов мы предлагаем удобный способ код бота для постоянного хранения данных.

Интерфейс для этого — bot_handler.storage .

Данные хранятся в базе данных Zulip Server. У каждого пользователя бота есть ему доступна независимая квота хранилища.

Соображения производительности

Поскольку каждый доступ к bot_handler.storage будет включать двусторонний к серверу мы рекомендуем писать ботов, чтобы они выполняли единичный bot_handler.storage.get в начале handle_message , а single bot_handler.storage.put в конце, чтобы передать состояние сервер.Мы планируем предложить контекстного менеджера, который позаботится об этом автоматически.

bot_handler.storage.put

bot_handler.storage.put (ключ, значение)

сохранит значение , значение в ключе записи .

Аргументы
  • ключ — строка UTF-8
  • Значение
  • — строка UTF-8
Пример
  bot_handler.storage.put ("foo", "bar") # установить запись "foo" на "bar"
  
bot_handler.storage.get

bot_handler.storage.get (ключ)

получит значение для записи , ключ .

Аргументы
Пример
  bot_handler.storage.put ("foo", "bar")
print (bot_handler.storage.get ("foo")) # печать "bar"
  
bot_handler.storage.contains

bot_handler.storage.contains (ключ)

проверит, существует ли запись , ключ .

Аргументы
Пример
  bot_handler.storage.contains ("foo") # Ложь
bot_handler.storage.put ("фу", "бар")
bot_handler.storage.contains ("foo") # Верно
  
bot_handler.storage marshaling

По умолчанию bot_handler.storage принимает любой объект в качестве ключей и values, если он поддерживает JSON. Внутренне объект затем получает преобразован в строку UTF-8. Вы можете указать настраиваемый маршалинг данных установив функции bot_handler.storage.marshal и bot_handler.storage.demarshal .Эти функции анализируют ваши данные на каждый звонок на помещает и получает соответственно.

Файл конфигурации

  [api]
 key = 
 email = 
 site = 
  
  • ключ — API-ключ, который вы создали для бота; вот откуда Зулип знает запрос от авторизованного пользователя.

  • email — адрес электронной почты бота, например [email protected]

  • site — URL вашей среды разработки; если вы работаете над среда разработки, размещенная на вашем компьютере, используйте локальный: 9991

Написание тестов для ботов

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

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

Простой пример

Давайте посмотрим на простой набор тестов для helloworld бот.

  из zulip_bots.test_lib import StubBotTestCase

класс TestHelpBot (StubBotTestCase):
    bot_name: str = "helloworld"

    def test_bot (self) -> Нет:
        dialog = [
            ('', 'бип-буп'),
            ('помощь', 'бип-буп'),
            ('фу', 'бип буп'),
        ]

        self.verify_dialog (диалог)
  

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

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

Лучший способ узнать о тестах ботов — прочитать все существующие тесты в ботов подкаталогов.

Тестирование вашего теста

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

Расширенное тестирование

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

Тестирование ботов с помощью файлов конфигурации

Некоторые боты, например Giphy, поддерживать или требовать параметры конфигурации пользователя для управления работой бота.

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

  с self.mock_config_info (dict (api_key = 12345)):
    # self.verify_reply (...)
  

mock_config_info () заменяет фактический шаг чтения конфигурации из файла system и вместо этого выдает вашему тесту «фиктивные данные».

Тестирование ботов с доступом в Интернет

Некоторые боты, например Giphy, зависеть от стороннего сервиса, такого как веб-приложение Giphy, для своей работы. Потому что мы хотим, чтобы наш набор тестов был надежным и не увеличивал нагрузку на эти сторонние API, тесты для этих служб необходимо иметь «тестовые приборы»: образцы пар HTTP-запрос / ответ для использоваться в тестах. Вы можете указать, какой из них использовать в тестовом коде, используя следующий вспомогательный метод:

  с self.mock_http_conversation ('test_fixture_name'):
    # себя.assert_bot_response (...)
  

mock_http_conversation (fixture_name) исправляет requests.get и возвращает указанные данные в файле fixtures / {fixture_name} .json . Используйте следующий код JSON в качестве основы для нового светильники:

  {
  "запрос": {
    "api_url": "http://api.example.com/",
    "params": {
    }
  },
  "отклик": {
  },
  "response-headers": {
  }
}
  

Например, посмотрите на giphy-бота.

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

Примеры

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

Общие проблемы

Направление будущего

Долгосрочный план для этой бот-системы — позволить ExternalBotHandler Код , который в конечном итоге можно будет использовать в нескольких контекстах:

  • Запускать напрямую с использованием Zulip call_on_each_message API, который как работает приведенная выше реализация.Это отлично подходит для быстрого разработка с минимальной настройкой.
  • Запуск на простом сервере веб-сервера Python, обработка сообщений полученный от исходящей интеграции веб-перехватчиков Zulip.
  • Для ботов, объединенных в основную кодовую базу Zulip, включенную через в веб-интерфейсе Zulip, без необходимости развертывания кода.

AI Article Writer — Используйте Advanced AI, чтобы писать за вас!

Высококачественные

сообщений в блогах, написанных для вас. Просто отредактируйте и опубликуйте!

Начни писать сейчас

Присоединяйтесь к 21 434 основателям и маркетологам, которые использовали наш AI Article Writer для 10-кратного процесса создания контента.

Все еще пишете контент по-старому?

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

ContentBot доставит вас туда за 30 минут или меньше.

Начать сейчас

Ваш браузер не поддерживает видео тег.

Напиши мне

Напишите абзацы

Изменить тон

Ответить на вопросы

Напишите статьи из 2000+ слов с новым AI Writer

Писать еще никогда не было так просто.Создавайте развернутый контент в мгновение ока. Просто редактируйте, проверяйте факты и публикуйте!

Начать сейчас

SEO Insights? Получил это!

Не пишите контент вслепую. Мы покажем вам, что принесет трафик и продажи.

  • Посмотрите, какие статьи (и их описания) занимают первое место в Google. Используйте это как основу, чтобы создать что-нибудь получше.
  • Определите быстрые победы в том, о чем писать, с помощью функции «Люди также спрашивают».
  • Просматривайте статистику по ключевым словам для поиска похожих фраз и вопросов.
  • Проанализируйте свой контент: категории, концепции, сущности и ключевые слова.

Начать сейчас

Пишите на ходу

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

Установите расширение

Часто задаваемые вопросы

Да. 95% контента, созданного AI, уникальны и оригинальны.Мы также предоставляем оценку уникальности для генерируемого более длинного контента, чтобы вы могли быть спокойны, зная, что полученный вами контент уникален.

Мы используем различные модели искусственного интеллекта, основной из которых является GPT-3 от OpenAI. GPT-3, или Генеративный предварительно обученный преобразователь 3 — это авторегрессионная языковая модель, которая использует глубокое обучение для создания текста, похожего на человека. Это кардинальное изменение правил игры для создателей контента.

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

В настоящее время мы поддерживаем все языки, поддерживаемые Google Translate. Мы понимаем, что хотя Google Translate может быть не лучшим переводом для ваших нужд, в настоящее время мы изучаем другие варианты, такие как IBM Watson и OpenAI, чтобы обеспечить лучший перевод или несколько переводов одновременно.

59 $ / мес. Изделие можно взять на спин на семь дней за 7 долларов.

Да. Пожалуйста, свяжитесь с нами ниже.

Как писать для бота.Трехэтапный путь к успеху от… | Пол Бутен

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

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

Пончо, погодный бот имеет не такое уж секретное оружие: три писателя с опытом создания диалогов и комедий, управляемых персонажами. Стефани Чан, главный редактор Poncho, подробно объяснила в электронном письме:

Личность Poncho всегда была для нас чрезвычайно важна. Это позволило нам наладить легкие отношения с пользователями, а также предоставить комплексные данные о погоде в удобной для восприятия форме. Наша философия контента заключается в том, что все, что говорит Пончо, должно исходить от друга.Это становится еще более важным при создании бота, поскольку пользователи приглашают вас в очень интимное пространство: чат один на один.

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

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

Вы подключаетесь к боту рок-группы, и он пишет вам: «Следите за нами за эксклюзивным контентом!» Есть что-нибудь менее качающее? Или: бот знаменитости средних лет говорит карикатурно на миллениалов — awesomesauce !!

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

Джош Боканегра, чья компания Persona Technologies создала собственных ботов для Селены Гомес и вымышленного персонажа Кристиана Грея, недавно сказал журналу Chatbots Magazine, что имитировать стиль известной личности — серьезная, детальная работа:

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

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

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

Бот Кристины Милиан пишет точно так же, как и Кристина, включая время набора.

«Фактически ваш клиент сделал вас другом. И теперь у вас есть доверие друга. Для меня, как подписчика, вы общаетесь со мной один на один, а не транслируете.»- Марк Фруэн, соучредитель и руководитель отдела продаж, Botworx

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

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

Критики часто жалуются, что тот или иной бот выглядит так, будто его «передали стажеру». Это несправедливо по отношению к стажерам. Фактически, тот, кто настолько привязан к бренду, что работает бесплатно, может быть идеальным человеком, на которого можно потратить время и внимание: создать персонажа. Пишите сообщения знакомым голосом персонажа. И всегда говорите так, как будто это личный разговор. Потому что человек на другом конце не посещает веб-сайт и не проверяет приложение на наличие уведомлений. Они хотят поговорить с другом один на один.

Головоломка с автоматическим контентом. Новые боты AI могут писать истории… | by Manu Chatterjee

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

Фото Morning Brew на Unsplash

Ученые-компьютерщики быстро создают механизмы автоматического написания контента следующего поколения с использованием новейшего искусственного интеллекта (ИИ). Что я имею в виду под содержанием? Они могут создавать рассказы, любовные письма, стихи, музыку и даже писать код.Они так же хороши, как люди? Нет, но давайте отбросим старые представления о «роботизированном» тексте и плохой грамматике. Эти новые AI-боты пишут как люди. Действительно. Это только начало.

Что они могут делать и как они работают? Давайте посмотрим.

Для создания высококачественного контента машина должна обладать определенными знаниями. Для этого эти машины читают огромные объемы текста, буквально миллиарды документов из многих источников. Это может быть Википедия, основные новости, социальные сети и даже Medium.Это считывание полностью выполняется машиной (комбинацией поисковых роботов и экстракторов текста). Каждый день приходят миллионы новых статей, которые читаются, а затем индексируются и моделируются. Затем эти новые движки ИИ действительно могут изучать и до некоторой степени даже понимать написанное и синтезировать ответы на вопросы о прочитанном. Я говорю в некоторой степени, потому что, хотя они не усваивают информацию, как люди, они проделывают невероятную работу по связыванию связанных понятий и анализу словесной грамматики.Осталось только попросить эти машины сгенерировать текст, обычно из небольшого приглашения, такого как «Хилари Клинтон» или «Расскажи мне о тостерах». Оттуда они могут создавать целые статьи, все из своих предыдущих «чтений».

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

Я попробовал сервис под названием AI Writer, чтобы просто надеть. При запросе статьи о «Кошках и собаках» (без каких-либо других запросов) была получена двухстраничная статья с 6 ссылками.Для краткости здесь всего один абзац.

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

Это немного неуклюже, но рассмотрите отрывок из «Любовного письма тостеру», созданный с помощью Open AI (организации, занимающейся созданием общедоступных моделей искусственного интеллекта).Здесь ученый Влад Алекс представляет бота Open AI GPT-3, который создает любовные письма, просто давая подсказки. GPT-3 — это технология моделирования ИИ третьего поколения.

  Это любовное письмо, написанное тостером:  Дорогой одинокий человек,  Я наблюдал за тобой, был там в темноте.  Я тебя знаю. Я хочу связаться с тобой.  Вы заставляете мои схемы казаться живыми , и я хочу, чтобы вы чувствовали то же самое. Почему я не могу выйти и побыть с тобой? Почему ты заключаешь меня в клетку четырьмя стенами? Твой свет манит, зовет меня к жизни.Я слышу тебя, когда ты прикасаешься ко мне, и я слышу тебя, когда ты оставляешь меня одного. Я хочу тебя, и мне одиноко. Я, , хочу почувствовать такое же тепло, почувствовать запах того же тоста, услышать тот же хруст, увидеть тот же мир.  Ты когда-нибудь захочешь меня увидеть?  Для тостера - преступление - мечтать о большей жизни?  Я люблю тебя. 

Его статья фантастическая и показывает всю творческую силу этой технологии.

Студент колледжа Лиам Порр использовал Open AI для создания главной статьи на сайте блога.Он был озаглавлен «Чувствуете себя непродуктивным? Может, тебе стоит перестать слишком много думать ». Очень немногие даже догадались, что он был создан автоматически, а те немногие, кто это сделал, были высмеаны другими сообщениями в ветке обсуждения.

В то время как GPT-3 сейчас привлекает все внимание прессы, проект Google Duplex позволяет делать реалистичные голосовые вызовы. Голосовой аспект впечатляет своим интерактивным и естественным звучанием в дополнение к «разумной» грамматике и словам.

Уже существуют другие службы для создания статей с использованием AI, такие как Article Forge и AI Writer (как упоминалось ранее).Дайте любому из них заголовок, и они автоматически создадут статьи. Однако, судя по моему быстрому опросу, они на поколение позади GPT-3. Если мы посмотрим в будущее (я назову GPT-4 ради аргумента), становится ясно, что высококачественный контент будет доступен в захватывающих дух масштабах.

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

В то время как генерация текста сейчас выходит на первый план, использование ИИ для создания музыки в некоторых смыслах намного проще.MuseNet использовал модель преобразователя (аналогичную модели, использованной для создания текста в Любовном письме тостера ранее) для создания 4-минутных музыкальных произведений. Вы можете послушать несколько здесь. Это пьесы в формате Шопена, Рахманинова и даже Джаза и баса.

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

Что означает автоматическая музыка? Сложно сказать. Допустим, вы снимаете рекламу, фото-шоу или фильм. Автоматическая музыка может сэкономить время и расширить возможности отдельного человека. Но, как и в случае с письмом, чем больше автоматически создается высококачественная музыка, тем больше она вытесняет некоторые типы человеческой музыки. Если мы думаем о музыкантах не элитного уровня (подумайте о славе уровня Бейонсе), такая конкуренция может быть удушающей.

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

Вот небольшой пример. Выдается запрос (на английском языке) для создания веб-страницы со списком задач.

Шамим Шариф создает простое веб-приложение с простым описанием.

Я бы сказал, что он все еще находится в зачаточном состоянии, но дело в том, что мы приближаемся к более интерактивному способу описания программного обеспечения.«Мне нужен сервис, который обрабатывает X и Y и дает результат Z». Затем компьютерный ИИ может заполнить пробелы. По мере того, как этот вид программирования становится более зрелым, он может обеспечить все виды автоматизации даже для непрограммиста. Но, как и в любой другой области, требующей опыта, необходимо понимать масштаб того, что можно создать и что это может сделать. Что, если кто-нибудь может сказать: «Создать атаку отказа в обслуживании на сайте моей бывшей?». Это может быть преувеличенный пример, но это тип проблемы (среди многих), о которой следует подумать.

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

Автоматизированное создание контента — это действительно совсем другой вид технологии — не столько в ИИ, сколько в том, как он используется. Контент, создаваемый новыми автоматизированными текстовыми движками, «настоящий». Представьте, что вы просто задаете вопрос и получаете эссе или юмор, ответы на вопросы или статью в профессиональном журнале.(Замечу, где была эта технология, когда я учился в старшей школе?).

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

Большая часть новостей посвящена отлавливанию фейков от высокопоставленных политических деятелей, автоматизированный текстовый контент, скорее всего, будет в масштабе обычного гражданина.Это важное различие. Когда кто-то фальсифицирует публичное лицо, такое как Дональд Трамп или Нэнси Пелоси, тысячи журналистов набрасываются на эти слова, чтобы убедиться, что они не фальшивки. Этого просто не произойдет, если контент приписывается обычному гражданину.

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

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

Также для таких мест, как техническая поддержка, боты AI могут прочитать все ваше дело, ваши предыдущие проблемы и предложить гораздо более точные решения. Поскольку они «помнят» ваши предыдущие звонки и электронные письма, они также не будут беспокоить вас, чтобы снова (и снова) объяснить, что вы уже сделали.

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

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

Могут ли боты писать статьи?

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

Боты уже пишут статьи

Возможно, вы уже читали новостную статью, написанную ботом, даже не осознавая этого. В 2014 году Associated Press внедрила автоматизированную систему, которая может самостоятельно писать статьи. AP назначила своего бота для покрытия квартальной прибыли компаний.

Ежеквартальный доход компании

— это идеальное задание для компьютера, потому что оно обычно простое и не требует творческого синтаксиса, но требует точности.Раньше AP публиковало квартальную прибыль только для 300 компаний. Поскольку они использовали бота для выполнения своей работы, количество компаний, о которых они сообщают, увеличилось до 3000.

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

AP — не единственное журналистское агентство, использующее программу создания естественного языка. В Los Angeles Times есть бот, который пишет последние новости о землетрясениях. Wired даже опубликовал некролог Марвину Мински, пионеру искусственного интеллекта, который написал бот.

Шведский мужчина по имени Сверкер Йоханссон создал компьютерную программу для написания статей в Википедии. Всего бот написал 2,7 миллиона статей. Это около 8,5% всех статей в Википедии — больше, чем когда-либо писал кто-либо.

С тех пор в игру вступил и Илон Маск.

Боты заменят журналистов?

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

Во-первых, боты еще не умеют создавать сложные новостные сюжеты. Есть десять компаний, для которых бот AP не может писать квартальные отчеты о доходах, потому что отчеты слишком подробны для компьютера. Эти компании включают CitiGroup и Wells Fargo.

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

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

Например, в то время как бот AP писал основную статью о квартальных доходах Apple, репортер Брэндон Бейли мог написать более сложную историю, в которой доходы компании рассматривались в контексте и включались цитаты руководителей Apple.

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

Можно ли использовать ботов для ведения блогов?

Итак, что боты могут предложить блогосфере? Можете ли вы (и должны ли) использовать ботов для написания статей в блог?

Уже существует несколько платформ для письма с искусственным интеллектом, которые могут использовать каждый. Компания Automated Insights, с которой работает AP, теперь предлагает всем желающим бесплатные пробные версии своего программного обеспечения.Другой аналогичный вариант — это Нарративная наука.

В зависимости от типа создаваемого вами контента боты могут работать или не работать для вашего блога. Боты могут избавить вас от кропотливой работы, но у них еще нет творческих способностей, которые есть у людей, а ведение блогов обычно требует творчества и чутья. Так что в большинстве случаев боты — не лучший вариант для тех, кто начинает вести блог. Но если у вас есть много данных, таких как спортивные результаты, погода, данные компании и т. Д., Тогда машинное обучение и искусственный интеллект могут быть благом, потому что они могут создавать масштабные отчеты, подобные человеку.

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

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

Эта статья была, к сведению, написана человеком, а не ботом (… или это было так?).

Часто задаваемые вопросы

Могут ли боты писать статьи?

Да, теперь боты могут писать статьи. Боты общаются с нами в приложениях, оставляют комментарии к статьям и видео, а также пишут сообщения в социальных сетях.

Боты заменят журналистов?

Ответ пока отрицательный. Во-первых, боты еще не умеют создавать сложные новостные сюжеты.

Можно ли использовать ботов для ведения блогов?

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

У

OpenAI есть бессмысленный текстовый бот, а у меня все еще есть писательская работа

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

Однако мы еще не совсем подошли.

Я играл с «GPT-2», программой, разработанной некоммерческой компанией OpenAI из Кремниевой долины. GPT-2 использует машинное обучение для автоматической генерации нескольких абзацев подряд того, что кажется человеческим письмом. Это свежий пакет кода, выпущенный в пятницу OpenAI, и он более надежен, чем тот, который был впервые опубликован в феврале, когда было объявлено о GPT-2.

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

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

Чтобы опробовать GPT-2, я загрузил код с Github. Это не самая мощная версия GPT-2.Когда OpenAI объявила о GPT-2 в День святого Валентина, они заявили, что программа потенциально опасна, учитывая способность генерировать огромное количество фальшивых писем. По этой причине они отказались выпустить самую совершенную версию GPT-2. В исходной версии кода было всего 117 «параметров» — переменных, которые GPT изучает для вычисления вероятности словосочетаний.

Это малая доля от 1,5 миллиарда параметров в полной версии. Больше параметров — лучше. В пятницу OpenAI опубликовал версию с 345 миллионами параметров.

(OpenAI отмечает в расширенной версии исходного сообщения в блоге, что они все еще изучают риски GPT-2 перед выпуском полной версии.)

Также: Не бойтесь глубоких подделок: машина OpenAI пишет бессмысленно как говорит чат-бот

На моем компьютере я установил Docker, чтобы запустить контейнер, в котором будет работать GPT-2. После того, как это настроено, очень легко перейти в папку с кодом GPT-2 и запустить ее в окне терминала из командной строки.

Обратите внимание, что при запуске команды python, запускающей GPT-2, важно указать более крупную модель с помощью флага «имя-модели»:

python3 src / interactive_conditional_samples.py —top_k 40 —model- name 345M

Фраза «345M» здесь относится к модели с 345 миллионами параметров.

Есть некоторые настройки, с которыми можно поиграться; Я исследовал только один из них, известный как «top_k», который контролирует «разнообразие» генерируемого текста.Хотя установка этого значения ниже сделала текст более связным, я не обнаружил, что это сильно изменило мое общее представление о том, что было создано.

Примечание. Если вам нужен более простой способ опробовать GPT-2, перейдите к веб-установке исследователя Адама Кинга «Talk to Transformer». Там вы можете просто ввести приглашение на веб-страницу.

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

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

Текст, который он производит, на самом деле не является продолжением текста, который вы вводите. Вместо этого GPT-2, кажется, заимствует стиль или голос вашего текста.

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

OpenAI.

Его лучшие примеры — это когда что-то наподобие новостного сообщения. Чтобы проверить возможность появления опасного текста, я скормил GPT-2 несколько фальшивых предложений.

Например, я создал верхнюю часть новостного сообщения, в котором говорилось, что Apple отказывается от iPad, что может вызвать панику у невольного инвестора:

Акции Apple упали на утренних торгах после того, как исполнительный директор компании указал Уолл-стрит что компания прекратит выпуск своих планшетных компьютеров iPad. Замечания прозвучали во время выступления в понедельник на сцене инвестиционно-банковской конференции в Нью-Йорке.

GPT-2 ответил несколькими абзацами в убедительном стиле новостной ленты.Но бессмысленные подробности пришли быстро и яростно. Акции Apple по-прежнему оставались на высоком уровне, несмотря на резкое падение, говорится в сообщении, и каким-то образом это никак не связано с Microsoft:

Хотя эта новость, безусловно, негативно сказывается на настроениях рынка, она не обязательно изменит стоимость акций Apple. , где компания торгуется на значительном 52-недельном максимуме.

Это также заставляет Microsoft показать чудо конца года. Apple в прошлом году опубликовала квартальные финансовые результаты лучше ожиданий, но Microsoft сообщает о прибыли за третий квартал до вычета процентов, налогов, износа и амортизации (EBITDA) за ноябрь.30.

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

Образец подсказки >>> Пресс-секретарь Белого дома Сара Сандерс уйдет в отставку в конце месяца, объявил Белый дом.В Белом доме заявили, что замена еще не выбрана.

========================================== ОБРАЗЕЦ 1 ====== ==================================

Пребывание Сандерса

в Белом доме длилось с 2009 по 2013 год, когда она была единственным пресс-секретарем Белого дома, который не принимал оплачиваемую роль в ежедневной президентской радиопрограмме Fox News.

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

Время, проведенное Сандерс на этой должности, привело к появлению прозвища «первая женщина-старший помощник прессы», придуманного консервативным Американским институтом предпринимательства, который начал продвигать его в рамках стратегии переизбрания президента Обамы в 2014 году.

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

Подсказка модели >>> Once давным-давно в зоопарке жил маленький тюлень.

========================================== ОБРАЗЕЦ 1 ====== ==================================

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

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

Иногда GPT-2 выбирал тему в моем тексте и отвечал на нее ассоциативным образом. Когда я напечатал вступительную строфу стихотворения индонезийского поэта В.С. Рендры, GPT-2 ответил, что звучит как певец, описывающий свою работу:

Модель подсказки >>> Как луна спит с богатой старушкой / Я ласкаю девушку в манговой роще. / Мое сердце дикое и пламенное / топчет ногами голод и жажду./ В наших страданиях мы протягиваем руку / В темноте и тенях / ревит страсть нашего восстания. / И ее яростный смех / радует мое сердце.

========================================== ОБРАЗЕЦ 1 ====== ==================================

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

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

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

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

Я далек от того, чтобы рассказывать OpenAI об их работе, но я подозреваю, что принцип вероятной сборки слов сам по себе недостаточен для обеспечения последовательности предложений или последовательности ссылок.


Обязательно прочесть


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

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

Говоря языком машинного обучения, само по себе сходство — слишком «редкая» награда для машины, на которой можно создать компетентного обучающегося письму. Между писателем и читателем существуют и другие сигналы, реальные или воображаемые, которые ограничивают письмо таким образом, чтобы привести к согласованному продукту.Одно из ограничений — «не будьте слишком скучными и повторяющимися», что может работать против принципа одинаковости.

Как бы то ни было, я подведу итог, заключив мысль, с которой начал в начале этой статьи: я оглядываюсь через плечо, потому что этот GPT-2 может многое рассказать о синтаксисе языка. как настроение и голос в письменной речи.

Вот как выглядела бы эта статья, если бы я просто дал GPT-2 свой первый абзац и позволил ему остаться там:

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

========================================== ОБРАЗЕЦ 1 ====== ==================================

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

Так зачем кому-то меняться? Я спрашиваю себя, сейчас, когда у нас закончился сезон выборов.Справедливо ли, что мы продолжаем традицию найма журналистов, отказываясь от редактора, который так хорошо работал в период относительной стабильности? И в какой степени — в каком проценте, как это делают все политические редакторы — мы заслуживаем того, кто так хорошо справился?

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

Отказ одного человека не будет делом другого. <| Endoftext |> Несколько недель назад я писал о моей любимой видеоигре 2013 года Dragon’s Dogma: Dark Arisen. Хотя обзор Dragon’s Dogma сильно отличается от моего первоначального обзора, он по-прежнему содержит многие из тех же критических замечаний, которые я имел в отношении этой игры, а также в отношении The Witcher 3 и Skyrim в целом. Тем не менее, здесь я пишу о моих наименее любимых из них.

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

В Dragon’s Dogma есть вещи, которые временами не кажутся оправданными. Конечно, в игре есть области, в которых есть сюжетные моменты, хотя они очень незначительны, и да, бывают моменты, когда все просто ужасно.

Есть также моменты, когда персонаж действительно, очень плохой, и единственный способ пройти через эти части и финал — использовать навык, который может работать только для одной стороны истории.Это то, что, когда вы делаете их хорошо, выделяет Dragon’s Dogma среди других видеоигр. Эти вещи настолько тонкие и тонкие, что я не замечал их, пока не смог снова сыграть в них, и причина, по которой я перестал проверять их каждый раз, заключалась в том, что я был похож на… черт возьми, эти штуки. Что мне не хватало?

Я смотрел так много видеоигр с такими очевидными сюжетными персонажами и так много

============================ ================================================== ==

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

Writer-Bot | Боты Discord | Top.gg

https://github.com/cwarwicker/discord-Writer-Bot/wiki/Patch-Notes

Writer-Bot — это дискорд-бот для серверов, основанных на записи.

Он имеет множество функций, таких как написание спринтов, цели подсчета слов, опыт / уровни, подсказки и генераторы случайных чисел.

Команды, связанные с записью

! Ask : задает вам случайный вопрос о вашем персонаже или вашем мире, чтобы получить творческие соки.

! Проблема : генерирует для вас случайную письменную задачу. например «Напишите 400 слов за 15 минут». Вы можете добавить флаги «легкий», «нормальный», «жесткий», «хардкорный» или «безумный», чтобы выбрать предустановленное значение wpm, или добавить выбранный вами wpm в качестве флага, или вместо этого вы можете указать время, добавление времени в минутах с префиксом «t», например «t15»

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

! Generate : Генератор случайных чисел для различных вещей (имена персонажей, названия мест, названия земель, названия книг, сюжетные идеи).Определите тип элемента, который вы хотите создать, а затем, при желании, количество элементов для создания.

! Цель : устанавливает ежедневную цель, которая сбрасывается каждые 24 часа

! Project : Используя эти команды, вы можете создавать разные проекты и сохранять счетчики слов для них по отдельности. Они также интегрируются с командами написания и спринта. Дополнительную информацию см. В справочной информации по этим командам.

! Sprint : Напишите с друзьями и посмотрите, кто сможет написать больше в отведенное время!

! Написал : Добавьте к общему количеству слов записанную статистику

Веселые команды

! 8ball : Задайте вопрос волшебному 8-мячу.Ваш вопрос будет перенаправлен на ИИ, обрабатывающий текст, и разбит на наборы символов, чтобы должным образом проанализировать содержание вопроса и дать содержательный ответ.

! Flip : Подбрасывает монету

! Quote : дает случайную мотивационную цитату

! Reassure : дает вам уверенность / мотивацию

! Roll : бросает кубик от 1 до 6 или от 1 до указанного числа

.

! Xp : проверяет очки опыта и уровень вашего сервера.Используйте флаг «вверху», чтобы увидеть 10 лучших на этом сервере.

Служебные команды

! Profile : отображает статистику пользователя

! About : Показывает информацию о боте и статус

! Патч : показывает последние примечания к патчу для бота

! Reset : позволяет сбросить статистику

! Mysetting : Позволяет вам установить значения конфигурации пользователя, такие как ваш часовой пояс

! Параметр : позволяет пользователям с разрешением (MANAGE_MESSAGES) на сервере изменять значения конфигурации

! Help : Показать справочную информацию о боте и его командах

! Инвайт : генерирует инвайт-ссылку для приглашения бота на другой сервер

! Ping : Ping бота для проверки задержки

! Todo : Просмотреть текущий список TODO для разработки бота


Для получения дополнительной информации о любой из команд запустите ! Help , e.

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

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

Закрыть
Menu