調用釘釘服務端API發送工作通知消息

需求:在業務系統中產生的通知消息,通過調用釘釘服務端API,發送到對應員工的釘釘客戶端。


步驟:

目錄

1.創建並配置消息發送應用

1.1登錄開發者後臺

1.2創建H5微應用

1.3配置H5微應用

2.調用服務端API發送消息

2.1獲取access_token

2.2根據手機號獲取userid

2.3發送工作通知消息

2.4查詢工作通知消息的發送進度

2.5查詢工作通知消息的發送結果

2.6工作通知消息撤回

3.消息類型

3.1消息類型與數據格式

3.2上傳消息中使用的媒體文件


1.創建並配置消息發送應用

1.1登錄開發者後臺

       打開釘釘開放平臺https://ding-doc.dingtalk.com/,點右上角的“登錄開發者後臺”,然後使用企業管理者帳戶登陸。

1.2創建H5微應用

       選擇"應用開發"->"企業內部開發"->"H5微應用",點擊"創建應用",開始創建企業自建微應用。

          填寫應用基本信息。包括應用名稱、應用Logo和應用簡介,選擇"企業內部自主開發",點擊"下一步"。

      開發模式選擇“開發應用”,開發應用類型選擇“微應用”,應用首頁鏈接填寫H5微應用首頁url,服務器出口IP填寫本企業服務器的公網IP。點擊創建。

1.3配置H5微應用

      查看創建好的應用信息,取得AgentId、AppKey和AppSecret,在API調用時要使用。

      在人員設置頁設置使用該應用的人員,其他人員接收不到通知消息。

      在接口權限頁面,高級權限-企業通訊錄權限部分,申請打開[通訊錄只讀權限]和[手機號獲取userid],並且可以設定該權限的範圍是對全體員工還是部分員工

2.調用服務端API發送消息

2.1獲取access_token

       【注意】正常情況下access_token有效期爲7200秒,有效期內重複獲取返回相同結果,並自動續期。

         調試工具在線調試

         請求方式:GET(HTTPS)

         請求地址https://oapi.dingtalk.com/gettoken?appkey=key&appsecret=secret

         參數說明

參數

參數類型

必須

說明

appkey

String

應用的唯一標識key

appsecret

String

應用的密鑰

       SDK請求示例(JAVA)

DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
OapiGettokenRequest request = new OapiGettokenRequest();
request.setAppkey("appkey");
request.setAppsecret("appsecret");
request.setHttpMethod("GET");
OapiGettokenResponse response = client.execute(request);

       返回說明

{
    "errcode": 0,
    "errmsg": "ok",
    "access_token": "fw8ef8we8f76e6f7s8df8s"
}

2.2根據手機號獲取userid

          企業使用此接口可通過手機號獲取其所對應員工的userid。

          調試工具在線調試

          請求方式:GET(HTTPS)

          請求地址:https://oapi.dingtalk.com/user/get_by_mobile?access_token=ACCESS_TOKEN&mobile=1xxxxxxxxxx

          參數說明:

名稱

類型

是否必須

說明

access_token

String

必須

調用接口憑證,通過獲取企業access_token獲取

mobile

String

必須

手機號碼

          SDK請求示例(JAVA)

DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/get_by_mobile");
OapiUserGetByMobileRequest request = new OapiUserGetByMobileRequest();
request.setMobile("1xxxxxxxxxx");
OapiUserGetByMobileResponse execute = client.execute(request, access_token);

          返回結果

{
    "errcode": 0,
    "errmsg": "ok",
    "userid": "zhangsan"
}

參數

說明

errcode

返回碼

errmsg

對返回碼的文本描述內容

userid

員工在當前企業內的唯一標識。

2.3發送工作通知消息

         發送工作通知消息需要注意以下事項:

  • 同一個微應用相同消息的內容同一個用戶一天只能接收一次。
  • 同一個微應用給同一個用戶發送消息,企業內部開發方式一天不得超過500次。
  • 通過設置to_all_user參數全員推送消息,一天最多3次。
  • 詳細的限制說明,請參考“工作通知消息的限制”。
  • 該接口是異步發送消息,接口返回成功並不表示用戶一定會收到消息,需要通過“查詢工作通知消息的發送結果”接口查詢是否給用戶發送成功。
  • 消息類型和樣例可參考消息類型文檔。


         調試工具在線調試

         請求方式:POST(HTTPS)

         請求地址https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=ACCESS_TOKEN

         參數說明

名稱

類型

是否必須

示例值

說明

agent_id

Number

必須

1234

應用agentId

userid_list

String

可選(userid_list,dept_id_list, to_all_user必須有一個不能爲空)

zhangsan,lisi

接收者的用戶userid列表,最大列表長度:100

dept_id_list

String

可選(可不傳,若傳不能爲空)

123,456

接收者的部門id列表,最大列表長度:20,  接收者是部門id下(包括子部門下)的所有用戶

to_all_user

Boolean

可選

false

是否發送給企業全部用戶

msg

json對象

必須

{"msgtype":"text","text":{"content":"消息內容"}}

消息內容,消息類型和樣例參考“消息類型與數據格式”。最長不超過2048個字節

         SDK請求示例(JAVA)

DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2");

OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request();
request.setUseridList("01376814877479");
request.setAgentId(153858650L);
request.setToAllUser(false);

OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg();
msg.setMsgtype("text");
msg.setText(new OapiMessageCorpconversationAsyncsendV2Request.Text());
msg.getText().setContent("test123");
request.setMsg(msg);

msg.setMsgtype("image");
msg.setImage(new OapiMessageCorpconversationAsyncsendV2Request.Image());
msg.getImage().setMediaId("@lADOdvRYes0CbM0CbA");
request.setMsg(msg);

msg.setMsgtype("file");
msg.setFile(new OapiMessageCorpconversationAsyncsendV2Request.File());
msg.getFile().setMediaId("@lADOdvRYes0CbM0CbA");
request.setMsg(msg);

msg.setMsgtype("link");
msg.setLink(new OapiMessageCorpconversationAsyncsendV2Request.Link());
msg.getLink().setTitle("test");
msg.getLink().setText("test");
msg.getLink().setMessageUrl("test");
msg.getLink().setPicUrl("test");
request.setMsg(msg);

msg.setMsgtype("markdown");
msg.setMarkdown(new OapiMessageCorpconversationAsyncsendV2Request.Markdown());
msg.getMarkdown().setText("##### text");
msg.getMarkdown().setTitle("### Title");
request.setMsg(msg);

msg.setOa(new OapiMessageCorpconversationAsyncsendV2Request.OA());
msg.getOa().setHead(new OapiMessageCorpconversationAsyncsendV2Request.Head());
msg.getOa().getHead().setText("head");
msg.getOa().setBody(new OapiMessageCorpconversationAsyncsendV2Request.Body());
msg.getOa().getBody().setContent("xxx");
msg.setMsgtype("oa");
request.setMsg(msg);

msg.setActionCard(new OapiMessageCorpconversationAsyncsendV2Request.ActionCard());
msg.getActionCard().setTitle("xxx123411111");
msg.getActionCard().setMarkdown("### 測試123111");
msg.getActionCard().setSingleTitle("測試測試");
msg.getActionCard().setSingleUrl("https://www.baidu.com");
msg.setMsgtype("action_card");
request.setMsg(msg);

OapiMessageCorpconversationAsyncsendV2Response response = client.execute(request,accessToken);

         返回結果

{
    "errcode":0,
    "errmsg":"ok",
    "task_id":123
}

參數

說明

errcode

返回碼

errmsg

對返回碼的文本描述內容

task_id

創建的發送任務id

2.4查詢工作通知消息的發送進度

         調試工具在線調試

         請求方式:POST(HTTPS)

         請求地址https://oapi.dingtalk.com/topapi/message/corpconversation/getsendprogress?access_token=ACCESS_TOKEN

         參數說明

名稱

類型

是否必須

示例值

說明

agent_id

Number

必須

123

發送消息時使用的微應用的id

task_id

Number

必須

456

發送消息時釘釘返回的任務id

         SDK請求示例(JAVA)

DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/getsendprogress");
OapiMessageCorpconversationGetsendprogressRequest request  = new OapiMessageCorpconversationGetsendprogressRequest();
request.setAgentId(135717601L);
request.setTaskId(9326688016L);
OapiMessageCorpconversationGetsendprogressResponse response = client.execute(request, accessToken);

         返回結果

{
    "errcode":0,
    "errmsg":"ok",
    "progress":{
        "progress_in_percent":100,
        "status":2
    }
}

參數

說明

errcode

返回碼

errmsg

對返回碼的文本描述內容

progress

 

└ progress_in_percent

取值 0-100,表示處理的百分比

└ status

任務執行狀態,0=未開始,1=處理中,2=處理完畢

2.5查詢工作通知消息的發送結果

         調試工具在線調試

         請求方式:POST(HTTPS)

         請求地址https://oapi.dingtalk.com/topapi/message/corpconversation/getsendresult?access_token=ACCESS_TOKEN

         參數說明

名稱

類型

是否必須

示例值

說明

agent_id

Number

可選

123

微應用的agentid

task_id

Number

可選

456

異步任務的id

         SDK請求示例(JAVA)

DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/getsendresult");
OapiMessageCorpconversationGetsendresultRequest request  = new OapiMessageCorpconversationGetsendresultRequest();
request.setAgentId(135717601L);
request.setTaskId(9326688016L);
OapiMessageCorpconversationGetsendresultResponse response = client.execute(request, accessToken);

         返回結果

{
    "send_result":{
        "invalid_user_id_list":"zhangsan,lisi",
        "forbidden_user_id_list":"zhangsan,lisi",
        "failed_user_id_list":"zhangsan,lisi",
        "read_user_id_list":"zhangsan,lisi",
        "unread_user_id_list":"zhangsan,lisi",
        "invalid_dept_id_list":"1,2,3"
    },
    "errcode":0,
    "errmsg":"ok"
}

參數

說明

errcode

返回碼

errmsg

對返回碼的文本描述內容

send_result

 

└ invalid_user_id_list

無效的用戶id

└ forbidden_user_id_list

因發送消息超過上限而被流控過濾後實際未發送的userid。未被限流的接收者仍會被收到消息。

限流規則包括:

1、同一個微應用相同消息的內容同一個用戶一天只能接收一次。
2、同一個微應用給同一個用戶發送消息,如果是ISV應用開發方式一天不得超過50次;如果是企業內部開發方式,此上限爲500次。

└ failed_user_id_list

發送失敗的用戶id

└ read_user_id_list

已讀消息的用戶id

└ unread_user_id_list

未讀消息的用戶id

└ invalid_dept_id_list

無效的部門id

2.6工作通知消息撤回

         調試工具在線調試

         請求方式:POST(HTTPS)

         請求地址https://oapi.dingtalk.com/topapi/message/corpconversation/recall?access_token=ACCESS_TOKEN

         參數說明

名稱

類型

是否必須

示例值

說明

agent_id

Number

可選

123

微應用的agentid

msg_task_id

Number

可選

456

異步任務的id

         SDK請求示例(JAVA)

DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/recall");
OapiMessageCorpconversationRecallRequest request = new OapiMessageCorpconversationRecallRequest();
request.setAgentId(237990693L);
request.setMsgTaskId(3568141183L);
OapiMessageCorpconversationRecallResponse response = client.execute(request, accessToken);

         返回結果

{
    "errcode":0,
    "errmsg":"ok"
}

參數

說明

errcode

返回碼

errmsg

對返回碼的文本描述內容

3.消息類型

3.1消息類型與數據格式

       釘釘消息類型與數據格式說明

3.2上傳消息中使用的媒體文件

       釘釘上傳媒體文件

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章