/WeTriage

Callback message triage for WeCom 企业微信

Primary LanguageGoMIT LicenseMIT

WeTriage

中文

Triage callback XML messages from the WeCom (Enterprise WeChat) platform and convert them to JSON format before publishing them to a MQTT message broker for downstream consumption.

This project is still under active development.

Features

  • Callback message signature verification and decryption
  • Callback echo test
  • Convert identified XML messages to JSON
  • Publish converted JSON messages with an identifiable name to MQTT broker for consumption
  • Properly respond to WeCom server with a response required by the documentation for the incoming message

This project does NOT try to

  • Handle any business logic of the callback messages
  • Enable TLS for the HTTP server

Getting Started

docker pull ghcr.io/imulab/wetriage:latest

# For a specific version, use the short commit SHA as the tag. For example:
#   docker pull ghcr.io/imulab/wetriage:117eb11f
#
# Note this is just an example, that's not the latest commit hash

The following flags are supported:

Flag Description Default Env
--port Port to listen on 8080 WT_PORT
--debug Enable debug mode false WT_DEBUG
--path Customize the callback endpoint path /callback WT_PATH
--token Callback token registered with WeCom - WT_TOKEN
--aes-key Base64 encoded AES key registered with WeCom - WT_AES_KEY
--topic, -t Callback topic to process. See details below - WT_TOPICS, WT_TOPIC
--mqtt-url MQTT broker URL. See details below - WT_MQTT_URL

Below shows an example of using the image.

docker run -d \
    -p 8080:8080 \
    -e WT_TOKEN=token \
    -e WT_AES_KEY=base64_encoded_aes_key \
    -e WT_MQTT_URL=tcp://localhost:1883 \
    -e WT_TOPICS=suite_ticket_info,create_auth_info \
    ghcr.io/imulab/wetriage:latest

Topics

Currently, the following topics are supported.

Topic Description
suite_ticket_info 推送应用模板凭证
create_auth_info 授权成功通知
change_auth_info 変更授权通知
cancel_auth_info 取消授权通知
reset_permanent_code_info 重置永久授权码通知

More topics will be added as the project progresses. To request a topic, please open an issue.

Message Format

An identified topic is converted to a similar object in JSON. For example, an original suite_ticket_info topic message could be the following XML:

<xml>
    <SuiteId><![CDATA[ww4asffe99e54c0fxxxx]]></SuiteId>
    <InfoType><![CDATA[suite_ticket]]></InfoType>
    <TimeStamp>1403610513</TimeStamp>
    <SuiteTicket><![CDATA[asdfasfdasdfasdf]]></SuiteTicket>
</xml>

After converting to JSON, it could look like:

{
  "suite_id": "ww4asffe99e54c0fxxxx",
  "info_type": "suite_ticket",
  "timestamp": 1403610513,
  "suite_ticket": "asdfasfdasdfasdf"
}

To make sure the exact format of the JSON, please refer to types in the topic package for details.

MQTT

The above JSON message is to be wrapped in a message envelope and published to the MQTT broker under a topic of T/WeTriage/<topic>.

For example, the above suite_ticket_info message will be published to the broker under T/WeTriage/suite_ticket_info, with a payload of:

{
  "id": "a unique id",
  "created_at": 1403610513,
  "topic": "suite_ticket_info",
  "content": {
    "suite_id": "ww4asffe99e54c0fxxxx",
    "info_type": "suite_ticket",
    "timestamp": 1403610513,
    "suite_ticket": "asdfasfdasdfasdf"
  }
}