Полезные ссылки:
- https://t.me/MyTelegramIDworks_bot - Для того что бы получить ID пользователя в телеграмм нужно перейти по ссылке и воспользоваться ботом.
- https://t.me/BotFather - БатяБот.
- https://core.telegram.org/bots/api - Документация для Telegram ботов.
- https://t.me/elma365_BPM_expert_bot - Получившийся бот.
Для начала создаем модуль и в вкладке настройки добавляем следующие свойства.
Нажав кнопку - "Изменить форму" сооружаем следующий интерфейс.
Добавляем сценарий, он необходим нам для того что-бы зарегистрировать Telegram Webhook на который мы будем получать команды от пользователя.
HTML:
declare const console:any;
declare const window:any;
async function webhook_registration(): Promise<void> {
if(Context.data.token && Context.data.bot_address){
ViewContext.data.bool = false;
const TOKEN: string = Context.data.token;
const ADDRESS: string = Context.data.bot_address;
const res = await fetch( "https://api.telegram.org/bot"+TOKEN+"/setWebhook?url="+ADDRESS,{
method:"GET"
});
if (res.ok) {
window.alert("Вебхук зарегистрирован!");
}else{
window.alert("Что-то пошло не так =(")
}
}else{
ViewContext.data.bool = true;
}
}
Сохраняем получившуюся форму.
Переходим Управление-> Методы API и создаем там новый метод.
В сценариях добавляем следующий код ( Обратите внимание на название функции при вызове метода! У вас она может отличаться ).
HTML:
/**
* Здесь определен интерфейс Params, который описывает параметры сообщения в телеграме.
* Определен класс Telegram_bot_class для обработки входящих данных в боте в телеграме.
* Определены приватные поля TOKEN, reqwest_data, message_text, user_id, callback_query_data, message_id.
*
* @param {string} TOKEN - Токен бота в телеграме, полученный при регистрации бота.
* @param {any} reqwest_data - Данные запроса.
* @param {string} message_text - Текст сообщения.
* @param {string} user_id - ID пользователя в телеграме.
* @param {string} callback_query_data - Данные callback-запроса, если он есть.
* @param {string} message_id - ID сообщения в телеграме.
*
* @function constructor(jsonData: any) - Конструктор класса Telegram_bot_class.
* Он инициализирует поля объекта класса Telegram_bot_class на основе данных, полученных входящим запросом от телеграма.
*
* @function get_req(data: Params, method_api: string) - Эта функция отправляет POST запрос в API телеграма для редактирования или отправки сообщения.
*
* @function telegram_bot(req: FetchRequest) - Основная функция, которая вызывается при обработке запроса.
* Создает объект myInstance класса Telegram_bot_class и передает ему данные запроса.
* Возвращает объект типа HttpResponse со статусом 200.
*/
interface Params {
message_id?:string;
text: string;
reply_markup: {
inline_keyboard: { text: string; callback_data: string }[][];
};
}
class Telegram_bot_class {
private readonly TOKEN:string = Namespace.params.data.token;
private reqwest_data: any;
private message_text: string;
private user_id: string;
private callback_query_data:string = "";
private message_id: string;
constructor(jsonData: any){
// Разбираем входные данные JSON
this.reqwest_data = JSON.parse(jsonData);
try{
// Если есть аргумент callback_query, получаем нужные значения !! Существует только при нажатии кнопок inline (тех что под сообщением)
this.callback_query_data = this.reqwest_data.callback_query.data;
this.user_id = this.reqwest_data.callback_query.message.chat.id;
this.message_id = this.reqwest_data.callback_query.message.message_id;
}catch{
// Если аргумента callback_query нет, получаем значения из message !! Стандартные кнопки!
this.message_text = this.reqwest_data.message.text;
this.user_id = this.reqwest_data.message.chat.id;
}
// Ниже обрабатываем нажатие кнопок от пользователя.
if(this.message_text == "/start"){
const method = "sendMessage";
const data: Params = {
text: "Выберите причину обращения",
reply_markup: {
inline_keyboard: [
[{ text: " У меня сломался приборчик!", callback_data: "broken" }],
[{ text: " Приборчик громко гудит! ", callback_data: "buzzing" }],
[{ text: " Лопасти приборчика движутся хаотично! ", callback_data: "chaotically" }]
]
}
};
this.get_req(data,method);
}
// Обратите внимание метод использующийся ниже редактирует сообщение - editMessageText.
if(this.callback_query_data == 'buzzing'){
const method = "editMessageText";
const data: Params = {
message_id: this.message_id,
text: " Подкрутите гудильный модуль!",
reply_markup: {
inline_keyboard: [
[{ text: " Назад ", callback_data: "back" }]
]
}
};
this.get_req(data,method);
}
if(this.callback_query_data == 'broken'){
const method = "editMessageText";
const data: Params = {
message_id: this.message_id,
text: " Приборчик нужно починить!",
reply_markup: {
inline_keyboard: [
[{ text: " Назад ", callback_data: "back" }]
]
}
};
this.get_req(data,method);
}
if(this.callback_query_data == 'chaotically'){
const method = "editMessageText";
const data: Params = {
message_id: this.message_id,
text: " Хаус затмевает свет императора!",
reply_markup: {
inline_keyboard: [
[{ text: " Назад ", callback_data: "back" }]
]
}
};
this.get_req(data,method);
}
if(this.callback_query_data == 'back'){
const method = "editMessageText";
const data: Params = {
message_id: this.message_id,
text: "Выберите причину обращения",
reply_markup: {
inline_keyboard: [
[{ text: " У меня сломался приборчик!", callback_data: "broken" }],
[{ text: " Приборчик громко гудит! ", callback_data: "buzzing" }],
[{ text: " Лопасти приборчика движутся хаотично! ", callback_data: "chaotically" }]
]
}
};
this.get_req(data,method);
}
}
private get_req(data: Params, method_api: string):void {
fetch("https://api.telegram.org/bot"+this.TOKEN+"/"+method_api+"?chat_id="+this.user_id,{
method:"POST",
headers: {
'Content-Type': 'application/json'
},
body:JSON.stringify(data)
});
}
}
async function telegram_bot(req: FetchRequest): Promise<HttpResponse | void> {
const resp = new HttpResponse(200);
const myInstance = new Telegram_bot_class(req["body"]!.toString());
return resp;
}
Возвращаемся на стартовую страницу предварительно скопировав из вкладки "Методы API" адрес нашего метода.
Заполняем поля: TOKEN и Адрес (Вставляем адрес скопированный из методов API ), нажимаем кнопку Регистрация WH
Переходим в телеграмм бота и наслаждаемся =)
Ссылка: https://t.me/elma365_BPM_expert_bot
P.S
Узнав id пользователя вы можете выстраивать разное поведение бота для разных пользователей.
Простой пример сделать это
HTML:
if(this.message_text == "/start"){
if(this.user_id != "5587346171"){
const method = "sendMessage";
const data: Params = {
text: "Выберите причину обращения",
reply_markup: {
inline_keyboard: [
[{ text: " У меня сломался приборчик!", callback_data: "broken" }],
[{ text: " Приборчик громко гудит! ", callback_data: "buzzing" }],
[{ text: " Лопасти приборчика движутся хаотично! ", callback_data: "chaotically" }]
]
}
};
this.get_req(data,method);
}else{
const method = "sendMessage";
const data: Params = {
text: "Выберите причину обращения",
reply_markup: {
inline_keyboard: [
[{ text: " У меня сломался приборчик!", callback_data: "broken" }],
[{ text: " Приборчик громко гудит! ", callback_data: "buzzing" }],
[{ text: " Лопасти приборчика движутся хаотично! ", callback_data: "chaotically" }],
[{ text: " + ", callback_data: "plus" }]
]
}
};
this.get_req(data,method);
}
}