Laravel使用Dingo API+JWT实现认证机制 无痛刷新Token

  • 一、操作Telegram
    • 1. 创建Telegram机器人
    • 2. 创建command指令
  • 二、安装[Telegram-Bot-SDK](https://github.com/irazasyed/telegram-bot-sdk)
    • 1. 执行composer命令
    • 2. 修改config/app.php添加配置
    • 3. 执行命令发布配置
    • 4. 添加.env配置
  • 三、使用[Telegram-Bot-API](https://telegram-bot-sdk.readme.io/reference)
  • 四、设置Webhook
    • 1. web应用添加路由
    • 2. API添加路由
    • 3. 请求setWebhook接口,url参数必须支持https
    • 4. 通过getWebhookInfo接口查看Webhook信息
  • 五、自定义指令开发
    • 1. 修改config/telegram.php添加指令
    • 2. 修改默认start指令
    • 3. 修改默认help指令
    • 4. 添加自定义article指令

一、操作Telegram

1. 创建Telegram机器人

  1. 与@BotFather交谈,或者点击链接 : https://telegram.me/BotFather
  2. 点击Start
  3. 点击 /newbot
  4. 输入机器人名称 name,设置后可以修改
  5. 输入机器人用户名 username,必须以bot结尾,被@和搜索的名字,设置后无法修改
  6. 得到API Token

2. 创建command指令

  1. 点击/mybot
  2. 点击Edit Bot
  3. 点击Edit Commands
  4. 输入命令列表:
    command1 - 描述
    command2 - 描述
    例如:article - 查看或搜索文章

二、安装Telegram-Bot-SDK

1. 执行composer命令

composer require irazasyed/telegram-bot-sdk ^2.0

2. 修改config/app.php添加配置

'providers' => [Telegram\Bot\Laravel\TelegramServiceProvider::class
]
'aliases' => ['Telegram' => Telegram\Bot\Laravel\Facades\Telegram::class
]

3. 执行命令发布配置

php artisan vendor:publish --provider="Telegram\Bot\Laravel\TelegramServiceProvider"

4. 添加.env配置

TELEGRAM_BOT_TOKEN=API TOKEN
TELEGRAM_ASYNC_REQUESTS=false

三、使用Telegram-Bot-API

以Laravel-admin自定义行操作为例

<?php
namespace App\Admin\Actions\Article;use Encore\Admin\Actions\RowAction;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Storage;
use Telegram\Bot\Laravel\Facades\Telegram;class SendToTGChannel extends RowAction
{public $name = '发送文章到TG频道';public $chat_id = '@xxxxx'; //@channelusernamepublic function handle(Model $model){$title = "<a href={https://domin/article/$model->id}>{$model->title}</a>";if ($model->cover) { //有封面 发图片$response = Telegram::sendPhoto(['chat_id' => $this->chat_id,'photo' => Storage::disk(config('admin.upload.disk'))->path($model->cover),'caption' => $title,'parse_model' => 'html', //支持html和markdown]);} else {$response = Telegram::sendMessage(['chat_id' => $this->chat_id,'text' => $title,'parse_model' => 'html',]);}$messageId = $response->getMessageId();if ($messageId) {return $this->response()->success('发送成功')->refresh();} else {return $this->response()->error('发送失败')->refresh();}}public function dialog(){$this->confirm('确定发送文章到TG频道?');}
}

四、设置Webhook

1. web应用添加路由

  1. 修改routes/web.php,添加Webhook URI到路由中,不能有需要授权的中间件
Route::post('/API TOKEN/webhook', function () {Telegram\Bot\Laravel\Facades\Telegram::commandsHandler(true);
});
  1. 修改app\Http\Middleware\VerifyCsrfToken.php,将webhook URI添加到$except数组
     protected $except = ['/API TOKEN/webhook',];

2. API添加路由

  1. 修改routes/api.php
//dingo api
$api->post('v1/API TOKEN/webhook', function () {Telegram\Bot\Laravel\Facades\Telegram::commandsHandler(true);
});

3. 请求setWebhook接口,url参数必须支持https

curl https://api.telegram.org/botAPI TOKEN/setWebhook --data url=https://domain/API TOKEN/webhook

4. 通过getWebhookInfo接口查看Webhook信息

curl https://api.telegram.org/botAPI TOKEN/getWebhookInfo

五、自定义指令开发

1. 修改config/telegram.php添加指令

'commands' => [//Telegram\Bot\Commands\HelpCommand::class,App\Console\Telegram\Start::class,App\Console\Telegram\Help::class,App\Console\Telegram\Article::class,
],

2. 修改默认start指令

<?phpnamespace App\Console\Telegram;use Telegram\Bot\Actions;
use Telegram\Bot\Commands\Command;class Start extends Command
{/*** @var string Command Name*/protected $name = 'start';/*** @var string Command Description*/protected $description = '开始';/*** {@inheritdoc}*/public function handle($arguments){//回复消息$this->replyWithMessage(['text' => '你好!欢迎使用机器人,以下是我们可以用的指令:']);//切换到输入状态$this->replyWithChatAction(['action' => Actions::TYPING]);//触发帮助指令$this->triggerCommand('help');$this->replyWithMessage(['text' => '以下是热门文章:']);$this->replyWithChatAction(['action' => Actions::TYPING]);$this->triggerCommand('article');}
}

3. 修改默认help指令

<?phpnamespace App\Console\Telegram;use Telegram\Bot\Commands\Command;class Help extends Command
{/*** @var string Command Name*/protected $name = 'help';/*** @var string Command Description*/protected $description = '帮助';/*** {@inheritdoc}*/public function handle($arguments){$commands = $this->telegram->getCommands();$text = '';foreach ($commands as $name => $handler) {$text .= sprintf('/%s - %s'.PHP_EOL, $name, $handler->getDescription());}$this->replyWithMessage(compact('text'));}
}

4. 添加自定义article指令

<?phpnamespace App\Console\Telegram;use App\Models\ArticleModel;
use Telegram\Bot\Commands\Command;class Article extends Command
{/*** @var string Command Name*/protected $name = 'Article';/*** @var string Command Description*/protected $description = '查看或搜索文章';/*** {@inheritdoc}*/public function handle($arguments){if ($arguments) {//搜索 /article 新冠肺炎    回复标题包含“新冠肺炎”的10篇文章$article = ArticleModel::where('title', 'LIKE', "%{$arguments}%")->take(10)->get();} else {$article = ArticleModel::orderBy('created_at', 'DESC')->take(10)->get();}$return = ['text' => '','parse_mode' => 'html' //支持html和markdown];foreach ($article as $item) {$return['text'] .= "
<a href={https://domin/article/$item->id}>{$item->title}</a>";}$this->replyWithMessage($return);}
}

Laravel中使用webhook开发Telegram机器人自定义指令相关推荐

  1. php调用nexmo发送短信,在 Laravel 中 “规范” 的开发短信验证码发送功能

    Laravel简介 Laravel是一套简洁.优雅的PHP Web开发框架(PHP Web Framework).它可以让你从面条一样杂乱的代码中解脱出来:它可以帮你构建一个完美的网络APP,而且每行 ...

  2. 如何在 Laravel 中 “规范” 的开发验证码发送功能

    需求场景 发送「验证码」或者「消息通知」,可发送到手机或邮箱中. 完成 首先,在 Laravel 中的规范就是使用 Laravel 的「消息通知」,这里基于场景为「验证码」.这个需求几乎所有软件系统都 ...

  3. php开发telegram机器人接收机器人收到的消息

    首先需要有一个机器人拿到机器人token token:68xxxx88:AAG5xxxxxxxx 想收到机器人的消息需要给bot设置一个回调地址 // 向telegram bot指定域名 public ...

  4. Java开发Telegram机器人

    基于springboot在[pom]中添加 <dependency><groupId>org.telegram</groupId><artifactId> ...

  5. Angularjs进阶笔记(2)—自定义指令中的数据绑定

    [摘要]有关自定义指令的scope参数,网上很多文章都在讲这3种绑定方式实现的效果是什么,但几乎没有人讲到底怎么使用,本篇希望聊聊到底怎么用这个话题. 一. 自定义指令 自定义指令,是Angularj ...

  6. Vue中directives用法--自定义指令控制按钮权限

    1. 新建 hasPermission.js文件 const hasPermission = {install (Vue, options) {Vue.directive('has', {insert ...

  7. 自定义指令与自定义指令的回调函数inserted和componentUpdated

    之前在项目中做了一个自定义指令,随着项目的开发前期的自定义指令并不能满足后期的需求,所以今天给大家介绍一下vue的自定义指令以及我的一些理解,希望可以帮到大家. 那么废话不多说,直接上代码.有疑问欢迎 ...

  8. 自定义指令监听多个div_Vue 3 | 自定义指令的新玩法

    开门见山  按照惯例,从上帝视角看一下自定义指令在 Vue 3 中发生了哪些改变: 自定义指令的 API 改了名字,名字更贴近组件的生命周期 自定义指令可以通过子组件的 v-bind="$a ...

  9. [Vue]自定义指令

    前言 系列文章目录: [Vue]目录 老师的课件笔记,不含视频 https://www.aliyundrive.com/s/B8sDe5u56BU 笔记在线版: https://note.youdao ...

最新文章

  1. JAVA如何判断两个字符串是否相等(亲测第二种方式)
  2. 超酷的OpenSource的Javascript Calendar控件
  3. daemon进程(转)
  4. [webpack]手写一个mvp版本的webpack
  5. 【渝粤题库】陕西师范大学800008 综合自然地理
  6. 百度服务器保存信息多久,百度识图会保存图片在服务器上吗?
  7. 软件需求功能测试用例,软件测试用例与需求的对应关系
  8. python多变量相关性分析_两个变量与因变量相关性分析_spss多变量相关性分析
  9. python序列类型映射_python学习笔记(基础:变量,序列,映射) | 学步园
  10. 解决微信扫码下载的两个方法
  11. 图解海康威视摄像头和硬盘录像机的网络连接与端口映射
  12. 2 路 FULL Cameralink 视觉检测 BOX
  13. win7计算机怎么远程桌面连接不上,Win7系统连接不上远程桌面的解决方法
  14. 2021InfoComm|钉钉会议 Rooms 的 “全场景“ 智能化解决方案
  15. 计算机英语总结250字,英语作文范文 250字
  16. [科幻]一堂宇宙生物课
  17. 三年级计算机课教案文档,三年级下册信息技术教案(1-4课)
  18. C语言·输入身份证号码,给出年月日。
  19. 高版本CUDA 在算力低的显卡上不执行核函数如no kernel image is available for execution on the device
  20. PC机与交换机通信的原理描述

热门文章

  1. IOS 企业级苹果开发者账号申请流程
  2. 机器人运动学、动力学基础上利用MATLAB进行PID控制仿真
  3. php多商品规格统计数量
  4. 使用EasyExcel实现excel的简单读写操作
  5. win7修改计算机名 bat,用cmd改计算机名.bat 无需重启电脑生效
  6. 美业企业如何实现自我蜕变?美业李依然腹有良策
  7. java excel 导出数据文件格式无效
  8. 【面试分享】GitHub上Star大佬是如何一举拿下7家一线互联网大厂的Offer
  9. TCP断开连接的四次握手
  10. 多线程-day-09CAS原理