<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at
    
        http://www.apache.org/licenses/LICENSE-2.0
    
    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->

# 交流与反馈

社区拥有丰富的交流途径。目前有以下六种交流途径。可以选择自己适用并倾向的渠道与社区进行交流。

## 途径一：通过 Apache 邮件列表进行交流（全英文）
  - 适用情况：邮件列表是 Apache 唯一指定的开源贡献者的交流渠道，面向全社区的计划、路线和公告等均在邮件列表中沟通。邮件列表 (dev@iotdb.apache.org) 本质上是一个邮箱地址，所有订阅这个邮箱地址的都能收到发往此邮箱的邮件。
  - 指南：
    - 发送订阅邮件：向 dev-subscribe@iotdb.apache.org 发送一封邮件，主题内容不限。
    - 确认订阅邮件：完成上一步后，将收到一封来自 iotdb.apache.org 结尾的确认订阅邮件。向该邮件再次发一封主题内容不限的邮件即可确认订阅（确认地址比较长，推荐 qq 邮箱）。
  - 其他邮件列表：
    - notifications@iotdb.apache.org （用于接收 JIRA 通知。)
     - 如果你只想接收个别感兴趣的 JIRA 通知，你不需要订阅这个列表。你只需要在 JIRA issue 页面上点击"开始关注这个 issue" 或者在这个 issue 上做评论就行了。
    - commits@iotdb.apache.org （任何代码改动都会通知到此处。请注意该邮件列表邮件数量十分多。)
    - reviews@iotdb.apache.org （任何代码审阅意见都会通知到此处。请注意该邮件列表邮件数量十分多。)

## 途径二：通过 GitHub 进行交流

Github Issue链接：https://github.com/apache/iotdb/issues

## 途经三：通过 Jira 进行交流

- JIRA issue: https://issues.apache.org/jira/projects/IOTDB/issues
- 适用情况：任务（新功能改进、BUG 修复）的管理与交流
- 指南：
  - 创建 Jira 账号（用于任务管理）
  - 创建 Confluence 账号（用于设计文档共建）
  - 账户创建好后，向邮件列表发送一封邮件，包括自我介绍、Jira id 和 Confluence id，社区 PMC 会为账户添加权限

## 途径四：通过微信群、QQ 群等方式进行交流
- 入群方式：
  - 微信群——添加好友:qinchuqing
  - QQ 群——659990460
  - 钉钉群：搜索群名称加入【Apache IoTDB 交流 1 群】
  - 微信公众号：IoTDB 漫游指南
  - 我们非常期待您分享您使用 IoTDB 的经验：[调研问卷](https://github.com/apache/iotdb/issues/748)

## 途径五：通过 Slack 进行交流（全英文）
- 适用情况：主要的国际社区交流渠道

## 途径六：通过 Twitter 进行交流
- Twitter: https://twitter.com/apacheiotdb
