Telegram api получить сообщения из канала. Telegram api на русском — Telegram bot что такое и как делать

18.04.2024 Компьютеры

Одним из преимуществ мессенджера Telegram от Skype, WhatsApp и прочих ПО, является возможность создавать собственных ботов, наделенных очень условным, но все же «искусственным» интеллектом. Любой программист, владеющий определенными познаниями, может обратиться к библиотеке метод API и создать приложение для Телеграм.

Особенности библиотеки API

Для начала стоит разобраться что такое АПИ и в чем его отличии от программы.

API или «A pplication P rogramming I nterface» — это своеобразная электронная библиотека. Массив данных в ней открыт для любого пользователя и имеет одно назначение — упростить жизнь разработчикам приложений, оказать помощь в создании качественного ПО или максимально персонализировать уже существующую разработку.


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

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


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

Отличия Telegram API и Telegram Bot API

Telegram API — экономит не только время и ресурсы, затрачиваемые на создание приложения, но и упрощает процесс отладки и поиска ошибок (багов). Все команды в библиотеке стандартны и давно «обкатаны».

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


Можно утверждать, что раздел Bot API позволяет программисту интегрировать созданный «искусственный интеллект» в систему Telegram. Телеграм АПИ — это гораздо более широкое понятие, которое включает в себя весь стандартный набор методов, правил и объектов для работы приложения.

Необходимые знания для работы с Telegram API

Итак, чтобы начать работать с API необходимо знать несколько важных нюансов.

  1. Все объекты в telegram API рассматриваются, как JSON-объекты. Если упрощенно, JSON — это способ обмена данными между пользовательским интерфейсом и сервисом, обрабатывающим запрос. В связи с этим, неплохо было бы знать основные принципы работы с JSON.
  2. Какой бы замечательной и полной ни была библиотека АПИ, совсем без знаний языков программирования не обойтись. Можно пользоваться и Delphi, и C++, и другими высокоуровневыми языками, но достаточно будет хороших познаний в PHP, HTML и Java.
  3. Прежде, чем начинать работу над своим проектом в Telegram, необходимо зарегистрироваться у «папы всех ботов». После процедуры @BotFather предоставит разработчику персональный токен (ключ доступа) для работы с Telegram API.

Возможности Ботов в Телеграм

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


Следующий перечень кратко описывает способности Telegram Bot:

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

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

С какой стороны ни посмотри Робот — идеальный сотрудник Интернет магазинов, они не обижаются и не хамят. Для хранения Bot-ов в Telegram предусмотрен специальный сегмент памяти, история сообщений робота хранится ограниченное время, затем безвозвратно стирается из системы.

  • Tutorial

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


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

Шаг первый: Подготовка инфраструктуры.

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

Создайте бота Telegram

Чтобы создать бота - просто напишите @BotFather (это такой бот, которые умеет создавать и настраивать другие боты):

  1. Отправьте команду /newbot - так мы сообщаем @BotFather, что нам нужен новый бот
  2. Теперь @BotFather попросит нас дать имя новому боту. Это имя будут видеть наши
    будущие пользователи, поэтому название нужно давать понятное и простое.
  3. Последним шагом укажем для бота username, в конце которого нужно обязательно
    написать “bot”.
  4. Если имя не занято, получаем сообщение с подтверждением и токен доступа.

Чтобы было понятнее - ниже скриншот со всеми действиям:

Немного теории

Пришло время создать агента API.AI, который в сущности является проектом или контейнером (как вам удобнее называть). Агент содержит настройки контекстов, сущностей и ответов:

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

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

Создайте проект в API.AI

Для регистрации в API.AI вам потребуется аккаунт Google (достаточно завести в почту в Gmail). Теперь перейдите по адресу https://api.ai/ , нажмите на кнопку “SIGN UP FOR FREE”, а за тем выберите аккаунт, от имени которого хотите авторизоваться.


Теперь переходим к созданию самого агента. Нажмите на “Create agent” и укажите как минимум Имя(Name), Язык(Language) и Часовой пояс (Time Zone).


Шаг второй: Настройте агента.

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


  1. Кликните на в разделе “Контекст” (Intents). В агенте уже настроены “контексты” на приветствие и ошибки, оставим их пока без изменений.
  2. Укажите название для “контекста” - любое, главное чтобы оно было понятно вам и вашим коллегам.
  3. В разделе “Реплики пользователя” (User Says) приведите примеры вопросов, который может ваш пользователь. Так как мы говорим о погоде, человек может задать вопрос в привязке ко времени и место - учтем это. Чем больше примеров вы предоставите в настройках, тем точнее будет работать агент. Некоторые примеры я привел на скриншоте:


В последнем примере слова “завтра” и “Нижнем Тагиле” подсвечены разными цветами - таким образом слова связываются с сущностями (Entities ) (в нашем случае сущности системные). Используя эти параметры агент “поймет” в каком городе и для какой даты нужно узнавать погоду.


Добавьте еще парочку своих примеров и нажмите “Сохранить” (SAVE).

Тестируем!

Проверим работу агента на простых вопросах, например, “Погода в Перми в среду”:



Все это время в правой верхней части экрана маячила надпись “Try it now” - напишите в это поле или произнесите простой вопрос о погоде и нажмите “Ввод”.


Мы еще не настраивали автоматический ответ, но некоторые параметры агент уже научился определять! В разделе INTENT отражено, что по “мнению” агента пользователь интересуется погодой (настроенный нами “контекст”), в PARAMETER - дату и название города в соответствующих переменных.

Добавьте автоматические ответы

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


Перейдите в раздел “ Ответы” (Response) и введите простые ответы аналогично тому, как вы заполняли “Реплики пользователя”:



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


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


Сохраните настройки и протестируйте еще раз:



Теперь у нас есть еще и ответ!

Шаг третий: Добавьте внешний сервис.

Наш агент уже “понимает” в каких случая пользователь хочет узнать погоду, на какое число и в каком городе. Теперь осталось получить эти данные из подходящего сервиса и передать агенту. Для этого вам нужно написать парочку скриптов на JS и разместить их в облачном сервисе, в нашем случае - Google Cloud Project.

Создайте стартовый JS файл

Для начала, создайте и перейдите в директорию с именем вашего проекта:

    Linux или Mac OS X:


    mkdir ~/
    cd ~/


    mkdir %HOMEPATH%
    cd %HOMEPATH%

Теперь создайте файл index.js со следующим содержанием:


Код index.js

/* * HTTP Cloud Function. * * @param {Object} req Cloud Function request context. * @param {Object} res Cloud Function response context. */ exports.itsm365Weather = function itsm365Weather (req, res) { response = "This is a sample response from your webhook!" //Default response from the webhook to show it"s working res.setHeader("Content-Type", "application/json"); //Requires application/json MIME type res.send(JSON.stringify({ "speech": response, "displayText": response //"speech" is the spoken version of the response, "displayText" is the visual version }));

Настройте Google Cloud Project

  • Выполните настройки “Before you
    begin” с 1 по 5 пункты
  • Разверните функцию в облаке выполнив в консоли:


    gcloud beta functions deploy itsm365Weather --stage-bucket --trigger-http

где, itsm365Weather - название функции, а - наименование хранилища
данных для проекта.


После завершения операции вы увидите результат с URL http триггера:


Включите Webhook в API.AI

  1. Убедитесь, что находитесь в нужном агенте, а затем кликните “Fulfillment ” в левом скрывающемся меню.
  2. Включите использование Webhook в правой верхней части экрана.
  3. Введите URL, полученный на предыдущем этапе.
  4. Сохраните изменения.

Подключите исполнение новой функции в настройках “контекста”

  1. Перейдите в настройки “контекста” прогноза погоды
  2. Разверните блок Fulfillment в нижней части страницы
  3. Отметьте галочкой “Использовать Webhook”
  4. Сохраните настройки и проверьте результат:

Настройте API для получения погоды

Для простоты, воспользуемся сервисом WWO (World Weather Online), в котором вам нужно получить ключ API (просто зарегистрируйтесь через Facebook или Github).


Обновите код стартового JS файла, не забыв ввести ключ API для получения информации о погоде:


Исходный код сервиса для получения прогноза погоды

// Copyright 2017, Google, Inc. // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. "use strict"; const http = require("http"); const host = "api.worldweatheronline.com"; const wwoApiKey = "98cfb8e40ecc47c4a2f205209172608"; exports.itsm365Weather = (req, res) => { // Get the city and date from the request let city = req.body.result.parameters["geo-city"]; // city is a required param // Get the date for the weather forecast (if present) let date = ""; if (req.body.result.parameters["date"]) { date = req.body.result.parameters["date"]; console.log("Date: " + date); } // Call the weather API callWeatherApi(city, date).then((output) => { // Return the results of the weather API to API.AI res.setHeader("Content-Type", "application/json"); res.send(JSON.stringify({ "speech": output, "displayText": output })); }).catch((error) => { // If there is an error let the user know res.setHeader("Content-Type", "application/json"); res.send(JSON.stringify({ "speech": error, "displayText": error })); }); }; function callWeatherApi (city, date) { return new Promise((resolve, reject) => { // Create the path for the HTTP request to get the weather let path = "/premium/v1/weather.ashx?format=json&num_of_days=1" + "&q=" + encodeURIComponent(city) + "&key=" + wwoApiKey + "&date=" + date + "&lang=ru"; console.log("API Request: " + host + path); // Make the HTTP request to get the weather http.get({host: host, path: path}, (res) => { let body = ""; // var to store the response chunks res.on("data", (d) => { body += d; }); // store each response chunk res.on("end", () => { // After all the data has been received parse the JSON for desired data let response = JSON.parse(body); let forecast = response["data"]["weather"]; let location = response["data"]["request"]; let conditions = response["data"]["current_condition"]; let currentConditions = conditions["lang_ru"]["value"]; // Create response let output = `На ${forecast["date"]} в ${location["query"]} ${currentConditions}, температура воздуха от ${forecast["mintempC"]}°C до ${forecast["maxtempC"]}°C.`; // Resolve the promise with the output text console.log(output); resolve(output); }); res.on("error", (error) => { reject(error); }); }); }); }


Заново разверните функцию в облачном проекте.

Шаг четвертый: настройка ветвей диалога

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

Сделайте “расположение” обязательным параметром


Откройте настройки контекста “Прогноз погоды” и укажите параметр geo-city обязательным к заполнению. Затем настройте уточняющий вопрос по ссылке в колонке “Prompts”.


Сохраните настройки и проверьте поведение агента, задав ему простой вопрос “погода”:



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

Создайте возвращаемое уточнение для расположения

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



В настройка контекста “прогноз погоды” вбейте в поле “Add output context” название возвращаемого уточнения “location” и сохраните настройки.

Создайте новый контекст для уточнения

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


  1. Создайте новый контекст в разделе Intents или кликните по значку в строке
    Intents левого выдвигающегося меню.
  2. Назовите новый контекст “Уточнение погоды” (или любое другое понятное вам название).
  3. Установите входящие и исходящие уточнения как “location”
  4. Добавьте реплики пользователя, например, “Что на счет завтра”
  5. Добавьте параметр сущности со следующими значениями:
    - Parameter Name:
    geo-city
    - Value: #location.geo-city
  6. Добавьте ответ для пользователя в раздел “Response ”:
    - “Извини, но я не могу получить прогноз на $date-period в #location.geo-city”
  7. Включите использование webhook в меню Fulfillment .
  8. Сохраните настройки и протестируйте в консоли:

Шаг пятый: Приветствие и обработка непредвиденных ситуаций

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

Настройте ответы “по умолчанию” для непредвиденных ситуаций

Если пользовать задаст непредвиденный вопрос (в нашем случае - не о погоде) агент включит в работу контекст для обработки непредвиденных ситуаций (Default Fallback Intent ):



Перейдите в настройке этого контекста, при необходимости настройте свои варианты ответов.

Настройте контекст приветствия

Приветствие можно настроить аналогичным способом в соответствующем контенте -
Default Welcome Intent


Шаг шестой: запустите бота

Подключите Telegram бота к агенту

Перейдите в настройки “Интеграций” (Integrations) и включите бота в разделе
“One-click integrations”:



Скопируйте в поле “Telegram token” токен, который вы получили у @botFather и
нажмите на START.

Проверьте работу бота

Перейдите в своего бота и попробуйте ему что-нибудь написать, в моем случае это
@itsm365_weather_bot (я пользовался бесплатными аккаунтами погоды, поэтому после 500 запросов в день бот превратится в тыкву).


Заключение

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


P.S. Этой мой первый пост, буду признателен за конструктивную обратную связь!

Теги:

  • api.ai
  • telegram
  • telegram bots
Добавить метки
  • Tutorial

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


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

Шаг первый: Подготовка инфраструктуры.

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

Создайте бота Telegram

Чтобы создать бота - просто напишите @BotFather (это такой бот, которые умеет создавать и настраивать другие боты):

  1. Отправьте команду /newbot - так мы сообщаем @BotFather, что нам нужен новый бот
  2. Теперь @BotFather попросит нас дать имя новому боту. Это имя будут видеть наши
    будущие пользователи, поэтому название нужно давать понятное и простое.
  3. Последним шагом укажем для бота username, в конце которого нужно обязательно
    написать “bot”.
  4. Если имя не занято, получаем сообщение с подтверждением и токен доступа.

Чтобы было понятнее - ниже скриншот со всеми действиям:

Немного теории

Пришло время создать агента API.AI, который в сущности является проектом или контейнером (как вам удобнее называть). Агент содержит настройки контекстов, сущностей и ответов:

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

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

Создайте проект в API.AI

Для регистрации в API.AI вам потребуется аккаунт Google (достаточно завести в почту в Gmail). Теперь перейдите по адресу https://api.ai/ , нажмите на кнопку “SIGN UP FOR FREE”, а за тем выберите аккаунт, от имени которого хотите авторизоваться.


Теперь переходим к созданию самого агента. Нажмите на “Create agent” и укажите как минимум Имя(Name), Язык(Language) и Часовой пояс (Time Zone).


Шаг второй: Настройте агента.

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


  1. Кликните на в разделе “Контекст” (Intents). В агенте уже настроены “контексты” на приветствие и ошибки, оставим их пока без изменений.
  2. Укажите название для “контекста” - любое, главное чтобы оно было понятно вам и вашим коллегам.
  3. В разделе “Реплики пользователя” (User Says) приведите примеры вопросов, который может ваш пользователь. Так как мы говорим о погоде, человек может задать вопрос в привязке ко времени и место - учтем это. Чем больше примеров вы предоставите в настройках, тем точнее будет работать агент. Некоторые примеры я привел на скриншоте:


В последнем примере слова “завтра” и “Нижнем Тагиле” подсвечены разными цветами - таким образом слова связываются с сущностями (Entities ) (в нашем случае сущности системные). Используя эти параметры агент “поймет” в каком городе и для какой даты нужно узнавать погоду.


Добавьте еще парочку своих примеров и нажмите “Сохранить” (SAVE).

Тестируем!

Проверим работу агента на простых вопросах, например, “Погода в Перми в среду”:



Все это время в правой верхней части экрана маячила надпись “Try it now” - напишите в это поле или произнесите простой вопрос о погоде и нажмите “Ввод”.


Мы еще не настраивали автоматический ответ, но некоторые параметры агент уже научился определять! В разделе INTENT отражено, что по “мнению” агента пользователь интересуется погодой (настроенный нами “контекст”), в PARAMETER - дату и название города в соответствующих переменных.

Добавьте автоматические ответы

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


Перейдите в раздел “ Ответы” (Response) и введите простые ответы аналогично тому, как вы заполняли “Реплики пользователя”:



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


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


Сохраните настройки и протестируйте еще раз:



Теперь у нас есть еще и ответ!

Шаг третий: Добавьте внешний сервис.

Наш агент уже “понимает” в каких случая пользователь хочет узнать погоду, на какое число и в каком городе. Теперь осталось получить эти данные из подходящего сервиса и передать агенту. Для этого вам нужно написать парочку скриптов на JS и разместить их в облачном сервисе, в нашем случае - Google Cloud Project.

Создайте стартовый JS файл

Для начала, создайте и перейдите в директорию с именем вашего проекта:

    Linux или Mac OS X:


    mkdir ~/
    cd ~/


    mkdir %HOMEPATH%
    cd %HOMEPATH%

Теперь создайте файл index.js со следующим содержанием:


Код index.js

/* * HTTP Cloud Function. * * @param {Object} req Cloud Function request context. * @param {Object} res Cloud Function response context. */ exports.itsm365Weather = function itsm365Weather (req, res) { response = "This is a sample response from your webhook!" //Default response from the webhook to show it"s working res.setHeader("Content-Type", "application/json"); //Requires application/json MIME type res.send(JSON.stringify({ "speech": response, "displayText": response //"speech" is the spoken version of the response, "displayText" is the visual version }));

Настройте Google Cloud Project

  • Выполните настройки “Before you
    begin” с 1 по 5 пункты
  • Разверните функцию в облаке выполнив в консоли:


    gcloud beta functions deploy itsm365Weather --stage-bucket --trigger-http

где, itsm365Weather - название функции, а - наименование хранилища
данных для проекта.


После завершения операции вы увидите результат с URL http триггера:


Включите Webhook в API.AI

  1. Убедитесь, что находитесь в нужном агенте, а затем кликните “Fulfillment ” в левом скрывающемся меню.
  2. Включите использование Webhook в правой верхней части экрана.
  3. Введите URL, полученный на предыдущем этапе.
  4. Сохраните изменения.

Подключите исполнение новой функции в настройках “контекста”

  1. Перейдите в настройки “контекста” прогноза погоды
  2. Разверните блок Fulfillment в нижней части страницы
  3. Отметьте галочкой “Использовать Webhook”
  4. Сохраните настройки и проверьте результат:

Настройте API для получения погоды

Для простоты, воспользуемся сервисом WWO (World Weather Online), в котором вам нужно получить ключ API (просто зарегистрируйтесь через Facebook или Github).


Обновите код стартового JS файла, не забыв ввести ключ API для получения информации о погоде:


Исходный код сервиса для получения прогноза погоды

// Copyright 2017, Google, Inc. // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. "use strict"; const http = require("http"); const host = "api.worldweatheronline.com"; const wwoApiKey = "98cfb8e40ecc47c4a2f205209172608"; exports.itsm365Weather = (req, res) => { // Get the city and date from the request let city = req.body.result.parameters["geo-city"]; // city is a required param // Get the date for the weather forecast (if present) let date = ""; if (req.body.result.parameters["date"]) { date = req.body.result.parameters["date"]; console.log("Date: " + date); } // Call the weather API callWeatherApi(city, date).then((output) => { // Return the results of the weather API to API.AI res.setHeader("Content-Type", "application/json"); res.send(JSON.stringify({ "speech": output, "displayText": output })); }).catch((error) => { // If there is an error let the user know res.setHeader("Content-Type", "application/json"); res.send(JSON.stringify({ "speech": error, "displayText": error })); }); }; function callWeatherApi (city, date) { return new Promise((resolve, reject) => { // Create the path for the HTTP request to get the weather let path = "/premium/v1/weather.ashx?format=json&num_of_days=1" + "&q=" + encodeURIComponent(city) + "&key=" + wwoApiKey + "&date=" + date + "&lang=ru"; console.log("API Request: " + host + path); // Make the HTTP request to get the weather http.get({host: host, path: path}, (res) => { let body = ""; // var to store the response chunks res.on("data", (d) => { body += d; }); // store each response chunk res.on("end", () => { // After all the data has been received parse the JSON for desired data let response = JSON.parse(body); let forecast = response["data"]["weather"]; let location = response["data"]["request"]; let conditions = response["data"]["current_condition"]; let currentConditions = conditions["lang_ru"]["value"]; // Create response let output = `На ${forecast["date"]} в ${location["query"]} ${currentConditions}, температура воздуха от ${forecast["mintempC"]}°C до ${forecast["maxtempC"]}°C.`; // Resolve the promise with the output text console.log(output); resolve(output); }); res.on("error", (error) => { reject(error); }); }); }); }


Заново разверните функцию в облачном проекте.

Шаг четвертый: настройка ветвей диалога

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

Сделайте “расположение” обязательным параметром


Откройте настройки контекста “Прогноз погоды” и укажите параметр geo-city обязательным к заполнению. Затем настройте уточняющий вопрос по ссылке в колонке “Prompts”.


Сохраните настройки и проверьте поведение агента, задав ему простой вопрос “погода”:



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

Создайте возвращаемое уточнение для расположения

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



В настройка контекста “прогноз погоды” вбейте в поле “Add output context” название возвращаемого уточнения “location” и сохраните настройки.

Создайте новый контекст для уточнения

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


  1. Создайте новый контекст в разделе Intents или кликните по значку в строке
    Intents левого выдвигающегося меню.
  2. Назовите новый контекст “Уточнение погоды” (или любое другое понятное вам название).
  3. Установите входящие и исходящие уточнения как “location”
  4. Добавьте реплики пользователя, например, “Что на счет завтра”
  5. Добавьте параметр сущности со следующими значениями:
    - Parameter Name:
    geo-city
    - Value: #location.geo-city
  6. Добавьте ответ для пользователя в раздел “Response ”:
    - “Извини, но я не могу получить прогноз на $date-period в #location.geo-city”
  7. Включите использование webhook в меню Fulfillment .
  8. Сохраните настройки и протестируйте в консоли:

Шаг пятый: Приветствие и обработка непредвиденных ситуаций

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

Настройте ответы “по умолчанию” для непредвиденных ситуаций

Если пользовать задаст непредвиденный вопрос (в нашем случае - не о погоде) агент включит в работу контекст для обработки непредвиденных ситуаций (Default Fallback Intent ):



Перейдите в настройке этого контекста, при необходимости настройте свои варианты ответов.

Настройте контекст приветствия

Приветствие можно настроить аналогичным способом в соответствующем контенте -
Default Welcome Intent


Шаг шестой: запустите бота

Подключите Telegram бота к агенту

Перейдите в настройки “Интеграций” (Integrations) и включите бота в разделе
“One-click integrations”:



Скопируйте в поле “Telegram token” токен, который вы получили у @botFather и
нажмите на START.

Проверьте работу бота

Перейдите в своего бота и попробуйте ему что-нибудь написать, в моем случае это
@itsm365_weather_bot (я пользовался бесплатными аккаунтами погоды, поэтому после 500 запросов в день бот превратится в тыкву).


Заключение

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


P.S. Этой мой первый пост, буду признателен за конструктивную обратную связь!

Теги: Добавить метки

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

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

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

Итак, первое, что нужно сделать, это завести бота. Для этого в списке контактов найдите @BotFather. Это специальный бот от телеграмма, он нужен для заведения ботов. Я пользуюсь в данном случае web.telegram.org, это удобно, не нужно ничего перекидывать с телефона на комп.

Найдите @BotFather, и отправьте ему три команды: /newBot (прям так напишите, как на скриншоте), и два раза укажите имя нового бота. Важно, имя бота должно заканчиваться на “bot” – таковы требования.

После этого BotFather ответит вам, что всё ОК, и вернет ключ для API, который потребуется в дальнейшем. Для экспериментов пока что можете взять мой ключ - 515479662:AAF1wTj2Xcb3HVURbc_5DbZ9qiz4ddds9iQ .

Подключение

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

После этого откройте в браузере вот такую ссылку

(для своего бота замените АПИ ключ на свой, вот так https://api.telegram.org/botAPIAPIAPIAPIAPI /getUpdates). Вы должны увидеть примерно тоже, что и на скриншоте – последнюю активность бота – кто подключился, кто что написал и т.п. Если там пусто, напишите в телеграме боту какую-нибудь чушь и обновите страницу. Ваша итоговая цель – найти chat_id

Я выделил то, что вам нужно найти. ВНИМАНИЕ – если пользуетесь моим ботом, то имейте в виду, что его мог подключить кто угодно, поэтому вы можете найти чужой chat_id – проверяйте, что тут упоминается ваш ник. А лучше заведите отдельного бота) Иначе кто угодно сможет вам писать от имени бота – API ключи-то известны всем.

Отправка сообщения

На этом шаге вы знаете API ключ и chat_id. Осталось только написать сообщение.

Соответственно, замените API, chat_id и текст сообщения на свои. Я отправляю слово PING как сообщение бота.

https://api.telegram.org/botAPIAPIAPI /sendMessage?chat_id=CHATID &text=TEXT

Ииииии… Бот присылает вам сообщение в телеграм.

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

import urllib.request urllib . request . urlopen (""" https://api.telegram.org/bot{API_TOKEN}/sendMessage?chat_id={CHAT_ID}&text={TEXT} """ . format ( API_TOKEN = "515479662:AAF1wTj2Xcb3HVURbc_5DbZ9qiz4ddds9iQ" , CHAT_ID = "303964420" , TEXT = "TEST TEST TEST" ))

Если новичок только приходит в мессенджер Телеграм, то у него сразу возникает вопрос, как пользоваться или, даже, как зарегистрироваться на сервисе. Для этого понадобится номер мобильного телефона и одно из приложений для Телеграм, которое можно будет найти и скачать на любую платформу и операционную систему по адресу: https://www.telegram.org. После того, как все это проделано, мы получаем в сети нового пользователя Телеграм и потенциального клиента наших каналов, раскручиваемых с помощью сервиса ВТопе.

Telegram.me скачать или открыть для доступа в канал

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

Telegram API на русском доступен даже для новичков

Создать свой бизнес в Телеграм сейчас не так сложно как раньше. Открытые Telegram API давно уже на русском языке и позволяют, с помощью шаблонов и конструкторов, создать свой канал ботов к нему даже не очень опытным программистам.
Самую тяжелую часть работы – накрутку подписчиков возьмет на себя сервис по накрутке ВТопе. Зачем нужны подписчики? Чем их больше, тем больше стоит рекламный пост и тем больше денег он принесет владельцу канала. Такие дела в мире Телеграм.