Очень простой чат-бот для Telegram для самых маленьких



    Есть 100500 способов и инструментов создать простого serverless чат-бота для телеграм. А наш все-равно будет проще, хотя бы по числу кликов в интерфейсе. Сам бот будет написан на Python, а выполнятся будет на serverless движке Swifty.

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

    Пока все стандартно — зарегистрируйте бота


    Чтобы создать нового бота, нужно попросить другого бота это сделать. Откройте телеграм и найдите там бота @BotFather или откройте ссылку. Далее, наберите /newbot и следуйте инструкциям БотПапы. Для минимальной настройки вам нужно только дать боту display name и username. После создания бота вам будут выданы access token и URL. Сохраните их где-нибудь.

    Бот


    Для начала вам нужно зарегистрироваться в Swifty — нашей серверлесс платформе. Сделать это можно здесь. Затем зайдите в панель управления и сделайте следующее:

    1. Нажмите Functions -> New Function. Перейдите на вкладку From repo (Templates) и выберите репозиторий github.com/swiftycloud/swifty.demo, если он не выбран по-умолчанию. Это наш собственный репозиторий, в котором мы храним шаблоны функций.
    2. Выберите шаблон Simple Telegram Chatbot (python) и нажмите Next.
    3. Введите имя своего бота, например, swifty_bot (далее я буду использовать это название для ее обозначения) и нажмите Create.

    Чтобы телеграм мог позвать функцию бота, нужно создать ей API ссылку. Перейдите на вкладку Triggers, нажмите Add Trigger -> REST API (URL). Сохраните получившуюся ссылку.

    Затем, вам нужно дать функции бота доступ к access token, который вы получили от telegram. В Swifty есть специальная сущность — Account, которая позволяет безопасно хранить любые данные, например, связки логин-пароль или токены.

    1. Выберите Accounts -> Create Account. Используйте тип Telegram API, имя SWIFTYBOT (именно в uppercase) и токен, который вы получили от telegram.
    2. Выберите Functions -> swifty_bot -> Access -> Add. Выберите Accounts и аккаунт SWIFTYBOT. Теперь ваша функция имеет безопасный доступ к вашему access token.

    Update. Обратите внимание! Имя SWIFTYBOT для аккаунта прописано в коде функции вот здесь:

    BASE_URL = "https://api.telegram.org/bot{}".format(os.getenv('ACC_TELEGRAMSWIFTYBOT_TOKEN'))

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

    BASE_URL = "https://api.telegram.org/bot{}".format(os.getenv('ACC_TELEGRAMMYOWNBOT_TOKEN'))

    Как формируется имя переменной окружения ACC_TELEGRAMMYOWNBOT_TOKEN, через которую функция получает свойство аккаунта, ровно как и любого другого ресурса в Swifty? Здесь:

    • ACC — идентификатор, что вы хотите обратиться к ресурсу типа Account;
    • TELEGRAM — тип аккаунта;
    • MYOWNBOT — имя аккаунта;
    • TOKEN — свойство аккаунта;

    Код получившейся функции:

    import json
    import os
    import sys
    import requests
    
    BASE_URL = "https://api.telegram.org/bot{}".format(os.getenv('ACC_TELEGRAMSWIFTYBOT_TOKEN'))
    
    def Main(req):
        try:
            data = json.loads(req.body.encode())
            message = str(data["message"]["text"])
            chat_id = data["message"]["chat"]["id"]
            first_name = data["message"]["chat"]["first_name"]
    
            response = "Please /start, {}".format(first_name)
    
            if "start" in message:
                response = "Hello {}! Type /help to get list of actions.".format(first_name)
                
            if "help" in message:
                response = "/about - get information about Swifty"
                
            if "about" in message:
                response = ("Swifty is the serverless platform that allows startups, developers and enterprises to develop and run application backend with minimal time-to-market, costs and without infrastructure management.\n"
                                    "Start creating your backend at\n"
                            "https://swifty.cloud")
    
            data = {"text": response.encode("utf8"), "chat_id": chat_id}
            url = BASE_URL + "/sendMessage"
            requests.post(url, data)
    
        except Exception as e:
            print(e)
    
        return {"statusCode": 200}, None

    Это простейший бот, который умеет отвечать на команды /start, /help и /about. Можете также добавить любые свои команды и расширить его функционал по-желанию.

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


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

    curl -XPOST https://api.telegram.org/botYOUR_ACCESS_TOKEN/setWebhook?url=YOUR_API_URL


    Если все прошло хорошо, то вы увидите примерно следующее:

    {
      "ok": true,
      "result": true,
      "description": "Webhook was set"
    }

    Если вы находитесь в России, то все пройдет хорошо только в том случае, если у вас включен VPN.

    Можно проверять


    Найдите в telegram бота с вашим именем и попробуйте выполнить пару команд, например, /start или /about. Если все работает — поздравляем. Если нет — пожалуйтесь здесь в комментарии или в нашем slack канале.

    Как работает такой готовый бот можно посмотреть, если найти в телеграме нашего бота с именем swifty_test_bot. Спасибо.

    Make your ideas come app, как говорят в swifty.cloud.
    Rusonyx
    Company

    Comments 20

      0
      Если вы находитесь в России, то все пройдет хорошо только в том случае, если у вас включен VPN.


      СПб, Интерзет (дом.ру) — С недавнего времени, api.telegram.org откравается без VPN.

      В связи с этим, недавно вернул своих ботов обратно на веб-хуки.
        0
        Это радует. У меня через Билайн не работает(
        0

        А это точно разработка под Android / iOS?

          0
          Спасибо, что обратили внимание. Подставились по дефолту — поменяли.
          +2
          Побуду хакером в столовой:
          1) сертификат ваш? самоподписный?
          2) вы можете читать все сообщения всех ботов?
          3) токен вы тоже видите — то есть сможете писать от имени всех ботов

          Ну и напоследок: а чего CURL я должен запускать то? раз у вас есть сертификат, токен, то можно запросить имя бота, сформировать YOUR_API_URL и выполнить уже на вашей стороне.
          Я так на один IP-адрес повесил несколько ботов, когда от telegram приходит POST-запрос, просто анализируешь URI и выясняешь какому боту переслать сообщение.
            0
            Привет! Нет, мы не можем читать сообщения, так как ваш токен хранится в зашифрованном виде — сущность Account для этого и создана. Мы его не видим и расшифровать не можем.
            Какой сертификат имеется ввиду?
            0
            не получается зарегистрироваться в кабинете, тех.поддержка не отвечает со вторника
              0
              регистрируетесь здесь www.rusonyx.ru/swifty? На каком этапе не получается зарегистрироваться? Как связывались с тех.поддержкой?
                0
                1) после регистрации не пришло никаких подтверждающих писем, войти в лк не удалось, «incorrect login or password»
                2) через пару дней пришел какой-то спам от вас «спасибо за использование сервиса», хотя согласие на получение рассылки не было дано
                3) была еще одна попытка зайти в лк, пришлось сбросить пароль, с новым паролем снова не удалось залогиниться, ошибка та же
                4) тех.поддержка спросила, с какой почты была регистрация, ответ был отправлен и тех.поддержка исчезла (дело в том, что почта support-swifty@rusonyx.ru не работала и снова пришлось писать запрос в общую тп swifty@rusonyx.ru)

                вот айди заявки #1759008

                  0
                  Тут несколько моментов.
                  1) Письма с rusonyx.ru воспринимались почтой mail.ru, как спам. Вчера mail сообщил, что ситуацию исправили. Проверили, письмо на подтверждение пришло.
                  2) Мы создавали адрес support-swifty@rusonyx.ru на старте проекта, потом заменили на более простой swifty@rusonyx.ru. support-swifty@rusonyx.ru — действительно не работает. Думали нигде оно не фигурирует, видимо где-то пропустили. Просим прощения!
                  На заявку ответ отправим.
              0
              Все замечательно и почти легко запустилось, заработало, только получившийся чат бот не умеет писать кириллицей. То есть я в принципе не могу его заставить отвечать русскими буквами. swifty-dashboard.rusonyx.ru просто зависает, когда я в код добавляю русский текст для ответов.
                0
                Добрый день! Да, был баг в UI. Обновили и теперь кириллица работает корректно. Спасибо, что нашли!

              Only users with full accounts can post comments. Log in, please.