|
2 | 2 |
|
3 | 3 | 底层的对接实现是基于TypeScript语言,故无法直接在python-wechaty中使用该服务。可是Wechaty社区能够直接将其转化成对应的服务让多语言调用,从而实现:底层复用的特性。
|
4 | 4 |
|
5 |
| -整体步骤分为三步: |
| 5 | +整体步骤分为两步: |
6 | 6 |
|
7 | 7 | * 申请一个TOKEN
|
8 |
| -* 使用Docker启动Padlocal网关服务 |
9 |
| -* 使用python-wechaty连接服务并启动启动微信机器人 |
| 8 | +* 部署模板机器人 |
10 | 9 |
|
11 | 10 |
|
12 | 11 | ## 一、申请一个TOKEN
|
|
15 | 14 | - 那如何获取长期Token呢?详细请看:[Everything-about-Wechaty](https://github.com/juzibot/Welcome/wiki/Everything-about-Wech aty)
|
16 | 15 |
|
17 | 16 |
|
18 |
| -## 二、使用Docker启动Padlocal网关服务 |
19 |
| -- 这一步可以在本机运行也可以在服务器上运行。 |
20 |
| -- 如果在服务器端运行,则须注意服务器相应端口防火墙规则需要打开 |
21 |
| -- 如果是在本地测试运行,则需要在启动机器人时指定环境变量SERVICE_ENDPOINT |
22 | 17 |
|
23 |
| -### 2.1 脚本 |
| 18 | +## 二、 部署模板机器人 |
24 | 19 |
|
25 |
| -```shell |
26 |
| -# 设置环境变量 |
27 |
| - |
28 |
| -export WECHATY_LOG="verbose" |
29 |
| -export WECHATY_PUPPET="wechaty-puppet-padlocal" |
30 |
| -export WECHATY_PUPPET_PADLOCAL_TOKEN="puppet_padlocal_XXXXXX" |
31 |
| - |
32 |
| -export WECHATY_PUPPET_SERVER_PORT="9001" |
33 |
| -# 可使用代码随机生成UUID:import uuid;print(uuid.uuid4()); |
34 |
| -export WECHATY_TOKEN="1fe5f846-3cfb-401d-b20c-XXXXX" |
35 |
| - |
36 |
| -docker run -ti \ |
37 |
| - --name wechaty_puppet_service_token_gateway \ |
38 |
| - --rm \ |
39 |
| - -e WECHATY_LOG \ |
40 |
| - -e WECHATY_PUPPET \ |
41 |
| - -e WECHATY_PUPPET_PADLOCAL_TOKEN \ |
42 |
| - -e WECHATY_PUPPET_SERVER_PORT \ |
43 |
| - -e WECHATY_TOKEN \ |
44 |
| - -p "$WECHATY_PUPPET_SERVER_PORT:$WECHATY_PUPPET_SERVER_PORT" \ |
45 |
| - wechaty/wechaty:0.65 |
46 |
| -``` |
| 20 | +- 现在的你已经拥有了一个Padlocal Token. 接下来则需要使用它启动我们的第一个机器人了。 |
| 21 | +- 在这里,我们直接使用[python-wechaty-template](https://github.com/wechaty/python-wechaty-template)项目来快速的部署我们的第一个机器人。 |
| 22 | +- **在此之前请确保你的机器上已经安装并运行了[docker](https://www.docker.com/get-started)服务** |
47 | 23 |
|
48 |
| -> 在此我默认所有的人都对[Docker](https://www.docker.com)的基本使用已经有了一定的了解,否则可以花几分钟去看看其[文档](https://www.docker.com/get-started)熟悉一下。 |
| 24 | +### 1. clone 模板机器人项目 |
49 | 25 |
|
50 |
| -### 2.2 参数说明 |
| 26 | +```she |
| 27 | +git clone https://github.com/wechaty/python-wechaty-template && cd python-wechaty-template |
| 28 | +``` |
51 | 29 |
|
52 |
| -* **WECHATY_PUPPET**: **标识**使用的哪个协议,一般和`token`类型的一一对应。比如当使用`padlocal`协议的话,那这个就是`wechaty-puppet-padlocal`,如果使用`web`协议的话,那这个就是`wechaty-puppet-wechat`。 |
53 |
| -* **WECHATY_PUPPET_PADLOCAL_TOKEN**: 这个协议是用来连接Padlocal的服务,目前是付费的。也就是在第一步中申请的。 |
54 |
| -* **WECHATY_PUPPET_SERVER_PORT**: 网关服务的接口,提供给`python-wechaty`来连接调用,如果服务部署在云服务器上,则需要保证该端口的可访问性。 |
55 |
| -* **WECHATY_TOKEN**: 当开发者在自己机器上启动一个网关服务时,需要通过`TOEKN`来做身份验证,避免服务被他人窃取。 |
| 30 | +### 2. 启动padlocal网关 |
56 | 31 |
|
57 |
| -以上代码只需要修改三个参数:`WECHATY_PUPPET_PADLOCAL_TOKEN`, `WECHATY_PUPPET_SERVER_PORT`, `WECHATY_TOKEN` 即可成功启动Token网关服务。 |
| 32 | +- 参数为申请的token,下面示例中token不可用,请换上你申请的token |
58 | 33 |
|
59 |
| -那网关服务启动成功之后,只需要编写`python-wechaty`的代码来连接即可。 |
| 34 | +```shel |
| 35 | +./start_gateway_docker.sh puppet_padlocal_d764cc8d231747b18b9ee5540dadd55c |
| 36 | +``` |
60 | 37 |
|
| 38 | +### 3. 启动机器人 |
61 | 39 |
|
| 40 | +- 上一步会启动一个docker,并运行Gateway服务,会有持续输出,建议运行在tmux中。 |
| 41 | +- 开起一个新的terminal,并在模板机器人项目路径下运行以下命令 |
62 | 42 |
|
63 |
| -## 三、使用python-wechaty连接服 |
| 43 | +```shell |
| 44 | +make bot |
| 45 | +``` |
64 | 46 |
|
65 |
| -### 3.1 本地测试和远端部署 |
| 47 | +- 初次登陆时,可能需要扫码多次。 |
66 | 48 |
|
67 |
| -当启动网关服务时,`Padlocal`会根据`WECHATY_TOKEN`来在[Wechaty服务接口](https://api.chatie.io/v0/hosties/__TOKEN__)上注册部署机器的`IP`和`端口`,然后python-wechaty会根据`WECHATY_TOKEN`在[Wechaty服务接口](https://api.chatie.io/v0/hosties/__TOKEN__)上获取对应的IP和端口。 |
| 49 | +### 4. 验证机器人启动成功 |
68 | 50 |
|
69 |
| -可是很多小伙伴在实际开发的过程中,通常会出现`endpoint is not invalid`等错误信息,那是因为开发者有可能在本地启动网关服务或者服务器端口没有开放。 |
| 51 | +- 机器人发送消息`ding`来测试,如果启动成功,则机器人自动回复`dong`,至此你的第一个微信机器人就启动成功了。 |
70 | 52 |
|
71 |
| -网关服务的部署通常是分为本地测试和远端部署,前者通常只是为了初学测试,后者是为了生产部署。如果是在生产部署时,只需要设置环境变量: |
72 | 53 |
|
73 |
| -```shell |
74 |
| -export WECHATY_PUPPET_SERVICE_TOKEN=1fe5f846-3cfb-401d-b20c-XXXXX |
75 |
| -# or |
76 |
| -export TOKEN=1fe5f846-3cfb-401d-b20c-XXXXX |
77 |
| -# or |
78 |
| -export token=1fe5f846-3cfb-401d-b20c-XXXXX |
79 |
| -``` |
80 | 54 |
|
81 |
| -可是如果是在本地测试时,则通过ENDPOINT来找到启动的网关服务。 |
82 | 55 |
|
83 |
| -```shell |
84 |
| -export WECHATY_PUPPET_SERVICE_TOKEN=1fe5f846-3cfb-401d-b20c-XXXXX |
85 |
| -# or |
86 |
| -export TOKEN=1fe5f846-3cfb-401d-b20c-XXXXX |
87 |
| -# or |
88 |
| -export token=1fe5f846-3cfb-401d-b20c-XXXXX |
89 |
| - |
90 |
| -export WECHATY_PUPPET_SERVICE_ENDPOINT=127.0.0.1:9001 |
91 |
| -# or |
92 |
| -export ENDPOINT=127.0.0.1:9001 |
93 |
| -# or |
94 |
| -export endpoint=127.0.0.1:9001 |
95 |
| -``` |
96 | 56 |
|
97 |
| -### 3.2 TOKEN的作用 |
| 57 | +## 三、自定义配置 |
98 | 58 |
|
99 |
| -总而言之: |
100 | 59 |
|
101 |
| -* 如果是公网环境下,可只需要设置`TOKEN`即可(因为你的token已经注册在chatie server上,故可以获取到目标资源服务器的ip和port) |
102 |
| -* 如果是内网环境下,可只需要使用`ENDPOINT`(`localhost:port`)来让python-wechaty连接目标资源服务器。 |
103 | 60 |
|
104 |
| -> 如果是token是padlocal类型,则在python-wechaty程序内部可直接设置`export endpoint=localhost:port`来连接Gateway Server。 |
| 61 | +### 3.1 使用docker启动的padlocal网关参数说明 |
105 | 62 |
|
106 |
| -当然,以上的写法是使用Bash的方式来设置环境变量,也是可以通过python代码来设置环境变量,详细可看: |
| 63 | +- 这些参数在模板机器人项目中的`start_gateway_docker.sh`脚本中配置 |
107 | 64 |
|
108 |
| -```python |
109 |
| -import os |
110 |
| -os.environ['token'] = "1fe5f846-3cfb-401d-b20c-XXXXX" |
111 |
| -os.environ['endpoint'] = "127.0.0.1:9001" |
112 |
| -``` |
| 65 | +* **WECHATY_PUPPET**: **标识**使用的哪个协议,一般和`token`类型的一一对应。比如当使用`padlocal`协议的话,那这个就是`wechaty-puppet-padlocal`,如果使用`web`协议的话,那这个就是`wechaty-puppet-wechat`。 |
| 66 | +* **WECHATY_PUPPET_PADLOCAL_TOKEN**: 这个协议是用来连接Padlocal的服务,目前是付费的。也就是在第一步中申请的。 |
| 67 | +* **WECHATY_PUPPET_SERVER_PORT**: 网关服务的接口,提供给`python-wechaty`来连接调用,如果服务部署在云服务器上,则需要保证该端口的可访问性。(默认8080) |
| 68 | +* **WECHATY_TOKEN**: 当开发者在自己机器上启动一个网关服务时,需要通过`TOEKN`来做身份验证,避免服务被他人窃取。脚本中使用uuid自动生成。具体值可在`.env`文件中查看 |
113 | 69 |
|
114 |
| -### 3.3 机器人启动代码 |
| 70 | +网关服务启动成功之后,只需要编写`python-wechaty`的代码来连接即可。 |
115 | 71 |
|
116 |
| -> talke is cheep, show you the code |
117 | 72 |
|
118 |
| -```python |
119 |
| -import asyncio, os |
120 |
| -from typing import List, Optional, Union |
121 | 73 |
|
122 |
| -from wechaty_puppet import FileBox # type: ignore |
| 74 | +## 四、使用python-wechaty连接远程网关服务 |
123 | 75 |
|
124 |
| -from wechaty import Wechaty, Contact |
125 |
| -from wechaty.user import Message, Room |
| 76 | +### 4.1 本地测试和远端部署 |
126 | 77 |
|
| 78 | +当启动网关服务时,`Padlocal`会根据`WECHATY_TOKEN`来在[Wechaty服务接口](https://api.chatie.io/v0/hosties/__TOKEN__)上注册部署机器的`IP`和`端口`,然后python-wechaty会根据`WECHATY_TOKEN`在[Wechaty服务接口](https://api.chatie.io/v0/hosties/__TOKEN__)上获取对应的IP和端口。 |
127 | 79 |
|
128 |
| -class MyBot(Wechaty): |
| 80 | +可是很多小伙伴在实际开发的过程中,通常会出现`endpoint is not invalid`等错误信息,那是因为开发者有可能在本地启动网关服务或者服务器端口没有开放。 |
129 | 81 |
|
130 |
| - async def on_message(self, msg: Message): |
131 |
| - """ |
132 |
| - listen for message event |
133 |
| - """ |
134 |
| - from_contact: Optional[Contact] = msg.talker() |
135 |
| - text = msg.text() |
136 |
| - room: Optional[Room] = msg.room() |
137 |
| - if text == 'ding': |
138 |
| - conversation: Union[ |
139 |
| - Room, Contact] = from_contact if room is None else room |
140 |
| - await conversation.ready() |
141 |
| - await conversation.say('dong') |
142 |
| - file_box = FileBox.from_url( |
143 |
| - 'https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/' |
144 |
| - 'u=1116676390,2305043183&fm=26&gp=0.jpg', |
145 |
| - name='ding-dong.jpg') |
146 |
| - await conversation.say(file_box) |
| 82 | +网关服务的部署通常是分为本地测试和远端部署,前者通常只是为了初学测试,后者是为了生产部署。如果是在生产部署时,只需要将模板机器人项目下的.env文件内容在本地保持一致即可。即使用gateway启动时生成的token即可在本地访问远程网关服务。 |
147 | 83 |
|
148 |
| -os.environ['TOKEN'] = "1fe5f846-3cfb-401d-b20c-XXXXX" |
149 |
| -os.environ['WECHATY_PUPPET_SERVICE_ENDPOINT'] = "127.0.0.1:9001" |
150 |
| -asyncio.run(MyBot().start()) |
151 |
| -``` |
152 |
| -### 运行代码 |
| 84 | +### 4.2 TOKEN的作用 |
153 | 85 |
|
| 86 | +总而言之: |
154 | 87 |
|
155 |
| -欢迎各位品尝以上代码 🥳 |
| 88 | +* 如果是公网环境下,可只需要设置`TOKEN`即可(因为你的token已经注册在chatie server上,故可以获取到目标资源服务器的ip和port) |
| 89 | +* 如果是内网环境下,可只需要使用`ENDPOINT`(`localhost:port`)来让python-wechaty连接目标资源服务器。 |
156 | 90 |
|
157 |
| -* **相关链接** |
158 |
| - * [python-wechaty](https://github.com/wechaty/python-wechaty) |
159 |
| - * [python-wechaty-getting-started](https://github.com/wechaty/python-wechaty-getting-started) |
| 91 | +> 如果是token是padlocal类型,则在python-wechaty程序内部可直接设置`export endpoint=localhost:port`来连接Gateway Server。 |
0 commit comments