【PHP Telegram Bot】Day02 - Telegram 聊天机器人原理

今天要来讲讲机器人是怎麽运作的

Client-Server 架构

这是一种网路架构,网页大部分都是使用此架构
浏览器是客户端(client),客户端(client)主动向服务器(server)发送请求(request)
服务器(server)会执行一些程序,之後把页面被动回应(response)给客户端(client)

服务器(server)需要一个 IP 位置,这样子浏览器才知道要把请求(request)发到哪个地方
IP 位置就像是住家的地址一样,而请求(request)就像是一封信

机器人的运作原理

https://ithelp.ithome.com.tw/upload/images/20210911/201329164DYNbONV9j.png
现在你发了一段讯息给机器人
但是并不是机器人直接回你讯息

详细情况如下图:
https://ithelp.ithome.com.tw/upload/images/20210911/20132916sarvrWzvtM.png
Icon 来源:https://www.flaticon.com/packs/programming-29

  1. 一开始你的讯息会被传送到 TG 服务器
  2. TG 服务器会通知机器人:欸!有一则新讯息
  3. 机器人会发一个指令给 TG 服务器
  4. TG 服务器照着指令的需求,回应讯息给你

机器人接收讯息的两种模式

机器人可以放在服务器,也可以用客户端的方式运作
https://ithelp.ithome.com.tw/upload/images/20210911/201329167PVK5cYetW.png
https://ithelp.ithome.com.tw/upload/images/20210911/20132916KSBHE468qO.png

  1. Webhook
    服务器方式被动接收讯息,需要有 IP 位置,通常会放在网站服务器(Web Hosting)上,要自己架设网站服务器不是件容易的事,所以官方还提供了另一种做法
  2. Long Polling
    客户端方式主动跟 TG 服务器要讯息,可以直接在自己电脑上运作,不需要架(租)服务器也能让机器人顺利运作,缺点就是电脑要一直开着,当然你也可以使用云端服务(IaaS、PaaS、SaaS)

机器人发送讯息的三种方式

  1. HTTP GET

    https://api.telegram.org/bot{Token}/{Method}?{Parameter1}={Value1}&{Parameter2}={Value2}
    

    直接以网址参数的方式传送指令,GET 没有 Body,只传送 Headers (你可以当作不会传送档案过去),通常是用来取资料用,优点是可以直接用浏览器执行,缺点是有 2KB 的限制,虽然不太可能用到这长的指令,但还是比较建议使用 POST

  2. HTTP POST
    https://ithelp.ithome.com.tw/upload/images/20210911/20132916ntmFdkLoTF.png

    {"method":"Method","Parameter1":"Value1","Parameter2":"Value2"}
    

    POST 是以 Body 传送资料(档案),程序通常都是以这种方式沟通,网页里的表单也经常是以这种方式传送,资料不会显示在网址列,可以传送的资料大小比 GET 大得多:1MB ~ 2GB

  3. 直接 Print
    https://ithelp.ithome.com.tw/upload/images/20210911/20132916J2XLkuyGPY.png
    这个方式只有在 webhook 模式下才能使用,因为只有服务器可以直接回应讯息

官方说明文件

https://core.telegram.org/bots/faq
https://core.telegram.org/bots/api


<<:  DAY9-JAVA的类别(3)-多载

>>:  [13th-铁人赛]Day 6:Modern CSS 超详细新手攻略 - Selector (二)

DAY 30『 从相簿选取照片( 有裁剪照片功能 ) 』ImagePicker - Part2

在 @IBAction 里 令 vc 为 UIImagePickerController let v...

Day 2 (html)

特别叮嘱禁止的错误 1.不要行内包区块 行内:(inline) span 区块:(block) p ...

EP 23: SQLite DB in Android and iOS for TopStore App

Hello, 各位 iT邦帮忙 的粉丝们大家好~~~ 本篇是 Re: 从零开始用 Xamarin 技...

007 无暇赴死在线看

007 无暇赴死在线看 《007:无暇赴死》(英语:No Time to Die,香港译《007:生...

[重构倒数第13天] - Vue3定义自己的模板语法

前言 该系列是为了让看过Vue官方文件或学过Vue但是却不知道怎麽下手去重构现在有的网站而去规画的系...