-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathreadme.txt
233 lines (216 loc) · 7.88 KB
/
readme.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
此工程是一个Java程序调用第三方Agent SDK jar包的demo程序
jar包位于工程目录lib下
一、jar包的简单使用流程如Main函数中所示:
1.需要引入包 import com.gemteks.nim.sdkinterface.FreePPAgentInterfaceImpl;
2.创建对象FreePPDelegateImpl的实例,此对象实例需要传入SDK接口实现层,以便SDK接口实现层回调给Java层;
3.创建对象FreePPAgentInterfaceImpl的实例,用此对象实例来调用SDK层接口;
二、SDK相关接口调用说明:
1.在调用SDK相关接口之前,需要先创建好Application,Agent,以拿到init接口所需要的相关信息;
2.第三方开发者在调用功能性接口之前,需要首先调用init接口告知SDK当前Agent相关信息;
3.SDK中封装的接口除了init接口,其他的接口返回值均是由对应的异步回调函数异步回调给第三方开发者;
4.对于第三方开发者而言,在调用了init接口之后,需要根据自己的需求进行setMenu和setQuickCmd操作;
三、SDK提供以下接口:
1.SDK使用的初始化接口
/*
agentName: agent的名字
appId:developer web上申请的application得到的appid
appKey:developer web上申请的application得到的appKey
domainId:一般会在developer web上显示为默认值
agentId:创建agent后得到agentId
accessToken:创建agent后得到的accessToken
restPort:第三方开发者开发的java程序即将部署的服务器所占用的端口号
*/
def init(agentName:String,appId: String, appKey : String, domainId : String, agentId : String, accessToken : String,restPort:Int) : Boolean
appName:
2.回复ChatApi发来的消息
/*
Request sample:
Follow Event:
{"events":
[
{"type":"Follow",
"replyToken":"WH1gWCkdjCs96pcvHq2wfnd16hKw0OCgXOjOyVNb",
"timestamp":1513574717848,
"source":
{"type":"ProfileRobot",
"pid":"13a67959-7f80-44e3-8518-c9209f8497a7",
"rid":"08019765-4755-42bf-8df8-bddcbddc3032"}}]}
*/
def sendChatCmd(msg: String)
3.设置Agent的menu
/*
Request:
{
"locale":"zh_TW",
"menu":[
{
"type":"Menu",
"title":"群发助手",
"actions":[
{
"type":"Macro",
"label":"群发助手",
"macro":{
"type":"BroadCast",
"value":{
"data":"This is option BroadCast string"
}
}
}
]
}
]
}
*/
def setMenu(menuString:String)
4.设置Agent的快捷命令
/*
Request:
{
"locale": "zh_TW",
"shortCut": [
{
"type":"Macro",
"label":"直播",
"macro":{
"type":"LiveStream",
"value":{
"url":"This is option live stream string maybe empty"
}
}
},
{
"type":"Macro",
"label":"拍照",
"macro":{
"type":"PropCommand",
"value":{
"compId":1,
"prop":"Snapshot",
"op":{
"type":"Button.Click",
"value":{
}
}
}
}
}
],
"commands":[
{
"type": "Command",
"label": "/snapshot",
"description": "description"
},
{
"type": "Command",
"label": "/livestream",
"description": "description"
}
]
}
*/
def setQuickCmd(quickcmdString:String)
5./* get oauth token Basic Auth
Request:
{
"domain_id": "c21f969b-5f03-433d-95e0-4f8f136e7682",
"client_id":"5e2585c7-9c67-4749-9d6b-7aeeb671deab",// Application appId
"agent_id": "de10082b-3250-48f1-97de-dd0222817ce0",
"grant_type": "authorization_code",
"redirect_uri": "http://xacluster-476176176.us-east-1.elb.amazonaws.com:8080/oauth/code",
"code":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1MjUzMzQyMzUsImlhdCI6MTUyNTMzMzYzNiwiZG1JZCI6ImMyMWY5NjliLTVmMDMtNDMzZC05NWUwLTRmOGYxMzZlNzY4MiIsImdyYW50SWQiOiJ2dURHb0taYW12dURUejRVSFc4SEtoSE56RlNPMVhIS0R3ZmphUko5dmptbFhhbEtGajZ0ZVptcmhXSEZUMGFMIn0.rqe9z4mATBQN-v6HcAmKB0mj4RnoCXq8j3MGztJVoYY"
}
Response:
{
"token_type": "Bearer",
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1MTA2NTEyMTksImlhdCI6MTUxMDY0NzYyMCwKICAiZG1JZCI6ICJjMjFmOTY5Yi01ZjAzLTQzM2QtOTVlMC00ZjhmMTM2ZTc2ODIiLAogICJhcHBJZCI6ICIxNGJkOGE4ZC1kMDJkLTQ5N2EtOWRmNy03MzQ0NzljOGNmMTIiLAogICJ0b2tlbklkIjogImh3WkxVc1ZjS0U0TjVMVWYwUHFBcFhkejZaTnpmZmdubXpGb1dXYmZ0M0l0dVZ3YmZPS0FIbExGNW9lUVhJcFoiCn0.md7wOkUEsIwTLa4lZsmms3lbQOvcTY4P0vCIvgtVig0",
"expires_in": 3599,
"refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1MTA2NDc2MTksImRtSWQiOiJjMjFmOTY5Yi01ZjAzLTQzM2QtOTVlMC00ZjhmMTM2ZTc2ODIiLCJhcHBJZCI6IjE0YmQ4YThkLWQwMmQtNDk3YS05ZGY3LTczNDQ3OWM4Y2YxMiIsImF1dGhJZCI6IjhPajN4QnhvZmlwc1ZQcFlhSHJ2SDVpUUVIbGR3NlNTZ3pqWjdLMjVCZENyaGdoQWlRTW1GYUp6d3ppdUNRWEMifQ.9TDwPnZFoHbs2ReaCT6Wtwk8o4-ckb9P61zPl6I4nkA"
}
*/
def getOauthToken(getTokenStr:String)
6./* refresh token Basic Auth
Request:
{
"domain_id": "c21f969b-5f03-433d-95e0-4f8f136e7682",
"client_id":"5e2585c7-9c67-4749-9d6b-7aeeb671deab",
"agent_id": "de10082b-3250-48f1-97de-dd0222817ce0",
"grant_type": "refresh_token",
"refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1MjUzMzc3NDksImRtSWQiOiJjMjFmOTY5Yi01ZjAzLTQzM2QtOTVlMC00ZjhmMTM2ZTc2ODIiLCJhcHBJZCI6IjVlMjU4NWM3LTljNjctNDc0OS05ZDZiLTdhZWViNjcxZGVhYiIsImF1dGhJZCI6InlXSTFFOG5MaGN0SkM3THVHRVNIWlVXTVZ1R1BKRkRsMEd2RVgzRmtjUUZoT2V5azZjMTBIaXI3Y0ZhRUZDMU8ifQ.0hB30G0HmLse6PZhn6Isv-3YdBKXM2GfP_MiPkxRQSU"
}
Response:
{
"token_type": "Bearer",
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1MTA2NTEyMTksImlhdCI6MTUxMDY0NzYyMCwKICAiZG1JZCI6ICJjMjFmOTY5Yi01ZjAzLTQzM2QtOTVlMC00ZjhmMTM2ZTc2ODIiLAogICJhcHBJZCI6ICIxNGJkOGE4ZC1kMDJkLTQ5N2EtOWRmNy03MzQ0NzljOGNmMTIiLAogICJ0b2tlbklkIjogImh3WkxVc1ZjS0U0TjVMVWYwUHFBcFhkejZaTnpmZmdubXpGb1dXYmZ0M0l0dVZ3YmZPS0FIbExGNW9lUVhJcFoiCn0.md7wOkUEsIwTLa4lZsmms3lbQOvcTY4P0vCIvgtVig0",
"expires_in": 3599,
"refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1MTA2NDc2MTksImRtSWQiOiJjMjFmOTY5Yi01ZjAzLTQzM2QtOTVlMC00ZjhmMTM2ZTc2ODIiLCJhcHBJZCI6IjE0YmQ4YThkLWQwMmQtNDk3YS05ZGY3LTczNDQ3OWM4Y2YxMiIsImF1dGhJZCI6IjhPajN4QnhvZmlwc1ZQcFlhSHJ2SDVpUUVIbGR3NlNTZ3pqWjdLMjVCZENyaGdoQWlRTW1GYUp6d3ppdUNRWEMifQ.9TDwPnZFoHbs2ReaCT6Wtwk8o4-ckb9P61zPl6I4nkA"
}
* */
def refreshToken(refreshTokenStr:String)
7. /* RuleApi action执行完成的回复接口
{
actId:"",
status:""
}
*/
def sendRuleCmd(ruleCmdStr:String)
8. /*
Agent获取用户的profile信息
Response body example
{
"name": "FreePP Test",
"pid": "Uxxxxxxxxxxxxxx...",
"avatar": "https://abc.com/...",
"locale": "zh_TW"
}
* */
def getProfile(oauthToken:String)
四、SDK提供以下回调函数:
/*
1. 接收到ChatApi消息时,回调给第三方
* */
def OnRecieveChatApiMsg(ChatApiMsg:String)
2. // 接收 Rule Api action消息,回调给第三方
sample:
{
actionFields: {
message: 'hello world' // user message
},
user: {
jmGid: '', // freepp group id
jmPid: '', // freepp profile id
},
actId: ''
}
def onReceiveRuleApiMsg(RuleApiMsg:String)
3. // 接收 RuleDynamic Api消息,回调给第三方
sample:
{
user: {
jmGid: '',
jmPid: '',
}
}
def onReceiveRuleDynamicApiMsg(RuleDynamicApiMsg:String)
/*
4. 提供给第三方的接口返回数据:
apiName包含:
sendChatCmd
sendRuleCmd
setMenu
setQuickCmd
getOauthToken
refreshToken
getProfile
respCode:
0:表示成功
其他http状态码:表示失败
respJson:
指返回的json串
* */
def onReceiveHttpResponse(apiName:String,respCode:Int,respJson:String)
五、Agent sdk接收消息路由
Agent sdk接收消息的地址示例:http://serverIP:restPort/middlebot/3rd/v1/chatevent
Header要求带上X-FreePP-Signature,值为SDKServer.hmac256(SDKServer.appKey,req.toJson.toString())