# 开发机器人应用
通过本文，你将发布一个能够响应用户 hello 这句话的机器人。预计时间：10 分钟。

##  创建应用
### 1.登录开放平台，创建应用
进入[Lark开放平台---开发者后台](https://open.larksuite.com/app/)，登录Lark账号后，创建一个名为 hello 的应用，详情查看[如何创建企业自建应用](https://open.larksuite.com/document/uQjL04CN/ukzM04SOzQjL5MDN)。

### 2. 查看应用详情
在企业自建应用列表中，可以看到刚刚创建好的应用。点击刚刚创建的机器人应用，可以进入应用详情界面

![图片名称](//sf16-muse-va.ibytedtos.com/obj/website-oversea/18d39498fdb6467b1f23243911b7631f_647lPjVMu6.png)

应用详情界面的 凭证与基础信息 一栏里，可以查询到应用凭证，也就是 AppID 和 AppSecret 

![图片名称](//sf16-muse-va.ibytedtos.com/obj/website-oversea/d1492f69c7892de6e41b8e65b04c7a60_3jJhHniIxb.png)

接着选择应用功能里的机器人一栏，启用机器人

![20201223-10650.png](//sf16-sg.larksuitecdn.com/obj/open-platform-opendoc-sg/5b2267ea987c8d2d9e68bd7e18f1d0d2_Hc8B4QDvo4.png)

然后选择事件订阅 一栏，在这里可以查看到应用的 VerificationToken

![图片名称](//sf16-muse-va.ibytedtos.com/obj/website-oversea/fa8fb104a704cebf23958f1cdb733640_LUpSebdKiE.png)

到现在为止，你已经开启了应用的机器人能力，并获得了应用的 AppID、AppSecret 和 VerificationToken 了, 此时就可以开始进行后端服务代码的编写了。

##  编写代码，启动后端服务
示例代码基于 python, 本机须有 python 运行环境。
### 1. 编写代码
你可以自己编写代码或使用我们提供的示例代码。  
[echo_bot.py](//sf16-muse-va.ibytedtos.com/obj/website-oversea/093b18e5189ad423a378b616b1bf94c3_Tbosxo7mus.py)
如果使用示例代码，你可以阅读以下的简略代码说明 :
- APP_ID、APP_SECRET、APP_VERIFICATION_TOKEN三个参数，用在应用详情中获取到的值来进行正确的赋值。
- do_POST 函数，解析由开放平台推送过来的http请求包，并根据不同的事件类型来进行相应的处理。
- handle_request_url_verify 函数，主要在保存请求网址url时进行校验。
- handle_message 函数，处理开放平台推送过来的事件
- get_tenant_access_token 函数，机器人在向用户发送消息时，获取tenant_access_token
- send_message 函数，机器人发送消息

### 2. 启动服务
代码编写完成后，启动服务

```go
python3 echo_bot.py
```

## 配置事件回调地址及选择事件
### 1. 请求网址 URL
代码编写完成，启动后端服务后，你需要为你的机器人应用配置事件回调地址，也就是在**应用详情**界面的**事件订阅**一栏里。

![图片名称](//sf16-muse-va.ibytedtos.com/obj/website-oversea/f84a97eb518069f05d0b20166771acfb_AMnXDhVsKN.png)

请求网址一栏需要您拥有公网 ip 或域名，然后按照图中的格式（http://公网ip:端口/  或者 https://yourhostname/）即可。
网址输入完成后，点击选择**保存**按钮，您将会看到开放平台给您的成功提示。

![图片名称](//sf16-muse-va.ibytedtos.com/obj/website-oversea/deda2e0932c84262f92007d77dca0381_43YcnyL7Si.png)

### 2. 为机器人选择监听事件
在**请求 URL 验证通过**后，您需要为您的机器人选择事件，我们选择**接收消息**事件。

![图片名称](//sf16-muse-va.ibytedtos.com/obj/website-oversea/c0b8f80cf65d8359dea3a194dd3f8462_x8gx0nY1sb.png)

选择事件完成后，您就可以进行机器人版本的发布了。

## 机器人应用版本发布
### 1. 版本详情
当机器人应用开发完成后，您可以进行机器人的版本发布。在应用详情界面，选择版本管理与发布，点击**创建版本**。

![图片名称](//sf16-muse-va.ibytedtos.com/obj/website-oversea/2924501e7627a3ca24f57bc299efe44b_RddBhloWJE.png)

依次填写应用版本号，选择移动端和PC客户端最低兼容Lark版本，更新说明等。需要注意的是你可以通过编辑应用的可用性状态，来决定让哪些人可以发现你的机器人应用。

![图片名称](//sf16-muse-va.ibytedtos.com/obj/website-oversea/0004f3239cfe3a1809cdf9945336f8a7_3citzag9mF.png)

### 2. 编辑可见性
编辑可见性时，你可以选择让你的应用能够被 具体的某些人/某些部门/全体人员可见。（应用默认对创建者自身可见）

![图片名称](//sf16-muse-va.ibytedtos.com/obj/website-oversea/08a912b4ee2520659766c9167adabc08_G6VvKsioWT.png)

### 3. 申请发布
版本详情及可见性都编辑完成后，点击保存，再点击申请发布，等待审核通过之后即可发布生效。

![图片名称](//sf16-muse-va.ibytedtos.com/obj/website-oversea/86c7a2074af40dd43f47a1e6482877f5_jFg8NbCKqG.png)

## 与机器人在Lark上聊天
### 1. 找到机器人应用
上面的步骤做完后，你可以打开 Lark ，搜索你的机器人名称，开启你和机器人的私人会话。（机器人未发布版本时，只能被创建者自己搜索到，你可以选择发布版本来让其他人看见他）

![图片名称](//sf16-muse-va.ibytedtos.com/obj/website-oversea/be4b6cab2aeb048f4cf703ace3c97054_F7r0GwjB8y.png)

### 2. 向机器人发送 hello
由于你已经订阅了[接收消息](https://open.larksuite.com/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/events/receive)事件，你可以在同机器人的单聊中输入“hello”，你发送的文本内容将通过事件订阅推送到你配置的“请求网址URL上”。示例如下：

```json 
 {
    "schema": "2.0",
    "header": {
        "event_id": "5e3702a84e847582be8db7fb73283c02",
        "event_type": "im.message.receive_v1",
        "create_time": "1608725989000",
        "token": "rvaYgkND1GOiu5MM0E1rncYC6PLtF7JV",
        "app_id": "cli_9f5343c580712544",
        "tenant_key": "2ca1d211f64f6438"
    },
    "event": {
        "sender": {
            "sender_id": {
                "union_id": "on_8ed6aa67826108097d9ee143816345",
                "user_id": "e33ggbyz",
                "open_id": "ou_84aad35d084aa403a838cf73ee18467"
            },
            "sender_type": "user"
        },
        "message": {
            "message_id": "om_5ce6d572455d361153b7cb51da133945",
            "root_id": "om_5ce6d572455d361153b7cb5xxfsdfsdfdsf",
            "parent_id": "om_5ce6d572455d361153b7cb5xxfsdfsdfdsf",
            "create_time": "1609073151345",
            "chat_id": "oc_5ce6d572455d361153b7xx51da133945",
            "chat_type": "group",
            "message_type": "text",
            "content": "{"text":"hello"}",
        }
    }
}
``` 

### 3. 使用机器人发送消息
在接收到事件后，你可以立即调用[发送消息](https://open.larksuite.com/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/create) API 向用户回复消息。

![图片名称](//sf16-muse-va.ibytedtos.com/obj/website-oversea/d1442e94c04ae086ef4d17dc9fccb230_1uEWkeEUlv.png)

至此，一个简单的能够响应 hello 的机器人应用就开发完成了。