香蕉加速器官网正版
如何 在Telegram 上创建您自己的私人聊天机器人?

如何 在Telegram 上创建您自己的私人聊天机器人?

近期文章:如何设置Telegram纸飞机用户名username及其功能详解

问题描述

近几个月来,有朋友反映,他们被限制了私人聊天,无法给我发消息。有时他们会遇到双向限制。其实这种情况,你可以向官方机器人申请或者创建专属私聊。 bot,彻底解决这个问题。在向官方机器人申诉之前,我已经写了详细的申诉教程。只需点击下面的内容即可查看。这里我就不详细说了。本文的目的是:如何零成本创建自己的Telegram纸飞机 私人聊天机器人。

在Telegram电报 上创建您自己的私人聊天机器人。以下是详细步骤:

首先申请Bot API Token

1.向官方@BotFather申请机器人并获取Bot API Token。此API Token 将在以下两种方法中使用。

如何 在Telegram 上创建您自己的私人聊天机器人? - 第1张telegram a href=httpstmeBotFather target=blank rel=noopener nofollow title=BotFathera 为机器人申请获得Bot API Token 关注,截图中的HTTP API就是 token,不要泄露给任何人2. 发送/setjoingroups 阻止此Bot 通过以下方式添加到群组其他人,发送/setjoingroups 选择您的机器人并发送禁用。

Telegram 如何创建属于自己的私聊BotTelegram电报 如何创建您自己的私人聊天机器人。创建机器人后,还有一个api 令牌。接下来,使用以下两种方法创建专属的私密聊天机器人。

方案一、使用 @LivegramBot,打造专属私密聊天机器人

1.私聊@LivegramBot,发送“/addbot”或点击“添加机器人”,

创建Telegram专属私聊 bot 创建Telegram 专属私聊机器人2,并输入申请的Bot API Token。

创建Telegram专属私聊 bot 创建Telegram中文版 专属私聊机器人LivegramBot缺点如下

1.是有广告,必须要购买才能去除2. 从技术上讲,使用此方法创建的私人聊天机器人的聊天内容可以被@LivegramBot所有者查看或存储,并且私人聊天内容的安全性和隐私性得不到保证。建议使用下面的方案,比较安全

方案二、 基于cloudflare worker 零成本实现telegram私聊机器人好处是:基于cloudflareworker,可以实现以下效果

零成本,一个js文件即可完成搭建

不需要额外域名,使用工人自己的域名即可

基于worker kv实现数据永久存储,让数据更安全

稳定,全球cdn转发

搭建方法:步骤1. 从uuidgenerator 获取随机uuid 作为秘密

创建Telegram专属私聊 bot 创建Telegram 专属私人聊天机器人步骤2. 从@sosoo 获取您的用户ID

如何 在Telegram 上创建您自己的私人聊天机器人? - 第6张telegram 获取用户ID 步骤3.登录cloudflare,点击左侧菜单中的Workers and Pages,创建worker

创建Telegram专属私聊 bot 创建Telegram 专属私密聊天机器人步骤4. 创建-> 创建Worker -> 输入名称telegrambot

创建Telegram专属私聊 bot 创建Telegram中文版 专属私密聊天机器人创建Telegram专属私聊 bot 创建Telegram客户端 专属私密聊天机器人创建Telegram专属私聊 bot 创建Telegram客户端 专属私密聊天机器人部署完成后,点击右上角【继续处理该项目】

创建Telegram专属私聊 bot 创建Telegram专属私密聊天机器人第五步.配置worker的变量,进入设置-》变量-》添加变量

创建Telegram专属私聊 bot 创建Telegram 中文频道专属私人聊天机器人,并添加ENV_BOT_TOKEN 变量,其值应用于官方机器人Bot API Token添加ENV_BOT_SECRET 变量,其值从步骤1 获得

添加ENV_ADMIN_UID 变量,值为步骤2 中获取的用户id

创建Telegram专属私聊 bot 创建Telegram中文频道 专属私密聊天机器人步骤6. 创建命名空间telegrambot 的KV 数据库

创建Telegram专属私聊 bot 创建Telegram 专属私密聊天机器人步骤7. 绑定KV 数据库。在设置- 变量中,向下滚动找到KV 命名空间绑定:telegrambot – telegrambot

创建Telegram专属私聊 bot 创建Telegram 专属私人聊天机器人步骤8. 编辑代码

创建Telegram专属私聊 bot创建Telegram专属私人聊天机器人将复制worker下面的所有代码

const TOKEN=ENV_BOT_TOKEN;

const WEBHOOK=’/端点’;

const SECRET=ENV_BOT_SECRET;

常量ADMIN_UID=ENV_ADMIN_UID;

const KV_NAMESPACE=telegrambot;

const LAST_USER_KEY=’最后用户’;

const USER_MESSAGES_KEY_PREFIX=’user_message_’;

const ADMIN_RESPONSES_KEY_PREFIX=’admin_response_’;

addEventListener(‘获取’, 事件={

const url=新URL(event.request.url);

if (url.pathname===WEBHOOK) {

event.respondWith(handleWebhook(event));

} else if (url.pathname===’/registerWebhook’) {

event.respondWith(registerWebhook(事件, url, WEBHOOK, 秘密));

} else if (url.pathname===’/unRegisterWebhook’) {

event.respondWith(unRegisterWebhook(event));

} 别的{

event.respondWith(new Response(‘此请求没有处理程序’));

}

});

异步函数handleWebhook(事件){

if (event.request.headers.get(‘X-Telegram-Bot-Api-Secret-Token’) !==SECRET) {

return new Response(‘未经授权’, { status: 403 });

}

const update=wait event.request.json();

event.waitUntil(onUpdate(更新));

返回新的响应(’好的’);

}

异步函数onUpdate(更新) {

if(更新中的“消息”){

等待onMessage(update.message);

}

}

异步函数onMessage(消息) {

const chatId=message.chat.id;

const userName=message.from.username ? `@${message.from.username}` : message.from.first_name;

if (chatId==ADMIN_UID) {

//处理管理员消息

让userChatId;

如果(消息.reply_to_message){

const returnedMessageId=message.reply_to_message.message_id;

userChatId=等待KV_NAMESPACE.get(`admin_message_${repliedMessageId}`);

if (!userChatId) {

wait sendPlainText(ADMIN_UID, ‘找不到要回复的用户消息。’);

返回;

}

} 别的{

//获取最后一个活跃用户

userChatId=等待KV_NAMESPACE.get(LAST_USER_KEY);

if (!userChatId) {

wait sendPlainText(ADMIN_UID, ‘最近没有活动的用户会话。’);

返回;

}

}

//根据管理员发送的消息类型,转发给对应的用户

让responseText=”;

如果(消息.照片){

const photo=message.photo[message.photo.length – 1];

等待sendPhoto(userChatId, photo.file_id);

responseText=`管理员发送了图片: ${photo.file_id}`;

} else if (message.sticker) {

等待sendSticker(userChatId, message.sticker.file_id);

responseText=`管理员发送了贴纸: ${message.sticker.file_id}`;

} else if (消息.语音) {

等待sendVoice(userChatId, message.voice.file_id);

responseText=`管理员发送了一条语音消息: ${message.voice.file_id}`;

} else if (消息.文档) {

等待sendDocument(userChatId, message.document.file_id);

responseText=`管理员发送了文件: ${message.document.file_id}`;

} else if (message.video) {

等待sendVideo(userChatId, message.video.file_id);

responseText=`管理员发送了视频: ${message.video.file_id}`;

} else if (消息.位置) {

等待sendLocation(userChatId, message.location.latitude, message.location.longitude);

responseText=`管理员发送了位置: 纬度${message.location.latitude},经度${message.location.longitude}`;

} 别的{

const text=消息.text || ‘收到非短信’;

等待sendPlainText(userChatId, 文本);

响应文本=文本;

}

等待KV_NAMESPACE.put(`${ADMIN_RESPONSES_KEY_PREFIX}${userChatId}`, responseText);

} 别的{

//处理用户消息

让userMessageText=”;

让响应;

如果(消息.照片){

const photo=message.photo[message.photo.length – 1];

userMessageText=`用户发送了一张图片: ${photo.file_id}`;

响应=等待sendPhoto(ADMIN_UID, photo.file_id,`来自用户${userName}的图片`);

} else if (message.sticker) {

userMessageText=`用户发送了贴纸: ${message.sticker.file_id}`;

响应=等待sendSticker(ADMIN_UID, message.sticker.file_id);

} else if (消息.语音) {

userMessageText=`用户发送了一条语音消息: ${message.voice.file_id}`;

响应=等待sendVoice(ADMIN_UID, message.voice.file_id);

} else if (消息.文档) {

userMessageText=`用户发送了一个文件: ${message.document.file_id}`;

响应=等待sendDocument(ADMIN_UID, message.document.file_id);

} else if (message.video) {

userMessageText=`用户发送了视频: ${message.video.file_id}`;

响应=等待sendVideo(ADMIN_UID, message.video.file_id);

} else if (消息.位置) {

userMessageText=`用户发送了位置: 纬度${message.location.latitude},经度${message.location.longitude}`;

响应=等待sendLocation(ADMIN_UID, message.location.latitude, message.location.longitude);

} 别的{

const text=消息.text || ‘用户发送了一条非短信’;

用户消息文本=文本;

response=wait sendPlainText(ADMIN_UID, `来自用户${userName}n${text} 的消息:`);

}

//保存管理员消息ID和用户聊天ID的映射关系

if (响应response.resultresponse.result.message_id) {

const adminMessageId=response.result.message_id;

等待KV_NAMESPACE.put(`admin_message_${adminMessageId}`, chatId.toString());

}

等待KV_NAMESPACE.put(`${USER_MESSAGES_KEY_PREFIX}${chatId}`, userMessageText);

//更新最后一个活跃用户

等待KV_NAMESPACE.put(LAST_USER_KEY, chatId.toString());

}

}

函数apiUrl(方法名) {

返回`https://api.telegram.org/bot${TOKEN}/${methodName}`;

}

异步函数sendPlainText(chatId, text) {

const 响应=等待fetch(apiUrl(‘sendMessage’), {

method: ‘POST’,

headers: { ‘Content-Type’: ‘application/json’ },

body: JSON.stringify({ chat_id: chatId, 文本})

});

返回response.json();

}

异步函数sendSticker(chatId, fileId) {

const 响应=等待fetch(apiUrl(‘sendSticker’), {

method: ‘POST’,

headers: { ‘Content-Type’: ‘application/json’ },

body: JSON.stringify({ chat_id: chatId, Sticker: fileId })

});

返回response.json();

}

异步函数sendPhoto(chatId, fileId, 标题=”) {

const 响应=等待fetch(apiUrl(‘sendPhoto’), {

method: ‘POST’,

headers: { ‘Content-Type’: ‘application/json’ },

body: JSON.stringify({ chat_id: chatId, photo: fileId, 标题})

});

返回response.json();

}

异步函数sendVoice(chatId, fileId) {

const 响应=等待fetch(apiUrl(‘sendVoice’), {

method: ‘POST’,

headers: { ‘Content-Type’: ‘application/json’ },

body: JSON.stringify({ chat_id: chatId, voice: fileId })

});

返回response.json();

}

异步函数sendDocument(chatId, fileId) {

const 响应=等待fetch(apiUrl(‘sendDocument’), {

method: ‘POST’,

headers: { ‘Content-Type’: ‘application/json’ },

body: JSON.stringify({ chat_id: chatId, document: fileId })

});

返回response.json();

}

异步函数sendVideo(chatId, fileId) {

const 响应=等待fetch(apiUrl(‘sendVideo’), {

method: ‘POST’,

headers: { ‘Content-Type’: ‘application/json’ },

body: JSON.stringify({ chat_id: chatId, video: fileId })

});

返回response.json();

}

异步函数sendLocation(chatId, 纬度, 经度) {

const 响应=等待fetch(apiUrl(‘sendLocation’), {

method: ‘POST’,

headers: { ‘Content-Type’: ‘application/json’ },

body: JSON.stringify({ chat_id: chatId, 纬度, 经度})

});

返回response.json();

}

异步函数registerWebhook(事件,requestUrl,后缀,秘密){

const webhookUrl=`${requestUrl.protocol}//${requestUrl.hostname}${suffix}`;

const 响应=等待fetch(apiUrl(‘setWebhook’), {

method: ‘POST’,

headers: { ‘Content-Type’: ‘application/json’ },

body: JSON.stringify({ url: webhookUrl, Secret_token: 秘密})

});

const r=等待response.json();

return new Response(‘ok’ in r r.ok ? ‘Ok’ : JSON.stringify(r, null, 2));

}

异步函数unRegisterWebhook(event) {

const 响应=等待fetch(apiUrl(‘setWebhook’), {

method: ‘POST’,

headers: { ‘Content-Type’: ‘application/json’ },

body: JSON.stringify({ url: ” })

});

const r=等待响应.json();

return new Response(‘ok’ in r r.ok ? ‘Ok’ : JSON.stringify(r, null, 2));

}

步骤9、替换默认代码后,点击右上角的部署,然后点击上方中间的worker.dev即可访问

创建Telegram专属私聊 bot 创建Telegram专属私人聊天机器人10并完成机器人部署

url后添加/registerWebhook 注册webhook(unRegisterWebhoo取消注册)

注意:如果无法打开网址,则需要绕过防火墙,因为cloudflareworker.dev域名在中国大陆被禁止。也可以给worker绑定域名来解决问题。

创建Telegram专属私聊 bot 创建Telegram 专属私人聊天机器人并显示OK。部署完成。接下来,测试私人聊天机器人。

测试私人聊天机器人

如何 在Telegram 上创建您自己的私人聊天机器人? - 第19张 测试私聊机器人测试私聊bot 测试私聊机器人经过多人反复测试,发现文字、图片、贴纸、视频、语音、文件消息均能成功发送,且无延迟。

特征:

消息会保存在kv库中,安全

当多人同时向机器人发送消息时,如果多人发送消息,点击消息并选择回复用户。

当多人同时向机器人发送消息时,最后一条消息是当前对话,您可以直接回复。

如果您有任何建议或者发现任何bug,可以在Telegram中文社区讨论

Telegram中文频道