在 Yandex.Cloud 中構建 Telegram 機器人

在 Yandex.Cloud 中構建 Telegram 機器人

今天,我們將從即興材料中收集 Yandex.Cloud 電報機器人Yandex 雲功能 (或者 Yandex 函數 為簡潔起見)和 Yandex 對象存儲 (或者 對象存儲 - 為清楚起見)。 代碼將在 Node.js的. 但是,有一種情況很有趣-某個組織叫做,比方說, RossKom審查制度 (俄羅斯聯邦憲法第 29 條禁止審查),不允許俄羅斯的互聯網提供商將請求轉移到 電報 API 在以下地址: https://api.telegram.org/. 好吧,我們不會 - 不,不。 確實,在我們的包裡有所謂的。 網絡鉤子 - 在他們的幫助下,我們不會向特定地址提出請求,而只會將我們的請求作為對任何請求的回應發送給我們。 也就是說,就像在敖德薩一樣 - 我們用問題回答問題。 這就是為什麼 電報 API 不會出現在我們的代碼中。

免責聲明本文提及的任何國家組織名稱均為虛構,與現實組織名稱重合純屬偶然。

因此,我們將製作一個可以為我們提供智能思維的機器人。 就像圖片中一樣:

在 Yandex.Cloud 中構建 Telegram 機器人

你可以在行動中嘗試 - 這是名字: @SmartThoughtsBot. 注意按鈕 《愛麗絲的技能》? 這是因為該機器人是同名機器人的一種“夥伴” 愛麗絲的技能, IE。 它執行與以下相同的功能 愛麗絲的技能 而且,也許,他們可以和平共處,互相宣傳。 關於創作方法 聰明的思維技巧 文章中描述的 愛麗絲獲得技能. 現在(在上述文章發表後進行了一些更改之後)在智能手機上 技能 看起來像這樣:

在 Yandex.Cloud 中構建 Telegram 機器人

創建一個機器人

我希望本教程對每個人都有用,包括。 和初學者“機器人建設者”。 因此,在本節中,我將詳細描述如何創建 Telegram'電子機器人。 對於那些不需要此信息的人,請繼續閱讀下一節。

打開應用程序 電報,我們稱所有機器人之父(他們擁有像人一樣的一切)- @機器人之父 - 首先,我們將給他 /help 命令以刷新我們對我們可以做什麼的記憶。 現在我們對團隊感興趣 / newbot.

在 Yandex.Cloud 中構建 Telegram 機器人

由於此處描述的機器人已經創建,出於演示目的,我將在短時間內創建另一個機器人(然後我將刪除它)。 我會打電話給他 演示HabrBot. 名稱 (用戶名) 所有電報機器人必須以一個詞結尾 BOT例如: 我的CoolBot我的酷機器人 這是給機器人的。 但首先,給機器人一個名字(名稱) 是為了人。 名稱可以是任何語言,包含空格,不必以單詞結尾 BOT,甚至不必是唯一的。 在這個例子中,我稱這個機器人 演示哈布爾.

在 Yandex.Cloud 中構建 Telegram 機器人

現在為機器人選擇一個名稱(用戶名,用於機器人的那個)。 讓我們稱之為 演示HabrBot. 與機器人名稱相關的所有內容(名稱) 與他的名字完全無關 - 用戶名 (或適用,但恰恰相反)。 成功創建一個唯一的機器人名稱後,我們需要復制並保存(絕對保密!)屏幕截圖中用紅色箭頭顯示的標記。 在它的幫助下,我們稍後將安裝傳出的 Telegram'我們的網絡掛鉤 Yandex 函數.

在 Yandex.Cloud 中構建 Telegram 機器人

現在我們將向所有機器人之父發出命令: /我的機器人它將向我們顯示我們創建的所有機器人的列表。 讓我們暫時不理會剛出爐的機器人 演示哈布爾 (創建它是為了展示如何創建機器人,但我們今天將把它用於其他演示目的),並考慮機器人 聰明的想法 (@SmartThoughtsBot). 單擊機器人列表中帶有其名稱的按鈕。

在 Yandex.Cloud 中構建 Telegram 機器人

這是我們可以設置我們的機器人的地方。 按下按鈕 編輯… 我們將繼續編輯一個或另一個選項。 例如,通過點擊按鈕 編輯名稱 我們可以更改機器人的名稱,而不是 聰明的想法, 寫 瘋狂的想法. 機器人圖片 - 這是機器人的頭像,必須至少是 150 x 150 px. 產品描述 是用戶在首次啟動機器人時看到的簡短描述,作為問題的答案: 這個機器人能做什麼? 關於我們 - 更短的描述,通過指向機器人的鏈接傳輸(https://t.me/SmartThoughtsBot) 或查看有關它的信息時。

在 Yandex.Cloud 中構建 Telegram 機器人

我們只需要設置命令。 為此,請按下按鈕 編輯命令. 規範用戶行為 Telegram 建議始終使用兩個命令: /開始 и /救命,如果機器人需要設置 - 一個額外的 /settings 命令。 我們的機器人就像一個球一樣簡單,所以它還不需要任何設置。 我們編寫前兩個命令,然後我們將在代碼中對其進行處理。 現在,如果用戶在輸入字段中輸入斜杠 (slash : /),將出現一個命令列表供他們快速選擇。 一切都如圖所示:左邊-我們通過機器人父親設置命令; 在右側,我們的機器人中的用戶已經可以使用這些命令。

在 Yandex.Cloud 中構建 Telegram 機器人

Yandex 函數

現在我們的機器人已經創建好了,讓我們去 Yandex.Cloud創建一個函數來執行我們的機器人代碼。 如果你沒有與 Yandex.Cloud 閱讀材料 愛麗絲在 Bitrix 的土地, 接著 - Yandex 功能發送郵件. 我幾乎可以肯定,這兩篇相對較小的文章足以讓您對該主題有一個基本的了解。

所以在控制台 Yandex.Clouds 在左側導航菜單中,選擇項目 雲功能, 然後按下按鈕 創建函數. 我們給它一個名字,並為我們自己 - 一個簡短的描述。

在 Yandex.Cloud 中構建 Telegram 機器人

點擊按鈕後 創建 幾秒鐘後,新功能將出現在所有功能列表中。 點擊她的名字 - 這將帶我們到頁面 Обзор 我們的功能。 這裡需要開啟On) 轉變 公共職能使其從外部可用(對於 Yandex.Clouds) 的世界,以及字段的值 通話鏈接 и 標識符 - 對除了你自己和 Telegram 之外的所有人保密,這樣各種騙子就無法調用你的函數。

在 Yandex.Cloud 中構建 Telegram 機器人

現在使用左側菜單轉到 編者 功能。 讓我們暫時擱置我們的 聰明的想法,並創建一個最小的模板函數來檢查我們的機器人的性能......但是,在這種情況下,這個函數就是我們的機器人......簡而言之,現在就在這裡我們將製作最簡單的機器人,它將“鏡像”(即發回 ) 用戶請求。 在創建新的電報機器人時始終可以使用此模板,以確保與 電報'om 工作正常。 點擊 創建文件, 叫它 index.js, 和在線 代碼編輯器 將以下代碼粘貼到此文件中:

module.exports.bot = async (event) => {
  
  const body = JSON.parse(event.body);

  const msg = {
    'method': 'sendMessage',
    'chat_id': body.message.chat.id,
    'text': body.message.text
  };

  return {
    'statusCode': 200,
    'headers': {
      'Content-Type': 'application/json'
    },
    'body': JSON.stringify(msg),
    'isBase64Encoded': false
  };
};

在 Yandex.Cloud 控制台中,它應該看起來像這樣:

在 Yandex.Cloud 中構建 Telegram 機器人

下面,我們指出 入口點 - 索引.bot哪裡 指數 這是文件名(index.js),和 BOT - 函數名稱 (模塊.exports.bot). 將所有其他字段保持“原樣”,然後單擊右上角的按鈕 創建版本. 幾秒鐘後,將創建此版本的函數。 測試後不久 網鉤,我們將創建一個新版本 - 聰明的想法.

在 Yandex.Cloud 中構建 Telegram 機器人

對象存儲

現在我們已經設置好了 Yandex 函數讓我們在控制台中開始吧 Yandex.Clouds,創造一個所謂的。 桶 (, IE。 俄語中的桶,絕不是花束)用於存儲將在我們的機器人中使用的圖像文件 聰明的想法. 從左側導航菜單中選擇 對象存儲, 按下按鈕 創建桶,給它起個名字,例如, img 桶,而且,最重要的是, 對對象的讀取權限 公開 - 否則 Telegram 將看不到我們的圖片。 所有其他字段保持不變。 我們按下按鈕 創建桶.

在 Yandex.Cloud 中構建 Telegram 機器人

之後,所有存儲桶的列表可能如下所示(如果這是您唯一的存儲桶):

在 Yandex.Cloud 中構建 Telegram 機器人

現在我建議點擊桶的名字,在裡面創建一個文件夾,用來組織不同應用的圖片存儲。 例如,對於電報機器人 聰明的想法 我創建了一個名為 tg-bot-智能想法 (沒什麼,我會理解這個密碼)。 也創造一個。

在 Yandex.Cloud 中構建 Telegram 機器人

現在您可以單擊文件夾名稱,進入並上傳文件:

在 Yandex.Cloud 中構建 Telegram 機器人

然後點擊文件名 - 得到它 網址 用於我們的機器人,一般來說 - 任何地方(但是,不要發布這個 網址 不必要的,因為流量來自 對象存儲 帶電)。

在 Yandex.Cloud 中構建 Telegram 機器人

事實上,這就是全部 對象存儲. 現在,當您看到在那裡上傳文件的提示時,您將知道該怎麼做。

網鉤

現在我們將安裝 網鉤 - IE。 當機器人從服務器收到更新(例如,來自用戶的消息)時 Telegram 進入我們的 Yandex 函數 請求將被發送請求) 與數據。 這是一個字符串,您可以簡單地將其粘貼到瀏覽器的地址字段中,然後刷新頁面(這只需要完成一次): https://api.telegram.org/bot{bot_token}/setWebHook?url={webhook_url}
只需更換 {機器人令牌} 到我們在創建我們的機器人時從父親機器人那裡收到的令牌,以及 {webhook_url} - 上 網址 我們的 Yandex 函數. 等一下! 但 RossKom審查制度 禁止俄羅斯聯邦的供應商提供地址 https://api.telegram.org. 恩,那就對了。 但是你可以想一想。 畢竟,例如,您可以在烏克蘭、以色列或加拿大詢問您的祖母 - 那裡沒有“俄羅斯審查制度”,只有上帝知道沒有它的人如何生活。 因此,安裝 webhook 時的請求-響應應如下所示:

在 Yandex.Cloud 中構建 Telegram 機器人

測試。 應該鏡像。

在 Yandex.Cloud 中構建 Telegram 機器人

這是真實的。 我們的祝賀 - 現在 Yandex 函數 已成為 Telegram-機器人!

聰明的想法

現在我們做 Smart Thoughts。 代碼是開放的,並且位於 GitHub上. 評論很好,而且只有一百行。 像歌劇女主角一樣閱讀它!

在 Yandex.Cloud 中構建 Telegram 機器人

克隆項目並安裝依賴項:

git clone https://github.com/stmike/tg-bot-smart-thoughts.git
cd tg-bot-smart-thoughts
npm i

對文件進行所需的更改 index.js (可選;您不能更改任何內容)。 創造 拉鍊-archive,帶文件 index.js 和文件夾 node_modules 裡面,例如,叫做 智能.zip.

在 Yandex.Cloud 中構建 Telegram 機器人

現在進入我們的控制台 Yandex 函數, 選擇標籤 壓縮包, 按下按鈕 選擇一個文件並下載我們的檔案 智能.zip. 最後,在右上角,點擊按鈕 創建版本.

在 Yandex.Cloud 中構建 Telegram 機器人

幾秒鐘後,當功能更新時,我們將再次測試我們的機器人。 現在他不再“照鏡子”,而是傳遞智慧思想!

在 Yandex.Cloud 中構建 Telegram 機器人

今天就到此為止。 其他文章如下。 如果您有興趣閱讀本文,請訂閱新文章的通知。 您可以在這裡訂閱或 Telegram-渠道 IT 教程扎哈爾Twitter @邁克扎哈羅夫.

引用

GitHub 上的代碼
Yandex 雲功能
Yandex 對象存儲
機器人:開發人員簡介
電報Bot API

捐款

在 Yandex.Cloud 中構建 Telegram 機器人

來源: www.habr.com

添加評論