【PHP Telegram Bot】Day23 - Inline mode(内联模式):在输入框使用机器人

https://ithelp.ithome.com.tw/upload/images/20211002/20132916VYIWNTI1lX.png

虽然还有另一个按纽,但是今天我想先来玩玩内联模式

前置作业

还记得 Day04 - Telegram 机器人的设定 文章中间有看到过的那个 Inline mode 吗,这个设定在 Bot Settings 中,找到它并点进去
https://ithelp.ithome.com.tw/upload/images/20211002/20132916mI3OEh3Jq3.png
然後按下 Turn inline mode on,开启後会像底下这样:
https://ithelp.ithome.com.tw/upload/images/20211002/201329161C6HKJAtAv.png
中间那颗 Edit inline placeholder 是设定显示的浮水印文字

按下按钮後,它会请你输入一段文字用来提示使用者
https://ithelp.ithome.com.tw/upload/images/20211002/20132916njrIN1vfq5.png
https://ithelp.ithome.com.tw/upload/images/20211002/20132916OkC3tThdir.png
另外还会多两个设定,点一下 Back to Settings,你会发现多了两个按纽
https://ithelp.ithome.com.tw/upload/images/20211002/201329161MkDcRZmuL.png

Inline Location Data

开启的话,就会在使用者查询时传送他的位置,如果你是要做与位置相关的查询功能的话可以开启。其他的就不建议了,因为使用者不一定愿意提供位置给你,开了反而会增加使用的门槛
https://ithelp.ithome.com.tw/upload/images/20211002/20132916xn15ZxscAU.png

Inline Feedback

这个是设定有多少机率发送使用者的选择讯息给机器人,机率越高机器人要处理的讯息就越多,如果没有需要知道使用者按了哪个选项就设成 0% 吧
https://ithelp.ithome.com.tw/upload/images/20211002/20132916XV6O4voKXs.png
https://ithelp.ithome.com.tw/upload/images/20211002/20132916L1G62Z79s6.png


Inline mode

https://core.telegram.org/bots/api#inline-mode
https://ithelp.ithome.com.tw/upload/images/20211002/20132916rQPPre9wpi.png
恩恩,这个我们刚刚设定好了


InlineQuery

https://core.telegram.org/bots/api#inlinequery
https://ithelp.ithome.com.tw/upload/images/20211002/20132916veVtRNMqz2.png
这个是从 TG 服务器传过来的讯息格式

参数 说明
id 这个查询的唯一 id
from 使用者的资讯
query 输入的文字
offset 查询的页数
chat_type 聊天室的类型
location 使用者的位置

我们来看看是不是真的长这样,先打开你的程序,然後在这中间加上 print_r($update);,把服务器传过来的讯息印出来
https://ithelp.ithome.com.tw/upload/images/20211002/20132916QZaxQyjipk.png
按下执行後,在随便一个聊天室中打上你机器人的 username
https://ithelp.ithome.com.tw/upload/images/20211002/20132916WahrH4hyzg.png
之後你就会看到终端机出现了一坨讯息,确实跟官方写得差不多,不过缺少了 chat_type
https://ithelp.ithome.com.tw/upload/images/20211002/20132916ewNzJHrCaz.png
这坨错误讯息是因为现在 $update 阵列里面没有叫做 message 的东东,只要在处理讯息的函式外面再加一个 if 就行了,如果这个东东存在我才执行这段程序
https://ithelp.ithome.com.tw/upload/images/20211002/20132916FOKk3pHGVv.png
https://ithelp.ithome.com.tw/upload/images/20211002/20132916R23OtLH0yk.png
另外我们要来处理 inline_query,所以要再加个 elseif,还有一个新的函式 processInlineQuery()
https://ithelp.ithome.com.tw/upload/images/20211002/20132916Nxz0wmS8Vl.png


answerInlineQuery

https://core.telegram.org/bots/api#answerinlinequery
https://ithelp.ithome.com.tw/upload/images/20211002/20132916nVDP7UeXzP.png
这个是要回应给服务器的格式

参数 说明
inline_query_id 指定要回应的 id
results 查询的结果放在这里
cache_time 快取时间,在这时间内不会再次查询不会通知机器人,而是直接拿刚刚的结果
is_personal 如果设为 true,快取就会是相对於个人的,而不同人输入相同讯息时也会通知机器人
next_offset 下一页的标记。如果查询结果很多,使用者往下滑时,服务器就会以这个 offset 再通知机器人。如果这是最後一页的话就填空字串
switch_pm_text 显示在列表最上方的文字,点下後会转到私讯机器人,并且发送 /start
switch_pm_parameter 接在 /start 後的参数,只有机器人看的到

我们要在函式里回应服务器,告诉它查询的结果,先试试回应没有任何查询结果,记得打完这段先在按 Ctrl + C 终止程序,重新执行
https://ithelp.ithome.com.tw/upload/images/20211002/20132916URVR4z1wQm.png
再次在输入框使用机器人,就会看到刚刚设定的回应
https://ithelp.ithome.com.tw/upload/images/20211002/20132916MhTQCerfg6.png


InlineQueryResult

https://core.telegram.org/bots/api#inlinequeryresult
https://ithelp.ithome.com.tw/upload/images/20211002/201329168Wv6poXvAP.png
查询的结果有多达 20 种的格式可以选择,我就示范一种就好了


InlineQueryResultArticle

https://core.telegram.org/bots/api#inlinequeryresultarticle
https://ithelp.ithome.com.tw/upload/images/20211002/20132916S7oYLLgKrN.png
以文章的的格式来填查询结果

参数 说明
type 这个阵列内容的种类,必须填 article
id 这个查询结果的唯一 id
title 文章的标题
input_message_content 按下选项後会发送的文字
reply_markup 发送文字下方的按纽,这个明天会讲
url 文章的连结
hide_url 设定为 true 会在查询结果隐藏连结
description 文章的说明
thumb_url 文章缩图的 url
thumb_width 图片的宽度
thumb_height 图片的高度

把这个东东填进 results 後就会像这样子:
https://ithelp.ithome.com.tw/upload/images/20211002/20132916F8Jwad0juC.png
查询时显示的样子:
https://ithelp.ithome.com.tw/upload/images/20211002/20132916vWOAz8EatW.png
如果有好几个查询结果的话就写成这样,记得 id 是唯一的,每个查询结果都不一样不可以重复
https://ithelp.ithome.com.tw/upload/images/20211002/20132916kODJtpKhP5.png
重新执行程序再查询就会变成一长串
https://ithelp.ithome.com.tw/upload/images/20211002/201329164NwcMvLTPF.png


<<:  如何衡量万事万物 (10) 人的判断

>>:  [经典回顾]网路异常疑机房失火,老板:「不是有防火墙?」

Day 18 (Xd)

1.开启自己手机的解析度面板 安卓计算: 495ppi-->对应的dpi范围为480以上--&...

每日挑战,从Javascript面试题目了解一些你可能忽略的概念 - Day22

tags: ItIron2021 Javascript 前言 昨天我们用很粗略的方式简单说明了什麽是...

物理访问控制系统(PACS)-重播攻击(Replay attack)

下图演示了针对生物识别系统的九个攻击点。从传感器到特徵提取器的生物特徵数据的回放是其中之一。 . “...

网路的小技巧-1

//兴趣记录一下~希望退休以後可以回味,各位别嫌弃,感谢各位!! /// //VLAN的重要性,实作...