Случайны выбор дневника Раскрыть/свернуть полный список возможностей


Найдено 1182 сообщений
Cообщения с меткой

боты - Самое интересное в блогах

Следующие 30  »
rss_rss_hh_new

Пишем Telegram-бота на Rust, который будет запускать код на...Rust?

Вторник, 19 Апреля 2017 г. 01:35 (ссылка)

Доброй ночи! Сегодня хотелось бы кратко рассказать о том, как написать Telegram-бота на Rust, который будет запускать код на Rust. У статьи нет цели произвести полное погружение в API telegram_bot, Serde, Telegram или в нюансы разработки на Rust. Она скорее носит ознакомительный характер. Числа Пеано с помощью системы типов складывать не будем.

Превью к статье





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



Временная ссылка на бота, чтобы можно было посмотреть результат



Для начала создадим бота и получим HTTP API токен.



Заходим к этому парню и пишем следующее:



Инициируем создание нового бота: /newbot.

Ответ крёстного отца:



Alright, a new bot. How are we going to call it? Please choose a name for your bot.

`

В ответе пишем имя бота, которого хотим создать: rust.

Ответ крёстного отца:



Good. Now let's choose a username for your bot. It must end in bot. Like this, for example: TetrisBot or tetris_bot.

Следуя указаниям, вводим ещё одно имя: rustlanguage_bot.

Ответ крёстного отца:



Done! Congratulations on your new bot. You will find it at t.me/rustlanguage_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this. Use this token to access the HTTP. API: %TOKEN% For a description of the Bot API, see this page: https://core.telegram.org/bots/api

Отлично. Бот создан. %TOKEN% — это, собственно, и есть токен.



Rust Playground



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



Есть такой сервис Rust Playground, который позволяет запускать простейший Rust код онлайн. Им и воспользуемся. Располагается он по данному адресу: https://play.rust-lang.org/



Перейдя по ссылке, введём простую hello-world программу:



fn main() {
println!("Hello world!");
}


Откроем вкладку Network из DevTools, чтобы посмотреть, что и в каком формате он шлёт для получения результатов компиляции:



Rust Playground Request



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



[loomaclin@localhost ~]$ curl -X POST -d '{"code":"fn main() {\n    println!(\"Hello world!\");\n}","version":"stable","optimize":"0","test":false,"separate_output":true,"color":true,"backtrace":"0"}' https://play.rust-lang.org/evaluate.json
{"program":"Hello world!\n","rustc":"rustc 1.16.0 (30cf806ef 2017-03-10)\n"}


Отлично, поехали дальше.



Пишем бота



Создаём проект:



cargo new rust_telegram_bot --bin


Добавим следующие зависимости в Cargo.toml:



[dependencies]
telegram-bot = { git = "https://github.com/White-Oak/telegram-bot.git" }
hyper = "0.10.8"
hyper-rustls = "0.3.2"
serde_json = "0.9.10"
serde = "0.9.14"
serde_derive = "0.9.14"


Кратко опишу зачем они нужны:




  • Serde предназначена для сериализации/десериализации данных в различных форматах. В данном случае нам необходима работа с JSON (serde_json) и щепотка кодогенерации (serde_derive);




  • Hyper для работы с сетью будем использовать HTTP-клиент, который она предоставляет для взаимодействия с Rust Playground. Так как взаимодействие производится по протоколу HTTPS, ещё необходима батарейка в виде hyper-rustls;




  • ну и самое главное, для взаимодействия с Telegram API будем использовать готовую библиотеку telegram-bot, но не конкретно её, а форк товарища @white_oak, который подогнал её для работы с актуальной версией Hyper.



В src/main.rs подключим все необходимые библиотеки и модули:



extern crate telegram_bot;
extern crate hyper;
extern crate hyper_rustls;
extern crate serde_json;
extern crate serde;
#[macro_use]
extern crate serde_derive;

use serde_json::Value;
use telegram_bot::{Api, MessageType, ListeningMethod, ListeningAction};
use std::io::Read;
use hyper::client::Client;
use hyper::net::HttpsConnector;
use hyper_rustls::TlsClient;


Примечание: #[macro_use] используется для включения в область видимости текущей программы макросов из библиотеки, к которой был применён данный атрибут. use use telegram_bot::{Api, MessageType, ListeningMethod, ListeningAction}; импортируем модули из корня библиотеки для определения типа сообщения, метода "прослушки", структуры представляющей API Telegram.



Опишем с помощью enum возможные виды ответов от сервера, а их в данном случае 2, когда программа была скомпилирована успешно, и когда произошла ошибка компиляции:



#[derive(Serialize, Deserialize, Debug)]
#[serde(untagged)]
pub enum ResponseType {
ProgramCompiled { program: String, rustc: String },
ProgramCompileError { rustc: String }
}


Заметили атрибут #[serde(untagged)], который был применён к перечислению? Он говорит о том, что при (де)сериализации для вариантов перечисления не будет искаться какой-либо тэг, явно указывающий на то, каким из вариантов он является. Так как же Serde определит какой из вариантов ответа на запрос от сервера мы получили? На самом деле она будет пытаться десериализовывать в каждый из вариантов пока не дойдёт до первого успешного результата. Более подробно об этом можно почитать в официальной документации: https://serde.rs/enum-representations.html.



Определим структуру для нашего запроса в Rust Playground:



#[derive(Serialize)]
pub struct PlaygroundRequest {
code: String,
version: String,
optimize: String,
test: bool,
separate_output: bool,
color: bool,
backtrace: String
}


Из пользовательского ввода в эту структуру пойдёт только поле code. Остальное захардкодим, ибо всегда так делаем :) (нет)



В главной функции программы main создадим инстанс Telegram API и заставим его печатать всё, что пришло боту в сообщении:



fn main() {
let api = Api::from_env("TOKEN").unwrap();
println!("getMe: {:?}", api.get_me());
let mut listener = api.listener(ListeningMethod::LongPoll(None));

let res = listener.listen(|u| if let Some(m) = u.message {
let name = m.from.first_name;
match m.msg {
MessageType::Text(t) => {
println!("<{}> {}", name, t);
}
_ => {}
}
});
}


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



TOKEN=%TOKEN% cargo run


Немного разберём, что мы написали выше.



 let api = Api::from_env("TOKEN").unwrap();
println!("getMe: {:?}", api.get_me());


Здесь мы создаём инстанс структуры Api, импортированный из telegram_bot, далее создаём слушатель бота в режиме long-polling:



let mut listener = api.listener(ListeningMethod::LongPoll(None));


Под конец создаём цикл обработки сообщений при помощи функции listen и сопоставления по шаблону типа сообщения:



    let res = listener.listen(|u| if let Some(m) = u.message {
let name = m.from.first_name;
match m.msg {
MessageType::Text(t) => {
println!("<{}> {}", name, t);
}
_ => {}
}
});


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



Обрабатываем команду /rust, отправляя запрос на Rust Playground, и считываем ответ:



    if t.starts_with("/rust ") {
let program = t.split("/rust ").collect();
let mut result = String::new();
let tls = hyper_rustls::TlsClient::new();
let connector = HttpsConnector::new(tls);
let client = Client::with_connector(connector);
let playground_request = serde_json::to_string(&PlaygroundRequest {
code: program,
version: String::from("stable"),
optimize: String::from("0"),
test: false,
separate_output: true,
color: false,
backtrace: String::from("0"),
})
.unwrap();
let mut response = client
.post("https://play.rust-lang.org/evaluate.json")
.body(&playground_request)
.send()
.unwrap();
response.read_to_string(&mut result);
println!("Result : {:?}", result);
}


Мы обрабатываем запрос только лишь в случае, если сообщение начинается с определённой команды (/rust):



if t.starts_with("/rust ") {


А так же, вытаскиваем код программы, которую необходимо скомпилировать:



 let program = t.split("/rust ").collect();


Функция serde_json::to_string(&PlaygroundReques { ... }) сериализует нашу структуру запроса в строку. Остальная часть кода относится к инициализации HTTPS клиента, отправке и чтению запроса, об этом подробней можно прочесть здесь: https://hyper.rs/hyper/v0.10.7/hyper/index.html.



Обрабатываем пришедший ответ:



  let result : ResponseType = serde_json::from_str(&result)
.unwrap_or(ResponseType::ProgramCompileError {
rustc: String::from("Ответ на запрос не удалось десериализовать") });
let mut result = match result {
ResponseType::ProgramCompiled { program, .. } => {
format!("Программа скомпилированна успешно: {}",
program)
}
ResponseType::ProgramCompileError { rustc, .. } => {
format!("Ошибка компиляции программы: {}",
rustc)
}
};


Функция serde::from_str десериализует пришедший ответ в один из вариантов нашего enum. В случае, если ответ не удалось десериализовать, для упрощения мы заворачиваем это в вариант ошибки компиляции с соответствующим текстом. Далее мы формируем наше результирующее сообщение, которое будет отослано пользователю, основываясь на том, какой из вариантов enum был представлен. Возможно, вы в первый раз видите при сопоставлении по шаблону конструкцию вида { program, .. }, объясню — это игнорирование при деструктуризации полей структуры, которые нам не нужны в ходе обработки этого варианта.



Отправка результатов компиляции в чат:



    if result.len() > 500 {
result.truncate(500);
}
try!(api.send_message(m.chat.id(), result, None, None, Some(m.message_id), None));


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



Проверяем работоспособность



Чат с rust телеграм ботом



Вывод в консоль:



     Finished dev [unoptimized + debuginfo] target(s) in 2.38 secs
Running `target/debug/rust_telegram_bot`
getMe: Ok(User { id: 334562900, first_name: "rust", last_name: None, username: Some("rustlanguage_bot") })
/rust abc
Result : "{\"rustc\":\"rustc 1.16.0 (30cf806ef 2017-03-10)\\nerror: expected one of `!` or `::`, found ``\\n --> :1:1\\n |\\n1 | abc\\n | ^^^\\n\\nerror: aborting due to previous error\\n\\n\"}"
/rust fn main() { println!("Hello habrahabr!"); }
Result : "{\"program\":\"Hello habrahabr!\\n\",\"rustc\":\"rustc 1.16.0 (30cf806ef 2017-03-10)\\n\"
}"


Заключение



Думаю, на этом всё. Спасибо WhiteOak за рабочий форк telegram_bot.

Кстати, у него есть проект биндингов к QML из Rust: https://github.com/White-Oak/qml-rust. Возможно, кому-то это будет интересным.



Любая конструктивная критика приветствуется.

Репозиторий с полным кодом данного бота располагается здесь.



Чуть не забыл оставить ссылку на чат русскоговорящего сообщества Rust, где вам всегда помогут совладать с языком: https://gitter.im/ruRust/general


Original source: habrahabr.ru.

https://habrahabr.ru/post/326830/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Пишем Telegram бота на Rust, который будет запускать код на...Rust?

Вторник, 19 Апреля 2017 г. 01:35 (ссылка)

Доброй ночи! Сегодня хотелось бы кратко рассказать, о том, как написать Telegram бота на Rust, который будет запускать код на Rust. У статьи нет цели произвести полное погружение в API telegram_bot, Serde, Telegram или в нюансы разработки на Rust. Она скорее носит ознакомительный характер. Числа Пеано с помощью системы типов складывать не будем.



Превью к статье





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



Для начала создадим бота и получим HTTP API токен:



Заходим к этому парню Bot Father и пишем следующее:



Инициируем создание нового бота: /newbot.

Ответ крёстного отца:



Alright, a new bot. How are we going to call it? Please choose a name for your bot.


В ответе пишем имя бота, которого хотим создать: rust.

Ответ крёстного отца:



Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.


Следуя указаниям вводим ещё одно имя rustlanguage_bot.

Ответ крёстного отца:



Done! Congratulations on your new bot. You will find it at t.me/rustlanguage_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.

Use this token to access the HTTP API:
%TOKEN%

For a description of the Bot API, see this page: https://core.telegram.org/bots/api


Отлично. Бот создан. %TOKEN% — это собственно и есть токен.



Rust Playground



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



Есть такой сервис Rust Playground, который позволяет запускать простейший Rust код онлайн. Им и воспользуемся. Располагается он по данному адресу: https://play.rust-lang.org/



Перейдя по ссылке введём простую hello-world программу:



fn main() {
println!("Hello world!");
}


Откроем вкладку Network из DevTools, чтобы посмотреть что и в каком формате он шлёт для получения результатов компиляции:



Rust Playground Request



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



[loomaclin@localhost ~]$ curl -X POST -d '{"code":"fn main() {\n    println!(\"Hello world!\");\n}","version":"stable","optimize":"0","test":false,"separate_output":true,"color":true,"backtrace":"0"}' https://play.rust-lang.org/evaluate.json
{"program":"Hello world!\n","rustc":"rustc 1.16.0 (30cf806ef 2017-03-10)\n"}


Отлично, поехали дальше.



Пишем бота



Создаём проект.



cargo new rust_telegram_bot --bin


Добавим следующие зависимости в Cargo.toml:



[dependencies]
telegram-bot = { git = "https://github.com/White-Oak/telegram-bot.git" }
hyper = "0.10.8"
hyper-rustls = "0.3.2"
serde_json = "0.9.10"
serde = "0.9.14"
serde_derive = "0.9.14"


Кратко опишу зачем они:




  • Serde предназначенна для сериализации/десериализации данных в различных форматах. В данном случае нам необходима работа с JSON (serde_json) и щепотка кодогенерации (serde_derive);




  • Hyper для работы с сетью, будем использовать HTTP-клиент, который она предоставляет для взаимодействия с Rust Playground, так как взаимодействие производится по протоколу HTTPS ещё необходима батарейка в виде hyper-rustls;




  • ну и самое главное, для взаимодействия с Telegram API будем использовать готовую библиотеку telegram-bot, но не конкретно её, а форк товарища @white_oak, который подогнал её для работы с актуальной версией Hyper за что спасибо ему большое.



В src/main.rs подключим все необходимые библиотеки и модули:



extern crate telegram_bot;
extern crate hyper;
extern crate hyper_rustls;
extern crate serde_json;
extern crate serde;
#[macro_use]
extern crate serde_derive;

use serde_json::Value;
use telegram_bot::*;
use std::io::Read;
use hyper::client::Client;
use hyper::net::HttpsConnector;
use hyper_rustls::TlsClient;


Примечание: #[macro_use] используется для включения в область видимости текущей программы макросов из библиотеки к которой был применён данный атрибут. use telegram_bot::* импортирует все возможные модули из корня библиотеки.



Опишем с помощью enum возможные виды ответов от сервера, а их в данном случае 2, когда программа была скомпилированна успешно и когда произошла ошибка компиляции:



#[derive(Serialize, Deserialize, Debug)]
#[serde(untagged)]
pub enum ResponseType {
ProgramCompiled { program: String, rustc: String },
ProgramCompileError { rustc: String }
}


Заметили атрибут #[serde(untagged)] который был применён к перечислению? Он говорит, о том, что при (де)сериализации для вариантов перечисления не будет искаться какой-либо тэг явно указывающий на то, каким из вариантов он является. Так как же Serde определит какой из вариантов ответа на запрос от сервера мы получили? На самом деле он будет пытаться десериализовывать в каждый из вариантов пока не дойдёт до первого успешного результата. Более подробно об этом можно почитать в официальной документации: https://serde.rs/enum-representations.html.



Определим структуру структуру для нашего запроса в Rust Playground:



#[derive(Serialize)]
pub struct PlaygroundRequest {
code: String,
version: String,
optimize: String,
test: bool,
separate_output: bool,
color: bool,
backtrace: String
}


Из пользовательского ввода в эту структуру пойдёт только поле code. Остальное захардкодим ибо всегда так делаем :) (нет)



В главной функции программы main создадим инстанс Telegram API и заставим его печатать всё что пришло боту в сообщения:



fn main() {
let api = Api::from_env("TOKEN").unwrap();
println!("getMe: {:?}", api.get_me());
let mut listener = api.listener(ListeningMethod::LongPoll(None));

let res = listener.listen(|u| if let Some(m) = u.message {
let name = m.from.first_name;
match m.msg {
MessageType::Text(t) => {
println!("<{}> {}", name, t);
}
_ => {}
}
});
}


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



TOKEN=%TOKEN% cargo run


Немного разберём что мы написали выше.



 let api = Api::from_env("TOKEN").unwrap();
println!("getMe: {:?}", api.get_me());


Здесь мы создаём инстанс структуры Api импортированный из telegram_bot, далее создаём слушатель бота в режиме long-polling:



let mut listener = api.listener(ListeningMethod::LongPoll(None));


Под конец создаём цикл обработки сообщений при помощи функции listen и сопоставления по шаблону типа сообщения:



    let res = listener.listen(|u| if let Some(m) = u.message {
let name = m.from.first_name;
match m.msg {
MessageType::Text(t) => {
println!("<{}> {}", name, t);
}
_ => {}
}
});


Условимся, что код мы будем передавать только в текстовом виде, файлы и прочее исключим, для этого как

вы могли заметить все остальные вариант перечисления MessageType просто игнорируются.



Обрабатываем команду /rust отправляя запрос на Rust Playground и считываем ответ:



    if t.starts_with("/rust ") {
let program = t.split("/rust ").collect();
let mut result = String::new();
let tls = hyper_rustls::TlsClient::new();
let connector = HttpsConnector::new(tls);
let client = Client::with_connector(connector);
let playground_request = serde_json::to_string(&PlaygroundRequest {
code: program,
version: String::from("stable"),
optimize: String::from("0"),
test: false,
separate_output: true,
color: false,
backtrace: String::from("0"),
})
.unwrap();
let mut response = client
.post("https://play.rust-lang.org/evaluate.json")
.body(&playground_request)
.send()
.unwrap();
response.read_to_string(&mut result);
println!("Result : {:?}", result);
}


Мы обрабатываем запрос только лишь в случае, если сообщение начинается с определённой команды (/rust):



if t.starts_with("/rust ") {


А так же вытаскиваем код программы, которую необходимо скомпилировать:



 let program = t.split("/rust ").collect();


Функция serde_json::to_string(&PlaygroundReques { ... }) сериализует нашу структуру запроса в строку. Остальная часть кода относится к инициализации HTTPS клиента, отправки и чтения запроса, об этом подробней можно прочесть здесь: https://hyper.rs/hyper/v0.10.7/hyper/index.html.



Обрабатываем пришедший ответ



  let result : ResponseType = serde_json::from_str(&result)
.unwrap_or(ResponseType::ProgramCompileError {
rustc: String::from("Ответ на запрос не удалось десериализовать") });
let mut result = match result {
ResponseType::ProgramCompiled { program, .. } => {
format!("Программа скомпилированна успешно: {}",
program)
}
ResponseType::ProgramCompileError { rustc, .. } => {
format!("Ошибка компиляции программы: {}",
rustc)
}
};


Функция serde::from_str десериализует пришедший ответ в один из вариантов нашего enum, в случае, если ответ не удалось десериализовать для упрощения мы заворачиваем это в вариант ошибки компиляции с соответствующим текстом. Далее мы формируем наше результирующее сообщение, которое будет отослано пользователю основываясь на том, какой из вариантов enum был представлен. Возможно вы первый раз видите при сопоставлении по шаблону конструкцию вида { program, .. }, объясню, это опускание из деструктуризации полей структуры, которые нам не нужны в ходе обработки этого варианта.



Отправка результатов компиляции в чат



    if result.len() > 500 {
result.truncate(500);
}
try!(api.send_message(m.chat.id(), result, None, None, Some(m.message_id), None));


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



Проверяем работоспособность



Чат с rust телеграм ботом



Вывод в консоль:



    Finished dev [unoptimized + debuginfo] target(s) in 2.38 secs
Running `target/debug/rust_telegram_bot`
getMe: Ok(User { id: 334562900, first_name: "rust", last_name: None, username: Some("rustlanguage_bot") })
/rust abc
Result : "{\"rustc\":\"rustc 1.16.0 (30cf806ef 2017-03-10)\\nerror: expected one of `!` or `::`, found ``\\n --> :1:1\\n |\\n1 | abc\\n | ^^^\\n\\nerror: aborting due to previous error\\n\\n\"}"
/rust fn main() { println!("Hello habrahabr!"); }
Result : "{\"program\":\"Hello habrahabr!\\n\",\"rustc\":\"rustc 1.16.0 (30cf806ef 2017-03-10)\\n\"}"


Заключение



Думаю на этом всё. Спасибо WhiteOak за рабочий форк telegram_bot.

Кстати у него есть проект биндингов к QML из Rust: https://github.com/White-Oak/qml-rust возможно кому то это будет интересным. Любая конструктивная критика приветствуется.



Репозиторий с полным кодом данного бота располагается здесь.


Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/326830/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Вокруг шум. Чат-бот: пустой хайп или новая эра?

Четверг, 06 Апреля 2017 г. 13:13 (ссылка)

Мы продолжаем серию интервью с докладчиками конференции DUMP.



Хайп вокруг чат-ботов не стихает. Почему про них все говорят? Сложно ли их программировать? Как на них заработать? Есть ли шанс, что чат-боты заменят мобильные приложения? А людей? На наши вопросы ответили основатель проекта ConfBot Алексей Могильников и технический директор JetStyle, на счету которых десяток разработанных чат-ботов, Алексей Спиридонов.







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



Алексей Могильников: Лена (моя жена и кофаундер) организует IT-конференции: RailsClub, PyCon Russia, FPConf и DUMP. А у организаторов есть такие вечные темы: как сделать расписание удобным для участников; как собрать их мнение о конференции; как организовать эффективный нетворкинг?



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



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



Чат-боты стали популярной темой по очень простой причине: резкий взлет мессенджеров за последние 4 года. Сейчас в мессенджерах аудитория больше, чем в социальных сетях. И если 2,5 года назад только ленивый не смеялся над Цукербергом, купившим WhatsApp за $22 млрд, то теперь этим людям не смешно: MAU WhatsApp’a — 1,2 миллиарда человек, и счетчик продолжает тикать.



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



Хайп, связанный с чат-ботами пройдет, но чат-боты останутся. Мне кажется, мы видели уже достаточное количество хайпов, чтобы примерно предположить, что будет дальше. Прямая аналогия — хайп на мобильные приложения 5-7-летней давности. Все делали мобильные приложения. Мобильное приложение было ответом на любой вопрос. Некоторых, конечно, до сих пор не отпустило, но хайп закончился, а мобильные приложения остались. И еще очень долго будут с нами. Так же будет и с чат-ботами. Это будет еще один способ взаимодействовать с пользователями. Со своими плюсами и минусами.



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



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



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



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



— Почему про чат-ботов говорят, но мало пользуются?



Алексей Могильников: Говорят, потому что хайп :) Мало пользуются, потому что мы только в самом начале пути. Плюс, «conversational chatbots» (чат-боты, общающиеся на естественном языке) работают плохо. Интерфейсные чат-боты (боты, которые взаимодействуют с пользователем через пользовательский интерфейс: кнопки, картинки, webview и другие элементы) сильно удобней, но более-менее серьёзная платформа для интерфейсных чат-ботов есть только у Телеграма и у Фейсбук Мессенджера. Как бы мы не любили Телеграм, его MAU 170 миллионов человек, это довольно мало (сравните с WhatsApp). Фейсбук Мессенджер есть у всех, но большинство пользователей его не любят и мало пользуются. Game changer’ом будет платформа для интерфейсных чат-ботов от WhatsApp, я верю что рано или поздно она появится.



А еще, возможно, причина в том, что чат-боты все еще довольно «гиковская» тема, «обычные» пользователи еще не привыкли к ним. Но это вопрос времени.



Алексей Спиридонов: Если вам кажется, что чат-ботов мало используют, то вы просто не там смотрите. Вот, например, в Китае из 900 млн человек с установленным WeChat около 800 млн используют ботов. Для многих китайцев — это почти весь Интернет. Почти все делается через WeChat — продаются товары, дарятся подарки, записываются в поликлинику, вызывается сантехник и т.п.



Что касается России, то стоит отметить несколько моментов, в том числе доступность API популярных мессенджеров для разработчиков. Кажется, что как только WhatsApp откроет API, количество ботов увеличится, потому что у нас наиболее популярен именно WhatsApp.



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





В январе 2017 года Алексей и Елена представили бота на конкурсе Eurasia Mobile Challenge и выиграли его, обойдя 1000 других проектов



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



Алексей Могильников: Они правда нужны всем, просто не все про это еще знают :) Да и сами чат-боты не достигли еще того уровня зрелости, чтобы ими все могли пользоваться.



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



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



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



— В какой области чат-боты и мессенджеры реально смогут зарабатывать в ближайшее время?



Алексей Могильников: Тут нужно разделить: мессенджеры и чат-боты.



Мессенджеры в ближайшем будущем не будут зарабатывать серьезные деньги, да им и не надо. Механика бизнеса на продуктах с миллиардными аудиториями устроена немного по-другому. Скорее всего что-то чуть-чуть изменится, когда в мессенджеры окончательно придут платежи, и они будут сидеть на потоке денег между бизнесами и их клиентами. Ждать осталось немного, Фейсбук Мессенджер уже тестирует платежи в США. Уже год ходят слухи, что Телеграм планирует прикрутить платежи. Недавно анонсированный новый мессенджер Veon от Вымпелкома будет поддерживать платежи. В общем, караван идет, но не быстро.



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



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



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



E-commerce через чат-ботов уже сейчас довольно неплохо себя чувствует и будет чувствовать себя всё лучше и лучше. Например, чатбот для Фейсбук Мессенджера от Shopify явно взлетает.



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



Что касается мессенджеров, то вопрос сложнее. И четкого ответа у меня сейчас нет.

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



— Вы верите в то, что чат-боты убьют мобильные приложения?



Алексей Могильников: Они их не убьют, но потеснят. Мобильные приложения — это довольно тяжелая история, их нужно качать и ставить, они мозолят глаза, занимают место на телефоне. Чат-боты в этом смысле значительно легче: быстро подключился по ссылке, получил то, что тебе нужно и забыл про него. Если спамит, то просто удалил. Меньше «трения» при подключении — больше конверсия.



В целом, мобильные приложения находятся в некотором кризисе, связанном с насыщением. Есть статистика по США, что среднее число новых мобильных приложений, устанавливаемых пользователями на свои телефоны, постепенно идет к нулю. Т.е. людям уже просто не нужны новые приложения, все их основные потребности удовлетворены, а ставить новое приложение для редких или однократных задач не очень-то и хочется. Это место, в котором чат-боты потеснят мобильные приложения.



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



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



— Смогут ли в будущем чат-боты заменить живых работников?



Алексей Могильников: Да, конечно. Тут дело даже не в чат-ботах, а в том, что программное обеспечение все больше и больше позволяет избавить человечество от рутинных задач. А значит людям, которые решают эти рутинные задачи, придется искать себя в новых областях. Более интеллектуальных или тех, куда еще не добрались мы — программисты (му-ха-ха).



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



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





Один из успешных кейсов JetStyle под техническим руководством Алексея Спиридонова — бот для сети пиццерий Papa John's Pizza



— Чтобы создать чат-бота, нужно быть программистом? Какие есть сложности в разработке?



Алексей Могильников: Нет, программистом быть не обязательно. Есть конструкторы чат-ботов, которые позволяют создать чат-бот через пользовательский интерфейс, кликая мышкой. Более-менее сложных ботов, конечно, нужно программировать.



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



Алексей Спиридонов: Все зависит от того, зачем вам нужен бот. Если вам хватит простого — воспользуйтесь конструктором, они сейчас есть.



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



— Ваш прогноз: как будут развиваться чат-боты в ближайшие два года?



Алексей Могильников: Прежде всего, я полагаю, что мода на чат-боты-говорилки (conversational chatbots) пройдет. Это такие чат-боты, которые пытаются общаться с пользователем на естественном языке. И это получается у них довольно плохо в связи со сложностями распознавания пользовательского ввода. Плюс, это всё довольно неудобно. Пользователю банально удобней и быстрей нажать кнопку, чем набирать текст на экранной клавиатуре смартфона. Возможно, будущее за гибридными чат-ботами, которые распознают пользовательский ввод там, где это удобно, но все остальные задачи решают интерфейсом.



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



Добавим этот пост в закладки и через два года проверим :)



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



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



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






14 апреля на конференции DUMP Алексей Могильников на простом примере покажет, как написать интересного чат-бота. Пример будет на Ruby, но чат-боты — это история, в которой язык имеет ещё меньшее значение, чем обычно. Так что, даже если вы не рубист, то всё равно будет понятно и полезно. Готовьте вопросы и приходите слушать.



Спасибо нашим спонсорам: генеральному спонсору — компании E-Soft, партнёрам конференции — СКБ Контур, Naumen, Сбербанк-Технологии.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/325812/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Как подружить Telegram-бота с телефонией

Вторник, 04 Апреля 2017 г. 15:29 (ссылка)





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



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





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



Итак, для моего рецепта вам понадобятся UIS, IFTTT и аккаунт в Telegram. Задачу решаем в 4 этапа:




  1. Настройка в IFTTT коннектора Maker для HTTP уведомлений

  2. Настройка в IFTTT коннектора к Telegram

  3. Настройка уведомлений в UIS

  4. Финальная настройка интеграции



Настройка в IFTTT коннектора Maker для HTTP уведомлений



Вводим в строке поиска в IFTTT «Maker» и кликаем на нужный нам сервис — Maker.







Нас перенаправило на страницу коннектора Maker и теперь его необходимо настроить. Для этого заходим в раздел Настройки (Settings).







Первым делом необходимо подключить сервис Maker: для этого нажимаем Connect.







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







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







Настройка в IFTTT коннектора к Telegram



Ищем сервис Telegram среди апплетов IFTTT.







Заходим на страницу сервиса.







Заходим в Настройки (Settings) и подключаем коннектор.







После активации коннектора к вам в Telegram придет информационное сообщение от IFTTT бота. Для активации бота вам надо будет выполнить команду /start.







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



Настройка уведомлений в UIS



На этом этапе нам понадобится обновленный функционал уведомлений о событиях UIS Уведомления 2.0. Для этого мы заходим в соответствующий раздел интерфейса и нажимаем Добавить уведомление.







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







Финальная настройка интеграции



Итак, когда все компоненты подготовлены, осталось объединить их вместе. Для начала необходимо создать новый апплет — для этого необходимо нажать New Applet на странице My Applets в IFTTT.







Это действие переведет вас на страницу, где вы настраиваете связку Событие-Действие. Она настраивается в лаконичном предложении if this then that (если случится это (событие), тогда делай то (действие)). Начнем с события: нажимаем на “+this”.







Попадаем на страницу поиска сервисов, на которой ищем настроенный нами Maker.







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







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







Осталось настроить действие. Для этого нажимаем “+that”.







Выбираем уже настроенный коннектор к Telegram.







Выбираем интересующее нас действие — отправка сообщения.







Завершаем настройку, заполнив шаблон. Параметры соответствуют настроенным в шаблоне уведомления в UIS.







Подтверждаем завершение настройки.







Все, теперь при потерянных звонках вам в Telegram будет приходить такое сообщение:







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


Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/325648/

Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Всепротокольный бот на PHP за 10 минут, или как Microsoft Bot Framework и Azure Functions облегчают нам жизнь

Понедельник, 03 Апреля 2017 г. 15:11 (ссылка)

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



Введение



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







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



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



Microsoft Bot Framework



Microsoft Bot Framework был впервые представлен год назад на конференции Microsoft Build 2016. Однако, он до сих пор находится в стадии Preview, что может создать определенные трудности разного толка с использованием его в больших проектах в текущем виде. По крайней мере, я точно не могу рекомендовать использовать его в продакшн прямо сейчас.



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



Может показаться, что бот – это в принципе сложно, а с незнакомым фреймворком и подавно, но это не так. Как и заявлено в заголовке, реализация самого простого бота с Microsoft Bot Framework займет у вас не более 10-и минут. Примерно столько заняло у меня написание и отладка кода для этой статьи и вдвое больше ушло на поиск подходящего шаблона для его запуска в Azure Functions.



Почему PHP?



Я выбрал PHP для этого материала по ряду причин. Во-первых, потому что основное направление моей работы — веб-разработка, а PHP, по крайней мере в России, остается самым популярным языком в этой области. Я думал о том, что бы включить в пример и код на Python’е, но решил не усложнять и без того раздувшийся материал. Если это будет интересно, можно вынести в отдельную статью. Во-вторых, Microsoft хоть и заявляет, что с Bot Framework можно работать на PHP или Python’е, но фактически старательно игнорирует их, не даёт никакой документации или примеров, нет даже SDK. Все, что есть – это REST API и его документация. Реализация на совести разработчика, который скорее всего проигнорируют плохо документированную для его языка технологию, какой бы чудесной и простой она не была. Примеры на других языках не всегда читаются легко, особенно если они перегружены чуждыми конструкциями, вроде «async/await».



Почему Azure Functions?



Я выбрал Azure Functions, потому что это самый простой и дешевый способ для любого читателя – попробовать и поупражняться с кодом этого примера. Фактически, все, что от вас требуется для запуска полноценного бота из этого материала – это нажать кнопку «Deploy to Azure» и ввести пару параметров для приложения. Azure сам создаст и сконфигурирует необходимые ресурсы, загрузит код примера из GitHub и установит биллинг таким образом, что бы вам не пришлось платить за все время работы приложения. Вы будете оплачивать только непосредственные вызовы бота, фактически сообщения, которые он обрабатывает.



Кроме того, если вам интересна тема микросервисов с бессерверной (serverless) архитектурой и вы еще не знакомы с Azure Functions, то это станет для вас отличным поводом для знакомства. Однако, микросервисы и роль Azure Functions в них – это другая тема для другой статьи.



Реализация



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



Подготовка



И так, первое, что вам нужно сделать, это создать самого бота: https://dev.botframework.com/bots/new. Придумайте боту имя (Name), описание (Description) и альяс для именования в URL’ах (Bot handle). Учтите, что в отличии от имени и описания, альяс после создания бота изменить нельзя. Оставьте поле «Messaging endpoint» пока пустым, мы заполним его после запуска приложения.







Нажмите кнопку «Manage Microsoft App ID and password», чтобы создать идентификатор и пароль для вашего приложения. ID и пароль нужны для авторизации приложения в качестве бота при отправке сообщений в чат, поэтому сохраните их. Нажмите кнопку «Завершить операцию и вернуться к Bot Framework».







На этом подготовительная часть почти закончена. Ознакомьтесь, подтвердите свое согласие со всеми соглашения и нажмите кнопку «Register». Если все указано верно, вы очень скоро увидите сообщение «Bot created». Номинально, ваш бот готов. Осталось научить его общаться.



Код



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

$client_id = getenv('MicrosoftAppId');
$client_secret = getenv('MicrosoftAppPassword');
$authRequestUrl = 'https://login.microsoftonline.com/common/oauth2/v2.0/token';


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

$client_id = ‘26XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX’;
$client_secret = ‘CJPXXXXXXXXXXXXXXXXXXXXXXXXXXXX’;
$authRequestUrl = 'https://login.microsoftonline.com/common/oauth2/v2.0/token';


Далее читаем тело POST-запроса с сообщением от пользователя и десериализуем его из JSON-формата в массив $deserializedRequestActivity.

$request = file_get_contents(getenv('req'));
$deserializedRequestActivity = json_decode($request, true);


В этом примере я получаю тело запроса из переменной окружения req, что преднастроено в биндингах Azure Functions. Вы можете получать тело запроса из потока php://input, если не используете Azure Functions.

$request = file_get_contents('php://input');
$deserializedRequestActivity = json_decode($request, true);


Если $deserializedRequestActivity содержит поле id, считаем входящий запрос корректным и начинаем обработку. Прежде всего нужно получить токен для авторизации ответа на сообщение. Токен можно получить через POST-запрос к oAuth сервису Microsoft. Я использую stream context для запроса только потому что его реализация выглядит нагляднее, вы можете использовать CURL.

$authRequestOptions = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query(
array(
'grant_type' => 'client_credentials',
'client_id' => $client_id, //ID приложения
'client_secret' => $client_secret, //Пароль приложения
'scope' => 'https://graph.microsoft.com/.default'
)
)
)
);


Создаем сконфигурированный выше stream context и выполняем из него запрос к oAuth сервису.

$authRequestContext  = stream_context_create($authRequestOptions);
$authResult = file_get_contents($authRequestUrl, false, $authRequestContext);


Читаем ответ на запрос и десериализуем его в массив $authData.

$authData = json_decode($authResult, true);


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

switch ((string)$deserializedRequestActivity['type']) {
case 'message':
$message = 'New message received: ' . (string)$deserializedRequestActivity['text'];
break;
default:
$message = 'Unknown type';
break;
}


Теперь, когда мы знаем, что отвечать, формируем массив $deserializedResponseActivity с данными ответа, который позже передадим в Microsoft Bot Framework.

$deserializedResponseActivity = array(

//Мы отвечаем обычным сообщением
'type' => 'message',

//Текст ответа на сообщение
'text' => $message,

//Говорим, что ответ - это простой текст
'textFormat' => 'plain',

//Устанавливаем локаль ответа
'locale' => 'ru-RU',

//Устанавливаем внутренний ID активности, в контексте которого мы находимся (берем из поля id входящего POST-запроса с сообщением)
'replyToId' => (string)$deserializedRequestActivity['id'],

//Сообщаем id и имя участника чата (берем из полей recipient->id и recipient->name входящего POST-запроса с сообщением, то есть id и name, которым было адресовано входящее сообщение)
'from' => array(
'id' => (string)$deserializedRequestActivity['recipient']['id'],
'name' => (string)$deserializedRequestActivity['recipient']['name']
),

//Устанавливаем id и имя участника чата, к которому обращаемся, он отправил нам входящее сообщение (берем из полей from->id и from->name входящего POST-запроса с сообщением)
'recipient' => array(
'id' => (string)$deserializedRequestActivity['from']['id'],
'name' => (string)$deserializedRequestActivity['from']['name']
),

//Устанавливаем id беседы, в которую мы отвечаем (берем из поля conversation->id входящего POST-запроса с сообщением)
'conversation' => array(
'id' => (string)$deserializedRequestActivity['conversation']['id']
)
);


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



https://{activity.serviceUrl}/v3/conversations/{activity.conversation.id}/activities/{activity.id}



Где activity — это входящий POST-запрос с сообщением, десериализованный ранее в массив $deserializedRequestActivity.



Пропускаем {activity.serviceUrl} через rtrim что бы исключить последний закрывающий слеш, потому что иногда он есть, а иногда его нет. Также {activity.id} необходимо пропустить через urlencode, потому что в нем встречаются специальные символы, которые ломают URL и мешают выполнить запрос.

$responseActivityRequestUrl = rtrim($deserializedRequestActivity['serviceUrl'], '/') . '/v3/conversations/' . $deserializedResponseActivity['conversation']['id'] . '/activities/' . urlencode($deserializedResponseActivity['replyToId']);


URL готов, теперь готовим POST-запрос к Microsoft Bot Connector API, в котором передадим ответ на входящее сообщение. Первым делом конфигурируем stream context. Я использую stream context для запроса только потому что его реализация выглядит нагляднее, вы можете использовать CURL.

$responseActivityRequestOptions = array(
'http' => array(
//Устанавливаем в заголовок POST-запроса данные для авторизации ответа, тип токена (token_type) и сам токен (access_token)
'header' => 'Authorization: ' . $authData['token_type'] . ' ' . $authData['access_token'] . "\r\nContent-type: application/json\r\n",
'method' => 'POST',
//В тело запроса вставляем сериализованный в JSON-формат массив с данными ответа $deserializedResponseActivity
'content' => json_encode($deserializedResponseActivity)
)
);


И сразу же его создаем и выполняем из stream context’а сконфигурированный запрос к Microsoft Bot Connector API.

$responseActivityRequestContext  = stream_context_create($responseActivityRequestOptions);
$responseActivityResult = file_get_contents($responseActivityRequestUrl, false, $responseActivityRequestContext);


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

fwrite(STDOUT, 'New message received: "' . $message . '"');


Запуск



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







Чтобы выполнить автоматическое развертывание кода в Azure, просто нажмите кнопку «Deploy to Azure», расположенную чуть выше. Мастер развертывания запросит у вас только «Microsoft App Id» и «Microsoft App Password», смело вводите те, что получили на этапе подготовки. Обязательно измените значение поля «App Name», так как указанное в шаблоне имя уже используется и развертывание закончится ошибкой, если оставить его как есть. Просто добавьте туда пару случайных цифр. Дополнительно можете выбрать существующую группу ресурсов или создать новую, если хотите. В остальном параметры лучше оставить как есть. Не забудьте ознакомиться и согласиться с условиями, затем жмите «Приобрести».







Последний штрих, нужно взять ссылку на развернувшееся приложение и воткнуть ее в поле «Messaging endpoint» созданного на этапе подготовки бота.







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







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







Слева под именем функции «messages» перейдите в меню «Разработка» и в открывшемся справа окне жмите ссылку «Get Function URL». В попапе будет ссылка следующего вида.



https://{имя_вашего_приложения}.azurewebsites.net/api/messages?code=JqXXXXXXXXXXXXXXX...



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



Копируйте ссылку, возвращайтесь в список ваших ботов на портале фреймворка, оттуда зайдите в редактирование бота и вставьте ее (или аналогичную на скрипт messages/run.php из примера, если вы не использовали Azure Functions) в поле «Messaging endpoint».







Проверка и отладка



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



Если вы развернули код из шаблона Azure Functions, то не пугайтесь, если на ваши первые сообщения ответы придут с некоторой задержкой. Это связано с режимом работы инстанса «Службы приложения». Для снижения ваших затрат на хостинг примера, в шаблоне включен так называемый «План потребления», в котором служба потребляет ресурсы по мере необходимости. Проще говоря, она запускается и масштабируется только тогда, когда в этом есть реальная необходимость. Если еще проще, служба будет в состоянии stand by до тех пор, пока ее веб-хук не дернет кто-нибудь, имеющий на это право. Если в процессе выполнения ей не хватит доступных ресурсов, она смаштабируется автоматически. Таким образом вы сэкономите часы вычисления, но обратите внимание, что это не единственный ресурс, который вы оплачиваете. После обработки вызова и по истечению некоторого времени, служба снова «уснет».



Если же вы уже отправили боту несколько сообщений и не получили от него никакого ответа, то перво-наперво посетите инстанс «Службы приложений». Там находятся журнал вызовов службы (в том числе и с данными из потока STDOUT) и инструмент для тестирования кода.







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



Подключение каналов



По умолчанию к боту будут подключены Skype и веб-чат. Дополнительно подключаются как мессенджеры вроде Telegram’а и Slack’а, так и Email или SMS каналы. Есть также REST API интерфейс Direct Line, который позволяет вам использовать свои собственные приложения-чаты или мессенджеры. Настройки всех дополнительных каналов сопровождаются подробной инструкций и как правило не вызывают никаких затруднений, поэтому не вижу смысла здесь вдаваться в детали этих процедур.



«Адреса и явки» бота из данного примера:







Заключение



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



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



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



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



Ссылки по теме







Мне интересна эта тема в констексте веб-разработки






































Проголосовал 1 человек. Воздержавшихся нет.





Мне бы хотелось увидеть цикл статей на эту тему






































Проголосовал 1 человек. Воздержавшихся нет.





Мне хочется увидеть примеры на






































Проголосовал 1 человек. Воздержавшихся нет.





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


Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/325130/

Комментарии (0)КомментироватьВ цитатник или сообщество
casinozru

Специальные программы для того, чтобы обыграть рулетку

Суббота, 01 Апреля 2017 г. 13:52 (ссылка)

casion-croupier (640x480, 52Kb)


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



Читать далее...
Метки:   Комментарии (4)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Сколько стоит DDoS построить? Подсчет стоимости DDoS-атаки

Понедельник, 27 Марта 2017 г. 10:47 (ссылка)





Распределённая атака типа «отказ в обслуживании», DDoS — очень популярный инструмент у злоумышленников. Причины, по которым киберпреступники и обычные интернет-хулиганы используют этот инструмент, самые разные. Это и нанесение вреда конкуренту, и остановка работы какой-либо системы безопасности или сервиса с требованием выкупа. Известны случаи, когда группы, организовавшие атаку такого типа, требовали у жертв по 5 биткоинов (более $5000 по текущему курсу).



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







DDoS as a service





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







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







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







Ну а сколько это стоит?





Все зависит от требований заказчика. Всего существует четыре основных фактора ценообразования.



1. Цель и ее свойства. Те, кто держат DDoS-сервисы (как странно это звучит, правда?) обычно соглашаются проводить атаки на любые типы ресурсов. Иногда за определенные цели просят больше денег — так случается обычно тогда, когда у целевого ресурса есть своя защита, более-менее надежная.



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



3. Сценарий атаки. Атаки разного уровня стоят разных денег — здесь все понятно.



4. Стоимость атаки в разных странах. Цена DDoS сервисов в разных странах может разительно отличаться. Все зависит от ЦА и ее покупательской способности.



Пример ценообразования можно видеть на скриншоте ниже.







Здесь DDoS продолжительностью в 300 секунд обойдется заказчику в 5 евро. Если продолжительность составит 10800 секунд, то цена возрастет уже до $60. Ниже показано ценообразование у какого-то русскоязычного сервиса.







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



Вот еще немного цен, тоже от русскоязычного сервиса.







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







В качестве примера ценообразования можно взять атаку с использованием «облака» + DNS усиление + SaaS усиление







Если например, взять для расчетов стоимость работы с Amazon EC2, то это где-то $0.0065. Для относительно слабой атаки может понадобиться 50 виртуальных серверов. Это обойдется киберпреступникам в $0,325 в час. Еще стоит принять во внимание дополнительные затраты (SIM-карты для регистрации аккаунта или кредитная карта). В итоге себестоимость DDoS атаки начального уровня может составлять около $4.











Работа с 1000 рабочих станций будет стоить около $7 в час. Ну а заказчику часовая DDoS-атака такого уровня обойдется в $25. То есть киберпреступники зарабатывают примерно $18 (это чистая прибыль) за час DDoS.



В целом, это средний показатель по рынку. Сейчас киберпреступники постоянно ищут способы удешевить DDoS. В основном, этот вопрос решается созданием ботнета из IoT-устройств, которые плохо защищены от взлома, так что взлом сотни тысяч «умных» девайсов — не проблема. Вероятно, с течением времени DDoS будет дешеветь, а это значит, что атак такого типа будет больше. Так что стоит заранее приготовиться к такой атаке, чтобы потом не было мучительно больно.



P.S.: Если Вы хотите заранее предусмотреть защиту от DDoS-атак или Ваш бизнес уже столкнулся с подобной атакой — даже в этом случае мы можем помочь. Если Вы закажете услугу «Защита Anti-DDoS» и укажете в письме/онлайн чате/по телефону кодовое слово «habrddos2017», то получите пожизненную скидку -20%.



P.S.S: Для юридических лиц дополнительные преимущества: финансовые и юридические гарантии, высокий гарантированный уровень доступности, постоплатная схема расчетов и многое другое.
Original source: habrahabr.ru.

https://habrahabr.ru/post/324844/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
lj_matveychev_oleg

Американские боты, «косящие» под россиян - это реальность

Воскресенье, 12 Марта 2017 г. 21:00 (ссылка)

dde0a3e64a34dc3b245f0dfccf6e0737

Я читаю украинскую группу "Антимайдан" в соц сети ВКонтакте практически с самого ее появления. Интересные статьи, интересные материалы. Количество комментариев под постами нередко переваливает за несколько сотен. И встречается в комментариях всякое. Время от времени появляются среди комментаторов такие "россияне" , которые активно поддерживают вооруженные силы Украины и одобряют бомбежки городов ЛДНР. Ко всему прочему, они восхищаются госпереворотом на Украине и призывают подобное совершить в России, а если не получится, то… отделить от России, например, Сибирь…

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


18 января 2017 года, я, как обычно, просматривал новостную ленту "Антимайдана". Мое внимание привлек один персонаж, некто "Алексей Ханин". На его страничке было указано, что он из сибирского города Барнаул, даже имелись фото реального человека. Призывал этот Алексей к вооруженному майдану в России, отделению Сибири, одобрял преступления ВСУ, говорил, что нужно вернуть Крым Украине. Это если очень коротко и мягко.

dde0a3e64a34dc3b245f0dfccf6e0737

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

dde0a3e64a34dc3b245f0dfccf6e0737

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

И вот вчера мне пришел официальный ответ из Главного управления Министерства внутренних дел Российской Федерации по г. Санкт-Петербургу и Ленинградской области. Почему именно оттуда? Потому что штаб-квартира социальной сети "ВКонтакте" находится в Питере.

Оказалось, что фото и имя принадлежат реальному барнаульцу, однако были взяты злоумышленником из его настоящей страницы в "Одноклассниках". Используя его фото и реквизиты, злочинцы создали фейковую страницу "ВКонтакте" и от имени якобы россиянина занимались тем, что распространяли в комментариях в сети ВКонтакте "правильное" мнение. Помните это: "я сама крымчанка, дочь офицера, у нас не все так однозначно, никто не хочет отделения"? И вот, как выяснили сотрудники правоохранительных органов, фейковый аккаунт был создан и администрировался из… США (скан письменного ответа МВД прилагаю).

dde0a3e64a34dc3b245f0dfccf6e0737

Нас давно предупреждали, что в сети существует тенденция, инспирированная из третьих стран, при которой создаются фейковые аки, администрируемые из этих самых третьих стран, которые под видом россиян и украинцев пытаются создавать свою повестку дня в соц сетях. Мол, посмотрите, "настоящие" граждане России за Украину, против Путина и вообще за развал государства! А еще они любят нагнетать и разжигать национальную рознь и часто используют в своем лексиконе термины типа "русня", "кацапье", "хохлы", "жиды", "хачи", "чурки" и т.д. Предупреждали нас обо всем этом давно, но теперь я убедился в этом лично. +

Алексей Новиков



http://matveychev-oleg.livejournal.com/5012792.html

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
crosetitsu

Копию Iphone 7

Суббота, 04 Марта 2017 г. 06:22 (ссылка)

bigimg (197x700, 84Kb)
LJvQBZsKztXU9fZ5um4KtPAuvdT7iVgwMEWcdv1QOhNU0RFL71z9dWm85u3Q

Комментарии (0)КомментироватьВ цитатник или сообщество
LediLana

7 лучших чат-ботов года

Пятница, 03 Марта 2017 г. 06:31 (ссылка)


3925311_chat_bot (480x360, 63Kb)Поисковый сервис для ботов ChatBottle объявил результаты выборов лучшего чат-бота. Более 15 экспертов индустрии из США, Европы и Азии подготовили 35 ботов-номинантов в ряде категорий: путешествия, продуктивность, социальное взаимодействие, электронная коммерция, развлечения и новости. Победителя определило 10-дневное пользовательское голосование.



Лучший бот для путешествий: Instalocate



Чат-бот для Facebook Messenger, который отслеживает полёты по номеру рейса и уведомляет путешественников о задержках.



Лучший бот для продуктивности: Meekan

Читать далее...
Метки:   Комментарии (1)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

[Перевод] Почему вам может пригодиться собственный Twitter-бот и как создать его за полчаса

Четверг, 16 Февраля 2017 г. 14:46 (ссылка)

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



Взять хотя бы оповещения от Twisst ISS бота, который отправляет вам сообщение каждый раз, когда Международная космическая станция (МКС) будет видна из вашего местоположения.







Или боты публичных сервисов наподобие Earthquake Robot, который отправляет твит о подземных толчках более 5 баллов по шкале Рихтера, как только они случаются.



Ну и конечно, poem.exe, робот, который постит стихотворения, а также Accidental Haiku, который ретвитит посты, случайно написанные в форме хайку.





Лично я пользуюсь ботом для развития своего аккаунта @ScottDevTweets — он лайкает и ретвитит посты на интересные мне темы.



Сообщество #100DaysOfCode высылает вам сообщение с поздравлениями, когда вы начинаете #100DaysOfCode Challenge, и еще несколько — по мере прохождения этапов.





Бот поздравляет пользователя



Он также оставляет ободрительные ответы на твиты с хэштегом #100DaysOfCode, если распознает в них негативные эмоции (например, досаду).





Бот считывает эмоции



На собеседованиях мне часто задают вопрос: «Что вам дает работа в IT сфере?» Я всегда отвечаю: «Мне нравится автоматизировать повторяющиеся задачи для экономии времени, чтобы дать себе возможность сосредоточиться на других вещах. Мне приятно осознание, что я сберег для себя какое-то время».



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



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



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



Итак, готовы начать? Тогда поехали!



Как создать Twitter-бот за полчаса



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



Но подождите засекать время. Сначала вам нужно завести несколько аккаунтов — если у вас, конечно, их еще нет.



Вам понадобится:





Шаг № 1: Настройте Twitter-приложение



Создайте новую учетную запись в Twitter или используйте уже существующую, чтобы создать новое Twitter-приложение.



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



Убедитесь, что привязали номер телефона к своей учетной записи прежде, чем нажать кнопку Create your Twitter application.







После этого вы окажетесь в разделе Application Management, где вам нужно будет запомнить свои ключи. Ваши Consumer Key (API Key) и Consumer Secret (API Secret) должны быть уже доступны.



Вам нужно будет перейти в нижнюю часть страницы и нажать на кнопку Create my access token чтобы получить Access Token и Access Token Secret. Запомните и их — при настройке бота вам понадобятся все четыре.



Шаг № 2: Настройте среду разработки



Тут я скажу одно: используйте Cloud9 — с одной из готовых сред Node.js весь процесс займет несколько минут.



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







Настройка бота



В дереве проекта удалите файлы проекта-образца: client, package.json, README.md и server.js. Они вам не понадобятся, но можете и оставить их при желании.



В новой среде Node.js c9 перейдите в терминал и введите:



git clone https://github.com/spences10/twitter-bot-bootstrap


Структура проекта



Дерево среды проекта должно выглядеть как-то так:





Node-зависимости



Перед настройкой бота нам нужно установить зависимости. Перейдем в папку проекта при помощи команды cd tw*, это переместит вас в ~/workspace/twitter-bot-bootstrap (master) $.



Из терминала введите:



npm install


Это позволит установить все зависимости, перечисленные в файле package.json. Если выдаются какие-либо ошибки, советую устанавливать зависимости из файла package.json по одной той же командой, добавляя название пакета в конце.



Вот пример зависимостей в файле package.json:



"dependencies": {
"dotenv": "^4.0.0",
"twit": "^2.2.5",
"unique-random-array": "^1.0.0",
"unirest": "^0.5.1"
}


А вот команда, чтобы установить их все:



npm install --save dotenv twit unique-random-array unirest


Если же вам выдаются сообщения-предупреждения, например, npm WARN package.json twitter-bot@1.0.0 No repository field — ничего страшного, бот это не сломает, можете не обращать внимания.



Теперь вы можете настроить бота. Введите из терминала:



npm init


Это позволит настроить файл package.json с теми деталями, какие пожелаете. Если настройки по умолчанию вас устраивают, просто нажимайте return.



Теперь нужно добавить ключи Twitter в файл .env. Просто введите их в соответствующие поля и сохраните файл.



Если не можете найти файл .env среди файлов вашего c9 проекта, значит, вам нужно включить опцию Show Hidden Files. В окне просмотра файлов перейдите в настройки и поставьте галочку возле строчки Show Hidden Files, если ее там не стоит.







Что касается SENTIMENT_KEY, вы можете получить новый API ключ по ссылке: market.mashape.com/vivekn/sentiment-3 Ключ находится в поле REQUEST EXAMPLE.



Посмотрите на гифку, перейдите по ссылке, залогиньтесь или создайте новый аккаунт в mashape, кликните на node на правой панели и выделите мышкой свой ключ. Он должен быть в том месте, где на гифке — выделенное required.







Добавьте этот ключ в .env файл вместе со всеми остальными.



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



Обратите внимание: никакие значения в .env файле не обрамляются кавычками.



CONSUMER_KEY=Fw***********P9
CONSUMER_SECRET=TD************Cq
ACCESS_TOKEN=31**************UC
ACCESS_TOKEN_SECRET=r0************S2
SENTIMENT_KEY=Gj************lF
TWITTER_USERNAME=DroidScott
TWITTER_RETWEET_RATE=5
TWITTER_FAVORITE_RATE=5


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





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



Вводя список подзапросов, обязательно оставляйте перед ним пробел. Зачем? Чтобы сцепляясь с 'node.js' запрос ' handy tip' принимал вид node.js handy tip, а не node.jshandy tip.



На этом, по идее, все. Зайдите в терминал и введите npm start. Вы должны получить вот такой output:







Проверьте учетную запись Twitter:







Шаг № 3: Настройте Heroku



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



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





Вам будет представлен дашборд приложения и инструкции для метода деплоя.







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





Heroku CLI



Сначала будем осуществлять деплой через Heroku Command Line Interface (CLI). Войдите в Heroku, используя терминал c9 (он должен быть установлен по умолчанию).



heroku login


Введите учетные данные:







cd twitter-bot-bootstrap 
git init
heroku git:remote -a your-heroku-app-name


Произведите деплой своего приложения:



git add . 
git commit -am 'make it better'
git push heroku master


Вот такой build output вы должны получить в терминале:







Теперь проверьте output командой:



heroku logs -t


Все получилось? Круто!



Настройка переменных Heroku



Теперь, когда наш бот на Heroku, необходимо добавить переменные среды для хранения Twitter-ключей. Дело в том, что файл .env, в котором они записаны, указан среди прочих в файле .gitignore, который отправляет на git команду не загружать перечисленные файлы на Heroku.



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



Все, что от вас требуется — зайти в консоль вашего приложения на Heroku, выбрать секцию Settings и добавить свои Twitter-ключи из файла .env. Затем нажмите на кнопку Reveal Config Vars и добавьте переменные с соответствующими значениями.



CONSUMER_KEY 
CONSUMER_SECRET
ACCESS_TOKEN
ACCESS_TOKEN_SECRET


Задав переменные в Heroku, перейдите в файл config.js в текущем проекте. Вам нужно будет удалить вот эту строчку:



require('dotenv').config();


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



$ git add .
$ git commit -m 'add environment variables'
$ git push heroku master


Затем вы можете проверить логи в Heroku с помощью команды



$ heroku logs -t


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



Деплой Heroku с помощью GitHub



Также вы можете осуществлять деплой своего приложения посредством подключения к GitHub и автоматически деплоиться к Heroku каждый раз, когда ваша ветка «master» обновляется на GitHub. Тут все довольно прозрачно.



Перейдите на панель Deploy на Heroku, выберите GitHub как метод развертывания, если ваш аккаунт на GitHub привязан к аккаунту Heroku, вы можете выполнить поиск в репозитории, так что если вы cкопируете этот репозиторий, то можете просто ввести twitter-bot-bootstrap и кликнуть на Search, затем нажать на кнопку Connect — и все, вы можете автоматически осуществлять деплой из GitHub.







Устранение неполадок в Heroku



Что значит «сломалось»?!







В общем, я обнаружил, что иногда worker определяется как web, что приводит к крэшу. Попробуйте изменить настройки worker вот так:



heroku ps:scale worker=0 
heroku ps:scale worker=1


Если не помогает, перейдите на вкладку Resources и поиграйтесь с настройками там. Как я выяснил, если подвигать слайдеры у web, heroku и worker, как правило, все приходит в норму. Суть в том, что вам нужно активировать Dyno worker — ошибка Error R10 (Boot timeout) случается из-за того, что система пытается использовать вместо него какой-то другой ресурс.







Вот еще одна полезная команда для Heroku:



heroku restart


По умолчанию вы можете пушить только свою основную ветку, когда работаете с веткой разработки (например, dev). Если хотите протестировать на Heroku, то можно использовать команду:



git push heroku dev:master


Полезный совет



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



$ git update-index --assume-unchanged .env


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



Заключение



Теперь ваш Twitter-бот запущен. В дальнейшем вы можете продолжать работать с ним и менять настройки.



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



Благодарности



За вдохновение я должен поблагодарить @amanhimself и его посты про создание собственного Twitter-бота.



-> Create-a-simple-twitter-bot-with-node-js

-> how-to-make-a-twitter-bot-with-nodejs

-> twitter-mctwitbot

-> awesome-twitter-bots



И другие посты о полезных Twitter-ботах:

-> www.brit.co/twitter-bots-to-follow

-> www.hongkiat.com/using-twitter-bots
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/321968/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Перспективы HR-роботов/ботов в области подбора персонала — текущие реалии, мнения и опыт экспертов

Пятница, 03 Февраля 2017 г. 10:29 (ссылка)

image

Изображение сайта vedomosti.ru



В июле 2016 года электронный бот «Связного», работающий в приложении Telegram, отобрал около 100 кандидатов из 800 в менеджеры по продажам и еще 20 кандидатов в программисты, рассказывала «Ведомостям» начальник отдела подбора и адаптации персонала «Связного» Марина Таран. В режиме онлайн он задавал кандидатам 7–9 вопросов и проводил первичный отбор, оценивая базовые компетенции соискателей. Бот не только спрашивал, но и эмоционально реагировал на ответы собеседника.



Каковы перспективы внедрения ботов в сфере подбора персонала? Описанный случай является исключением или отправной точки для повсеместного использования HR-ботов? Безусловно не все готовы к этому повороту. Более того, скептики сомневаются в реалистичности такого внедрения.



Мы пообщались с представителями российского бизнеса и попросили высказать свое отношение к этой теме.



• Какие проблемы в HR связаны с «человеческим фактором»?



• Каковы преимущества «человеческого фактора» в работе специалиста по подбору персонала?



• Надумана ли актуальность использования роботов в HR? Можно ли рассматривать это как «дань моде»?



• Какие функции HR-специалиста могли бы выполнять роботы / боты?



• Что нового смогут сделать роботы / боты для сферы подбора персонала? Стоит ли ждать прорыва в случае их успешного внедрения?



Какие проблемы в HR связаны с «человеческим фактором»?


Ольга Кочергина, руководитель практики «Высокие технологии и телеком» рекрутинговой компании «Марксман»:



На мой взгляд, основная проблема в HR, связанная с «человеческим фактором» – это субъективность оценки. Любой человек воспринимает информацию, будь то резюме кандидата или личное интервью с ним, через призму своего предыдущего позитивного или негативного опыта, системы ценностей, внутренних мотивов и целей. Есть риск того, что, например, резюме релевантного кандидата может быть не отобрано для дальнейшего общения.



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



Николай Пацков, генеральный директор «Конструктор документов FreshDoc.ru»:



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



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



Юлия Саландаева, директор по работе с персоналом ИТ-компании «Нетрика»:



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



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



Антон Нефедечев, директор по PR, ГК «ЭФКО»:



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



Кроме того, фактор «нравится/не нравится» отмести тоже не получится. HR — это не психолог и не полиграф. Его можно обмануть, но опыт в процессе работы снижает разницу между HR-ом и детектором лжи.



Надежда Массель, руководитель проектов BDO Unicon Outsourcing:



Наиболее частые проблемы, связанные с «человеческим фактором» в HR, это:




  • первичные собеседования с кандидатами;

  • ввод данных и документальное оформление кадровых событий.



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



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



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



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



Галина Токарева, HR and Events Manager в компании Appodeal:



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



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



Татьяна Рычкова, директор по персоналу банка для предпринимателей Точка (финансовая группа «Открытие»):



Часто, когда приходится обрабатывать большое количество резюме, глаз замыливается, и можно пропустить нужного кандидата. Обычно такое бывает, когда не удается задать жесткий стоп-фактор. Например, когда на вакансию пресс-секретаря откликаются с резюме секретаря салона красоты и так далее. Внимание HR от поиска «того самого» кандидата сильно отвлекают постоянные вопросы от кандидатов, вроде: «А пришло ли мое резюме?», «А когда ждать вашего звонка?». И хороший HR отвечает на такие вопросы, потому что понимает, что человеку банально страшно. Но взамен он жертвует своим временем.



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



Татьяна Белоусова, HR-директор агентства интегрированных коммуникаций Comunica:



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



Ирина Зарина, генеральный директор CEB SHL Russia&CIS:



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



Наверное, никого не удивляют порталы self-service, равный доступ к информации, это выходит за рамки HR. А вот с ситуациями принятия управленческих решений все сложнее. Например, который год мы проводим исследования на предмет самого популярного инструмента оценки/диагностики кандидатов, как обычно выигрывает интервью, как якобы самый не затратный способ сбора информации. Из нашего опыта, даже при наличии стандартных вопросов и критериев оценки исход зависит от установок интервьюера, может сработать эффект ореола (слышал о кандидате как о профессионале, либо он произвёл впечатление за счет презентационных навыков).



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



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



Каковы преимущества «человеческого фактора» в работе специалиста по подбору персонала?


Ольга Кочергина, руководитель практики «Высокие технологии и телеком» рекрутинговой компании «Марксман»:



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



Татьяна Золотарева, вице-президент по персоналу ИТ-компании «Техносерв»:



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



Кроме того, предлагаю быть реалистами. Пока на российском рынке нет роботов/ботов, которые могут полноценно:




  • управлять комфортными коммуникациями двух людей (реального соискателя и его будущего руководителя) на собеседовании;

  • ответить на все вопросы соискателя, включая самые «нетиповые» и «неожиданные» (пока компьютер не может пройти тест Тьюринга);

  • соотносить привычки и/или ожидания человека с уже сформированной корпоративной культурой будущего работодателя;

  • прочитать истинный смысл «между строк»;

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



Государство, в свою очередь, тоже не стоит в стороне от «человеческого фактора» и относительно недавно Министерство труда и социальной защиты РФ утвердили профессиональный стандарт «Специалиста по управлению персоналом» (приказ №691н от 6 октября 2015 года, зарегистрирован в Минюсте России 19.10.2015 №39362).



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



Николай Пацков, «Конструктор документов FreshDoc.ru»:



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



Надежда Массель, BDO Unicon Outsourcing:



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



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



Татьяна Рычкова, финансовая группа «Открытие»:



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



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



В конце концов, HR — лицо компании, ему нужно установить личностный контакт, воодушевить кандидата, «продать» вакансию.



Татьяна Белоусова, HR-директор агентства интегрированных коммуникаций Comunica:



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



Кроме того, хорошо проведённое личное интервью может повысить лояльность кандидата компании. Ведь собеседование — это «смотрины» и компании тоже. Нормальные кандидаты не будут обсуждать тонкие и деликатные моменты вроде увольнения с предыдущего места с окошком мессенджера. Просто представьте, что вам нужно переманить у конкурентов ценного руководителя — неужели вы доверите это роботу?



Ирина Зарина, CEB SHL Russia&CIS:



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



Константин Тютюнов, Русская Школа Управления, эксперт в области управления персоналом и автоматизации бизнес-процессов:



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



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



Надумана ли актуальность использования роботов в HR? Можно ли рассматривать это как «дань моде»?


Ольга Кочергина, «Марксман»:



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



Кроме того, пока что я не встречала программ, которые по скупо заполненному профилю кандидата в Linked in или другой профессиональной сети поймут, чем действительно занимается кандидат. Или, например, будут знать, что в вендоре А сотрудник на позиции Technical Presale только спецификации на оборудование составляет, а в вендоре B на такой же роли Technical Presale проясняет бизнес- и техническую потребность клиента, разрабатывает архитектуру решения, привлекает, если надо, компании-партнеры, защищает финальный проект перед уровнем борд и борд-1 в компании-клиенте.



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



Татьяна Золотарева, «Техносерв»:



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



Выделю две ключевых предпосылки к этому:




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

  2. Большинство действующих рынков «уже поделены», и один из способов выхода на рынок — это предложение инновационного и технологического продукта. Именно поэтому в ближайшие пару десятков лет тема роботов будет актуальна и востребована. Интерес публики будут «подогревать» компании-создатели роботов/ботов, а также первые примеры удачного или неудачного внедрения. Уже сейчас общественность активно обсуждает выступление Вадима Кулика (заместителя председателя правления «Сбербанка»), который в рамках «Гайдаровского форума» (12.01.2017) сообщил о внедрении робота-юриста и планируемом сокращении 3 000 сотрудников, работу которых будет выполнять робот. Этот пример спровоцировал первый масштабный интерес к «человекозамещению». Правда, здесь нельзя забывать, что любая мода, в том числе и мода на роботов будет иметь свои изменяющиеся тренды. Каждый год мы будем ждать от роботов все больше и больше...



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



Юлия Саландаева, «Нетрика»:



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



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



Антон Нефедечев, ГК «ЭФКО»:



К сожалению, внедрение роботехнологий в подбор персонала становится нормальным процессом. Раньше, чтобы получить кредит, вы 30 минут собеседовались с работником банка, теперь — просто загружаете документы на сайт, через 10 минут получаете решение, через 20 — деньги на карту.



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



Галина Токарева, Appodeal:



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



Татьяна Белоусова, Comunica:



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



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



Ирина Зарина, CEB SHL Russia&CIS:



Автоматизация – это только средство. Даже большие данные не могут дать вам ответа при выработке критериев оценки. Да, вы можете проверить гипотезы, но их формулирование остается за человеком. Управленческое решение – все ещё решение человека, за автоматизированными системами — подготовка решения.



Константин Тютюнов, Русская Школа Управления:



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



Какие функции HR-специалиста могли бы выполнять роботы / боты?


Ольга Кочергина, «Марксман»:



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



Татьяна Золотарева, «Техносерв»:



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



Также можно передать роботам HR-аналитику, организацию командировок сотрудников, «пересказ» типовых тем обучения и пр. Но в нашем контексте, не идет разговор о полной передаче функций. За человеком обязательно должны остаться функции мониторинга и контроля всех процессов. Так как вне зависимости от объема и функционала передаваемых дел роботу, нельзя забывать, что в HR-отрасли высока цена любой ошибки!



Юлия Саландаева, «Нетрика»:



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



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



Галина Токарева, Appodeal:



Роботы / боты могли бы вести процесс первичной адаптации. Например, проводить VR-экскурсию по офису и знакомить с основными лицами компании, заниматься отсевом резюме, обработкой HR-статистики и составлением опросников, рассылкой типовых писем. То есть выполнять те задачи, которые появляются с четкой периодичностью и в рамках строго определенного времени.



Татьяна Белоусова, Comunica:



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



Что нового смогут сделать роботы / боты для сферы подбора персонала? Стоит ли ждать прорыва в случае их успешного внедрения?


Ольга Кочергина, «Марксман»:



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



Юлия Саландаева, директор по работе с персоналом ИТ-компании «Нетрика»:



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



Антон Нефедечев, ГК «ЭФКО»:



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



Надежда Массель, BDO Unicon Outsourcing:



С развитием данных технологий трудозатраты специалиста значительно сократятся, и если сейчас на 1 кадрового специалиста можно возложить кадровое делопроизводство по 100-500 сотрудникам в зависимости от уровня автоматизации кадровой системы и параметров кадрового профиля компании, то с внедрением технологий ввода данных число может быть увеличено до 1000-3000. При изменении требований законодательства к оформлению кадровой документации – возможны и более высокие показатели.



Татьяна Рычкова, финансовая группа «Открытие»:



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



Вместо вывода



Елена Кудрявцева, доцент департамента менеджмента НИУ ВШЭ – Санкт-Петербург:



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



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



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



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



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



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



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



Наталья Сторожева, генеральный директор Центра развития бизнеса и карьеры «Перспектива»:



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



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



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



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



Если говорить о массовом подборе – ситуация обстоит гораздо лучше. Потому что, когда нужно рекрутировать десятки или сотни людей на однотипную позицию (например, требуется 50 каменщиков, 60 бетонщиков и 80 разнорабочих для строительства жилого комплекса) – никакой субъективной оценки не будет. По каждой вакансии выдается жесткий список требований (квалификация, гражданство, отсутствие судимости, условия работы и т.д.). По ним надо фильтровать огромное количество людей. И эту работу совершенно точно могут сделать если не роботы, то программы, с которыми работают рекрутеры. Одна такая программа способна заменить на проекте от 3 до 7 человек.



Андрей Мамонтов, преподаватель, Высшая школа экономики:



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



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



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



По поводу моды, McKinsey предсказывает, что к 2025 году цифровые инструменты подбора персонала дадут эффект в 2,7 триллиона долларов годовой прибавки к мировому ВВП.



Персонал в сервисной экономике является одной из самой затратной статьи расходов, поэтому компании давно ищут решения по оптимизации. Сейчас благодаря мобильным платформам и big data появилась реальная возможность создать системы, которые будут давать ощутимую экономию компания в области управления персоналом.
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/321070/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество

Следующие 30  »

<боты - Самое интересное в блогах

Страницы: [1] 2 3 ..
.. 10

LiveInternet.Ru Ссылки: на главную|почта|знакомства|одноклассники|фото|открытки|тесты|чат
О проекте: помощь|контакты|разместить рекламу|версия для pda