#  机器人应用相关问题

## 机器人聊天窗口没有出现对话框 （输入框）

应用机器人必须订阅[接收消息](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/events/receive)事件，使机器人具备接收用户消息的能力后，才会在聊天窗口出现对话框 （输入框）。解决方案：

1. 登录[飞书开发者后台](https://open.feishu.cn/app)。
2. 进入应用机器人详情页。

3. 在 **权限管理** 功能页，确保已经以应用身份开通了 **读取用户发给机器人的单聊消息**（im:message.p2p_msg:readonly）权限。

了解 API 权限，参见[申请 API 权限](https://open.feishu.cn/document/ukTMukTMukTM/uQjN3QjL0YzN04CN2cDN)。

![image.png](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/1428d09110d60e1e084f5ad2d8f75d1c_RKjsKqlTil.png?height=448&lazyload=true&maxWidth=600&width=2942)

4. 在 **事件与回调** > **事件配置** 功能页，确保已经以应用身份订阅[接收消息](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/events/receive)事件。

了解事件订阅，参见[事件概述](https://open.feishu.cn/document/ukTMukTMukTM/uUTNz4SN1MjL1UzM)。

![image.png](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/5592c656b270a67b5bda4e03f7d081a3_2BRTHHWiHo.png?height=1170&lazyload=true&maxWidth=600&width=2942)

7. 在 **版本管理与发布** 功能页，确保应用已发布，使以上配置均生效。

![image.png](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/8430cbc12407bf7e7eb5fac4cb892067_FbGTzIyMEG.png?height=1036&lazyload=true&maxWidth=600&width=2942)

## 怎么实现机器人@人（@所有人、@指定人）

**答**：在机器人发送的普通文本消息（text）、富文本消息（post）、消息卡片（interactive）中，可以使用 `at` 标签实现@单个用户效果。要 @ 多个人，重复使用 `at` 标签即可。

具体请求示意如下：<br>

**(1) 在[普通文本消息](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/create)中@人、@所有人:**<br>

`at`标签示意

```json 
// at 指定用户
<at user_id="ou_xxx">Name</at> //取值必须使用ou_xxxxx格式的 open_id 来at指定人
// at 所有人
<at user_id="all">所有人</at>
``` 

请求体中的`content` 示意：

```json 
{
	"content": " {\"text\":\"<at user_id=\\\"ou_xxxxxxxx\\\">Tom</at> text content\"}"
}
``` 
**(2) 在[富文本消息](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/im-v1/message/create_json#45e0953e)中@人、@所有人:**<br>

`at`标签示意

```json 
// at 指定用户
{
	"tag": "at",
	"user_id": "ou_xxxxxxx",//取值必须使用ou_xxxxx格式的 open_id 来at指定人
	"user_name": "tom"
}

// at 所有人
{
	"tag": "at",
	"user_id": "all",//取值使用"all"来at所有人
	"user_name": "所有人"
}
``` 
请求体中的`content` 示意：

```json 
{
  "zh_cn": {
    "title": "我是一个标题",
    "content": [
      [
        {
          "tag": "text",
          "text": "第一行 :"
        },
        {
          "tag": "at",
          "user_id": "ou_xxxxxx",//取值必须使用ou_xxxxx格式的 open_id 来at指定人
          "user_name": "tom"
        }
      ],
      [
        {
          "tag": "text",
          "text": "第二行:"
        },
        {
          "tag": "at",
          "user_id": "all",
          "user_name": "所有人"//取值使用"all"来at所有人
        }
      ]
    ]
  }
}
``` 
**(3) 在[飞书卡片](https://open.feishu.cn/document/uAjLw4CM/ukzMukzMukzM/feishu-cards/feishu-card-overview)中@人、@所有人:**<br>
可以使用飞书卡片[富文本（Markdown）](https://open.feishu.cn/document/uAjLw4CM/ukzMukzMukzM/feishu-cards/card-json-v2-components/content-components/rich-text)内容中的 `at` 人标签，标签示意：

```json 
// at 指定用户
	<at id="ou_xxx"></at> //使用open_id at指定人
	<at id="b6xxxxg8"></at> //使用user_id at指定人
	<at email="test@email.com"></at> //使用邮箱地址 at指定人
// at 所有人
	<at id=all></at>
``` 

请求体中的`content` 示意：

```json 
{
  "config": {
    "wide_screen_mode": true
  },
  "header": {
    "title": {
      "tag": "plain_text",
      "content": "这是卡片标题内容"
    },
    "template": "blue"
  },
  "elements": [
    {
      "tag": "div",
      "text": {
        "content": "at所有人<at id=all></at> \nat指定人<at id=ou_xxxxxx></at>",
        "tag": "lark_md"
      }
    }
  ]
}
``` 
**注意：**
-   对于[自定义机器人](https://open.feishu.cn/document/ukTMukTMukTM/ucTM5YjL3ETO24yNxkjN)，由于不具有通讯录信息的访问权限，只支持使用 `open_id` @指定人，或 @所有人。不支持使用 `user_id`、`email` @指定人。[自建应用与商店应用](https://open.feishu.cn/document/home/app-types-introduction/self-built-apps-and-store-apps)则没有此限制。你可以[参考此教程](https://open.feishu.cn/document/home/user-identity-introduction/open-id)，以任意应用身份请求获取用户的`open_id`。
-   如果群主开启了`“仅群主和群管理员可@所有人”`配置，且机器人不是群主或管理员，则无法@所有人。

![image.png](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/aab2116c9e76e96c2b341022e039858f_ZbDJWADgDH.png?height=768&lazyload=true&maxWidth=400&width=694)

## 配置使用 webhook 的自定义机器人时，参数 text 是否有长度要求？

**答**：建议 JSON 的长度不超过 30k，序列化后的 pb 不超过 100k，图片最好小于 10MB。

## 为群组添加机器人时，没有找到我在开发者后台创建的应用？

**答**：你需为你的应用添加机器人能力。添加机器人能力后，该应用才支持被添加到群组。

![image.png](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/94c093e5dc256550b020cdeb5734eed3_nd0DpClvyw.png?height=656&lazyload=true&maxWidth=600&width=1535)

## 是否支持通过 OpenAPI 创建机器人？

**答**：不支持。

- 如需创建应用机器人，需要前往[开发者后台](https://open.feishu.cn/app)，在指定应用配置页面添加机器人能力。

![image.png](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/94c093e5dc256550b020cdeb5734eed3_nd0DpClvyw.png?height=656&lazyload=true&maxWidth=600&width=1535)

- 如需创建自定义机器人，需要在飞书客户端的指定群聊内添加。

![image.png](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/f3514a8cc60642b58490852a997b8f2f_G5y04GxDAp.png?height=1570&lazyload=true&maxWidth=600&width=2424)

## 使用机器人发送的消息出现中文乱码是什么原因？

**答**：该问题通常是因为字符编码不正确导致的。你可以：

- 请求发送消息时，在请求头中声明 utf-8 字符集。例如，调用[发送消息](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/create)接口时，需要在请求头内设置 `Content-Type` 参数为 `application/json; charset=utf-8`。

- 检查你本地设备的语言环境，需要为中文环境。

![image.png](//sf3-cn.feishucdn.com/obj/open-platform-opendoc/c2e150ff67ff45be4e745837096d1106_lNXibx8ZQV.png?height=496&lazyload=true&maxWidth=350&width=874)

