Selectel
212 533

Инструкция: Создание бота для Telegram без навыков программирования

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

В закладки

Материал подготовлен при поддержке Selectel

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

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

Начнем с разработки бота, который сможет автоматически отправлять в Telegram-канал новости компании, опубликованные на сайте или в Facebook.

Шаг 1. Создаём бота в Telegram

Бот в Telegram создается при помощи другого бота под названием BotFather. Отправляем ему команду /newbot, выбираем имя, которое будет отображаться в списке контактов, и адрес. Например, «Бот для DTF» с адресом «dtf_news_bot».

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

Через BotFather также можно добавить аватарку для бота, описание и прочее.

Шаг 2. Создаём канал в Telegram

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

Для поиска бота можно использовать его адрес. Например, «dtf_news_bot».

Шаг 3. Создание условия

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

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

IFTTT расшифровывается как If This Then That

Переходим в раздел IFTTT "My Applets", нажимаем на кнопку "New Applet" и далее на ссылку "This". Находим в списке функций триггер Feed, New feed item и указываем URL-адрес нашей RSS-ленты. Например, у Wordpress-сайтов она обычно расположена по адресу example.com/feed/.

Вместо RSS-ленты можно отслеживать появление новых записей в Twitter или Facebook-аккаунте — для каждой функции в IFTTT предусмотрены отдельные модули.

Теперь переходим ко второму шагу — выбираем действие, которое будет выполняться при обнаружении новой записи в RSS. Нажимаем на "That" и ищем Maker Webhook, "Make a web request" — с помощью этого модуля можно отправлять запросы к любым сервисам. В нашем случае — к боту в Telegram.

В открывшейся форме в поле URL нужно указать ссылку https://api.telegram.org/botТОКЕН/sendMessage, подставив в неё токен, сгенерированный на первом шаге. Метод: POST, тип контента: application/json.

Body — поле для шаблона запроcа, который будет отправляться в Telegram. В нём указываем, в какой канал нужно отправить сообщение и что в нём должно быть написано:

{"chat_id":"@адрес_канала", "text":"{{EntryTitle}} {{FeedUrl}}"}
  • chat_id — адрес канала, в который необходимо отправить сообщение. Таким образом одного бота можно подключить сразу к нескольким каналам. В качестве адресата можно указать и конкретного пользователя. В таком случае вместо адреса канала необходимо указать его ID (можно получить при помощи бота).
  • text — содержание сообщения. Например, заголовок материала из RSS (EntryTitle), его содержание (EntryContent) и ссылка (FeedUrl). Список доступных опций можно посмотреть по кнопке Ingredient.

Если всё настроено верно, бот отправит сообщение из RSS-ленты в канал. У триггера в IFTTT есть задержка, поэтому сообщение, появившееся в RSS-ленте, отправится в Telegram не сразу, а спустя 30-60 минут.

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

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

Шаг 4. Подключаем сервер

На этом этапе понадобится веб-хостинг и сертификат SSL, который можно получить бесплатно с помощью сервиса Let's Encrypt.

Удобнее всего создать отдельный поддомен для бота — например, bot.example.com — и разместить на нём один файл index.php. Внутри файла размещаем код простейшего бота c сайта Telegram.

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

В код бота нужно внести всего два изменения:

  • в строке define('BOT_TOKEN', '12345678:replace-me-with-real-token'); вместо 12345678:replace-me-with-real-token написать токен, полученный на первом шаге;
  • в строке define('WEBHOOK_URL', 'https://my-site.example.com/secret-path-for-webhooks/'); вместо https://my-site.example.com/secret-path-for-webhooks/ указать URL-адрес файла с кодом для бота: https://bot.example.com/index.php.

Шаг 5. Связываем Telegram-бота и сервер

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

Для этого понадобится консоль. У разных хостинг-провайдеров она может находиться в разных разделах интерфейса управления сайтом. Кроме того, можно воспользоваться программой Terminal на macOS, введя через неё команду ssh имя_пользователя@адрес_домена.

После ввода пароля, печатаем для нашего поддомена простую команду:

php -f /var/www/bot.example.com/index.php

Если всё сделано правильно, бот сразу отправит в Telegram сообщение "Hello".

Шаг 6. Настраиваем текст автоответов бота

Добавим различные сценарии для ответов бота. Открываем созданный ранее файл index.php и находим в нём строчку:

} else if ($text === "Hello" || $text === "Hi") { apiRequest("sendMessage", array('chat_id' => $chat_id, "text" => 'Nice to meet you'));
  • Hello и Hi — текст пользователя, на который бот должен отреагировать.
  • Nice to meet you — ответ бота на отправленное пользователем сообщением.

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

} else if ($text === "Цены") { apiRequest("sendMessage", array('chat_id' => $chat_id, "text" => 'Прайс-лист можно скачать по ссылке example.com/price')); } else if ($text === "Контакты") { apiRequest("sendMessage", array('chat_id' => $chat_id, "text" => 'Контактный адрес для связи — secret@vc.ru'));

Можем указать любое количество фраз и ответов на них. Также можно изменить кнопки, доступные пользователю во время работы с ботом. Находим строчку кода 'keyboard' => array(array('Hello', 'Hi')) и вместо Hello и Hi указываем «Цены» и «Контакты».

После сохранения файла изменения сразу вступят в силу.

Промокод

Специально для читателей vc.ru доступен промокод на 250 рублей при заказе хостинга Vscale. Укажите "VC250” в виджете с балансом. Промокод действует до 1 июня 2017 года.

Заказать хостинг для бота

#партнерский #selectel #инструкции #разработка

{ "author_name": "Selectel", "author_type": "editor", "tags": ["\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430","\u043f\u0430\u0440\u0442\u043d\u0435\u0440\u0441\u043a\u0438\u0439","\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438","selectel","advertising"], "comments": 25, "likes": 183, "favorites": 123, "is_advertisement": false, "subsite_label": "selectel", "id": 22593, "is_wide": true, "is_ugc": false, "date": "Wed, 29 Mar 2017 13:38:00 +0300" }
{ "id": 22593, "author_id": 172558, "diff_limit": 1000, "urls": {"diff":"\/comments\/22593\/get","add":"\/comments\/22593\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/22593"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 172558, "possessions": [] }

25 комментариев 25 комм.

Популярные

По порядку

Написать комментарий...
13

баян бабаян.
Ни строчки кода, но вот этот код скопируйте и поменяйте. Если это, человек, который к коду не имеет отношение, вероятность 99,9% что-то пойдет не так.
Если это новичок, отвечаю, что он встанет на этапе хостинга с SSL.

Ответить
0

У меня же сработало.

Ответить
1

Ну я не говорю, что это нереально. Я говорю, что это сложно. Тот же manybot или как то их, делают, чтобы все полностью настраивалось через бота. Давно не заходил, натыкался на них на этапе начала знакомства с API BOT Telegram

Ответить
4

Без знаний? SSL удачи! if - else, удачи. Настройка сервера, удачи.

Ответить
2

Спасибо за подробную инструкцию!!!))
Слежу в последнее время за возможностями Telegram, особо влечет анонимность этого мессенджера. Читала, что одна компания сумела реализовать Телеграм казино, которое интегрируется с внешней платформой и позволяет играть на реальные деньги, оплачивать и выводить деньги через мессенджер. Плюс разрабатывают визуал на html5.
Было бы приятно услышать еще о более полезных разработках))

Ответить

3

Я вот тут бота в 1с цеплял, напишите статью как в 1с через webhook заставить работать) Вот будет благодарность)

Ответить
1

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

Ответить
0

Ждём следующей статьи с при поддержке Selectel

Ответить
1

В общем первый вариант я решил самим ботом IFTTT, свой тут не особо то и нужен

Ответить
–1

Боты Telegram – глупая и невостребованная хрень. Привычный графический интерфейс в разы удобнее.

Ответить
0

зря ты так

Ответить

0

Так и что, в статье об этом же и пишут. Там в рецептах IFTTT не телеграм нужно выбирать.

Ответить
0

чегойто у меня не того :) где подробнее почитать про этот post метод?

Ответить
0

если руками в браузер вбить https://api.telegram.org/botТОКЕН/sendMessage{"chat_id":"@адрес_канала";, "text":"{{EntryTitle}} {{FeedUrl}}"} со своими значениями то должно долететь, я правильно понимаю? у меня в этом случае method not found

Ответить
0

в браузер? в адресную строку? Нет.

Ответить
0

Браузер не может выполнить post-запрос, только get

Ответить
0

Курлом отправь

Ответить
0

А еще есть вот такая штука, если хотите сделать для своей аудитории мини-игру в Телеграм и не хотите кодить http://chatquest.ru

Ответить
0

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

Ответить
–3

p.s. вот мой бот t.me/readytospeakbot для сайта readytospeak.ru
RSS все дописать руки не доходят, точнее написал, но столкнулся с ограничениями в Telegram.

Ответить
–5

@IFTTT
Наслаждайтесь без создания бота и хостинга.
Предыдущий схожий коммент потерли, видимо, агрессивная реклама (:

Ответить
0

Про IFTTT в тексте написано. Плюс он не позволяет делать описанную функциональность.

Ответить
0

Вы пост явно не читали, сделайте cmd+f IFTTT

Ответить
0
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Нейронная сеть научилась читать стихи
голосом Пастернака и смотреть в окно на осень
Подписаться на push-уведомления
{ "page_type": "default" }