PHPackages                             martialbe/laravel-dingtalk - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. martialbe/laravel-dingtalk

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

martialbe/laravel-dingtalk
==========================

Dingtalk SDK for Laravel

v0.0.2(3y ago)017MITPHPPHP &gt;=7.4

Since Aug 26Pushed 3y ago1 watchersCompare

[ Source](https://github.com/MartialBE/laravel-dingtalk)[ Packagist](https://packagist.org/packages/martialbe/laravel-dingtalk)[ RSS](/packages/martialbe-laravel-dingtalk/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (2)Versions (3)Used By (0)

LaravelDingtalk
===============

[](#laraveldingtalk)

自用的Laravel Dingtalk包。

目前只实现了内部机器人和webhook机器人的使用方法。 还有很多功能没有完善

[![Latest Stable Version](https://camo.githubusercontent.com/81b5cae4c6ff8c90ddb7a029479894736800e91201065443422b93e31e9a6652/687474703a2f2f706f7365722e707567782e6f72672f6d61727469616c62652f6c61726176656c2d64696e6774616c6b2f76)](https://packagist.org/packages/martialbe/laravel-dingtalk) [![Total Downloads](https://camo.githubusercontent.com/b29df17586d14bac373777d06440e69005efa6a61112f2f1e98db17f831df4f0/687474703a2f2f706f7365722e707567782e6f72672f6d61727469616c62652f6c61726176656c2d64696e6774616c6b2f646f776e6c6f616473)](https://packagist.org/packages/martialbe/laravel-dingtalk) [![Latest Unstable Version](https://camo.githubusercontent.com/4f25885f5ffb8f86510d1cc4947b4ab37c1819e73daa016c4b66fe185dc44a28/687474703a2f2f706f7365722e707567782e6f72672f6d61727469616c62652f6c61726176656c2d64696e6774616c6b2f762f756e737461626c65)](https://packagist.org/packages/martialbe/laravel-dingtalk) [![License](https://camo.githubusercontent.com/035dd36f726b37c4b7cce4c088b4b83f1ddb4a39bf4eb509122174b0faea78c9/687474703a2f2f706f7365722e707567782e6f72672f6d61727469616c62652f6c61726176656c2d64696e6774616c6b2f6c6963656e7365)](https://packagist.org/packages/martialbe/laravel-dingtalk) [![PHP Version Require](https://camo.githubusercontent.com/465c3eed57e1ccfb24720d5c5f77351527223b340735ed172c7cde581357e863/687474703a2f2f706f7365722e707567782e6f72672f6d61727469616c62652f6c61726176656c2d64696e6774616c6b2f726571756972652f706870)](https://packagist.org/packages/martialbe/laravel-dingtalk)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

[](#----)

要求
--

[](#要求)

- PHP &gt;= 7.4
- Laravel &gt;=8.5

---

安装
--

[](#安装)

```
composer require martialbe/laravel-dingtalk
```

---

开始使用
----

[](#开始使用)

1. 创建配置文件

```
php artisan vendor:publish --provider="Martialbe\LaravelDingtalk\DingtalkServiceProvider"
```

2. 添加别名

```
'aliases' => [
    // ...
    'Dingtalk' => Martialbe\LaravelDingtalk\Facade::class,
],
```

3. 使用

```
    \Dingtalk::CustomBot()
        ->setMessage(\Martialbe\LaravelDingtalk\BasicService\Message::text(["content" => "你好"])->toArray())->send();
```

4. 多帐号

可在配置文件中建立多个帐号，默认是`default`。 配置多个帐号后，可以通过别名直接使用

```
    \Dingtalk::CustomBot('other');
```

---

内部机器人
-----

[](#内部机器人)

### 开始

[](#开始)

```
$config = [
    'app_key'    => 'sdfsdfrgert',
    'app_secret' => 'ertefdrgdfgdgtryrt',
];

$app = \Dingtalk::WorkBot($config);

// OR

$app = \Dingtalk::WorkBot('default');
```

### 发送普通消息

[](#发送普通消息)

消息组装请看下面`普通消息类型`

#### 批量发送单聊消息

[](#批量发送单聊消息)

```
use Martialbe\LaravelDingtalk\BasicService\Message;

$app = \Dingtalk::WorkBot();
$app->messages->batchSend("userId", Message::text(['content' => "这是文本测试"], 'api')->toArray());
//OR
$app->messages->batchSend(["userId 1", "userId 2"], Message::text(['content' => "这是文本测试"], 'api')->toArray());
```

#### 批量撤回单聊消息

[](#批量撤回单聊消息)

```
$app = \Dingtalk::WorkBot();
$app->messages->batchRecall("processQueryKey");
//OR
$app->messages->batchRecall(["processQueryKey 1", "processQueryKey 2"]);
```

#### 查看单聊阅读状态

[](#查看单聊阅读状态)

```
$app = \Dingtalk::WorkBot();
$app->messages->readStatus("processQueryKey");
```

#### 发送群消息

[](#发送群消息)

```
use Martialbe\LaravelDingtalk\BasicService\Message;

$app = \Dingtalk::WorkBot();
$app->messages->groupMessagesSend("openConversationId", Message::text(['content' => "这是文本测试"], 'api')->toArray());
```

#### 撤回群消息

[](#撤回群消息)

```
$app = \Dingtalk::WorkBot();
$app->messages->groupMessagesRecall("openConversationId", "processQueryKey");
```

#### 查看群阅读状态

[](#查看群阅读状态)

```
$app = \Dingtalk::WorkBot();
$app->messages->groupMessagesQuery("openConversationId", "processQueryKey", $maxResults = 200, $nextToken = "");
```

### 发送互动卡片

[](#发送互动卡片)

关于 `outTrackId`， 包会自动生成`outTrackId`,你也可以通过直接在参数中包含自己的`outTrackId`

```
$app = \Dingtalk::WorkBot();
$app->interactiveCards->personSend("cardTemplateId", "usersId", $params);
$outTrackId = $app->interactiveCards->getOutTrackId();
```

#### 注册回调地址

[](#注册回调地址)

```
$app = \Dingtalk::WorkBot();
$app->interactiveCards->register($params);
```

#### 发送单聊消息

[](#发送单聊消息)

```
use Martialbe\LaravelDingtalk\BasicService\InteractiveCard;

$params = (new InteractiveCard())
        ->setHeader(function ($header)
        {
            $header->setText("公告：测试TuWenCard01")
                ->setIco("https://static.dingtalk.com/media/lALPDe7syH8nG_wcHA_28_28.png")
                ->setColor("#00B853");
        })
        ->setContents(function ($content)
        {
            $content->setType("DESCRIPTION")
            ->setText("大家按照这个格式填写下，每周我会做一个统计和公布哈，和大家同步下我们的进展");
        })
        ->setContents(function ($content)
        {
            $content->setType("IMAGE")
            ->setText("@lALPDeREVttTpCrNA6rNA6o");
        })
        ->setContents(function ($content)
        {
            $content->setType("MARKDOWN")
            ->setText("#测试无序列表\n* ✅预览区域代码高亮\n* ✅所有选项自动记忆\n开始**加粗**结束\n开始*斜体*结束\n开始***加粗与斜体***结束\n测试：【正向文字：用于表达上涨上升、正向反馈文字，禁止大面积使用。】【15号字体】**【加粗】**\n测试：【报错：用户内容报错、警示内容，禁止大面积使用。】【12号字体】*【斜体】*");
        })
        ->setActions(function ($action)
        {
            $action->setId(1)
                ->setText("同意")
                ->setAfterClickText("已同意")
                ->setIco("@lALPDeREVttTpCrNA6rNA6o")
                ->setStatus("NORMAL")
                ->setActionType("LWP");
        })
        ->setActions(function ($action)
        {
            $action->setId(2)
                ->setText("不同意")
                ->setAfterClickText("已拒绝")
                ->setIco("@lALPDeREVttTpCrNA6rNA6o")
                ->setStatus("NORMAL")
                ->setActionType("LWP");
        })
        ->setActionDirection("HORIZONTAL")
        ->toArray();

$app = \Dingtalk::WorkBot();
$app->interactiveCards->personSend("cardTemplateId", "usersId", $params);
$outTrackId = $app->interactiveCards->getOutTrackId();
```

#### 发送群消息

[](#发送群消息-1)

```
$app = \Dingtalk::WorkBot();
$app->interactiveCards->groupSend("cardTemplateId", "openConversationId", $params);
$outTrackId = $app->interactiveCards->getOutTrackId();
```

#### 更新卡片

[](#更新卡片)

```
$app = \Dingtalk::WorkBot();
$data = [
    "outTrackId" => "VWQKWfWD7aIltxEZp6eIvhytdCsyzo1L",
    "cardData" => [
        "cardParamMap" => [
                        "title" => "更新",
                        "type" => "审核成功了吧",
                        "status" => "成功了😄",
                        "reason" => "# 嗯嗯",
                    ]
    ]
];

$app->interactiveCards->update($data);
```

#### 发送模板单聊消息

[](#发送模板单聊消息)

```
$app = \Dingtalk::WorkBot();

$app->interactiveCards->personSendTemplates("TuWenCard02", "userId", [ "cardData" => json_encode( $msg ), "callbackUrl" => "you callback"])
$outTrackId = $app->interactiveCards->getOutTrackId();
```

#### 发送模板群聊消息

[](#发送模板群聊消息)

```
$app = \Dingtalk::WorkBot();

$app->interactiveCards->groupSendTemplates("TuWenCard02", "openConversationId", [ "cardData" => json_encode( $msg ), "callbackUrl" => "you callback"])
$outTrackId = $app->interactiveCards->getOutTrackId();
```

webhook机器人
----------

[](#webhook机器人)

```
use Martialbe\LaravelDingtalk\BasicService\Message;
\Dingtalk::CustomBot()
        ->setMessage(Message::text(["content" => "这是通过wehook发送的消息"])->toArray())->send();
```

普通消息类型
------

[](#普通消息类型)

1. 文本消息

```
use Martialbe\LaravelDingtalk\BasicService\Message;

// 内部机器人
$sendMessage = Message::text(["content" => "这是通过wehook发送的消息"], 'api')->toArray();

// webhook机器人 默认
$sendMessage = Message::text(["content" => "这是通过wehook发送的消息"])->toArray();
```

2. Markdown消息

```
use Martialbe\LaravelDingtalk\BasicService\Message;

// 内部机器人
$sendMessage = Message::markdown(['title' => "我会发送markdown了~~", 'text' => "# 我会发送markdown了\n > 😸🤣"], 'api')->toArray();
// webhook机器人 默认
$sendMessage = Message::markdown(['title' => "我会发送markdown了~~", 'text' => "# 我会发送markdown了\n > 😸🤣"], 'api')->toArray();
```

3. Link消息

```
use Martialbe\LaravelDingtalk\BasicService\Message;

// 内部机器人
$sendMessage = Message::link(['title' => "sampleLink消息测试", "text" => "消息内容测试", "picUrl" => "http://img", "messageUrl" => "https://google.com"], 'api')->toArray();
// webhook机器人 默认
$sendMessage = Message::link(['title' => "sampleLink消息测试", "text" => "消息内容测试", "picUrl" => "http://img", "messageUrl" => "https://google.com"])->toArray();
```

4. SingleAction消息

```
use Martialbe\LaravelDingtalk\BasicService\Message;

// 内部机器人
$sendMessage = Message::singleAction(['title' => "乔布斯 20 年前想打造一间苹果咖啡厅，而它正是 Apple Store 的前身", "text" => "![screenshot](https://img)\n#### 乔布斯 20 年前想打造的苹果咖啡厅 \n\n Apple Store 的设计正从原来满满的科技感走向生活化，而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划", "singleTitle" => "查看详情", "singleURL" => "https://google.com"], 'api')->toArray();
// webhook机器人 默认
$sendMessage = Message::singleAction(['title' => "乔布斯 20 年前想打造一间苹果咖啡厅，而它正是 Apple Store 的前身", "text" => "![screenshot](https://img)\n#### 乔布斯 20 年前想打造的苹果咖啡厅 \n\n Apple Store 的设计正从原来满满的科技感走向生活化，而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划", "singleTitle" => "查看详情", "singleURL" => "https://google.com"])->toArray();
```

4. BtnsAction消息

```
use Martialbe\LaravelDingtalk\BasicService\Message;

// 内部机器人
$sendMessage = Message::btnsAction(["btnOrientation" => 0, 'title' => "乔布斯 20 年前想打造一间苹果咖啡厅，而它正是 Apple Store 的前身", "text" => "![screenshot](https://img)\n#### 乔布斯 20 年前想打造的苹果咖啡厅 \n\n Apple Store 的设计正从原来满满的科技感走向生活化，而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划", "btns" => [['title' => "查看详情", "actionURL" => "https://google.com"], ['title' => "不感兴趣", "actionURL" => "https://google.com"]]], 'api')->toArray();
// webhook机器人 默认
$sendMessage = Message::btnsAction(["btnOrientation" => 0, 'title' => "乔布斯 20 年前想打造一间苹果咖啡厅，而它正是 Apple Store 的前身", "text" => "![screenshot](https://img)\n#### 乔布斯 20 年前想打造的苹果咖啡厅 \n\n Apple Store 的设计正从原来满满的科技感走向生活化，而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划", "btns" => [['title' => "查看详情", "actionURL" => "https://google.com"], ['title' => "不感兴趣", "actionURL" => "https://google.com"]]])->toArray();
```

6. Image消息

```
use Martialbe\LaravelDingtalk\BasicService\Message;

// 内部机器人
$sendMessage =  Message::image(['photoURL' => "https://img"], 'api')->toArray();
// webhook机器人 不支持该类型
```

7. Feed消息

```
use Martialbe\LaravelDingtalk\BasicService\Message;

// 内部机器人 不支持该类型

// webhook机器人 默认
$sendMessage = Message::feed(["links" => [ "title" => "时代的火车向前开", "messageURL" => "https://www.dingtalk.com/", "picURL" => "https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png"] ])->toArray();
```

服务端
---

[](#服务端)

默认处理了服务端验证的逻辑

### 接收消息

[](#接收消息)

```
$app = \Dingtalk::WorkBot();
$server = $bot->server;
// 直接返回 Illuminate\Http\Request
$response = $server->server();
```

### 中间件

[](#中间件)

```
$app = \Dingtalk::WorkBot();
$server = $bot->server;

$server->with(function($message, \Closure $next) {
    // 你的自定义逻辑
    return $next($message);
});
$response = $server->server();
```

你可以注册多个中间件来处理不同的情况：

```
$app = \Dingtalk::WorkBot();
$server = $bot->server;

$server
    ->with(function($message, \Closure $next) {
        // 你的自定义逻辑1
        return $next($message);
    })
    ->with(function($message, \Closure $next) {
        // 你的自定义逻辑2
        return $next($message);
    })
    ->with(function($message, \Closure $next) {
        // 回复消息
        return json_encode(\Martialbe\LaravelDingtalk\BasicService\Message::text(['content' => "这是文本测试"], 'api')->toArray());
    });
$response = $server->server();
```

你也可以直接编写一个中间件类：

中间件必须包含`__invoke`函数

```
use Martialbe\LaravelDingtalk\Kernel\Support\Handler;

class MyHandler extends Handler
{
    public function __invoke($message, \Closure $next)
    {
        // 你的自定义逻辑
        return $next($message);
    }
}
```

注册中间件：

```
$app = \Dingtalk::WorkBot();
$server = $bot->server;
$server->with(MyHandler::class);
//OR
$server->with(new MyHandler());
```

致谢
--

[](#致谢)

本项目是仿照[easywechat](https://github.com/w7corp/easywechat)编写的。 消息组装是参考[notify](https://github.com/guanguans/notify)。

以上两个项目都是在`MIT`许可下授权。

License
-------

[](#license)

MIT

###  Health Score

19

—

LowBetter than 10% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity38

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~28 days

Total

2

Last Release

1328d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/724abe2959ebc1528c98abfd486b1b0e0725e8032cbf02ea77f550bcea793eee?d=identicon)[MartialBE](/maintainers/MartialBE)

---

Top Contributors

[![MartialBE](https://avatars.githubusercontent.com/u/42402987?v=4)](https://github.com/MartialBE "MartialBE (5 commits)")

### Embed Badge

![Health badge](/badges/martialbe-laravel-dingtalk/health.svg)

```
[![Health](https://phpackages.com/badges/martialbe-laravel-dingtalk/health.svg)](https://phpackages.com/packages/martialbe-laravel-dingtalk)
```

###  Alternatives

[shlinkio/shlink

A self-hosted and PHP-based URL shortener application with CLI and REST interfaces

4.8k4.3k](/packages/shlinkio-shlink)[ralphjsmit/laravel-helpers

A package containing handy helpers for your Laravel-application.

13704.6k2](/packages/ralphjsmit-laravel-helpers)[dhlparcel/magento2-plugin

DHL Parcel plugin for Magento 2

11180.5k2](/packages/dhlparcel-magento2-plugin)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

245.2k](/packages/aedart-athenaeum)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
