بذارید موضوع رو اینجوری مطرح کنم. فرض کنید عکسی در سایت خودتون قرار دادید و میخواید هر زمان که کسی روی عکس کلیک کرد یا اینکه عکس لود شد، در تلگرام برای شما یک پیغام ارسال شود. یا مثلا کدتون رو روی سرور قرار دادید تا اجرا بشه و میخواید میزان پیشرفت کار در تلگرام برای شما ارسال بشه. اینجا هدف اینه که از تلگرام استفاده کنیم و کاری با روش های مشابه نداریم.روش کار خیلی ساده است. اولین کاری که باید انجام بدید اینه که در ربات @BotFather یک ربات جدید ایجاد کنید. حالا API Token رباتی که ساختید رو به جای [TOKEN] در لینک زیر قرار بدید :https://api.telegram.org/bot[TOKEN]/sendMessage?chat_id=[ID]&text=testبه جای [ID] هم باید ID تلگرام خودتون رو قرار بدید. برای به دست آوردن ID میتونید از ربات @userinfobot در تلگرام استفاده کنید. حالا زمانی که ربات خودتون رو start بزنید و بعد لینک بالا رو در مرورگر خودتون اجرا کنید، کلمه test برای شما ارسال میشه. به همین سادگی!اما اینجا یه مشکل وجود داره! اگر مثلا سروری که کدتون رو روی اون گذاشتید اجرا بشه داخل ایران باشه، یا قندشکن کاربری که سایت شما رو باز میکنه خاموش باشه این روش دیگه جواب نمیده. برای حل این مشکل از Cloudflare استفاده می کنیم. منبع این مطلبی که الان میخوام بگم ریپازیتوری گیت هاب زیر است :https://github.com/manzoorwanijk/telegram-bot-api-worker/اما من کدی که قرار داده رو کمی تغییر دادم تا راحت تر بشه ازش استفاده کرد :

const Method = (method) => (req) => req.method.toLowerCase() === method.toLowerCase();
const Get = Method('get');
const Post = Method('post');
const Path = (regExp) => (req) => {
const url = new URL(req.url);
const path = url.pathname;
return path.match(regExp) && path.match(regExp)[0] === path; };
class Router {
constructor() {
this.routes = [];}
handle(conditions, handler) {this.routes.push({conditions,handler,});return this;}
get(url, handler) {return this.handle([Get, Path(url)], handler);}
post(url, handler) {return this.handle([Post, Path(url)], handler);}
all(handler) {return this.handler([], handler);}
route(req) {const route = this.resolve(req);if (route) {return route.handler(req);}
return new Response('No matching route found', {status: 404,statusText: 'Not found',headers: {'content-type': 'text/plain',},});}
resolve(req) {return this.routes.find((r) => {if (!r.conditions || (Array.isArray(r) && !r.conditions.length)) {return true;}
if (typeof r.conditions === 'function') {return r.conditions(req);}
return r.conditions.every((c) => c(req));});}}
async function handler({ url, ...request }) {
const response = await fetch(buildApiUrl(url), request);
const result = await response.text();
return new Response(result, request);}
function buildApiUrl(requestUrl) {
const url_regex = '^.+?\/.+\/(.+)';
const [, message] = requestUrl.match(url_regex);
return `https://api.telegram.org/bot[TOKEN]/sendMessage?chat_id=[ID]&text=${message}`;}
async function handleRequest(request) {
const r = new Router();
r.get('.*', (req) => handler(req));
r.post('.*', (req) => handler(req));
const resp = await r.route(request);
return resp;
}
addEventListener('fetch', (event) => {
event.respondWith(handleRequest(event.request));
});

تنها چیزی که در کد بالا باید تغییر بدید بخش زیر هست (خط 27) :https://api.telegram.org/bot[TOKEN]/sendMessage?chat_id=[ID]&text=حالا وارد اکانت خودتون در سایت Cloudflare بشید و از صفحه اصلی Workers رو انتخاب کنید. بر روی Create a Worker کلیک کنید تا یک Worker جدید برای شما ایجاد شود. هر چیزی که در بخش Script نوشته شده رو حذف کنید و کدی که بالاتر قرار دادم رو داخلش قرار بدید و در نهایت روی Save and Deploy کلیک کنید.حالا زمانی که روی آیکونی که در تصویر زیر مشخص کردم کلیک کنید آدرس Worker ای که ساختید رو میتونید مشاهده کنید :

مثلا برای من یه همچین چیزیه :

https://gentle-base-a3bc.vbaghi.workers.dev/

حالا فرض کنید میخوایم متن Salam Test رو ارسال کنیم. برای این کار کافیه بعد از / عبارت Salam Test رو بنویسیم :

https://gentle-base-a3bc.vbaghi.workers.dev/Salam Test

حالا میخوام چند تا مثال از کاربرد این موضوع رو بررسی کنم.مثال اول : کد پایتون زیر رو در نظر بگیرید :

import request
text = 'سلام'
url = 'https://gentle-base-a3bc.vbaghi.workers.dev/'+text
for i in range(10):
    requests.post(url)

زمانی که این کد رو اجرا کنید 10 بار کلمه سلام رو ارسال میکنه!مثال دوم : یه سایت/وبلاگی دارید و میخواید هر بار که روی عکس مورد نظر شما کلیک شد یک پیغام در تلگرام برای شما ارسال بشه. من فرض میکنم شما html و یه ذره js بلدید :)اسکریپت زیر رو در صفحه مورد نظرتون قرار بدید :

function clicked(text){
        const Http = new XMLHttpRequest();
        const url='https://gentle-base-a3bc.vbaghi.workers.dev/'+text;
        Http.open("GET", url);
        Http.send();
        Http. = (e) => {console.log(Http.responseText)}
}

این اسکریپت یک تابع به نام clicked هست که یک متن (text) رو دریافت میکنه و در تلگرام برای ما ارسال میکنه. حالا فرض کنید توی همین صفحه، عکس زیر رو هم داریم :

الان اینجا ما یه عکس به نام img.png داریم و زمانی که روی اون کلیک بشه، اولا سایت google.com باز میشه و دوما کلمه test در تلگرام برای ما ارسال میشههمین!