JSPP 开放 API
欢迎使用JSPP 开放 API!
机器人API
调用频率限制
每个人每分钟最多发送20条消息,如果超过20条,会限流10分钟。
获取Webhook
在您的桌面端->群组详情或好友详情->机器人接入->复制出Webhook地址,格式如下:
https://oapi.jspp.com/oapi/v1/robot/send?access_token=YOUR_ACCESS_TOKEN
获取到Webhook地址后,用户可以向这个地址发起HTTP POST 请求,即可实现给该群发送消息。


消息类型及数据格式
文本类型
require 'net/http'
require 'json'
require 'uri'
uri = URI('https://oapi.jspp.com/oapi/v1/robot/send?access_token=YOUR_ACCESS_TOKEN')
http = Net::HTTP.new(uri.host)
req = Net::HTTP::Post.new(uri.to_s, 'Content-Type' => 'application/json')
req.body = { text: { content: "这是一条测试消息"}, msgtype: "text"}.to_json
res = http.request(req)
puts res.body
url = 'https://oapi.jspp.com/oapi/v1/robot/send?access_token=YOUR_ACCESS_TOKEN'
d = {"text":{"content": "这是一条测试消息"}, "msgtype": "text"}
r = requests.post(url, data=d)
print r
curl https://oapi.jspp.com/oapi/v1/robot/send?access_token=YOUR_ACCESS_TOKEN \
-H 'Content-Type: application/json' \
-d '{"text":{"content": "这是一条测试消息"}, "msgtype": "text"}'
const axios = require(axios);
axios.post(
  "https://oapi.jspp.com/oapi/v1/robot/send?access_token=YOUR_ACCESS_TOKEN",
  {"text":{"content": "这是一条测试消息"}, "msgtype": "text"}
).then((response) => {
  console.log(response);
});
package main
import (
        "bytes"
        "encoding/json"
        "fmt"
        "io"
        "net/http"
)
const (
        TEXT = "text"
)
type JsppRobotClient struct {
        Url string
}
type JsppRobotMessage struct {
        Msgtype string               `json:"msgtype"`
        Text    JsppRobotTextMessage `json:"text"`
}
type JsppRobotTextMessage struct {
        Content string `json:"content"`
}
type JsppRobotResponse struct {
        Res   int64  `json:"res"`
        Msg   string `json:"msg"`
        Trace string `json:"trace"`
}
func NewJsppRobotClient(url string) (client *JsppRobotClient, err error) {
        d := new(JsppRobotClient)
        d.Url = url
        return d, nil
}
func (d *JsppRobotClient) SendTextMessage(message string) error {
        if message == "" {
                return fmt.Errorf("message is empty")
        }
        jsppRobotMessage := JsppRobotMessage{
                Msgtype: TEXT,
                Text: JsppRobotTextMessage{
                        Content: message,
                },
        }
        jsppRobotMessageJson, err := json.Marshal(&jsppRobotMessage)
        if err != nil {
                return err
        }
        client := &http.Client{}
        request, err := http.NewRequest("POST", d.Url, bytes.NewBuffer(jsppRobotMessageJson))
        if err != nil {
                return err
        }
        request.Header.Add("Content-Type", "application/json")
        resp, err := client.Do(request)
        if err != nil {
                return err
        }
        defer resp.Body.Close()
        if resp.StatusCode != http.StatusOK {
                return fmt.Errorf("request failed StatusCode=%d", resp.StatusCode)
        }
        body, err := io.ReadAll(resp.Body)
        if err != nil {
                return err
        }
        jsppRobotResp := &JsppRobotResponse{}
        err = json.Unmarshal(body, &jsppRobotResp)
        if err != nil {
                return err
        }
        if jsppRobotResp.Res != http.StatusOK {
                return fmt.Errorf("request failed StatusCode=%d, jsppRobot talk error: %v", resp.StatusCode, jsppRobotResp)
        }
        return nil
}
func main() {
        c, err := NewJsppRobotClient("https://devoapi.jspp.com/oapi/v1/robot/send?access_token=YOUR_ACCESS_TOKEN")
        if err != nil {
                fmt.Printf("%+v\n", err)
                return
        }
        resp := c.SendTextMessage("这是一条测试消息")
        fmt.Printf("%+v\n", resp)
}
请求JSON参数
{
    "at": {
        "atMobiles":[
            "+86180xxxxxx"
        ],
        "atUserIds":[
            123
        ],
        "isAtAll": false
    },
    "text": {
        "content":"这是一条测试消息"
    },
    "msgtype":"text"
}
返回JSON结果
{
  "res":200,
  "trace": "xoEosLOSR"
}
HTTP 请求
POST https://oapi.jspp.com/oapi/v1/robot/send?access_token=YOUR_ACCESS_TOKEN
请求参数
| 参数 | 参数类型 | 是否必填 | 说明 | 
|---|---|---|---|
| msgtype | String | 是 | 文本消息类型,此时固定为:text。 | 
| content | String | 是 | 消息内容。 | 
| atMobiles | Array | 否 | 被@人的手机号。 | 
| atUserIds | Array | 否 | 被@人的用户ID号。 | 
| isAtAll | Boolean | 否 | 是否@所有人。 | 
错误码
| 错误码 | 说明 | 
|---|---|
| 400 | 参数错误 | 
| 401 | 未授权 | 
| 429 | 请求次数过多 | 
| 500 | 服务不可用 | 
 
      